Skip to content

第 1 章:LLM 应用基础

章节定位

这一章不直接讲 LangChain API,而是先建立一个正确的应用视角:LLM 应用到底由哪些部分组成,为什么“只会调模型”还不够,以及后面为什么需要 LangChain 这样的框架来组织能力。

如果你跳过这一章,后面学 RAG、Agent、LangGraph 时很容易只记住名词,不理解它们分别解决什么问题。

配套示例

  • 目录:examples/chapter-01
  • 入口:examples/chapter-01/main.py
  • 依赖:examples/chapter-01/requirements.txt
  • 运行:cd examples/chapter-01 && python3 main.py

示例层级与边界

  • 层级:Toy
  • 本章重点:先建立 LLM 应用的基本心智模型,理解流程比接真实 API 更重要。
  • 不要误判:这里的 ToyLLM 只是占位层,不能代表真实模型接入、成本控制或线上可用性。

本章目标

学完这一章,你应该能够:

  • 说清楚什么是 LLM 应用,而不是只会调用一个模型接口
  • 区分 promptmessagecontexttokenstructured output 这些基础概念
  • 理解聊天模型和补全模型的差别
  • 知道为什么需要把“提示词、模型、输出解析、流程控制”拆开设计
  • 用一个最小问答脚本,开始 AI 学习助手 的主项目雏形

前置知识

建议你至少具备以下基础:

  • 会写 Python 基础语法
  • 知道什么是函数、参数、返回值
  • 了解 HTTP 请求的基本概念
  • 听说过大模型、ChatGPT、Prompt 这些词

如果你还不熟悉这些,也可以先读下去。本章会尽量把必要概念讲清楚。

1.1 什么是 LLM 应用

很多人一开始会把 LLM 应用理解成“调用一次模型 API”。这个理解不算错,但太窄了。

一个真正的 LLM 应用,通常至少包含下面这些部分:

  • 用户输入
  • 提示词组织
  • 模型推理
  • 上下文管理
  • 输出格式控制
  • 后处理或工具调用

也就是说,LLM 不是最终产品本身,而是产品里的一个推理核心。

AI 学习助手 为例:

  • 用户输入“我想学 LangChain,先从哪里开始?”
  • 系统先把这个问题整理成更明确的任务
  • 模型生成学习建议
  • 程序把输出整理成更适合阅读的结构

这才是一个最小可用的 LLM 应用链路。

1.2 核心概念

Token

Token 是模型处理文本时的基本单位,不等于字、词或字符。不同语言切分方式不同,所以你不能把“文本长度”简单理解成“字符数”。

为什么要关心 token:

  • 输入太长会超出上下文窗口
  • token 数量会影响成本和速度
  • 后面做 RAG 和文档问答时,切分策略都和 token 相关

Context Window

Context Window 指模型一次能看到的上下文长度。你可以把它理解成模型的“短期记忆容量”。

当上下文太长时,模型可能会:

  • 截断早期内容
  • 遗漏关键约束
  • 让输出质量下降

这也是为什么后面要学检索、摘要和上下文压缩。

Prompt

Prompt 是你给模型的任务说明。它不仅是“问一句话”,还可以包括:

  • 任务目标
  • 角色设定
  • 输出格式要求
  • 示例
  • 约束条件

写好 Prompt,本质上是在设计模型的工作说明书。

Message

如果你使用聊天模型,输入通常会被拆成多条消息:

  • system:系统级规则
  • user:用户输入
  • assistant:模型历史回复

这种结构比单一长文本更适合对话式应用,也更适合后续控制行为。

Structured Output

Structured Output 是让模型输出固定结构的数据,例如 JSON。

它的价值在于:

  • 更容易被程序继续处理
  • 更容易做 UI 展示
  • 更容易做校验和调试

例如 AI 学习助手 最终可能不只是输出一段文本,而是输出:

json
{
  "topic": "LangChain 入门",
  "difficulty": "beginner",
  "learning_steps": ["先理解 LLM 应用", "再学核心抽象", "最后做第一个链"]
}

1.3 模型调用的基本方式

单轮问答

最简单的方式是只给一个问题,让模型直接回答。

这种方式适合:

  • 快速验证模型能力
  • 做最小 demo
  • 观察 prompt 对输出的影响

但它也有明显问题:

  • 逻辑一复杂就不好维护
  • 输出格式不稳定
  • 没有清晰的流程分层

系统提示词

system prompt 用来定义模型的行为边界。比如你可以要求模型:

  • 只用中文回答
  • 不要编造事实
  • 输出必须分点
  • 先给结论,再给解释

这一步是把“模型风格”从用户输入里分离出来。

输出示例观察

你可以用同一个问题试几种不同的 prompt,观察输出变化。

比如问题:

给我一个 LangChain 学习建议

你会发现,单纯提问和加上约束后的输出差异很大。这个观察非常重要,因为后面很多工程优化,本质上都是在控制输入和输出之间的差异。

1.4 为什么需要框架

如果只做一个玩具 demo,直接调用模型 SDK 就够了。但一旦你想做真实产品,问题会迅速变多:

  • 提示词越来越长,难以维护
  • 输出需要结构化,不能只靠自然语言
  • 业务流程会拆成多步
  • 要接入文档、工具、搜索、数据库
  • 需要调试和复现问题

这就是 LangChain 存在的理由之一:把这些反复出现的工程问题抽象成可组合的组件。

你可以把它理解成:

  • 模型负责推理
  • 框架负责组织推理过程
  • 你的业务代码负责定义任务和边界

1.5 最小示例:第一个问答脚本

下面这个例子不依赖 LangChain,目的是先理解“一个最小 LLM 应用长什么样”。

python
def build_prompt(topic: str) -> str:
    return f"""
你是一个中文技术导师。
请用 3 点解释 {topic},每点都要简短、具体、适合初学者。
"""


def mock_model_call(prompt: str) -> str:
    # 这里在真实项目中会替换成模型 API 调用
    return f"模型收到提示词:{prompt}"


def main() -> None:
    topic = "LangChain"
    prompt = build_prompt(topic)
    answer = mock_model_call(prompt)
    print(answer)


if __name__ == "__main__":
    main()

这个例子说明了最基本的链路:

  1. 组装提示词
  2. 调用模型
  3. 输出结果

后面你会发现,LangChain 只是把这条链路做得更模块化、更可组合。

1.6 AI 学习助手 的第一步

从本章开始,我们把学习内容和主项目绑定起来。

AI 学习助手 V0 可以先定义成一个最简单的能力:

  • 输入一个学习主题
  • 输出适合初学者的学习顺序
  • 给出基础概念和练习建议

它还不需要接文档、不需要工具、不需要工作流,只要能稳定输出一个合理的学习建议就够了。

这一步的意义是把课程和项目统一起来,避免“学一套、做一套”。

1.7 本章实践

请你完成以下练习:

  1. 用自己的话解释什么是 LLM 应用
  2. 选一个你熟悉的话题,写一个最小 prompt
  3. 让同一个模型问题输出三种不同风格的回答
  4. 记录你发现的输出差异

如果你愿意进一步推进,可以把练习整理成一个 chapter-01 的小脚本,并在后续章节继续扩展。

1.8 常见坑

  • 把 LLM 应用等同于“聊天机器人”
  • 认为 prompt 越长越好
  • 误以为模型输出天然可靠
  • 忽略上下文窗口和 token 限制
  • 一开始就追求复杂架构,结果什么都没跑通

1.9 练习题

  1. 为什么说“模型调用”不等于“应用开发”?
  2. system promptuser prompt 的作用分别是什么?
  3. 为什么后面要学习结构化输出?
  4. 你的 AI 学习助手 V0 应该先解决什么问题?

本章总结

这一章的重点不是学 API,而是建立正确心智模型:

  • LLM 只是推理核心,不是完整应用
  • prompt、上下文、输出格式和流程控制同样重要
  • 真正的工程问题,靠“拆模块”而不是“堆提示词”解决

你现在已经具备继续学习 LangChain 的前提。下一章会正式进入 LangChain 的核心抽象,开始理解 PromptTemplateChat ModelOutput ParserRunnable 这些最关键的概念。

学完本章,你现在应该会

  • 用自己的话解释什么是 LLM 应用,并说清它不等于单次模型调用
  • 说明 prompt、上下文、输出格式为什么都会影响最终效果
  • 画出一个最小问答脚本的输入到输出链路
  • 说清 AI 学习助手 V0 当前只解决什么问题,不解决什么问题

最小验收 checklist

  • [ ] 我能描述一个最小 LLM 应用至少包含输入、模型调用和输出三个环节
  • [ ] 我能写出一个围绕单一主题的最小 prompt
  • [ ] 我知道同一个问题为什么会出现不同风格或不同质量的输出
  • [ ] 我能说出本章示例里哪些部分以后会被 LangChain 模块化接管

建议你动手改一版

  • 把示例里的主题从 LangChain 改成你熟悉的技术主题,再观察输出是否还清晰
  • 给最小脚本增加一个 style 参数,让它支持“面向初学者”和“面向有经验开发者”两种回答风格
  • 补一个输入为空时的提示,先养成最基本的输入校验习惯

卡住时先回看这里

  • 如果你分不清“模型调用”和“应用开发”,回看 chapter-01-llm-basics.md 里的 ## 1.1 什么是 LLM 应用
  • 如果你不确定 prompt 到底在控制什么,回看 chapter-01-llm-basics.md 里的 ## 1.2 核心概念
  • 如果你不知道主项目为什么现在还这么简单,回看 chapter-01-llm-basics.md 里的 ## 1.6 AI 学习助手 的第一步

下一章预告

下一章我们会把本章的最小问答脚本升级成可组合的 LangChain 结构,理解为什么 prompt | model | parser 是一个非常重要的工程起点。