LLM 交互基础:透过现象看本质
摘要:在构建 AI Agent 之前,我们需要先理解它的“大脑”——大语言模型 (LLM) 是如何工作的。本文将脱离具体的编程语言,从 HTTP 协议和核心概念的角度,剖析 LLM 的交互原理。
1. 什么是 LLM?
当我们使用 ChatGPT 时,它看起来像是一个无所不知的助手。但从计算机科学的角度来看,LLM 本质上是一个概率预测函数。
当你输入 "The sky is" 时,模型并不是在像人类一样“思考”天空的颜色。它是在基于海量的训练数据,计算字典中每一个词(Token)出现在这句话后面的概率。
$$ P(w_i | w_1, w_2, ..., w_) $$
它可能会计算出:
- "blue": 85%
- "gray": 10%
- "limit": 1%
然后根据某种策略(如下文提到的 Temperature)选择其中一个词输出。这就是为什么 LLM 有时候会产生“幻觉”——它只是在预测最顺口的下一个词,而不是在陈述事实。
2. 核心概念
在调用 API 之前,必须理解以下几个关键概念,它们直接决定了你的应用成本和效果。
2.1 Token (词元)
Token 是 LLM 处理文本的最小单位,不等同于字符 (Character)。
- 英文:通常 1 个单词 = 1 个 Token(如 "apple")。复杂单词可能被拆分。
- 中文:通常 1 个汉字 = 1~2 个 Token(取决于具体模型的分词器)。
- 代码:代码中的空格、缩进、符号都会消耗 Token。
为什么重要?
- 计费:LLM API 通常按 Token 数量收费(Prompt Tokens + Completion Tokens)。
- 限制:每个模型都有最大上下文窗口(Context Window),单位也是 Token。
2.2 Context Window (上下文窗口)
这是 LLM 的“短期记忆”容量。
OpenAI 的 API 是 Stateless (无状态) 的。这意味着模型不会记住你上一句话说了什么。如果你想实现多轮对话,你必须每一次都把之前的对话历史打包发给模型。
请求 1:
[
{"role": "user", "content": "我叫 Alice。"}
]
请求 2 (如果不带历史):
[
{"role": "user", "content": "我刚才说我叫什么?"}
]
// 模型回答:我不知道。
请求 2 (正确的做法):
[
{"role": "user", "content": "我叫 Alice。"},
{"role": "assistant", "content": "你好 Alice!"},
{"role": "user", "content": "我刚才说我叫什么?"}
]
随着对话变长,Token 消耗会呈线性甚至指数级增长,直到撞墙(Context Window Limit)。这就是为什么记忆管理(Memory)在 Agent 开发中如此重要。
2.3 Temperature (温度)
这个参数控制了模型输出的随机性。
- Temperature = 0.0: 理性模式。模型总是选择概率最高的那个词。适合代码生成、数学解题、数据提取。
- Temperature > 0.8: 创意模式。模型会尝试选择概率较低的词,带来意想不到的惊喜(或惊吓)。适合写诗、创意写作。
3. OpenAI API 协议标准
目前,OpenAI 的 Chat Completions API 已经成为事实上的行业标准。无论是开源模型(如 Llama 3, Qwen)还是闭源模型(Claude, DeepSeek),通常都提供兼容此格式的接口。
3.1 核心端点
POST /v1/chat/completions
Content-Type: application/json
Authorization: Bearer $OPENAI_API_KEY
3.2 请求结构
最关键的参数是 messages 数组。它模拟了对话的剧本。
{
"model": "gpt-4o",
"messages": [
{
"role": "system",
"content": "你是一个精通 Python 的编程助手,回答要简洁。"
},
{
"role": "user",
"content": "如何用一行代码反转列表?"
}
],
"temperature": 0.0
}
- system: “上帝视角”指令,设定模型的角色、语气和行为规范。
- user: 用户的输入。
- assistant: 模型之前的回复(用于构建历史上下文)。
3.3 响应结构
API 会返回一个包含预测结果的 JSON 对象:
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "my_list[::-1]"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 25,
"completion_tokens": 5,
"total_tokens": 30
}
}
- choices0.message.content: 这就是我们需要的回答。
- usage: 用于统计消耗和计费。
- finish_reason:
stop: 正常结束。length: 达到了 max_tokens 限制,回答被截断。tool_calls: 模型想要调用工具(这是 Agent 的核心,后续会讲)。
4. 总结
掌握了这个 HTTP 协议,你就脱离了对特定 SDK(如 Python openai 库)的依赖。无论是用 Node.js, Go, Rust 还是 curl,你都可以轻松地与世界上最聪明的大脑进行交互。
这也是构建 AI Agent 的第一步:理解如何通过结构化的 JSON 数据与模型沟通。