Skip to content

00 核心概念与任务拆解 ​

在写代码前,先把一个 AI 应用拆成能解释的部件。本页以“回答文档构建问题”为例,说明你在后续课程里会反复遇到的概念,以及它们各自解决什么问题。

1. 模型、应用和 Agent 的关系 ​

语言模型根据输入上下文生成输出。文档助手还需要准备资料、组织请求、检查答案和呈现结果;这些都属于应用的职责。

当流程固定为“检索资料 → 请求模型 → 检查答案”时,可以直接写成固定工作流。当下一步需要根据上一步结果选择工具、追加查询或决定结束时,才出现本教程第三课的控制循环。

text
应用
├── 输入:问题与用户上下文
├── 资料:检索与证据整理
├── 模型:生成答案或提出工具调用
├── 执行:校验、调用工具、管理步骤
└── 输出:答案、引用、缺失信息或错误

“用了模型”“用了工具”“有多步循环”是不同层面的描述。给一个程序起名为 Agent,不会自动赋予它可靠性、记忆或权限控制。

2. Token 与上下文到底限制什么 ​

Token 是模型处理文本的编码单位,不等于中文字符、英文单词或字节。准确数量取决于具体模型的分词方式;不能用固定的“一个字等于一个 token”估算所有情况。

一次任务可能消耗上下文的内容包括规则、问题、历史消息、工具定义、检索片段和工具结果。输入不断变长,会占用更多预算,也可能引入互相冲突或不相关的信息。

先做一个无需分词器的观察实验:同一个问题分别附上一条相关文档和四条文档,比较请求体包含哪些信息。开启真实调用后,再看 API 返回的 usage;请求体字符数只可用于理解规模,不能作为准确的 token 计费值。

更多基础原理见 Token、Tokenizer 与上下文窗口 与 Transformer 架构。

3. Prompt、上下文和知识的分工 ​

部件文档助手中的例子典型错误
任务规则只能根据 evidence 回答规则散落在多轮消息中,相互矛盾
用户问题如何构建文档没有说明所指的项目或环境
外部上下文build 文档的内容塞入大量无关文本,或混入过期版本
输出约定答案、引用、状态下游依赖自然语言猜测任务是否成功

例如,单写“你是资深架构师”不能补齐缺失的构建命令。更有效的操作是提供正确的项目资料,并规定资料缺失时怎样结束任务。

提示词改变当前任务的行为要求;检索把外部资料带进上下文;模型训练则改变模型参数。后续遇到新需求时,先判断你缺少的是信息、任务约定,还是模型能力,不要把所有问题都归到提示词。

4. 结构化输出和工具调用不是一回事 ​

结构化输出让结果符合一份数据契约,例如返回 answer/citations/status。工具调用让模型提出一个动作,例如调用 search_docs。

text
结构化答案:给调用者什么结果?
工具请求:应用下一步执行什么动作?

模型返回 {"status":"answered"} 并不意味着应用真的执行了部署。同样,模型生成一个函数调用也不意味着函数已经运行。执行记录必须来自程序自身。

5. RAG 和 Embedding 放在哪一层 ​

RAG 的核心路径是先获取外部证据,再依据证据生成答案。Embedding 可以把内容表示成向量,帮助查找语义相关资料,但只是检索的一种手段。

本教程先用关键词基线:看得到每条资料为什么被选中,能区分“找错资料”和“有资料仍答错”。之后替换检索器时,只需保持证据对象的结构,便于公平比较。

学习概念时可用下面的对照:

  • 找不到资料:先检查入库、切片、检索和权限。
  • 找到资料但答错:检查证据拼装、任务说明和生成质量。
  • 答案正确但引用错:检查引用对齐与校验。
  • 反复调用工具不结束:检查控制循环、预算和停止条件。

6. 把模糊需求改成验收任务 ​

原需求:“做一个聪明的文档助手。”

可以改成:

项目约定
读者已会运行命令,但不熟悉仓库的新维护者
输入1 到 1000 字的问题
资料随教程提供的四条本地文档
输出简短答案、证据 ID、回答状态
有答案样例构建命令与产物位置
无答案样例明天天气、资料中没有的业务规则
动作范围只读检索,不执行文档中的命令
停止条件得到可校验答案、明确缺少证据,或达到请求次数上限

这些约定让你知道需要实现什么,也知道哪些事情暂时不在任务范围内。第二到第四课会逐项实现和检查它们。

7. 开始前的小练习 ​

把任务换成你熟悉的“查询团队值班说明”或“回答产品使用问题”,各写出三条有答案问题、两条无答案问题和一条不能执行的动作。先写正确答案与来源,再设计提示词。

如果你无法指出某个答案来自哪条资料,先补资料;如果不能说明什么算失败,先补验收标准。完成后进入 第一课:模型调用与结构化输出。