LLM 基础机制

现在的状态非常典型:

  • 已经会用一些 AI 工具;
  • 也已经接触 API;
  • 甚至已经在工作里和 AI 一起做事;

但这并不等于真的理解模型在做什么。

如果这一层不先补上,后面学 Prompt、Function Calling、Tool Use、Agent 工作流,都会很容易变成“会操作,不会解释”。

所以这篇文章的目标不是教我怎么调用某个接口,而是帮我回答一个更关键的问题:

当我说“我在用大模型”时,我到底在用什么?

一、 LLM

很多人在初学阶段都会自然地产生一种错觉:

  • 有了模型,系统就自动“聪明”了;
  • 模型能回答问题,所以它也应该能承担决策、执行、状态管理这些工作;
  • 只要 Prompt 写好,整体系统就会自然变稳。

这类错觉之所以常见,是因为模型的输出看起来太像“理解”。

LLM 是系统中的一个能力模块,不是整个系统。

1. 模型擅长的是什么

大模型最擅长的,其实是:

  • 根据输入上下文预测下一个最可能的 token;
  • 在足够多的训练数据支持下,生成结构上合理、语义上看起来连贯的输出;
  • 对复杂语言任务进行模式匹配、归纳和重组。

换成更工程化的话说,它像是一个:

强大的语言压缩与展开器。

你给它:

  • 问题
  • 上下文
  • 约束
  • 示例
  • 工具结果

它会在这些输入之上生成一个“最像合理答案”的输出。

2. 模型不擅长的是什么

它并不天然擅长:

  • 长期稳定保存状态;
  • 精确记忆很久以前的细节;
  • 永远遵守你的格式约束;
  • 自动知道何时调用外部工具;
  • 为复杂任务自己维持完整的执行链路;
  • 保证在每一次请求中都可靠一致。

也就是说:

模型可以提供“智能”,但不能直接替代系统设计。

这就是为什么招聘里会强调:

  • 任务拆解
  • Tool Use
  • 多步骤执行
  • 记忆机制
  • 状态管理
  • 失败兜底
  • 稳定性与成本控制

因为一旦你进入真实产品场景,你就会发现:

“让模型答出来”“让产品稳定运行” 是完全不同的两件事。

二、LLM 的最小工作方式:输入、上下文、输出

如果要理解模型,最先要弄清楚的不是框架,而是最基本的工作单元。

1. 输入不是一句问题,而是一整个消息结构

在今天大多数聊天型模型接口里,输入往往不是简单的一句字符串,而是一组消息。

最常见的是:

  • system
  • user
  • assistant

很多人一开始会把它们当成“格式要求”,但其实它们背后代表的是角色分工

system

负责给模型设定:

  • 角色
  • 任务边界
  • 输出规范
  • 价值倾向或行为限制

它更像是:

系统级指令或规则背景。

user

是这次真实提问者提供的信息。

比如:

  • 我想让你做什么
  • 我关心什么
  • 当前场景是什么

assistant

则是历史对话里模型自己之前说过的话。

它的意义不只是“聊天记录”,而是:

把前面的推理和承诺重新放回当前上下文里。

2. 为什么这点重要

因为很多后续问题都源自你有没有意识到:

  • 模型看到的不是“你脑海里的意图”
  • 模型只看到这次你喂进去的消息结构

这句话听起来简单,但它会直接改变你对很多现象的理解。

比如:

  • 为什么模型明明“上一轮答应了”,这一轮又变了;
  • 为什么 system prompt 里写了规则,它还是没完全照做;
  • 为什么上下文一长,回答开始跑偏。

这些问题本质上都和:

模型到底看到了什么输入

有关。

三、上下文为什么是核心,而不是附属概念

“上下文”这个词很常见,但很容易被讲得过于轻飘。

对工程来说,它其实是最核心的问题之一。

1. 上下文决定模型当前的世界观

模型并不会真正“记住”你之前说过什么。

它只是每次都根据当前传入的上下文重新生成答案。

所以对模型来说:

  • 当前窗口里的内容 = 它现在能参考的世界
  • 窗口外的内容 = 当前这一轮几乎不存在

这就意味着:

上下文不是辅助信息,而是模型思考的全部边界。

2. 为什么上下文会让回答变好,也会让回答变差

上下文多了,模型确实可能更懂当前任务。

但上下文变多,也会带来几个典型问题:

1)噪声增加

无关信息越多,模型越难判断什么重要。

2)重点被稀释

真正关键的约束可能被埋在一堆历史信息里。

3)成本上升

上下文越长,token 越多,成本和延迟通常都会提高。

4)稳定性下降

当上下文里出现冲突信息,模型可能表现得越来越不一致。

所以在真实系统里:

上下文管理不是“多带一点更保险”,而是“带哪些、丢哪些、什么时候压缩”。

这也是为什么招聘里会把“上下文管理”当成明确能力要求。

四、Token 是什么,为什么它和成本、延迟直接相关

如果不理解 token,就很难真正理解模型为什么贵、为什么慢、为什么会超长。

1. token 不是字,也不是词

token 更像是模型内部处理文本的最小切分单元。

它不完全等于:

  • 一个汉字
  • 一个英文单词
  • 一个标点符号

有时一个词会拆成多个 token;有时多个字符会合成一个 token。

2. 为什么你必须关心 token

因为模型的几个关键现实约束,都和 token 强相关:

1)窗口长度

上下文不是无限的,模型每次能看到的 token 总量是有限的。

2)成本

大多数 API 都是按 token 计费。

3)延迟

token 越多,模型通常处理得越慢。

4)系统设计

如果你把所有历史、规则、知识、工具结果无脑都塞进去,系统会很快变得:

  • 不稳定

所以从工程角度看,token 从来不只是计费单位,它还是:

上下文设计能力的压力测试。

五、为什么模型会“看起来懂”,但其实不稳定

这也是很多人在工作里最容易产生错觉的地方。

1. 模型输出像理解,不等于它真的建立了稳固概念

LLM 之所以让人惊艳,是因为它能给出:

  • 连贯的解释
  • 看起来像推理的步骤
  • 甚至看起来像“理解你真正想要什么”的回答

但工程里必须意识到:

像理解,不等于可依赖。

2. 你在工作里最容易遇到的几类问题

1)格式漂移

你让它输出 JSON,它有时还是会多说一句话。

2)约束失效

你写了“只能输出 3 条”,它有时还是会输出 4 条。

3)上下文污染

前面聊天里的一些历史内容会把当前任务带偏。

4)错误自信

模型可能会一本正经地讲错。

5)重复与空转

在多轮任务里,它可能开始自我重复,或者做无意义延长。

这些现象不是边角问题,而是理解 Agent 的基础。

因为你越早明白“模型天然不稳定”,后面越能理解:

  • 为什么需要结构化输出
  • 为什么需要工具调用
  • 为什么需要状态机或工作流
  • 为什么需要失败兜底

六、为什么这篇基础理论会直接连接到 Agent

有人会觉得:

“我不是要学 Agent 吗?为什么先讲这么多 LLM 基础?”

答案很简单:

Agent 不是凭空多出来的一层魔法,它是建立在模型边界之上的系统组织方式。

如果你不知道模型本身有什么问题,就很难理解 Agent 为什么要多出这些组件:

  • 规划
  • 工具
  • 状态
  • 记忆
  • 工作流
  • 重试与回退

也就是说:

  • LLM 基础告诉你 模型能做什么 / 不能做什么
  • Agent 设计则是在回答 系统应该怎么补上这些缺口

这也是为什么我把这篇放在整个教程序列的第一个理论模块。

七、和岗位要求的关系:这篇文章在 JD 里对应哪一层

这篇内容表面上还没写到“Agent 架构”,但实际上已经对上了招聘里最基础的一层要求:

对应要求 1:LLM 应用开发经验

如果一个人只是会复制调用代码,他只能算“接过 API”。

真正有 LLM 应用开发经验的人,至少会逐步意识到:

  • 输入结构很重要
  • 上下文选择很重要
  • token 很重要
  • 输出稳定性不是默认给你的

对应要求 2:Prompt / 上下文管理

这篇其实已经在为这部分打地基:

  • Prompt 不是咒语
  • 上下文不是越多越好
  • 输出边界必须靠设计来约束

对应要求 3:Agent 在真实产品中的问题

比如:

  • 延迟
  • 稳定性
  • 不可控性
  • 成本

这些都和模型的基础工作方式直接相关。

所以如果这篇内容真的吃透,后面读 JD 的很多词就不会再只是“熟悉的热词”,而会变成能解释的结构。

八、本篇小练习:不要做项目,先做 3 个小观察

这篇不安排大项目,只安排 3 个最小观察任务。

练习 1:观察消息结构对输出的影响

找一个你常用的模型接口,分别用:

  • 只有 user
  • system + user
  • 多轮 user + assistant 历史

问同一个问题。

记录:

  • 输出差异
  • 稳定性差异
  • 风格差异

练习 2:观察上下文变长后输出是否变乱

把同一个任务放在:

  • 短上下文
  • 长上下文

两种场景里跑一遍。

观察:

  • 模型是否更容易偏题
  • 是否更容易忘掉要求
  • 是否更容易输出冗余内容

练习 3:记录一次“模型明明像懂了,但其实不稳”的例子

从你工作里的真实使用中,找一个这样的例子:

  • 看起来答得很像那么回事
  • 但重复几次就不一致
  • 或者一换措辞结果就漂了

把这个例子写下来。

这一步很重要,因为它会帮你真正从“用户视角”切换到“系统视角”。

九、这篇学完之后,你应该达到什么状态

不是“我学完了 LLM”,而是你至少应该能清楚说出下面这些话:

  • LLM 是系统中的一个能力模块,不是整个 Agent 系统;
  • 模型每次只基于当前上下文工作;
  • 上下文管理是稳定性的关键来源之一;
  • token 不只是计费单位,也影响窗口、成本和延迟;
  • 模型看起来懂,不等于它天然可靠;
  • 后面的 Tool Use、工作流、状态管理,都是在补模型本身的边界。

如果这些话你已经能用自己的语言复述出来,那这篇就算真正学到了。

十、小结

这篇文章最核心的结论,其实可以压缩成一句话:

先理解模型边界,后理解 Agent 设计。

如果模型本身在你脑中还是一个模糊的“黑箱”,后面的 Agent 只会学成一堆看似高级的词。

但如果你先把:

  • 输入
  • 上下文
  • token
  • 输出稳定性
  • 模型边界

这些基础问题理清楚,那么后面再学 Tool Use、Function Calling、工作流与 RAG,就会稳很多。

而下一篇,我会继续往前走,进入更贴近实际工程的一层:

Prompt、Context 与输出约束:为什么模型有时听话,有时跑偏。