跳到正文

00. 学习路线

学习目标

完成本教程后,你应该能够:

  • 解释 LangChain 在 Agent 应用中的角色:它不是模型本身,而是围绕模型、工具、上下文和检索建立应用骨架。
  • 构建一个基于本地 Ollama 的 Python CLI Agent,并让它使用工具和 RAG 回答问题。
  • 判断什么时候 create_agent 已经足够,什么时候需要使用 LangGraph 管理显式状态、分支流程和持久化。

总体路线

本教程按 Agent 能力逐层展开:

  1. 模型调用:先确认本地 Ollama 模型可用,并能完成基础对话。
  2. Prompt、Message 和 Tool:理解模型看到的输入结构,以及工具如何暴露给模型。
  3. create_agent:使用当前 LangChain Agent API 组织 Agent Loop。
  4. RAG:把本地文档检索结果作为上下文交给 Agent。
  5. Memory、State、Streaming 和 Debugging:处理多轮上下文、状态传递、流式输出和问题定位。
  6. LangGraph:当流程需要显式节点、边、条件路由、持久化或人工介入时,使用更底层的编排能力。

建议先运行每个示例,再阅读代码。运行结果能帮助你建立直觉:模型实际收到了什么、它为什么选择工具、工具结果如何影响最终回答。

每章对应示例

下表是教程完成后的章节和示例对应关系:

文档章节主题对应示例
docs/00-learning-path.md学习路线无独立示例
docs/01-langchain-agent-overview.mdAgent 总览无独立示例
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.mdcreate_agent Agent Loopexamples/04_agent_cli.py
docs/06-rag-agent.mdRAG 数据导入与 RAG Agentexamples/05_rag_ingest.pyexamples/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.mdLangGraph 高级 Agentexamples/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 出错时,你会先看最终回答,还是先看消息和工具调用记录?