LLM 是什么?从 API 调用到 Token 机制
LLM 是什么?从 API 调用到 Token 机制,这可能是最接地气的入门指南
别被"大语言模型"这个名字吓到。本质上,它就是一台"接话机器"——你给它一段文字,它预测最合理的下一段文字。真正重要的是理解 API 怎么调、Token 怎么算、参数怎么调。
一句话理解 LLM
把 LLM 想象成一个超级自动补全引擎。
你在手机上打字时,输入法会预测下一个词。LLM 做的本质上是同一件事——只不过它的"输入法词典"来自整个互联网的文本训练,而且它能预测的不是一个词,而是一整段话。
你输入: "法国的首都是"
LLM 输出: "巴黎,它位于欧洲西部,以埃菲尔铁塔和卢浮宫闻名于世..."
就是这么简单。但让它"好用"的关键,在于三个核心概念。
核心概念一:API 调用
LLM 不是在你电脑上跑的(大多数情况),而是通过 API 请求远程服务器。你发一段文字过去,服务器返回一段文字回来。
最简单的调用
from openai import OpenAI
client = OpenAI(
api_key="sk-xxx", # 你的 API Key
base_url="https://api.deepseek.com" # 兼容 OpenAI 接口
)
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": "你是一个有帮助的助手"},
{"role": "user", "content": "解释什么是 Token"}
]
)
print(response.choices[0].message.content)
这里三个关键参数:
| 参数 | 作用 | 类比 |
|---|---|---|
model |
用哪个模型 | 选哪个发动机 |
messages |
对话上下文 | 你们聊了什么 |
messages[].role |
消息角色 | 这是谁说的 |
三个角色:System / User / Assistant
┌─────────────────────────────────────────────┐
│ System: "你是 Python 专家,用中文回答" │ ← 设定 AI 的人设
├─────────────────────────────────────────────┤
│ User: "装饰器是什么?" │ ← 用户的问题
├─────────────────────────────────────────────┤
│ Assistant: "装饰器是..." │ ← AI 的回答
├─────────────────────────────────────────────┤
│ User: "给我一个例子" │ ← 追问
├─────────────────────────────────────────────┤
│ Assistant: "好的,这是一个简单的例子..." │ ← AI 继续回答
└─────────────────────────────────────────────┘
System Prompt 是最被低估的杠杆。 同样的模型,换个 System Prompt,输出质量天差地别。
# ❌ 模糊的 System Prompt
"你是一个助手"
# ✅ 精准的 System Prompt
"你是资深 Python 讲师。用通俗易懂的中文解释概念,每个概念配一个代码示例。遇到专业术语要解释。"
核心概念二:Token 机制
这是 LLM 最核心、也最容易被忽略的概念。
Token 不是"字"
Token 是 LLM 处理文本的最小单位。 一个 Token 大约等于:
- 1 个英文单词(
hello→ 1 token) - 1 个中文字(
你好→ 2 tokens) - 1 个标点符号(
。→ 1 token) - 代码中的变量名可能被拆成多个 token(
getUserName→ 3 tokens)
为什么 Token 很重要
因为 LLM 的计费和上下文容量都以 Token 为单位:
计费:
输入 1K tokens → $0.0001
输出 1K tokens → $0.0002
一次对话 5000 tokens → 不到 1 分钱
上下文窗口:
GPT-4: 128K tokens
Claude: 200K tokens
DeepSeek: 128K tokens
128K tokens ≈ 一本 200 页的中文书
Token 是怎么吃掉你的上下文的
假设你有一段这样的对话:
System Prompt: 200 tokens (设定人设)
用户第一条消息: 50 tokens
AI 第一条回复: 300 tokens
用户追问: 80 tokens
AI 第二条回复: 500 tokens
用户再问: 120 tokens
─────────────────────────────
已使用: 1250 tokens
每一次对话,前面的内容都会被"记住"并占用 Token 额度。这就是为什么长对话会越来越贵、越来越慢,而且早期的内容会被"忘记"(超出上下文窗口的部分会被截断)。

一个实战技巧:控制回复长度
# 方法 1: System Prompt 控制
system = "回答控制在 200 字以内,直接给结论,不啰嗦"
# 方法 2: max_tokens 参数强制截断
response = client.chat.completions.create(
model="deepseek-chat",
messages=[...],
max_tokens=500 # 硬限制,超过就截断
)
核心概念三:Temperature 和其他参数
Temperature(温度)
控制 AI 输出的随机性,范围 0-2:
Temperature = 0(确定性强)
"1+1=?"
→ 永远回答 "2"
适合: 代码生成、数学计算、事实性问答
Temperature = 1(中等随机)
"写一段关于春天的文字"
→ 每次略有不同,但主题一致
适合: 日常对话、内容生成
Temperature = 2(高随机性)
"给我一个疯狂的想法"
→ 每次天马行空,不可预测
适合: 创意写作、头脑风暴
什么时候用什么 Temperature
| 场景 | Temperature | 原因 |
|---|---|---|
| 写代码 | 0 - 0.3 | 需要确定性和正确性 |
| 数学推理 | 0 | 1+1 不能等于 3 |
| 日常对话 | 0.7 - 1.0 | 自然但不过于发散 |
| 翻译 | 0 - 0.3 | 需要忠实原文 |
| 创意写作 | 1.0 - 1.5 | 希望有惊喜 |
| 头脑风暴 | 1.5+ | 就要天马行空 |
Top-P 和 Top-K
这两个参数和 Temperature 配合使用,进一步控制输出策略:
Top-K = 50:
每步只在概率最高的 50 个 Token 中选择
Top-P = 0.9:
每步只在累积概率 >= 90% 的最小 Token 集合中选择
简单理解:
Top-K = 候选人名单长度(50 人入围)
Top-P = 淘汰末位候选人(去掉最不靠谱的 10%)
Temperature = 最终投票的随机程度
实战:一个完整的 LLM 调用模板
from openai import OpenAI
import os
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY"),
base_url=os.getenv("OPENAI_BASE_URL", "https://api.deepseek.com")
)
def ask_llm(
user_question: str,
system_prompt: str = "你是一个有帮助的助手,用中文回答",
model: str = "deepseek-chat",
temperature: float = 0.7,
max_tokens: int = 2000,
stream: bool = False,
) -> str:
"""通用 LLM 调用函数"""
response = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_question},
],
temperature=temperature,
max_tokens=max_tokens,
stream=stream,
)
if stream:
# 流式输出(逐字返回,用户体验更好)
for chunk in response:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
return ""
else:
return response.choices[0].message.content
# 使用
result = ask_llm(
user_question="用一句话解释什么是 LLM",
system_prompt="你是 AI 科普作者,用小学生都能听懂的话解释",
temperature=0.3,
)
print(result)
三个新手最常犯的错
错误 1:System Prompt 写得太随意
# ❌ 太模糊
system = "你是一个助手"
# ❌ 太啰嗦(浪费 Token)
system = "你是一个很好的助手,你很聪明,你很helpful..." # 300 tokens
# ✅ 精准简洁
system = "你是 Python 专家。用中文回答。每个概念配代码示例。遇到专业术语要解释。"
错误 2:不设 max_tokens
# ❌ 可能一次调用花掉几块钱
response = client.chat.completions.create(model="gpt-4", messages=[...])
# ✅ 每次都设上限
response = client.chat.completions.create(
model="gpt-4",
messages=[...],
max_tokens=1000
)
错误 3:忽略 API 错误处理
# ❌ 一次失败就崩溃
answer = client.chat.completions.create(...)
# ✅ 加重试
from tenacity import retry, stop_after_attempt
@retry(stop=stop_after_attempt(3))
def safe_ask(messages):
try:
return client.chat.completions.create(
model="deepseek-chat",
messages=messages,
max_tokens=1000,
)
except Exception as e:
print(f"调用失败: {e},重试中...")
raise
一个思维方式:把 LLM 当成一个新员工
这不是玩笑,是一个非常实用的心智模型:
| 新员工 | LLM |
|---|---|
| 需要清晰的岗位描述才能干活 | System Prompt 就是岗位描述 |
| 交代任务要具体,不能"你看着办" | Prompt 越具体,输出越好 |
| 新人会犯错,需要检查工作 | LLM 输出必须 Review |
| 做复杂任务需要拆成小步骤 | Chain / Agent 就是这个原理 |
| 新人干不了的事别硬派 | LLM 不是万能,注意能力边界 |
带着这个心态去用 LLM,你会发现自己写 Prompt 的方式会彻底改变。
总结
LLM 入门就三个核心概念:
- API 调用 —— System/User/Assistant 三个角色,System Prompt 是最大的杠杆
- Token 机制 —— 计费和上下文容量的最小单位,理解它才能控制成本和效果
- 参数调优 —— Temperature 控制随机性,不同场景用不同的值
搞懂这三个,你就已经超过了 80% 的 LLM 使用者。
剩下的就是多练——去 github.com/barryness/cc-ai-learning 的 001-llm-learning 模块跑一遍 Demo,比看十篇文章都管用。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)