Skip to content

Chat Completions API

源力AI 的对话生成接口完全兼容 OpenAI Chat Completions API,现有 OpenAI SDK 代码可以零修改接入。

接口地址

POST https://bww.letcareme.com/v1/chat/completions

请求头

字段必填说明
AuthorizationBearer sk-xxxxxxxx 格式的 API Key
Content-Typeapplication/json

请求参数

必填参数

参数类型说明
modelstring模型 ID,见 模型列表
messagesarray对话消息数组

messages 结构

json
[
  {"role": "system", "content": "你是一个有帮助的助手。"},
  {"role": "user", "content": "用户消息"},
  {"role": "assistant", "content": "上一轮助手回复"},
  {"role": "user", "content": "本轮用户消息"}
]

role 可选值:system / user / assistant

常用可选参数

参数类型默认值说明
temperaturefloat1.0随机性,范围 0~2,越高越随机
max_tokensinteger模型上限最大生成 token 数
top_pfloat1.0核采样概率,与 temperature 二选一调节
streambooleanfalse是否流式返回(SSE)
stopstring/arraynull停止词,命中后停止生成
presence_penaltyfloat0话题多样性惩罚,范围 -2~2
frequency_penaltyfloat0重复词频率惩罚,范围 -2~2
ninteger1生成候选答案数量
userstring用户标识,用于监控和速率限制

完整请求示例

基础对话

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-4ogemini-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("超出最大重试次数")

详细错误码见 错误码参考

按量计费 · 即开即用 · 稳定可靠