GetAiApiKey/生产环境 AI API 检查清单
如何在 Python 中安装 LLM:本地部署或 API
你可以在自己的机器上运行模型,也可以安装一个小型 Python 包并通过 HTTP 调用托管模型。本文涵盖这两种方式,然后逐步介绍 API 方案。
更新于

要点
- 本地安装需要模型权重和足够的内存;API 方案仅需 openai 包和密钥。
- 将 base URL 设置为 https://api.getaiapikey.com/v1,并将模型设置为 uncensored。
- 流式输出、函数调用和 JSON 模式均可通过标准 OpenAI 客户端使用。
- 处理 HTTP 429 错误时请短暂重试,并将并发请求保持在 8 个或以下。
安装 LLM 的两种含义
当人们询问如何在 Python 中安装 llm 时,通常指以下两种情况之一。第一种是在本地运行模型:下载权重并在自己的 CPU 或 GPU 上使用库加载它们。第二种是安装客户端库,使你的 Python 代码能够与在其他地方运行的模型进行交互。两者都有效,选择哪一种取决于你的硬件以及你想构建的内容。
API 方案更简单。你运行 pip install openai,将客户端指向 base URL,然后调用模型。无需权重、GPU 驱动或内存规划。本文其余部分提供该方案的步骤和代码,并附带简短的本地方案介绍以便对比。
本地安装或托管 API:如何选择
| 问题 | 本地安装 | 托管 API |
|---|---|---|
| 你需要安装什么 | 推理库加模型权重 | openai 包 |
| 硬件 | 内存及通常需要的与模型匹配的 GPU | 任何能发起 HTTPS 调用的机器 |
| 成本 | 你的硬件和电力 | 按 token 计费,从预付额度扣除 |
| 支持离线使用 | 是 | 否 |
| 首次回复时间 | 下载、设置、调优 | 几分钟 |
如果你必须将所有内容保留在一台机器上、需要离线工作,或者想要对权重本身进行实验,本地部署是合理的。llama.cpp 绑定或 Hugging Face transformers 等库通常是起点;请查看它们各自的文档以了解硬件要求,因为这些要求取决于你选择的模型大小。
如果你希望快速获得可用结果、笔记本无法容纳大模型,或者应用需要服务大量用户,API 是合适的。你按 token 付费而非购买硬件。该服务输入 token 价格为每 1M token $0.15,输出 token 价格为每 1M token $0.50,无订阅费。定价页面 有详细信息。
步骤 1:创建虚拟环境并安装包
使用虚拟环境以保持安装干净。任何较新的 Python 3 版本均可与 openai 包配合使用。
python3 -m venv .venv
source .venv/bin/activate
pip install openai
接下来你需要一个密钥。在 API 密钥页面 使用 Google 或邮箱密码注册。新用户可在此一键领取 $0.50 免费试用额度,有效期 7 天且无需绑定信用卡。将密钥存储在环境变量中,而不是源代码文件中:
export API_KEY="paste-your-key-here"步骤 2:发起首次调用
该服务兼容 OpenAI 格式,因此与标准 OpenAI 脚本的唯一区别在于 base URL 和模型 ID。模型 ID 为 uncensored。
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.getaiapikey.com/v1",
api_key=os.environ["API_KEY"],
)
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You are a concise assistant."},
{"role": "user", "content": "Explain what a context window is in two sentences."},
],
temperature=0.7,
max_tokens=200,
)
print(resp.choices[0].message.content)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)
如果打印出答案和两个 token 计数,则安装完成。要检查密钥是否有效并查看模型 ID,你也可以调用 GET /v1/models:
for m in client.models.list():
print(m.id)
从 shell 发起的相同请求完全不需要 Python,只需对 https://api.getaiapikey.com/v1/chat/completions 发起单次 curl 调用,并添加 Authorization: Bearer 头部后跟你的密钥。文档快速入门 展示了完整过程。
步骤 3:流式输出到达的 token
等待长回答完成后再打印任何内容会感觉很慢。设置 stream=True,服务器会通过服务器发送事件(SSE)发送 token。你可以在最后一个数据块中使用 stream_options 请求使用量摘要。
stream = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Write a short scene set in a lighthouse."}],
stream=True,
stream_options={"include_usage": True},
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
if chunk.usage:
print("\n", chunk.usage.total_tokens, "tokens")
生产环境中有一个细节很重要:流式请求会占用并发槽位直到流结束。完整密钥允许 8 个并发请求,因此如果你的应用打开许多长流,请在用户断开连接时关闭它们。
步骤 4:JSON 模式和函数调用
对于结构化输出,将 response_format 设置为 JSON 对象。同时在提示词中告知模型以 JSON 格式回答,因为该设置保证有效的 JSON 语法,但不保证你需要的字段名。
import json
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "Reply only with JSON: {\"title\": string, \"tags\": [string]}"},
{"role": "user", "content": "Give me a title and tags for a post about slow travel."},
],
response_format={"type": "json_object"},
)
data = json.loads(resp.choices[0].message.content)
print(data["title"], data["tags"])
函数调用遵循标准模式。你描述一个函数,模型可能会请求调用它,你自行运行它并使用 role: "tool" 将结果发回。
tools = [{
"type": "function",
"function": {
"name": "get_time",
"description": "Return the current time for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
messages = [{"role": "user", "content": "What time is it in Lisbon?"}]
first = client.chat.completions.create(
model="uncensored", messages=messages, tools=tools, tool_choice="auto"
)
msg = first.choices[0].message
if msg.tool_calls:
call = msg.tool_calls[0]
messages.append(msg)
messages.append({
"role": "tool",
"tool_call_id": call.id,
"content": json.dumps({"time": "14:05"}),
})
final = client.chat.completions.create(
model="uncensored", messages=messages, tools=tools
)
print(final.choices[0].message.content)
在依赖函数调用之前,请在几个提示词上测试。任何模型都可能选错函数或填错参数,因此在运行具有副作用的操作前,请在自己的代码中验证参数。
步骤 5:处理限制和错误
完整密钥允许 8 个并发请求和每分钟 300 个请求。试用密钥允许 2 个和每分钟 60 个。超过限制后你会收到 HTTP 429。错误代码 rate_limited 表示每分钟请求过多,concurrency 表示同时请求过多。在临时过载时,API 还会返回带有 Retry-After: 5 头部的 429 错误。
OpenAI Python 客户端会自动重试某些失败,但显式包装器可使行为更清晰:
import time
from openai import RateLimitError
def ask(messages, tries=4):
for attempt in range(tries):
try:
return client.chat.completions.create(model="uncensored", messages=messages)
except RateLimitError:
time.sleep(5 * (attempt + 1))
raise RuntimeError("still rate limited after retries")
每个响应都包含 X-Request-Id、X-Balance-USD 和速率限制头部,你可以记录这些日志。如果联系 支持,请包含请求 ID。失败或被拒绝的请求不会收费,因此重试不会额外付费。
还要规划大小限制。上下文窗口为 100,000 个 token(包含提示词和补全),最大请求体为 8 MB。长聊天记录在达到这些限制前应进行修剪或摘要。
当调用失败时
大多数首次运行问题源于少数几个错误。在怀疑其他问题之前,请按顺序检查这些项。
- 缺少版本路径的 base URL。 值必须以
/v1结尾。客户端会向其添加/chat/completions,因此缺少/v1会导致请求发送到错误的接口。 - 密钥错误或缺失。 密钥应放在
Authorization: Bearer头部中,该头部由客户端从api_key构建。如果环境变量为空,客户端要么在启动时抛出错误,要么发送空密钥。打印bool(os.environ.get("API_KEY"))进行检查。 - 来自其他服务的模型名称。 此处的唯一模型 ID 是
uncensored。其他教程中的名称将不匹配。 - 余额不足。 查看
X-Balance-USD响应头。超过 7 天的试用额度或余额已用完,需要充值($20 起)。 - 旧版包。 如果示例使用
OpenAI(且 Python 提示无法导入该名称,说明你使用的是 1.0 之前的包。运行pip install --upgrade openai。
要查看包含头部的原始响应,请使用客户端的 raw-response 包装器:
raw = client.chat.completions.with_raw_response.create(
model="uncensored",
messages=[{"role": "user", "content": "ping"}],
max_tokens=5,
)
print(raw.headers.get("x-request-id"), raw.headers.get("x-balance-usd"))
completion = raw.parse()
print(completion.choices[0].message.content)
这将打印请求 ID 和剩余余额,作为你可以从 cron 任务或启动脚本中运行的快速健康检查。
从其他工具使用
由于该接口遵循 OpenAI 格式,其他 Python 库可以使用相同的两个设置来调用它。接受自定义 OpenAI base URL 的框架只需要设置 base_url 和 api_key。对于 Node.js,官方的 openai 包接受相同的字段:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.getaiapikey.com/v1",
apiKey: process.env.API_KEY,
});
const r = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "Say hello in five words." }],
});
console.log(r.choices[0].message.content);
这是一个纯文本服务:不支持图像或音频生成、嵌入或微调。如果你的项目需要这些功能,请将该 API 与用于该部分的另一个工具配合使用。该模型是一个开放权重模型,由独立提供商运行,经过调优以在法律允许的成人使用范围内无内容拒绝地回答。涉及未成年人的性内容始终不允许。
更多指南
问答
这样在 Python 中使用 LLM 需要 GPU 吗?
不需要。模型运行在提供商侧。你的机器只需 Python 和互联网连接即可调用接口。
我应该安装哪个包?
使用 pip 安装官方的 openai 包。然后将 base URL 设置为 https://api.getaiapikey.com/v1,并将模型设置为 uncensored。
有免费试用方式吗?
新用户注册后可一键领取 $0.50 免费试用额度。有效期 7 天,无需绑定银行卡,每人限领一次。
一次请求的成本是多少?
一次包含 2,000 个输入 token 和 500 个输出 token 的请求费用为 $0.00055(基于每 1M token $0.15 和 $0.50 的定价)。你只需为成功的请求付费。
它支持流式输出和函数调用吗?
可以。SSE 流式输出、函数调用和 JSON 模式均可通过标准 OpenAI 客户端实现。