Skip to main content

7 大模型原理、Prompt 与微调

大模型原理主视觉

本章只回答一个实用问题:用户把文字发给大模型后,这段文字经历了什么路径,我们又怎样让输出稳定到可以放进应用里?

不要从背模型名字开始。先掌握你能操作的循环:文本变成 token,token 变成向量,Transformer 根据上下文预测下一个 token,然后你用 Prompt、结构化输出、RAG、微调或工具来控制结果。

先看完整流程

Token 到答案的完整流程

整章学习都可以围绕这张图走。

术语通俗含义实操时检查什么
Token文本切分后的较小单位Prompt 是否放得进上下文窗口?
Embeddingtoken 或文本片段对应的向量相似含义是否足够接近,能否用于比较或检索?
Transformer用 attention 混合上下文的模型架构前面的哪些词、例子或规则影响了回答?
预训练从大量数据中学习通用语言规律任务开始前,模型已经具备了什么通用能力?
Prompt当前发送给模型的任务说明和上下文能否先用更清楚的说明解决问题?
微调用训练样本改变模型的长期行为这是反复出现的行为问题,还是只是缺少知识?
对齐让输出更安全、更接近人的意图即使回答流畅,还可能在哪些地方失败?

学习顺序与任务表

完整工作坊应该放在最后。先建立心智模型,再跑全流程实验。

步骤阅读内容要动手做什么留下什么证据
7.1NLP 速成运行 tokenizer 和 embedding 示例能解释 token、向量和上下文的笔记
7.2LLM 概览与发展史标出规模、数据、指令微调、对齐如何改变模型行为一张时间线或能力来源图
7.3-7.4Transformer 与预训练读懂直觉,不死背细节一张解释 attention、上下文和训练目标的图
7.5Prompt 工程用固定输入比较多个 Prompt 版本Prompt 版本、输出、分数和失败样本
7.6微调判断任务该用 Prompt、RAG 还是微调一张简短方案判断表
7.7对齐检查失败模式和安全边界一份安全/评估清单
7.8阶段项目运行 7.8.4 实操:第 7 章完整工作坊终端输出、通过率、README 记录

第一个可运行循环:不用 API 测 Prompt

Prompt 实验循环

Prompt 工作应该像软件测试:固定输入样本,每次只改一个 Prompt 变量,校验输出,并保存失败样本。

新建 ch07_prompt_test.py,用 Python 3.10 或更新版本运行。这个离线示例不会调用真实模型,它只是帮你练会评估循环。后面接入真实 LLM SDK 时,只需要替换 toy_model()

import json

cases = [
{"topic": "gradient descent", "level": "beginner"},
{"topic": "RAG", "level": "intermediate"},
]

prompts = {
"plain": "Explain the topic.",
"teacher": "You are a patient AI teacher. Explain the topic in 3 short bullets.",
"json": "Return JSON with keys: topic, level, summary, next_step.",
}


def toy_model(prompt: str, case: dict) -> str:
topic = case["topic"]
level = case["level"]
if "Return JSON" in prompt:
return json.dumps(
{
"topic": topic,
"level": level,
"summary": f"{topic} explained for {level} learners",
"next_step": "Run one small example and record the result",
},
ensure_ascii=False,
)
if "patient AI teacher" in prompt:
return f"- Define {topic}\n- Show one example\n- Ask the learner to retry"
return f"{topic} is an AI concept."


def validate_json(raw: str) -> bool:
try:
data = json.loads(raw)
except json.JSONDecodeError:
return False
return {"topic", "level", "summary", "next_step"} <= data.keys()


for prompt_name, prompt in prompts.items():
passed = 0
for case in cases:
output = toy_model(prompt, case)
ok = validate_json(output) if prompt_name == "json" else bool(output.strip())
passed += int(ok)
print(f"{prompt_name}: {passed}/{len(cases)} cases passed")

预期输出:

plain: 2/2 cases passed
teacher: 2/2 cases passed
json: 2/2 cases passed

操作提示:再加一个坏样本、一个更长样本、一个新的输出字段要求。如果分数变化了,就记录是哪一次 Prompt 改动导致的。这个习惯比单次“看起来不错”的回答更重要。

选择 Prompt、RAG、微调还是工具

Prompt、RAG、微调和工具选择图

大模型效果不好时,不要直接跳到微调。

现象先尝试什么什么时候升级方案
回答风格含糊改 Prompt,并加入示例明确说明后,固定样本仍然失败
应用需要 JSON 或表格加 schema,并做解析校验模型反复漏字段或类型错误
回答缺少私有或新知识用 RAG 检索文档检索准确,但模型仍按错行为执行
模型需要长期遵守领域行为考虑微调或 LoRA已有足够高质量样本和评估集
任务需要外部动作使用工具或 Agent 工作流模型必须调用 API、搜索文件或执行步骤

常见错误

  • 把大模型当数据库:文字流畅不等于事实正确。
  • 同时改 Prompt、输入样本和模型:你无法判断到底是谁改善了结果。
  • 要求结构化输出却不校验:看起来像 JSON 的文本也可能无效。
  • 过早微调:很多问题应该先用 Prompt、RAG、工具或产品逻辑解决。
  • 还没看过输出循环就钻 Transformer 细节:理论会很难落地。

通关检查

进入第 8 章前,你应该能做到:

  • 用自己的话解释 token、embedding、attention、上下文窗口、预训练、Prompt、微调和对齐;
  • 运行上面的 Prompt 测试循环,并做到每次只改一个变量;
  • 保存 Prompt 版本、固定输入样本、输出、分数和失败样本;
  • 判断一个任务该先用 Prompt、结构化输出、RAG、微调、工具还是 Agent;
  • 跑通完整章节工作坊,并在简短 README 中记录结果。

可打印清单见 7.0 学习检查表。如果想直接做项目,从 7.8.4 实操:第 7 章完整工作坊 开始。