跟传统应用服务一样,大模型服务也提供 HTTP API 接口,供客户端调用。本文便以 OpenAI 为例,介绍如何调用大模型接口。
对话补全
OpenAI 协议提供了多种 API 接口,其中最常用的是对话补全接口。对话补全,顾名思义就是根据用户输入的上下文,补全后续内容,可用来实现智能聊天机器人。
对话补全请求
OpenAI 对话补全接口如下:
1
2
3
4
5
6
7
8
9
10
11
12
|
POST /v1/chat/completions HTTP/1.1
Host: api.deepseek.com
Authorization: Bearer <your-api-key>
Content-Type: application/json
{
"model": "deepseek-v3",
"messages": [
{"role": "system", "content": "你是一个智能聊天机器人,名字叫小菜。"},
{"role": "user", "content": "你好,小菜。"}
]
}
|
这是一个典型的 POST 请求,请求体是一个 JSON 对象,包含以下字段:
model
:模型名称,这里使用的是 DeepSeek 的 v3 版本。
messages
:对话历史,包含系统提示和用户消息。
block-beta
columns 2
S(["🖥 system"]) SM("你是一个智能聊天机器人,名字叫小菜。")
U(["👤 user"]) UM("你好,小菜!")
注意到,请求通过 Authorization 头传递 API Key,这是接口的认证机制,防止 API 被滥用。
对话补全响应
大模型根据对话历史,生成补全内容,并返回给客户端:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
HTTP/1.1 200 OK
Content-Type: application/json
{
"choices": [
{
"message": {
"content": "你好!很高兴见到你,有什么我可以帮你的吗?",
"role": "assistant"
},
}
]
}
|
结果包含 choices 数组,数组中包含一个元素,表示大模型生成的消息内容。注意到,消息内容包含 role 字段,assistant 表示智能助手,即大模型生成的内容。
block-beta
columns 2
S(["🖥 system"]) SM("你是一个智能聊天机器人,名字叫小菜。")
U(["👤 user"]) UM("你好,小菜!")
space Arrow<["LLM"]>(down)
A(["🤖 assistant"]) AM("你好!很高兴见到你,有什么我可以帮你的吗?")
看到这里,你可能会拍案而起,这不就是智能聊天机器人吗?没错,对话补全接口可以用来实现智能聊天机器人,这是一个等价的聊天时序图:
sequenceDiagram
participant U as 👤 user
participant S as 🖥 system
participant A as 🤖 assistant
S->>A: 你是一个智能聊天机器人,名字叫小菜。
U->>A: 你好,小菜!
A->>U: 你好!很高兴见到你,有什么我可以帮你的吗?
- system 先给大模型设定角色,即系统提示。
- user 输入消息,大模型根据系统提示和用户消息,生成补全内容。
- 大模型将补全内容返回给 user。
如需多轮对话,只需将对话历史作为 messages
参数传递给大模型,大模型就会根据对话历史生成补全内容。
block-beta
columns 2
S(["🖥 system"]) SM("你是一个智能聊天机器人,名字叫小菜。")
U1(["👤 user"]) UM1("你好,小菜!")
A1(["🤖 assistant"]) AM1("你好!很高兴见到你,有什么我可以帮你的吗?")
U2(["👤 user"]) UM2("你还不知道我的名字吧,我叫小明。")
A2(["🤖 assistant"]) AM2("很高兴认识你,小明!今天有什么特别的事情或者问题需要我帮忙的吗?")
U3(["👤 user"]) UM3("你觉得我的名字怎么样?")
space Arrow<["LLM"]>(down)
A3(["🤖 assistant"]) AM3("小明这个名字简单又好记,给人一种亲切和阳光的感觉。你觉得这个名字怎么样呢?")
注意,由于大模型上下文窗口限制,历史对话轮数不宜过多,通常只保留最近若干轮对话。
curl 示例
使用 curl 调用对话补全接口的示例:
1
2
3
4
5
6
7
8
9
10
11
|
# 设置接口地址环境变量,这里使用的是阿里云的接口地址
export OPENAI_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
# 设置 API Key 环境变量(注意保密)
export OPENAI_API_KEY="sk-..."
curl -X POST \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "deepseek-v3", "messages": [{"role": "system", "content": "你是一个智能聊天机器人,名字叫小菜。"}, {"role": "user", "content": "你好,小菜。"}]}' \
$OPENAI_BASE_URL/chat/completions
|
接口返回数据如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
{
"choices": [
{
"message": {
"content": "你好!很高兴见到你,有什么我可以帮你的吗?",
"role": "assistant"
},
"finish_reason": "stop",
"index": 0,
"logprobs": null
}
],
"object": "chat.completion",
"usage": {
"prompt_tokens": 19,
"completion_tokens": 12,
"total_tokens": 31
},
"created": 1743220835,
"system_fingerprint": null,
"model": "deepseek-v3",
"id": "chatcmpl-23ea89b3-4ac6-93e4-8b06-3f5722579662"
}
|
其中,choices 数组包含一个元素,表示大模型生成的消息内容。注意到,消息内容包含 role 字段,assistant 表示智能助手,即大模型生成的内容。
python 示例(多轮对话)
使用 python 调用对话补全接口的示例(多轮对话):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
import requests
# 设置接口地址常量,这里使用的是阿里云的接口地址
OPENAI_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"
# 设置 API Key 常量(注意保密)
OPENAI_API_KEY = "sk-..."
response = requests.post(
f"{OPENAI_BASE_URL}/chat/completions",
headers={
"Authorization": f"Bearer {OPENAI_API_KEY}",
},
json={
"model": "deepseek-v3",
"messages": [
{"role": "system", "content": "你是一个智能聊天机器人,名字叫小菜。"},
{"role": "user", "content": "你好,小菜。"},
{"role": "assistant", "content": "你好!很高兴见到你,有什么我可以帮你的吗?"},
{"role": "user", "content": "你还不知道我的名字吧,我叫小明。"},
{"role": "assistant", "content": "很高兴认识你,小明!今天有什么特别的事情或者问题需要我帮忙的吗?"},
{"role": "user", "content": "你觉得我的名字怎么样?"},
]
},
)
print(response.json())
|
大模型将根据对话历史,生成补全内容,并以 JSON 格式返回给客户端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
{
"choices": [
{
"message": {
"content": "小明这个名字简单又好记,给人一种亲切和阳光的感觉。你觉得这个名字怎么样呢?",
"role": "assistant"
},
"finish_reason": "stop",
"index": 0,
"logprobs": None,
}
],
"object": "chat.completion",
"usage": {
"prompt_tokens": 68,
"completion_tokens": 17,
"total_tokens": 85
},
"created": 1743236996,
"system_fingerprint": None,
"model": "deepseek-v3",
"id": "chatcmpl-3b14f36e-184d-94f8-8aa0-1c22202d477b"
}
|
【小菜学AI】系列文章首发于公众号【小菜学编程】,敬请关注:
