主题
Chat Completions API
源力AI 的对话生成接口完全兼容 OpenAI Chat Completions API,现有 OpenAI SDK 代码可以零修改接入。
接口地址
POST https://bww.letcareme.com/v1/chat/completions请求头
| 字段 | 必填 | 说明 |
|---|---|---|
Authorization | 是 | Bearer sk-xxxxxxxx 格式的 API Key |
Content-Type | 是 | application/json |
请求参数
必填参数
| 参数 | 类型 | 说明 |
|---|---|---|
model | string | 模型 ID,见 模型列表 |
messages | array | 对话消息数组 |
messages 结构
json
[
{"role": "system", "content": "你是一个有帮助的助手。"},
{"role": "user", "content": "用户消息"},
{"role": "assistant", "content": "上一轮助手回复"},
{"role": "user", "content": "本轮用户消息"}
]role 可选值:system / user / assistant
常用可选参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
temperature | float | 1.0 | 随机性,范围 0~2,越高越随机 |
max_tokens | integer | 模型上限 | 最大生成 token 数 |
top_p | float | 1.0 | 核采样概率,与 temperature 二选一调节 |
stream | boolean | false | 是否流式返回(SSE) |
stop | string/array | null | 停止词,命中后停止生成 |
presence_penalty | float | 0 | 话题多样性惩罚,范围 -2~2 |
frequency_penalty | float | 0 | 重复词频率惩罚,范围 -2~2 |
n | integer | 1 | 生成候选答案数量 |
user | string | — | 用户标识,用于监控和速率限制 |
完整请求示例
基础对话
python
from openai import OpenAI
client = OpenAI(
api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxx",
base_url="https://bww.letcareme.com/v1"
)
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "你是一位专业的 Python 工程师。"},
{"role": "user", "content": "如何用 Python 读取一个大型 CSV 文件而不占用太多内存?"}
],
temperature=0.5,
max_tokens=800
)
print(response.choices[0].message.content)
print(f"使用 tokens: {response.usage.total_tokens}")bash
curl https://bww.letcareme.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-xxxxxxxxxxxxxxxxxxxxxxxx" \
-d '{
"model": "gpt-4o",
"messages": [
{"role": "system", "content": "你是一位专业的 Python 工程师。"},
{"role": "user", "content": "如何用 Python 读取一个大型 CSV 文件而不占用太多内存?"}
],
"temperature": 0.5,
"max_tokens": 800
}'流式输出(Streaming)
python
from openai import OpenAI
client = OpenAI(
api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxx",
base_url="https://bww.letcareme.com/v1"
)
stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "用 300 字介绍机器学习。"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="", flush=True)
print() # 换行bash
curl https://bww.letcareme.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-xxxxxxxxxxxxxxxxxxxxxxxx" \
-d '{
"model": "gpt-4o",
"messages": [{"role": "user", "content": "用 300 字介绍机器学习。"}],
"stream": true
}'多轮对话
python
from openai import OpenAI
client = OpenAI(
api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxx",
base_url="https://bww.letcareme.com/v1"
)
# 维护对话历史
conversation = [
{"role": "system", "content": "你是一个友好的旅游顾问。"}
]
def chat(user_message: str) -> str:
conversation.append({"role": "user", "content": user_message})
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=conversation,
temperature=0.7
)
assistant_message = response.choices[0].message.content
conversation.append({"role": "assistant", "content": assistant_message})
return assistant_message
print(chat("我想去日本旅游,应该去哪些城市?"))
print(chat("京都有什么推荐的景点?"))
print(chat("大概需要几天时间游览京都?"))响应格式
标准响应
json
{
"id": "chatcmpl-abc123xyz",
"object": "chat.completion",
"created": 1710000000,
"model": "gpt-4o",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "可以使用 pandas 的 `chunksize` 参数分块读取大型 CSV 文件..."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 52,
"completion_tokens": 243,
"total_tokens": 295
},
"system_fingerprint": "fp_abc123"
}流式响应(SSE 格式)
data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","created":1710000000,"model":"gpt-4o","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","created":1710000000,"model":"gpt-4o","choices":[{"index":0,"delta":{"content":"可以"},"finish_reason":null}]}
data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","created":1710000000,"model":"gpt-4o","choices":[{"index":0,"delta":{"content":"使用"},"finish_reason":null}]}
data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","created":1710000000,"model":"gpt-4o","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: [DONE]finish_reason 说明
| 值 | 含义 |
|---|---|
stop | 正常完成,遇到停止词或自然结束 |
length | 达到 max_tokens 限制,回复被截断 |
content_filter | 触发内容安全过滤 |
null | 流式传输中,尚未完成 |
视觉理解(Vision)
支持 gpt-4o、gemini-1.5-pro 等视觉模型:
python
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "这张图片里有什么?"},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/image.jpg",
# 或使用 base64:
# "url": "data:image/jpeg;base64,/9j/4AAQ..."
}
}
]
}
]
)错误处理
python
from openai import OpenAI, APIError, RateLimitError, AuthenticationError
import time
client = OpenAI(
api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxx",
base_url="https://bww.letcareme.com/v1"
)
def chat_with_retry(messages: list, max_retries: int = 3) -> str:
for attempt in range(max_retries):
try:
response = client.chat.completions.create(
model="gpt-4o",
messages=messages
)
return response.choices[0].message.content
except AuthenticationError:
raise # 认证错误不重试
except RateLimitError:
wait_time = 2 ** attempt # 指数退避
print(f"速率限制,等待 {wait_time} 秒后重试...")
time.sleep(wait_time)
except APIError as e:
if e.status_code >= 500:
print(f"服务端错误,重试中... ({attempt + 1}/{max_retries})")
time.sleep(1)
else:
raise
raise Exception("超出最大重试次数")详细错误码见 错误码参考。