跳到主要内容

LLM API 基础概念

本文全面介绍大语言模型 API 的基础概念,帮助开发者快速理解和使用 LLM API。

API 概述

什么是 LLM API

LLM API 是大语言模型提供的编程接口,允许开发者通过 HTTP 请求与模型交互:

应用程序 → HTTP 请求 → API 服务器 → 模型推理 → HTTP 响应 → 应用程序

主要接口类型

接口说明用途
Chat Completions对话补全聊天、问答
Completions文本补全续写、生成
Embeddings向量嵌入语义搜索、RAG
Images图像生成/编辑文生图、图像处理
Audio语音处理STT、TTS
Moderations内容审核安全过滤

Chat Completions API

基本结构

from openai import OpenAI

client = OpenAI(
api_key="your-api-key",
base_url="https://api.weelinking.com/v1"
)

response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "你是一个有帮助的助手。"},
{"role": "user", "content": "你好!"}
]
)

print(response.choices[0].message.content)

消息角色

角色说明用途
system系统消息设定 AI 行为和规则
user用户消息用户的输入
assistant助手消息AI 的回复
tool工具消息工具调用结果

请求参数

response = client.chat.completions.create(
# 必需参数
model="gpt-4o", # 模型名称
messages=[...], # 消息列表

# 生成控制
temperature=0.7, # 随机性 (0-2)
top_p=1.0, # 核采样 (0-1)
max_tokens=1000, # 最大输出长度

# 停止条件
stop=["###"], # 停止词

# 输出控制
n=1, # 生成数量
presence_penalty=0, # 话题新鲜度惩罚
frequency_penalty=0, # 重复惩罚

# 工具
tools=[...], # 可用工具列表
tool_choice="auto", # 工具选择策略

# 格式
response_format={"type": "json_object"}, # 输出格式

# 流式
stream=False, # 是否流式输出

# 其他
user="user-123" # 用户标识
)

响应结构

{
"id": "chatcmpl-xxx",
"object": "chat.completion",
"created": 1234567890,
"model": "gpt-4o",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "你好!有什么可以帮助你的吗?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 20,
"completion_tokens": 15,
"total_tokens": 35
}
}

核心参数详解

Temperature(温度)

控制输出的随机性:

  • 0: 确定性输出,每次结果相同
  • 0.1-0.3: 低随机性,适合代码、事实问答
  • 0.7-0.9: 中等随机性,适合创意写作
  • 1.0+: 高随机性,更有创意但可能不稳定
# 代码生成 - 低温度
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "写一个排序函数"}],
temperature=0
)

# 创意写作 - 高温度
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "写一首关于春天的诗"}],
temperature=0.9
)

Max Tokens

限制输出长度:

response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "解释量子物理"}],
max_tokens=500 # 最多生成 500 个 token
)

Stop Sequences

指定停止生成的标记:

response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "列出三个水果:"}],
stop=["\n", "4."] # 遇到换行或 "4." 时停止
)

流式输出

基础流式

stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "讲一个故事"}],
stream=True
)

for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")

流式响应格式

{"id":"chatcmpl-xxx","choices":[{"delta":{"role":"assistant"},"index":0}]}
{"id":"chatcmpl-xxx","choices":[{"delta":{"content":"你"},"index":0}]}
{"id":"chatcmpl-xxx","choices":[{"delta":{"content":"好"},"index":0}]}
{"id":"chatcmpl-xxx","choices":[{"delta":{},"finish_reason":"stop","index":0}]}

Embeddings API

生成嵌入向量

response = client.embeddings.create(
model="text-embedding-3-small",
input="这是一段测试文本"
)

embedding = response.data[0].embedding
print(f"向量维度: {len(embedding)}") # 1536

批量嵌入

response = client.embeddings.create(
model="text-embedding-3-small",
input=["文本1", "文本2", "文本3"]
)

for i, item in enumerate(response.data):
print(f"文本 {i}: 维度 {len(item.embedding)}")

函数调用

定义工具

tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取天气信息",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称"
}
},
"required": ["city"]
}
}
}
]

response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "北京天气怎么样?"}],
tools=tools
)

处理工具调用

message = response.choices[0].message

if message.tool_calls:
for tool_call in message.tool_calls:
function_name = tool_call.function.name
arguments = json.loads(tool_call.function.arguments)

# 执行函数
result = call_function(function_name, arguments)

# 返回结果给模型
messages.append(message)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": json.dumps(result)
})

错误处理

常见错误码

错误码说明处理方式
400请求格式错误检查参数
401认证失败检查 API Key
403权限不足检查账户权限
429请求过多降低频率
500服务器错误重试
503服务不可用稍后重试

错误处理示例

from openai import APIError, RateLimitError, AuthenticationError

try:
response = client.chat.completions.create(...)
except AuthenticationError:
print("API Key 无效")
except RateLimitError:
print("请求过于频繁")
except APIError as e:
print(f"API 错误: {e}")

Token 计费

Token 概念

Token 是模型处理的最小单位:

  • 英文:约 1 个词 = 1 token
  • 中文:约 1 个字 = 1-2 token

计费方式

费用 = (输入 Token × 输入价格) + (输出 Token × 输出价格)

Token 统计

response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "你好"}]
)

usage = response.usage
print(f"输入: {usage.prompt_tokens} tokens")
print(f"输出: {usage.completion_tokens} tokens")
print(f"总计: {usage.total_tokens} tokens")

最佳实践

1. 设置合理超时

client = OpenAI(
api_key="your-api-key",
timeout=30.0
)

2. 使用环境变量

import os
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))

3. 实现重试机制

from tenacity import retry, stop_after_attempt, wait_exponential

@retry(stop=stop_after_attempt(3), wait=wait_exponential())
def call_with_retry(messages):
return client.chat.completions.create(
model="gpt-4o",
messages=messages
)

4. 监控使用量

def call_and_log(messages, model):
response = client.chat.completions.create(
model=model,
messages=messages
)

logger.info(f"Token usage: {response.usage.total_tokens}")
return response