LangChain+LangGraph+RAG+MCP 一次讲清:从编排到多Agent协同的资源指南

发布时间:2026/9/8 1:52:35

LangChain+LangGraph+RAG+MCP 一次讲清:从编排到多Agent协同的资源指南
2026 年再看 LangChain很多人还是会被一套教程劝退目录从 Prompt 讲到 Memory再讲到 Agent结果到 LangGraph 时已经晕了最后看到 MCP 更是一脸懵。其实 LangChain 本身并不难难的是你把它当成了“一个框架”而不是“一套可以自由拆装的组件”。这次我们把 LangChain、LangGraph、RAG 和 MCP 放在同一条学习路径里从为什么需要它们开始到环境准备、链路搭建、多 Agent 协同、知识库检索、MCP 工具接入、API 封装和批量任务一次讲完。核心结论先放在前面LangChain 是编排层负责把模型、提示词、解析器、工具串起来LangGraph 是状态化工作流引擎适合做 Agent 和多 Agent 协同解决 LangChain 早期版本在“循环、分支、人工介入”上不够直观的问题RAG 是让模型使用你私有知识的检索增强方案MCP 是统一工具和数据源的开放协议让 Agent 不用给每个工具单独写适配器。这套东西不是“按顺序读文档就能理解”的必须亲手把链路搭起来观察每一步的输入输出才能真正看懂。下面内容全部围绕“能不能用、怎么启动、怎么验证、遇到问题怎么查”来展开。文件结构、依赖版本、模型来源我会用通用写法给出具体到你本机时请以项目实际版本为准。1. 核心能力速览能力项说明项目类型LLM 应用编排框架、Agent 工作流引擎、检索增强方案、模型工具接入协议生态维护方LangChain 开源社区与 LangChain Inc.MCP 由相关开放协议社区推动主要功能提示词管理、模型调用、输出解析、工具调用、RAG 检索、多 Agent 协同、外部数据接入硬件要求LangChain/LangGraph 本体是 Python 库不直接消耗显存显存主要由你选择的 LLM 推理后端决定本地模型支持支持 Ollama、vLLM、llama.cpp、Transformers 等本地推理后端也支持 OpenAI、Azure OpenAI 等云 APICPU 推理可以但本地 LLM 的推理速度取决于模型大小、量化方式和机器性能启动方式代码库内运行、CLI 脚本、FastAPI 服务、批量任务脚本等API 接口由开发者自行封装可用 FastAPI/Flask 等将工作流暴露为 REST 服务批量任务支持建议用队列、日志、重试机制管理适用场景企业知识库问答、自动化 Agent、客服工单处理、内容生产、数据处理流水线从这张表能看出来这套技术栈的核心价值不是某一个模型而是“把模型和工具编排成可用应用”。学习重点也应该放在链路设计和工作流控制上而不是纠结某个 API 的写法。2. 适用场景与使用边界2.1 适合谁、解决什么问题LangChain LangGraph 最适合四类人。第一类是后端工程师想把 LLM 接入现有业务系统。第二类是算法工程师要在本地跑通 RAG 知识库验证检索准确率。第三类是产品和技术负责人需要快速把提示词、工具调用、多 Agent 协作做成可演示的 Demo。第四类是刚入门 LLM 开发的同学想找一条“从 prompt 到生产部署”的完整路线。这套技术栈能解决的核心问题包括模型输出不稳定时如何用提示词和结构化输出兜底多个工具需要被 Agent 调用时如何统一管理一个复杂任务需要拆成多个步骤、多个 Agent 协作时如何控制状态流转私有知识如何在不重新训练模型的前提下注入到问答流程中。2.2 不适合什么不要在下面这些情况里强行用它。如果你的业务只是一个简单的“调用一次模型、返回一段文本”直接用模型 SDK 就够了。如果公司要求所有代码零第三方依赖、必须在离线物理隔离环境运行你需要仔细评估 LangChain 及其依赖的体积。如果你完全不需要工具调用、检索和状态流转那 LangGraph 也是多余的一层。2.3 版权、隐私与安全边界这一点必须单独说清楚。RAG 知识库中涉及的企业内部资料、用户隐私数据、他人版权内容必须在获得相关授权后才能使用。Agent 调用外部工具时会把你传入的上下文发送给模型供应商或其他服务涉及敏感信息时必须做脱敏和权限控制。人脸、声音、身份类数据的处理更要有明确的授权证明和合规流程。所有接法都应该先在内网或测试环境验证确认输出和调用行为都在预期范围内再考虑上线。3. LangChain LangGraph 本地部署环境准备3.1 运行环境通用检查清单检查项建议操作系统Windows 10/11、Ubuntu 20.04 及以上、macOS 均可Python 版本建议使用 3.10 及以上越低版本的兼容性问题越多包管理工具pip 或 uv创建独立虚拟环境避免污染系统 Python模型来源云端 API Key 或本地 Ollama/vLLM 服务网络安装 Python 包需要正常访问 PyPI调用云模型需要对应 API 地址可访问磁盘LangChain 核心依赖数百 MB模型文件另算做 RAG 还要给向量库留空间没有材料依据时不要照抄某个固定版本号。正确做法是建一个虚拟环境安装时要锁定版本跑通之后再决定是否升级。最忌讳的是全局环境下一次装十几个包版本冲突后完全无法排查。3.2 创建项目目录mkdir langchain-agent-demo cd langchain-agent-demo python -m venv venvWindows 激活venv\Scripts\activateLinux / macOS 激活source venv/bin/activate激活后终端提示符前面会出现(venv)之后所有安装命令都在这个环境里执行。4. 安装部署与启动方式4.1 安装核心依赖LangChain 生态采用分包维护按需安装会省很多事。下面给出一套常见的安装组合具体包名和版本以你当前查阅到的官方文档为准pip install langchain langchain-core langchain-community pip install langchain-openai langchain-chroma langchain-text-splitters pip install langgraph langgraph-checkpoint pip install fastapi uvicorn如果你想用本地模型还需要安装 Ollama 或 vLLM 对应的适配包pip install langchain-ollama安装完成后验证一下版本pip show langchain langgraph langchain-openai langchain-ollama不需要把langchain全家桶都装上。核心链路只需要langchain-core配合具体供应商包模型供应商包、向量库包、文本切分包都是独立安装的。4.2 配置模型访问使用 OpenAI 兼容接口时推荐放到环境变量里不要写死在代码中。export OPENAI_API_KEY你的API Key export OPENAI_BASE_URL你的接口地址本地模型使用 Ollama 时先保证 Ollama 服务已经在后台运行ollama pull qwen2.5:7b ollama serve不需要把 API Key 写进代码仓库。写一个.env.example文件让同事复制成.env比直接硬编码安全。4.3 第一个可运行的程序先写一个最小链路验证环境是否正常。不要一上来就组装 Agent先确保“模型能调用、输出能拿到”。from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage model ChatOpenAI( modelgpt-4o-mini, temperature0, ) response model.invoke([HumanMessage(content请用一句话说明 LangChain 的核心作用)]) print(response.content)运行方式python 01_basic_llm.py成功标准控制台输出一句中文回答。如果报错先检查 API Key、接口地址、模型名三个变量。如果你的模型走 Ollama只需要替换一下模型实例from langchain_ollama import ChatOllama model ChatOllama(modelqwen2.5:7b)5. LangChain 基础链路提示词、模型、输出解析5.1 先会用链式写法LangChain 最常用的表达方式是管道符|。它的含义是把一个组件输出传给下一个组件。from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser from langchain_openai import ChatOpenAI prompt ChatPromptTemplate.from_messages([ (system, 你是一名资深的技术文档工程师回答要简洁、准确。), (human, {question}), ]) model ChatOpenAI(modelgpt-4o-mini, temperature0) parser StrOutputParser() chain prompt | model | parser result chain.invoke({question: 什么是 RAG 检索增强}) print(result)这段代码做了三件事把用户问题套进系统提示词模板把完整消息列表送给模型把模型输出的格式手动解析成字符串。链路中的每一环都可以被替换或打断调试。5.2 结构化输出生产环境中很多场景不希望模型返回自由文本而是返回 JSON 结构方便下游程序直接解析。可以用 LangChain 的with_structured_output让模型按指定结构输出。from pydantic import BaseModel, Field from langchain_openai import ChatOpenAI class RAGAnswer(BaseModel): answer: str Field(description最终回答) source_docs: list[str] Field(description引用文档列表) model ChatOpenAI(modelgpt-4o-mini, temperature0) structured_llm model.with_structured_output(RAGAnswer) result structured_llm.invoke(请回答 LangGraph 和 LangChain 的区别并给出推荐场景) print(result.answer) print(result.source_docs)这一步很重要它能避免后面 Agent 调用工具时返回一堆不可解析的文本。RAG 知识库系统里结构化输出还可以直接对接数据库字段。6. LangGraph 多 Agent 协同工作流6.1 LangGraph 和 LangChain 的区别很多人搞不清这两个的关系。LangChain 强调的是“有向无环”的组件链写起来像流水线。LangGraph 强调的是“状态化图”允许循环、分支、人工审核、超时回退。Agent 的典型行为是“调用工具、观察结果、再决定下一步”这是一个循环用普通链式代码很难写清楚用 LangGraph 的节点和边来表达就非常自然。6.2 一个最简单的 Agent 图下面示例构造两个节点一个任务是调用工具获取信息另一个任务是质量和格式审核。如果质量审核通过流程结束如果不通过回到调用节点重新生成。from typing import TypedDict, Literal from langgraph.graph import StateGraph, START, END class AgentState(TypedDict): question: str draft: str final_answer: str def call_tool(state: AgentState): # 这里替换成真实的搜索或文档查询 draft f针对问题「{state[question]}」的草稿结果 return {draft: draft} def review(state: AgentState): # 用规则或模型判断质量这里简化成始终通过 return {final_answer: state[draft].replace(草稿结果, 审核结果)} def should_continue(state: AgentState) - Literal[review, call_tool]: if 审核结果 in state.get(final_answer, ): return END return call_tool graph StateGraph(AgentState) graph.add_node(call_tool, call_tool) graph.add_node(review, review) graph.add_edge(START, call_tool) graph.add_edge(call_tool, review) graph.add_conditional_edges(review, should_continue, { review: call_tool, call_tool: END, }) app graph.compile() result app.invoke({question: LangChain 和 LangGraph 怎么选}) print(result[final_answer])这个示例非常小但结构是完整的。真实项目里call_tool会变成多个节点比如“搜索节点”“代码执行节点”“数据库查询节点”而review可能是一个人机审核节点由人工确认后再返回。6.3 多 Agent 协同多 Agent 协同不是简单地把一堆 Agent 放进同一个文件。常见设计有两种一种是“主管-下属”模式一个主 Agent 负责拆解任务并分发给多个子 Agent另一种是“流水线审核”模式多个 Agent 各自负责一段最后汇总。from langgraph.graph import StateGraph, START, END def planner(state): plan [检索资料, 撰写初稿, 合规审查] return {plan: plan} def retriever(state): return {retrieved: 检索到的知识片段} def writer(state): return {content: 基于检索结果生成的初稿} def reviewer(state): return {content: 合规审查后的最终内容, approved: True}节点之间的数据依赖建议全部通过 state 传递不要用全局变量。全局变量在多 Agent 并发执行时会互相污染很难排查。6.4 持久化和人工介入LangGraph 的 checkpoint 机制可以把每一步状态保存下来。遇到中断时可以从某个节点恢复。对生产级 Agent 来说这是比“一句 prompt 搞定”更靠谱的方案。from langgraph.checkpoint.memory import MemorySaver checkpointer MemorySaver() app graph.compile(checkpointercheckpointer) config {configurable: {thread_id: agent-task-001}} result app.invoke({question: 生成一份项目周报}, configconfig)持久化作用在于任务中途失败可以读取历史状态继续执行需要人工审核时可以中断流程等审核通过后恢复。实际使用时可以把MemorySaver换成数据库后端比如 PostgreSQL 或 Redis具体以项目版本支持为准。7. RAG 检索增强实战7.1 RAG 的核心流程RAG 的标准流程是加载文档、切分文本、向量化、存入向量库、根据用户问题检索、把检索结果拼进提示词、交给模型生成答案。很多实现方案“差”不是因为模型不好而是文档切分和检索召回做得很粗糙。from langchain_community.document_loaders import TextLoader from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_huggingface import HuggingFaceEmbeddings from langchain_chroma import Chroma loader TextLoader(./docs/knowledge.txt, encodingutf-8) documents loader.load() splitter RecursiveCharacterTextSplitter( chunk_size500, chunk_overlap50, ) chunks splitter.split_documents(documents) embeddings HuggingFaceEmbeddings(model_nameBAAI/bge-small-zh-v1.5) vectorstore Chroma.from_documents( documentschunks, embeddingembeddings, persist_directory./chroma_db, ) retriever vectorstore.as_retriever( search_typesimilarity, search_kwargs{k: 4} )这套流程中chunk_size和chunk_overlap是最需要调的。文本太长会稀释检索相关性文本太短又会丢失上下文。一般从 300 到 800 字符开始实验再根据测试集上的召回效果调整。7.2 检索后生成检索本身不是目标把检索结果正确用起来才是目标。下面的提示词模板告诉模型优先使用参考文档不要编造没有依据的内容。from langchain_core.prompts import ChatPromptTemplate from langchain_openai import ChatOpenAI from langchain_core.output_parsers import StrOutputParser prompt ChatPromptTemplate.from_messages([ (system, 你是一个知识库问答助手。只能依据给定的参考资料回答资料中找不到时明确回答不知道。), (human, 参考资料\n{context}\n\n问题{question}), ]) model ChatOpenAI(modelgpt-4o-mini, temperature0) parser StrOutputParser() chain prompt | model | parser question 什么是 LangGraph 中的 StateGraph docs retriever.invoke(question) context \n.join([doc.page_content for doc in docs]) answer chain.invoke({context: context, question: question}) print(answer)调试时建议在打印答案前先把docs打印出来看看检索到的前 4 篇文档是否真的与问题相关。如果召回内容不对调整切分方式和检索参数比调整提示词更有效。7.3 Dense Vector Search 与 Agentic RAG热词里经常同时出现rag知识库和rag中dense vector search。Dense Vector Search 是稠密向量检索它把文本编码成高维向量用向量相似度召回结果。RAG 知识库项目里一般先做密集向量检索再用重排序模型对召回结果精排最后才喂给生成模型。Agentic RAG 更进一步不再让 RAG 链路一次性把检索结果交给大模型而是让 Agent 自己决定“要不要检索、用什么工具检索、检索几轮、检索结果够不够、是否还需要查询数据库”。也就是说RAG 从一段固定流程变成被 Agent 调用的能力。它的优点是面对复杂问题时更灵活缺点是链路变长调试难度也会变大。7.4 RAG 测评怎么做网上经常有人问rag测评怎么做。建议从四个维度做检索命中率看真实问题对应的关键段落是否出现在召回结果前三名答案准确率看最终回答是否与参考资料一致拒答率看资料中没有答案时模型是否胡说响应耗时看一个完整问答从提交到返回需要多久。把这四个指标做成测试脚本每次修改切分参数或检索策略后都要重跑而不是靠感觉判断效果。8. MCP 协议与工具接入8.1 MCP 是什么MCP全称 Model Context Protocol是模型上下文协议目标是统一 AI 应用与外部工具、数据源之间的调用规范。以前接一个外部工具要写一套适配代码不同工具之间很难复用。MCP 出现后工具提供方把能力封装成 MCP ServerAI 应用侧用 MCP Client 连接这样一套客户端代码就能接多种能力。对 LangChain 用户来说MCP 的价值是降低工具接入成本。你的 Agent 如果通过 MCP 去连接数据源就不再需要为每一个数据源单独维护加密、鉴权和参数格式而是统一走协议层。8.2 一个 MCP 客户端的通用调用模板MCP 的 SDK 仍在迭代下面模板只用于理解调用过程不保证直接复制运行。import asyncio async def query_mcp_tool(server_command, server_args, tool_name, arguments): # 伪代码表示流程连接服务 - 初始化会话 - 调用工具 - 返回结果 async with create_mcp_client(server_command, server_args) as session: tools await session.list_tools() print(f可用工具{len(tools)}) result await session.call_tool(tool_name, arguments) return result连接之前请先确认 MCP Server 的启动命令和工具列表。调试时可以直接用命令行工具列出来明确当前服务端暴露了哪些工具再在 Agent 中引用。8.3 在 LangGraph Agent 中接入 MCP更务实的写法是先把 MCP 工具包装成 LangChain 的tool再挂到 LangGraph 的 Agent 节点上让模型根据任务自动选择是否调用。这样 LangGraph 的价值和 MCP 的价值都能发挥出来。from langchain_core.tools import tool tool def query_doc_via_mcp(question: str) - str: 通过 MCP 服务查询文档库 # 替换为真实 MCP 调用逻辑 return 文档查询结果接入后先跑一个单工具测试确认模型能正确识别“需要调用工具”的场景。如果模型始终不触发工具说明工具描述不够清晰或者模型版本对工具调用的支持不够稳定。8.4 几个常见检索热词的实际对应关系网上搜到的蓝湖mcp、mastergo mcp、unity mcp、cocoscreator mcp、matlab mcp等本质都是“某个软件提供 MCP Server让 AI Agent 可以直接操作该软件或读取其数据”。对开发者而言重点不是背品牌而是掌握一个通用能力面对任何 MCP Server你都能列出工具列表、查看参数、测试调用、接入 Agent。这也是面试官真正想考察的点。9. 接口 API 与批量任务9.1 用 FastAPI 封装工作流LangChain 和 LangGraph 本身不带 Web 服务但你可以用 FastAPI 把工作流暴露成接口。下面示例把一条“RAG 问答链路”封装成 POST 接口。from fastapi import FastAPI from pydantic import BaseModel app FastAPI(titleRAG Agent API) class QueryRequest(BaseModel): question: str k: int 4 class QueryResponse(BaseModel): answer: str sources: list[str] app.post(/api/query, response_modelQueryResponse) def query(request: QueryRequest): # 这里替换成真实的 RAG 调用逻辑 answer 这是测试回答 sources [doc1.txt, doc2.txt] return QueryResponse(answeranswer, sourcessources)启动服务uvicorn main:app --host 127.0.0.1 --port 8000调用接口import requests url http://127.0.0.1:8000/api/query payload { question: LangGraph 支持多轮对话吗, k: 4 } response requests.post(url, jsonpayload, timeout120) print(response.status_code) print(response.json())接口封装要尽早做。哪怕你目前只是本地调试用接口调用也比在 Jupyter Notebook 里点运行更接近真实场景也方便前端或其他服务直接对接。9.2 批量任务设计批量任务的核心是“可恢复、可观测”。简单做法是把待处理问题放在一个 JSONL 或数据库表里一行一条逐条调用 RAG 链路把结果写回。[ {id: 1, question: LangChain 的核心组件有哪些}, {id: 2, question: LangGraph 如何实现多 Agent 协同}, {id: 3, question: MCP 协议解决了什么问题} ]处理脚本要保持“单向推进”读取任务、调用、写入结果、记录日志。每一条任务都输出成功或失败标记失败时保留原始输入方便重跑。python batch_process.py --input tasks.jsonl --output results.jsonl --max-retry 3批量任务最容易踩的坑是某条问题触发上下文超长、某条问题触发工具超时导致整个循环卡死。没有日志就没有排查入口。建议在每个任务之间加 try-except并在循环体里打印任务 id 和耗时。10. 资源占用与性能观察10.1 谁在消耗资源很多人问“跑 LangChain Agent 需要多少显存”。这里必须拆分清楚LangChain 和 LangGraph 是纯 Python 编排层本身几乎不占显存真正吃资源的是 LLM 推理服务、Embedding 模型和向量检索。显存占用取决于三个变量模型大小、量化方式、上下文长度。模型从 1.5B 到 70B显存需求可能从 2GB 到 40GB 以上所以不存在一个固定答案。更准确的做法是用你选择的具体模型在实际环境里跑一次用nvidia-smi观察峰值显存再根据业务场景决定是否增加上下文或并发。10.2 性能观察方法观察对象方法判断标准模型推理显存nvidia-smi动态查看峰值不超显卡可用显存接口响应耗时FastAPI 日志或time稳定前提下尽量减小批量任务吞吐记录每批耗时观察是否有线性增长向量检索耗时在检索函数前后打点超过数百毫秒要排查索引质量10.3 降低占用与避免踩坑降低显存占用的思路包括优先使用 4bit 或 8bit 量化模型缩短送入模型的输入长度RAG 场景下控制召回文档数量用流式输出减少等待体验如果并发压力大考虑在模型推理层做并发限制而不要在 LangChain 层无限制地开线程。端口冲突也是常见问题多个 FastAPI 服务同时启动时记得指定不同端口或者用--port 0让系统自动分配临时端口。11. 常见问题与排查方法问题现象可能原因排查方式解决方案安装 langchain 时报依赖冲突全局 Python 环境混乱检查pip list新建虚拟环境使用venv或uv隔离调用云端模型报 401/403API Key 错误或接口地址不对打印环境变量用 curl 直接测试模型接口重新配置.env调用本地 Ollama 超时Ollama 服务未启动或模型未下载执行ollama list检查模型启动ollama serve并ollama pullLangGraph 编译时报节点不存在图定义和边定义不一致打印graph.get_graph()结构检查节点名拼写检索结果与问题无关文本切分不合理或向量模型不合适打印召回文档片段调整 chunk_size、chunk_overlap 或换 Embedding 模型批量任务中途卡住单条输入触发接口超时查看日志最后一条记录加超时和重试机制FastAPI 端口被占用之前服务未关闭检查端口占用换端口或杀掉旧进程长文本输入报 token 超限模型上下文窗口不够统计输入 token 长度减少召回文档数或换更长上下文模型这里列的问题集中在前三层环境、模型调用、工作流定义。大多数报错都不是 LangChain 本身的问题而是模型供应商接口或本机环境配置问题。遇到报错先读最后 10 行日志不要看到几百行 traceback 就直接重装环境。12. 最佳实践与使用建议12.1 工程化建议第一次跑通时把所有依赖版本记录到一个requirements.txt或pyproject.toml中。升级 LangChain 版本前先跑一遍现有测试用例确认核心链路没有回归。模型名称、API 地址、向量库路径不要硬编码在代码里统一放到配置文件中。模型文件、输入素材、输出结果分目录管理。最小可运行配置值得长期保留。一个纯文本加载、向量库检索、模型生成的最小 RAG 链路不要随意删。后续遇到复杂问题可以用它做回归对比判断是新改动引起的还是环境问题。12.2 Agent 开发建议Agent 开发的难度不在“调用几个工具”而在“控制 Agent 什么时候该调用工具、什么时候该停止”。建议先给 Agent 限制最多执行步骤避免死循环。生产环境必须接入人工审核节点尤其是写邮件、发消息、删除数据这类高风险动作。工具返回结果要做结构化解析不能相信模型能自动读懂任意格式的返回内容。LangGraph 的调试要从 state 入手。每一步节点执行后打印 state 的变化看数据是否按预期流转。多 Agent 协同项目最难排查的问题是“某个节点改了共享状态导致其他节点异常”所以 state 中尽量只放当前任务必要的数据减少跨节点耦合。12.3 RAG 知识库落地建议RAG 知识库项目最容易被低估的是数据清洗。文档中的页眉页脚、无效字符、重复段落都会影响切分质量。给知识库做检索质量评估并用一组固定问题跑回归是项目上线前的必要条件。涉及企业内部数据时要确认数据使用范围避免把敏感信息通过接口发送到不受控的外部服务。对外商用或公开发布前还要对所有输出做一轮人工复核防止模型生成看似合理但实际错误的回答。12.4 MCP 接入建议接入 MCP Server 前先确认这个服务是否真正解决了你的问题。很多场景下直接调用一个函数比启动一个 MCP Server 更轻量。MCP 的价值在于标准化和复用适合有多个工具或数据源需要接入的场景。接入后不要只测一次成功用例还要测试工具不可用、返回超时、返回异常数据时的表现。Agent 在工具失败时应该能优雅地告知用户而不是输出一段莫名其妙的报错。13. 总结与下一步这套技术栈里最值得优先花时间的是 LangGraph 的状态化思维。LangChain 的组件看得再多不如亲手把一个带工具调用的 Agent 跑通。RAG 和 MCP 都应该挂在 Agent 上作为能力而不是独立地学完就忘。我的建议是先验证基础模型调用再完成一个带prompt | model | parser的最小链路接着用 LangGraph 实现一个“调用工具 - 结果审核 - 循环回退”的小 Agent然后往里面挂 RAG 知识库和 MCP 工具最后用 FastAPI 封装成服务。每一步都用固定测试集验证跑通后再进入下一步。最容易踩的坑集中在三处依赖版本混乱、模型接口配置错误、绕过 state 直接共享变量导致多 Agent 状态污染。遇到问题不要急着改代码先确认模型接口是否能单独调通再检查工作流状态。后续你可以继续扩展的方向包括接入 SQL 数据库作为另一类工具让 Agent 具备动态查询能力加入重排序模型提升 RAG 召回精度用更完整的事务型检查点机制把跨请求的长期任务持久化把批量任务队列从简单循环升级到带优先级的消息队列。学习重点不在于背下每一个 API而是把链路拆开、观察每层输入输出形成一套自己的调试方法论。

相关新闻

Python+OpenCV实现电影条形码:逐帧提取平均色与图像拼接全解析

Python+OpenCV实现电影条形码:逐帧提取平均色与图像拼接全解析

2026/9/8 1:52:35

简介:python-movie-barcode 是一套基于 Python 3.6 与 OpenCV 3.4 的电影条形码生成工具,适合视频处理爱好者、计算机视觉初学者以及需要快速分析影片色调的创作者,用于将任意视频按秒提取主色调并拼接为彩色条码,从而直观观察影片…

珍珠钻石画5.0正式发布,排钻软件如何快过AI工作流

珍珠钻石画5.0正式发布,排钻软件如何快过AI工作流

2026/9/8 1:52:35

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

电力系统分析工具箱详解:从潮流计算到暂态稳定与小信号分析

电力系统分析工具箱详解:从潮流计算到暂态稳定与小信号分析

2026/9/8 1:52:35

简介:面向电力系统研究人员、工程师及学生的MATLAB工具箱资源包,聚焦电力网络建模、稳态/动态/暂态仿真与控制策略验证,帮助用户快速掌握PST在发电机、变压器、线路、负荷及保护装置等元件建模中的实际用法,并理解电力系统分析从数…

企业私有化部署AI Agent:从模型到业务系统的完整工程链路

企业私有化部署AI Agent:从模型到业务系统的完整工程链路

2026/9/8 2:52:37

真正决定企业私有化部署 AI Agent 成败的,往往不是模型本身,而是从模型到业务系统之间的那条工程链路。KylinWork 这类企业级 Agent 平台被反复讨论,原因也在于它把单个智能体功能拉宽成了一个可落地的系统:模型推理、智能体编排、…

用Qt写飞机大战:图形视图框架与性能优化的实战复盘

用Qt写飞机大战:图形视图框架与性能优化的实战复盘

2026/9/8 2:52:37

简介:Qt飞机大战游戏.zip是一份基于Qt框架开发的经典空战游戏完整工程,面向正在学习Qt/C的开发者与游戏编程入门者,可帮助理解跨平台GUI应用中的2D绘图、事件处理、信号槽通信等核心机制。包内共223个文件,以105个头文件和32个C源…

从Demo到生产:智能体可审计工程闭环的完整路径

从Demo到生产:智能体可审计工程闭环的完整路径

2026/9/8 2:52:37

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

电商Agent架构设计与生产实践:从工具调用到安全兜底

电商Agent架构设计与生产实践:从工具调用到安全兜底

2026/9/8 2:52:37

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

YU12/I420/IYUV命名纠葛:YUV420P内存布局与实战解析

YU12/I420/IYUV命名纠葛:YUV420P内存布局与实战解析

2026/9/8 2:52:37

1. 一个误导了很多人的命名纠葛 1.1 我亲身经历的一次"彩屏"事故 早几年做视频采集模块时,遇到过一件让我印象深刻的事。设备端编码器输出的数据,SDK文档上清清楚楚写着"IYUV",我按I420的布局去解析,结果画面…

商业HIS精简版部署实战:从解压到跑通门诊链路

商业HIS精简版部署实战:从解压到跑通门诊链路

2026/9/8 2:42:37

简介:面向小型诊所、社区卫生服务中心及医疗信息化初学者而设计,这套简化版商业HIS(医院信息系统)资源包主打快速部署和低门槛使用,用来支撑门诊挂号、病历管理、药品库存、收费结算、医生排班与统计报表等日常业务。压…

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

2026/9/7 20:21:46

本文首发于“生态学者”!从“湿地面积”到“土壤碳密度”:为什么需要重新认识潮汐湿地蓝碳变化?潮汐湿地位于陆地与海洋的交汇地带,包括红树林、盐沼和潮滩,是全球重要的蓝碳生态系统。其土壤能够长期储存大量有机碳&a…

adb抓包

adb抓包

2026/9/7 3:44:24

前言 本文介绍如何通过 tcpdump 在 Android 手机上抓取网络数据包,并在电脑端使用 Wireshark 进行分析。适用于需要排查 App 网络请求、分析接口调用或调试网络问题的开发与测试场景。1. 手机要有 root 权限2. 下载 tcpdump3. adb push C:\Users\zhangkuixun\Downlo…

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

2026/9/7 8:03:37

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战 在云原生基础设施中,容器镜像体积直接决定了服务的部署速度与弹性扩容敏捷度。对于传统的 Go / Java 微服务,镜像体积通常被严格控制在 50MB 到 200MB 以内,拉取镜像只…

芯片良率波动可视化:动画拆解工艺因果,重建客户信任

芯片良率波动可视化:动画拆解工艺因果,重建客户信任

2026/9/8 0:02:30

芯片这个行业有个不太被人摆到台面上、但几乎每天都在发生的场景:客户拿着一条良率曲线截图问你,这批货的良率怎么掉了三个点,是不是工艺出问题了,产生的不良会不会流到他们产线上去。你解释了半天,客户似懂非懂&#…

PyTorch DataLoader参数冲突:sampler与shuffle互斥的根源与正确写法

PyTorch DataLoader参数冲突:sampler与shuffle互斥的根源与正确写法

2026/9/8 0:02:30

ValueError: sampler option is mutually exclusive with shuffle,这个报错我在 PyTorch 的 DataLoader 上至少见过几十次了,而且很有意思的是,它经常不是新手专属——很多写了好几年模型的老手,在从单机改成自定义采样器&#xf…

中国车企再破谣言,GAC吉利零跑获欧盟安全五星

中国车企再破谣言,GAC吉利零跑获欧盟安全五星

2026/9/8 0:02:30

有人可能在网上开着皮卡拍视频,声称中国电动车不仅性能不如美国大排量车型,安全性也堪忧。然而事实恰恰相反,GAC、吉利和零跑最新推出的电动车型在极为严苛的欧盟新车安全评鉴(Euro NCAP)测试中全部斩获满分。就在特斯…

远程协作的工作台整理

远程协作的工作台整理

2026/9/7 3:38:07

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/4 7:42:10

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/6 23:21:51

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…