[{"content":"2025-2026 年，AI Agent 已经成为大模型落地最热的方向。从简单的\u0026quot;问答机器人\u0026quot;到能自主调用工具、协作完成任务的智能体，Agent 的能力边界在快速扩展。\n但对于想入门的同学来说，最大的困惑是：我该从哪开始？学什么？用什么项目练手？\n这篇文章给你一条清晰的学习路线，分为 5 个阶段，每个阶段推荐一个 GitHub 开源项目。不贪多，一步步来。\n路线图总览 阶段 1：LLM 基础与 Prompt 工程 ↓ 阶段 2：单 Agent 开发（ReAct、工具调用） ↓ 阶段 3：Agent 框架实战（LangChain / LlamaIndex） ↓ 阶段 4：多 Agent 系统（CrewAI / LangGraph） ↓ 阶段 5：生产部署与评估（LangFuse / Ragas） 每个阶段建议花 2-4 周，根据你的基础灵活调整。\n阶段 1：LLM 基础与 Prompt 工程 目标：理解大模型的工作原理，掌握 Prompt 设计的基本技巧。\n需要学什么 Transformer 架构的基本概念（不需要手推公式，理解 Attention 的作用即可） Tokenization、Context Window、Temperature、Top-p 等核心参数 Prompt Engineering 的基本模式：Zero-shot、Few-shot、Chain-of-Thought 学会调用主流 LLM API（OpenAI、DeepSeek、Claude） 推荐项目：Prompt-Engineering-Guide ⭐ 48k+ stars · 最全面的 Prompt 工程学习资源\n这个项目是一个系统化的 Prompt 工程指南，覆盖了从基础技巧到高级策略（CoT、Self-Consistency、Tree of Thoughts 等），配有丰富的示例和论文引用。有中文翻译版本。\n怎么用它学习：\n跟着指南的章节顺序学习，每个技巧都动手试一遍 用 DeepSeek 或 OpenAI 的 API，把指南里的示例自己跑一遍 尝试用 Few-shot + CoT 组合解决一个实际问题（比如让 LLM 做结构化信息提取） 学完你应该能：写出高质量的 System Prompt，理解为什么有些 prompt 效果好、有些效果差。\n阶段 2：单 Agent 开发（ReAct、工具调用） 目标：理解 Agent 的核心循环，实现一个能调用工具的单 Agent。\n需要学什么 Agent 的核心循环：感知 → 推理 → 行动 → 观察 ReAct（Reasoning + Acting）范式 Function Calling / Tool Use 的实现方式 错误恢复和重试策略 推荐项目：LangChain ⭐ 100k+ stars · 最流行的 LLM 应用开发框架\n虽然 LangChain 是一个完整的框架，但它的 Agent 模块 是学习单 Agent 开发的最佳起点。特别是 create_react_agent 函数，几行代码就能创建一个 ReAct Agent。\n怎么用它学习：\n先不看 LangChain 的高级功能，只用 ChatOpenAI + create_react_agent 创建一个简单 Agent 给 Agent 添加 2-3 个工具（搜索、计算器、Python 代码执行） 观察 Agent 的 Thought-Action-Observation 循环日志，理解它的决策过程 尝试自己写一个工具（比如查询天气、读取本地文件） # 一个最简 ReAct Agent 示例 from langchain_openai import ChatOpenAI from langchain.agents import create_react_agent, AgentExecutor from langchain.tools import tool @tool def multiply(a: int, b: int) -\u0026gt; int: \u0026#34;\u0026#34;\u0026#34;两个数相乘\u0026#34;\u0026#34;\u0026#34; return a * b llm = ChatOpenAI(model=\u0026#34;gpt-4o-mini\u0026#34;) agent = create_react_agent(llm, tools=[multiply], prompt=...) executor = AgentExecutor(agent=agent, tools=[multiply], verbose=True) executor.invoke({\u0026#34;input\u0026#34;: \u0026#34;23 乘以 17 是多少？\u0026#34;}) 学完你应该能：实现一个能调用多个工具的 Agent，理解 Agent 是如何\u0026quot;思考\u0026quot;和\u0026quot;行动\u0026quot;的。\n阶段 3：Agent 框架实战（记忆、RAG、规划） 目标：掌握 Agent 的高级能力——记忆管理、RAG 集成、任务规划。\n需要学什么 Agent 记忆：短期记忆（对话历史）、长期记忆（向量存储）、记忆压缩 RAG（检索增强生成）：文档切分、Embedding、向量检索 任务规划：将复杂任务分解为子任务 推荐项目：LlamaIndex ⭐ 38k+ stars · 专注于 RAG 和数据连接的框架\n相比 LangChain 的\u0026quot;大而全\u0026quot;，LlamaIndex 在 RAG 和数据索引 方面做得更深入。它的 AgentWorkflow 模块可以创建带有 RAG 能力的 Agent。\n怎么用它学习：\n用 LlamaIndex 构建一个 RAG 系统，索引一批技术文档 创建一个 Agent，让它既能搜索互联网，又能查询你的本地知识库 给 Agent 添加记忆功能——记住用户的偏好和历史对话 尝试实现一个\u0026quot;研究型 Agent\u0026quot;：给一个论文主题，自动搜索、阅读、总结 学完你应该能：构建带有知识库和记忆的 Agent，处理更复杂的任务场景。\n阶段 4：多 Agent 系统 目标：学习如何让多个 Agent 协作完成复杂任务。\n需要学什么 多 Agent 架构模式：层级式（Manager-Worker）、辩论式（Debate）、流水线式（Pipeline） Agent 间通信：消息传递、共享状态、任务委托 角色设计：为不同 Agent 定义清晰的职责和能力边界 推荐项目：CrewAI ⭐ 28k+ stars · 最易上手的多 Agent 框架\nCrewAI 的设计理念是\u0026quot;像组建团队一样组建 Agent\u0026quot;。你定义 Agent 的角色（Role）、目标（Goal）和背景（Backstory），然后定义它们如何协作。API 非常直观。\n怎么用它学习：\n创建一个简单的\u0026quot;写作团队\u0026quot;：研究员 Agent 搜集资料 → 写作 Agent 撰写文章 → 编辑 Agent 审核修改 尝试不同协作模式：顺序执行 vs 层级管理（加一个 Manager Agent） 构建一个\u0026quot;代码审查团队\u0026quot;：代码分析 Agent → 安全审查 Agent → 报告生成 Agent 观察 Agent 之间的消息传递，理解任务如何分解和流转 from crewai import Agent, Task, Crew researcher = Agent( role=\u0026#34;技术研究员\u0026#34;, goal=\u0026#34;搜集关于 AI Agent 的最新资料\u0026#34;, backstory=\u0026#34;你是一位资深技术研究员，擅长快速检索和整理信息\u0026#34;, tools=[search_tool] ) writer = Agent( role=\u0026#34;技术作者\u0026#34;, goal=\u0026#34;将研究资料整理成易读的技术文章\u0026#34;, backstory=\u0026#34;你是一位经验丰富的技术博主，擅长深入浅出地解释复杂概念\u0026#34; ) research_task = Task(description=\u0026#34;研究 AI Agent 的最新趋势\u0026#34;, agent=researcher) write_task = Task(description=\u0026#34;基于研究结果写一篇博客\u0026#34;, agent=writer) crew = Crew(agents=[researcher, writer], tasks=[research_task, write_task]) result = crew.kickoff() 学完你应该能：设计和实现多 Agent 协作系统，理解不同架构模式的适用场景。\n阶段 5：生产部署与评估 目标：学会将 Agent 系统部署到生产环境，并持续监控和优化。\n需要学什么 Agent 可观测性：追踪每一步推理和工具调用 评估指标：任务完成率、工具调用准确率、响应延迟、成本 安全性：Prompt 注入防护、工具权限控制、数据隐私 部署模式：Serverless、容器化、API 网关 推荐项目：LangFuse ⭐ 8k+ stars · 开源的 LLM 可观测性平台\nLangFuse 是 LangSmith 的开源替代品，可以追踪 Agent 的每一步操作（LLM 调用、工具执行、RAG 检索），提供可视化的 trace 视图、成本分析、延迟统计。\n怎么用它学习：\n本地部署 LangFuse（Docker 一键启动） 把你之前做的 Agent 接入 LangFuse，观察 trace 日志 分析 Agent 的\u0026quot;决策路径\u0026quot;：它为什么选择这个工具？在哪一步出了错？ 设置评估指标：自动统计任务成功率、平均耗时、token 消耗 尝试 A/B 测试：换一个 Prompt 或模型，对比效果差异 学完你应该能：将 Agent 系统从\u0026quot;Demo 级别\u0026quot;提升到\u0026quot;生产级别\u0026quot;，具备持续优化的能力。\n进阶方向 完成以上 5 个阶段后，你已经具备了 Agent 开发的核心能力。接下来可以根据兴趣深入：\n方向 关键词 推荐关注 MCP 协议 Model Context Protocol modelcontextprotocol/servers Agent 安全 Prompt Injection、Guardrails NeMo Guardrails 代码 Agent Code Interpreter、SWE OpenDevin Web Agent 浏览器自动化 Browser Use Agent 评估 基准测试 AgentBench 总结 Agent 学习不需要一口吃成胖子。按照 基础 → 单 Agent → 框架 → 多 Agent → 生产 的路线，每个阶段配一个开源项目实战，3-6 个月就能建立完整的能力体系。\n记住一个原则：每个阶段都要动手写代码，不要只看文档。 Agent 开发的核心是\u0026quot;调\u0026quot;出来的——调 Prompt、调工具参数、调 Agent 角色定义——只有动手才能培养出直觉。\n祝你学习顺利！\n","permalink":"https://latent-site.pages.dev/posts/2026/07/ai-agent-%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF%E4%BB%8E%E9%9B%B6%E5%88%B0%E7%94%9F%E4%BA%A7%E6%AF%8F%E4%B8%AA%E9%98%B6%E6%AE%B5%E9%85%8D%E4%B8%80%E4%B8%AA%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE/","summary":"一份系统的 AI Agent 学习路线图，分为 5 个阶段：LLM 基础 → Prompt 工程 → 单 Agent 开发 → 多 Agent 系统 → 生产部署。每个阶段推荐一个 GitHub 开源项目作为实战练手。","title":"AI Agent 学习路线：从零到生产，每个阶段配一个开源项目"},{"content":"Hi, 我是 [一个好名字] AI Researcher / Engineer · 坐标中国\n这个网站是我的数字笔记本 —— 记录所学，分享技术深度文章，偶尔也会写一些对这个领域走向的思考。\n研究方向 大语言模型训练与推理优化 智能体系统：规划、工具使用、多 Agent 协作 检索增强生成（RAG）与知识接地 多模态模型与视觉语言理解 经历 时间 经历 2024 - 至今 项目开发（程序猿） 2024 硕士 联系方式 GitHub: 一个好名字 Colophon 本站使用 Hugo + PaperMod 主题构建，托管于 Cloudflare Pages。评论系统由 Giscus 提供，数学公式使用 MathJax 渲染。\n","permalink":"https://latent-site.pages.dev/about/","summary":"\u003ch2 id=\"hi-我是-一个好名字\"\u003eHi, 我是 [一个好名字]\u003c/h2\u003e\n\u003cp\u003eAI Researcher / Engineer · 坐标中国\u003c/p\u003e\n\u003cp\u003e这个网站是我的数字笔记本 —— 记录所学，分享技术深度文章，偶尔也会写一些对这个领域走向的思考。\u003c/p\u003e\n\u003ch2 id=\"研究方向\"\u003e研究方向\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e大语言模型训练与推理优化\u003c/li\u003e\n\u003cli\u003e智能体系统：规划、工具使用、多 Agent 协作\u003c/li\u003e\n\u003cli\u003e检索增强生成（RAG）与知识接地\u003c/li\u003e\n\u003cli\u003e多模态模型与视觉语言理解\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"经历\"\u003e经历\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e时间\u003c/th\u003e\n          \u003cth\u003e经历\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e2024 - 至今\u003c/td\u003e\n          \u003ctd\u003e项目开发（程序猿）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e2024\u003c/td\u003e\n          \u003ctd\u003e硕士\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"联系方式\"\u003e联系方式\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eGitHub: \u003ca href=\"https://github.com/GitHub1002\"\u003e一个好名字\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"colophon\"\u003eColophon\u003c/h2\u003e\n\u003cp\u003e本站使用 \u003ca href=\"https://gohugo.io/\"\u003eHugo\u003c/a\u003e + \u003ca href=\"https://github.com/adityatelange/hugo-PaperMod\"\u003ePaperMod\u003c/a\u003e 主题构建，托管于 \u003ca href=\"https://pages.cloudflare.com/\"\u003eCloudflare Pages\u003c/a\u003e。评论系统由 \u003ca href=\"https://giscus.app/\"\u003eGiscus\u003c/a\u003e 提供，数学公式使用 MathJax 渲染。\u003c/p\u003e","title":"关于"},{"content":"注意力（Attention）是 Transformer 捕获长距离依赖的核心机制。这篇文章从数学推导到代码实现，逐步拆解，每一步都给出具体数值。\n缩放点积注意力 给定 Query $Q$、Key $K$、Value $V$，注意力输出为：\n$$\\text{Attention}(Q, K, V) = \\text{softmax}\\left(\\frac{QK^T}{\\sqrt{d_k}}\\right) V$$\n用一个小型示例来追踪。设 $d_k = 4$：\nQ = [[1.0, 0.0, 0.5, 0.2]] # shape (1, 4) K = [[0.8, 0.1, 0.3, 0.6], # shape (3, 4) [0.2, 0.9, 0.1, 0.4], [0.5, 0.5, 0.5, 0.5]] V = [[1.0, 0.0], # shape (3, 2) [0.0, 1.0], [0.5, 0.5]] Step 1：计算 $QK^T$。对第一个 Key：$1.0 \\times 0.8 + 0.0 \\times 0.1 + 0.5 \\times 0.3 + 0.2 \\times 0.6 = 0.8 + 0 + 0.15 + 0.12 = \\mathbf{1.07}$。\n为什么要除以 √d_k？ 随着 $d_k$ 增大，点积的方差也会增大。假设 $Q = [0.1, 0.2, 0.3, 0.4]$，$K = [0.1, 0.2, 0.3, 0.4]$，点积为 $0.01 + 0.04 + 0.09 + 0.16 = 0.30$。但当 $d_k = 1280$（如 GPT-3），点积的方差约为 1280，会把 softmax 推入梯度消失的区域。\n$\\sqrt{d_k}$ 缩放使得无论维度多大，方差都保持在约 1，确保训练过程中 softmax 梯度稳定。\n多头注意力 不是只做一个注意力函数，而是将 $Q, K, V$ 投影到 $h$ 个不同的子空间并行计算：\n$$\\text{MultiHead}(Q, K, V) = \\text{Concat}(\\text{head}_1, \\dots, \\text{head}_h) W^O$$\n以 $d_{\\text{model}} = 512$、$h = 8$ 为例，每个头处理 $d_k = 512 / 8 = 64$ 维。这允许模型同时关注来自不同表示子空间的信息。\n为什么要多个头？ 不同的头学习不同的模式：有的头捕获语法关系，有的关注语义关联。研究（Clark et al., 2019）表明某些头专门做共指消解，另一些头专注于关注前一个 token。\n数值计算完整示例 继续上面的计算。$d_k = 4$，缩放因子 $\\sqrt{4} = 2$：\nscores = QK^T / 2 = [1.07, 0.82, 1.0] / 2 = [0.535, 0.410, 0.500] weights = softmax(scores) = [0.349, 0.310, 0.341] output = weights @ V = 0.349*[1,0] + 0.310*[0,1] + 0.341*[0.5,0.5] = [0.349+0+0.171, 0+0.310+0.171] = [0.520, 0.481] 实现代码 import torch import torch.nn.functional as F def scaled_dot_product_attention(Q, K, V, mask=None): \u0026#34;\u0026#34;\u0026#34;缩放点积注意力 Args: Q: Query tensor, shape (..., seq_len_q, d_k) K: Key tensor, shape (..., seq_len_k, d_k) V: Value tensor, shape (..., seq_len_k, d_v) mask: 可选，用于 decoder 的因果遮罩 Returns: output: 注意力输出, shape (..., seq_len_q, d_v) weights: 注意力权重, shape (..., seq_len_q, seq_len_k) \u0026#34;\u0026#34;\u0026#34; d_k = Q.size(-1) # Step 1: 计算注意力分数 scores = torch.matmul(Q, K.transpose(-2, -1)) / (d_k ** 0.5) # Step 2: 应用遮罩（如果有） if mask is not None: scores = scores.masked_fill(mask == 0, -1e9) # Step 3: softmax 归一化 weights = F.softmax(scores, dim=-1) # Step 4: 加权求和 return torch.matmul(weights, V), weights ","permalink":"https://latent-site.pages.dev/posts/2026/07/%E7%90%86%E8%A7%A3%E6%B3%A8%E6%84%8F%E5%8A%9B%E6%9C%BA%E5%88%B6%E4%BB%8E%E7%BC%A9%E6%94%BE%E7%82%B9%E7%A7%AF%E5%88%B0%E5%A4%9A%E5%A4%B4%E6%B3%A8%E6%84%8F%E5%8A%9B/","summary":"深入解析 Transformer 中的注意力机制——从 Query-Key-Value 的直觉出发，经过缩放点积注意力，到多头注意力，配合具体数值示例追踪数据流。","title":"理解注意力机制：从缩放点积到多头注意力"},{"content":"精选项目 AgentForge 轻量级多 Agent 系统框架，支持可配置的通信模式（Peer、Hierarchical、Debate）。\nPython Agent LangGraph · ⭐ 128 · GitHub →\nRAG-Eval-CN 中文 RAG 系统评估工具包，覆盖忠实度、相关性、答案完整度等指标。\nPython RAG Evaluation · ⭐ 85 · GitHub →\nLatent-Viz 交互式 latent space 可视化工具，支持 t-SNE、UMAP、PCA 降维方法。\nPython Visualization Transformers · ⭐ 203 · GitHub →\nLoRA-Bench 系统性基准测试，对比 LoRA 配置（rank、目标模块、学习率）在不同 LLM 家族上的表现。\nPython Fine-tuning Benchmark · ⭐ 67 · GitHub →\n","permalink":"https://latent-site.pages.dev/projects/","summary":"\u003ch2 id=\"精选项目\"\u003e精选项目\u003c/h2\u003e\n\u003ch3 id=\"agentforge\"\u003eAgentForge\u003c/h3\u003e\n\u003cp\u003e轻量级多 Agent 系统框架，支持可配置的通信模式（Peer、Hierarchical、Debate）。\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePython\u003c/code\u003e \u003ccode\u003eAgent\u003c/code\u003e \u003ccode\u003eLangGraph\u003c/code\u003e · ⭐ 128 · \u003ca href=\"https://github.com/\"\u003eGitHub →\u003c/a\u003e\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"rag-eval-cn\"\u003eRAG-Eval-CN\u003c/h3\u003e\n\u003cp\u003e中文 RAG 系统评估工具包，覆盖忠实度、相关性、答案完整度等指标。\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePython\u003c/code\u003e \u003ccode\u003eRAG\u003c/code\u003e \u003ccode\u003eEvaluation\u003c/code\u003e · ⭐ 85 · \u003ca href=\"https://github.com/\"\u003eGitHub →\u003c/a\u003e\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"latent-viz\"\u003eLatent-Viz\u003c/h3\u003e\n\u003cp\u003e交互式 latent space 可视化工具，支持 t-SNE、UMAP、PCA 降维方法。\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePython\u003c/code\u003e \u003ccode\u003eVisualization\u003c/code\u003e \u003ccode\u003eTransformers\u003c/code\u003e · ⭐ 203 · \u003ca href=\"https://github.com/\"\u003eGitHub →\u003c/a\u003e\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"lora-bench\"\u003eLoRA-Bench\u003c/h3\u003e\n\u003cp\u003e系统性基准测试，对比 LoRA 配置（rank、目标模块、学习率）在不同 LLM 家族上的表现。\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePython\u003c/code\u003e \u003ccode\u003eFine-tuning\u003c/code\u003e \u003ccode\u003eBenchmark\u003c/code\u003e · ⭐ 67 · \u003ca href=\"https://github.com/\"\u003eGitHub →\u003c/a\u003e\u003c/p\u003e","title":"项目"},{"content":"ReAct（Reasoning + Acting）是一种让 LLM 交替进行推理和执行动作的范式。这篇文章从零开始搭建一个可用的 Agent。\n什么是 ReAct？ 核心思想：不直接生成最终答案，而是生成一条 Thought → Action → Observation 链。每个 Thought 推理当前状态，每个 Action 调用工具，每个 Observation 提供新信息。\nThought-Action-Observation 循环 问题：东京人口乘以 3 是多少？ Thought 1: 我需要先查找东京人口，然后乘以 3。让我搜索一下。 Action 1: search(\u0026#34;东京人口 2024\u0026#34;) Observation 1: 东京都人口约 1400 万。 Thought 2: 现在我有人口数据（14,000,000），需要乘以 3。 Action 2: calculate(\u0026#34;14000000 * 3\u0026#34;) Observation 2: 42,000,000 Thought 3: 答案已得出。东京人口 × 3 = 4200 万。 Answer: 42,000,000 工具注册 每个工具定义名称、描述和参数 schema：\ntools = { \u0026#34;search\u0026#34;: { \u0026#34;description\u0026#34;: \u0026#34;搜索互联网获取信息\u0026#34;, \u0026#34;parameters\u0026#34;: {\u0026#34;query\u0026#34;: \u0026#34;string - 搜索关键词\u0026#34;}, \u0026#34;fn\u0026#34;: web_search }, \u0026#34;calculate\u0026#34;: { \u0026#34;description\u0026#34;: \u0026#34;计算数学表达式\u0026#34;, \u0026#34;parameters\u0026#34;: {\u0026#34;expression\u0026#34;: \u0026#34;string - 数学表达式\u0026#34;}, \u0026#34;fn\u0026#34;: safe_eval }, \u0026#34;code_execute\u0026#34;: { \u0026#34;description\u0026#34;: \u0026#34;执行 Python 代码片段\u0026#34;, \u0026#34;parameters\u0026#34;: {\u0026#34;code\u0026#34;: \u0026#34;string - Python 代码\u0026#34;}, \u0026#34;fn\u0026#34;: run_python } } Prompt 设计 系统 prompt 是 Agent 表现的关键。它需要清晰定义工具格式并提供良好的推理链示例。一个设计良好的 prompt 在实践中可以将幻觉动作减少约 40%。\nSYSTEM_PROMPT = \u0026#34;\u0026#34;\u0026#34;你是一个能够使用工具解决问题的 Agent。 你可以使用以下工具： {tool_descriptions} 请按以下格式回答： Thought: [你的推理过程] Action: [工具名称] Action Input: [工具参数] Observation: [工具返回结果] ... (重复 Thought/Action/Observation) Thought: 我知道最终答案了 Final Answer: [最终答案] 开始解决问题。 问题：{question}\u0026#34;\u0026#34;\u0026#34; 核心循环实现 def react_loop(question: str, tools: dict, llm, max_steps: int = 6): \u0026#34;\u0026#34;\u0026#34;ReAct 推理循环\u0026#34;\u0026#34;\u0026#34; history = [] for step in range(max_steps): # 构建 prompt prompt = build_prompt(question, tools, history) # LLM 生成推理 response = llm.generate(prompt) # 解析 Thought / Action / Final Answer parsed = parse_response(response) if parsed.get(\u0026#34;final_answer\u0026#34;): return parsed[\u0026#34;final_answer\u0026#34;] # 执行工具 tool_name = parsed[\u0026#34;action\u0026#34;] tool_input = parsed[\u0026#34;action_input\u0026#34;] if tool_name in tools: try: observation = tools[tool_name][\u0026#34;fn\u0026#34;](tool_input) except Exception as e: observation = f\u0026#34;Error: {str(e)}\u0026#34; else: observation = f\u0026#34;Unknown tool: {tool_name}\u0026#34; # 记录历史 history.append({ \u0026#34;thought\u0026#34;: parsed[\u0026#34;thought\u0026#34;], \u0026#34;action\u0026#34;: tool_name, \u0026#34;action_input\u0026#34;: tool_input, \u0026#34;observation\u0026#34;: observation }) return \u0026#34;达到最大步数限制，未能得出答案\u0026#34; 错误恢复 当工具调用失败时，Agent 应将错误信息作为 Observation 接收并推理如何恢复——而不是盲目重试。这正是推理步骤的价值所在：模型可以分析为什么失败了，然后尝试不同的方法。\n例如搜索超时：\nObservation: Error: search timeout after 10s Thought 2: 搜索超时了。让我换一种方式，也许可以直接用已有知识回答， 或者用更简短的搜索词重试。 Action 2: search(\u0026#34;东京 人口\u0026#34;) ","permalink":"https://latent-site.pages.dev/posts/2026/07/%E4%BB%8E%E9%9B%B6%E6%9E%84%E5%BB%BA-react-agent%E5%B7%A5%E5%85%B7%E8%B0%83%E7%94%A8%E4%B8%8E%E5%A4%9A%E6%AD%A5%E6%8E%A8%E7%90%86/","summary":"实现一个 ReAct 风格的 Agent，支持搜索、计算器、代码执行等工具。覆盖 Thought-Action-Observation 循环、Prompt 工程设计和错误恢复策略。","title":"从零构建 ReAct Agent：工具调用与多步推理"},{"content":"RAG（Retrieval-Augmented Generation）是让 LLM 基于私有知识库回答的核心技术。这篇文章记录搭建完整 RAG pipeline 的实战经验。\n文档切分策略 切分质量直接决定检索质量。两种主流方案：\n递归字符切分 按 \\n\\n → \\n → sentence → word 逐层递归。简单高效，适合大多数场景。推荐配置：\nfrom langchain.text_splitter import RecursiveCharacterTextSplitter splitter = RecursiveCharacterTextSplitter( chunk_size=512, # 每块最大字符数 chunk_overlap=64, # 块间重叠字符数 separators=[\u0026#34;\\n\\n\u0026#34;, \u0026#34;\\n\u0026#34;, \u0026#34;。\u0026#34;, \u0026#34;，\u0026#34;, \u0026#34; \u0026#34;] ) chunks = splitter.split_text(document) 语义切分 用 embedding 相似度判断语义断点。效果更好但成本高 3-5 倍。适合法律、医学等精度要求高的领域。\n实测数据：在内部技术文档 QA 任务上，语义切分比递归切分的 Answer Accuracy 高 4.2%，但索引时间增加了 3.7 倍。\nEmbedding 模型选型 当前（2026 年）MTEB 基准上表现最好的开源 embedding 模型：\n模型 维度 多语言 推荐场景 BGE-M3 1024 支持 中文场景首选，多语言+多粒度 GTE-Qwen2 1024 支持 通用场景，性能优异 Jina-Embeddings-v3 1024 支持 长文本友好（8192 tokens） 中文场景推荐 BGE-M3，兼顾多语言和检索质量。\n向量数据库对比 小规模（\u0026lt;100K docs） → Chroma（零配置，嵌入式） 中等规模（100K-1M） → Milvus（功能全，可分布式） 大规模（\u0026gt;1M） → Pinecone / Weaviate（托管服务） 不想运维 → Pinecone / Supabase pgvector 检索与重排 推荐两阶段检索：\n# Stage 1: 粗召回 — hybrid search（向量 + BM25） candidates = hybrid_search(query, top_k=20) # Stage 2: 精排 — cross-encoder reranker reranked = reranker.rerank(query, candidates, top_k=5) 实测 reranker 能将 Top-5 准确率提升 8-12%。推荐模型：BGE-Reranker-v2-M3。\nPrompt 注入 将检索到的 context 注入 prompt 时的最佳实践：\ndef build_rag_prompt(query: str, contexts: list[str]) -\u0026gt; str: refs = \u0026#34;\\n\\n\u0026#34;.join( f\u0026#34;[{i+1}] {ctx}\u0026#34; for i, ctx in enumerate(contexts) ) return f\u0026#34;\u0026#34;\u0026#34;基于以下参考资料回答问题。如果资料中没有相关信息，请明确说明。 ## 参考资料 {refs} ## 问题 {query} ## 要求 - 引用来源编号（如 [1]、[2]） - 如果多个来源有冲突信息，列出所有观点 - 不要编造资料中没有的内容\u0026#34;\u0026#34;\u0026#34; 关键原则：按相关性排序 context、标注来源编号、设置 token 上限避免 overflow。\n","permalink":"https://latent-site.pages.dev/posts/2026/07/rag-pipeline-%E5%AE%9E%E6%88%98%E4%BB%8E%E6%96%87%E6%A1%A3%E5%88%87%E5%88%86%E5%88%B0%E6%A3%80%E7%B4%A2%E5%A2%9E%E5%BC%BA%E7%9A%84%E5%AE%8C%E6%95%B4%E9%93%BE%E8%B7%AF/","summary":"搭建生产级 RAG 系统的全流程：文档切分策略、Embedding 模型选型、向量数据库对比、检索重排，以及 Prompt 注入的最佳实践。","title":"RAG Pipeline 实战：从文档切分到检索增强的完整链路"}]