聊天接口 (Chat)
约 962 字大约 3 分钟
2025-02-10
聊天接口是最常用的 AI 接口,支持多轮对话、流式输出等功能。
接口地址
POST https://api.ai.webweb.cn/v1/chat/completions请求参数
必填参数
| 参数 | 类型 | 说明 |
|---|---|---|
| model | string | 模型名称,如 gpt-3.5-turbo、gpt-4 |
| messages | array | 对话消息数组 |
可选参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| temperature | number | 1 | 温度参数,控制随机性,范围 0-2 |
| top_p | number | 1 | 核采样参数 |
| n | integer | 1 | 生成的回复数量 |
| stream | boolean | false | 是否使用流式输出 |
| max_tokens | integer | - | 最大生成 Token 数 |
| presence_penalty | number | 0 | 存在惩罚,范围 -2.0 到 2.0 |
| frequency_penalty | number | 0 | 频率惩罚,范围 -2.0 到 2.0 |
| stop | string/array | null | 停止词 |
| user | string | - | 用户标识符 |
消息格式
每条消息包含以下字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| role | string | 角色:system、user、assistant |
| content | string | 消息内容 |
请求示例
基础请求
cURL
curl https://api.ai.webweb.cn/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{"role": "system", "content": "你是一个有帮助的助手。"},
{"role": "user", "content": "你好,请介绍一下你自己。"}
]
}'Python
from openai import OpenAI
client = OpenAI(
api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
base_url="https://api.ai.webweb.cn/v1"
)
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "你是一个有帮助的助手。"},
{"role": "user", "content": "你好,请介绍一下你自己。"}
]
)
print(response.choices[0].message.content)JavaScript
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
baseURL: 'https://api.ai.webweb.cn/v1'
});
const response = await openai.chat.completions.create({
model: 'gpt-3.5-turbo',
messages: [
{ role: 'system', content: '你是一个有帮助的助手。' },
{ role: 'user', content: '你好,请介绍一下你自己。' }
]
});
console.log(response.choices[0].message.content);Go
package main
import (
"context"
"fmt"
openai "github.com/sashabaranov/go-openai"
)
func main() {
config := openai.DefaultConfig("sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
config.BaseURL = "https://api.ai.webweb.cn/v1"
client := openai.NewClientWithConfig(config)
resp, err := client.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: openai.GPT3Dot5Turbo,
Messages: []openai.ChatCompletionMessage{
{Role: openai.ChatMessageRoleSystem, Content: "你是一个有帮助的助手。"},
{Role: openai.ChatMessageRoleUser, Content: "你好,请介绍一下你自己。"},
},
},
)
if err != nil {
fmt.Printf("Error: %v\n", err)
return
}
fmt.Println(resp.Choices[0].Message.Content)
}流式输出
Python
from openai import OpenAI
client = OpenAI(
api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
base_url="https://api.ai.webweb.cn/v1"
)
stream = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "写一首关于春天的诗"}
],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="")JavaScript
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
baseURL: 'https://api.ai.webweb.cn/v1'
});
const stream = await openai.chat.completions.create({
model: 'gpt-3.5-turbo',
messages: [{ role: 'user', content: '写一首关于春天的诗' }],
stream: true
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content || '');
}响应示例
非流式响应
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"created": 1677858242,
"model": "gpt-3.5-turbo-0613",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "你好!我是一个 AI 助手,很高兴为您服务。"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 25,
"completion_tokens": 20,
"total_tokens": 45
}
}流式响应
{"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1677858242,"model":"gpt-3.5-turbo-0613","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
{"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1677858242,"model":"gpt-3.5-turbo-0613","choices":[{"index":0,"delta":{"content":"你"},"finish_reason":null}]}
{"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1677858242,"model":"gpt-3.5-turbo-0613","choices":[{"index":0,"delta":{"content":"好"},"finish_reason":null}]}
{"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1677858242,"model":"gpt-3.5-turbo-0613","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}支持的模型
| 模型 | 上下文长度 | 说明 |
|---|---|---|
| gpt-4-turbo | 128K | GPT-4 Turbo,最新最强 |
| gpt-4 | 8K | GPT-4 标准版 |
| gpt-4-32k | 32K | GPT-4 长上下文版 |
| gpt-3.5-turbo | 16K | GPT-3.5 Turbo |
| claude-3-opus | 200K | Claude 3 最强版 |
| claude-3-sonnet | 200K | Claude 3 平衡版 |
| claude-3-haiku | 200K | Claude 3 快速版 |
| gemini-pro | 32K | Google Gemini Pro |
| deepseek-chat | 32K | Deepseek 聊天模型 |
最佳实践
1. 使用 System 消息
合理使用 system 消息可以更好地控制 AI 的行为:
messages = [
{"role": "system", "content": "你是一个专业的Python程序员,只用中文回答。"},
{"role": "user", "content": "如何读取一个JSON文件?"}
]2. 管理对话历史
保持合理的对话历史长度,避免超出 Token 限制:
def trim_messages(messages, max_tokens=4000):
"""保留最近的消息,确保不超过 Token 限制"""
# 实现截断逻辑
pass3. 错误处理
from openai import OpenAI, APIError, RateLimitError
client = OpenAI(base_url="https://api.ai.webweb.cn/v1")
try:
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "Hello!"}]
)
except RateLimitError:
print("请求过于频繁,请稍后重试")
except APIError as e:
print(f"API 错误: {e}")