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 入门就三个核心概念:

  1. API 调用 —— System/User/Assistant 三个角色,System Prompt 是最大的杠杆
  2. Token 机制 —— 计费和上下文容量的最小单位,理解它才能控制成本和效果
  3. 参数调优 —— Temperature 控制随机性,不同场景用不同的值

搞懂这三个,你就已经超过了 80% 的 LLM 使用者。

剩下的就是多练——去 github.com/barryness/cc-ai-learning001-llm-learning 模块跑一遍 Demo,比看十篇文章都管用。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐