外观
00. 学习路线
学习目标
完成本教程后,你应该能够:
- 解释 LangChain 在 Agent 应用中的角色:它不是模型本身,而是围绕模型、工具、上下文和检索建立应用骨架。
- 构建一个基于本地 Ollama 的 Python CLI Agent,并让它使用工具和 RAG 回答问题。
- 判断什么时候
create_agent已经足够,什么时候需要使用 LangGraph 管理显式状态、分支流程和持久化。
总体路线
本教程按 Agent 能力逐层展开:
- 模型调用:先确认本地 Ollama 模型可用,并能完成基础对话。
- Prompt、Message 和 Tool:理解模型看到的输入结构,以及工具如何暴露给模型。
create_agent:使用当前 LangChain Agent API 组织 Agent Loop。- RAG:把本地文档检索结果作为上下文交给 Agent。
- Memory、State、Streaming 和 Debugging:处理多轮上下文、状态传递、流式输出和问题定位。
- LangGraph:当流程需要显式节点、边、条件路由、持久化或人工介入时,使用更底层的编排能力。
建议先运行每个示例,再阅读代码。运行结果能帮助你建立直觉:模型实际收到了什么、它为什么选择工具、工具结果如何影响最终回答。
每章对应示例
下表是教程完成后的章节和示例对应关系:
| 文档章节 | 主题 | 对应示例 |
|---|---|---|
docs/00-learning-path.md | 学习路线 | 无独立示例 |
docs/01-langchain-agent-overview.md | Agent 总览 | 无独立示例 |
docs/02-local-models-with-ollama.md | 本地模型调用 | examples/01_chat_cli.py |
docs/03-prompts-and-messages.md | 提示词与消息 | examples/02_prompt_cli.py |
docs/04-tools-and-tool-calling.md | 工具调用 | examples/03_tools_cli.py |
docs/05-agent-loop-with-create-agent.md | create_agent Agent Loop | examples/04_agent_cli.py |
docs/06-rag-agent.md | RAG 数据导入与 RAG Agent | examples/05_rag_ingest.py、examples/06_rag_agent_cli.py |
docs/07-memory-and-state.md | 记忆与状态 | examples/07_memory_agent_cli.py |
docs/08-streaming-and-observability.md | 流式输出与观察 | examples/08_streaming_cli.py |
docs/09-langgraph-for-advanced-agents.md | LangGraph 高级 Agent | examples/09_langgraph_agent.py |
docs/10-production-checklist.md | 生产化检查 | 无独立示例 |
学习建议
- 每一章都先运行示例,再读代码。不要只看文档推测行为。
- 修改示例时一次只改一个变量,例如模型名称、系统提示词、工具描述或检索内容。
- Agent 不稳定时,优先检查四件事:模型输入、工具定义、工具输出、最终回复。
- 工具调用失败时,先减少工具数量和参数复杂度,再逐步恢复完整能力。
- RAG 回答不准时,先看检索结果是否正确,再判断模型是否正确使用了上下文。
- 当你发现流程开始依赖多个步骤、条件分支、长期状态或人工确认时,再考虑 LangGraph。
每个阶段的产出
第一阶段结束后,你应该能运行一个最小聊天 CLI,并知道模型名、Ollama 地址和 temperature 分别影响什么。
第二阶段结束后,你应该能解释模型实际收到的是一组 messages,而不是一个神秘的“提示词字符串”。你还应该知道系统消息、人类消息、AI 消息和工具消息在 Agent loop 中的作用。
第三阶段结束后,你应该能写出一个小工具,并理解“模型请求工具”和“程序执行工具”是两件事。模型不会直接执行 Python 函数,它只能产生结构化的调用意图。
第四阶段结束后,你应该能把本地文档变成可检索知识库,并知道 RAG 的问题不只来自模型,也可能来自文档、chunk、embedding、vector store 或 retriever。
第五阶段结束后,你应该能解释 memory、RAG 和 workflow state 的区别。它们都和“上下文”有关,但保存的内容、生命周期和使用方式不同。
第六阶段结束后,你应该能判断什么时候简单 Agent loop 已经不够。只要流程需要明确步骤、条件分支、恢复能力或人工审核,就应该认真考虑 LangGraph。
自测问题
- LangChain 和 Ollama 的边界在哪里?
- 为什么工具描述会影响模型是否调用工具?
- 为什么 RAG 不是把文档“训练进模型”?
- 为什么短期 memory 不能无限追加?
- 一个 Agent 出错时,你会先看最终回答,还是先看消息和工具调用记录?