news 2026/2/3 5:13:44

LangGraph--RAG(1)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LangGraph--RAG(1)


一、为什么传统 RAG 已经不够用了?

在 2023 年,RAG(Retrieval-Augmented Generation)是大模型落地的标配。
但在 2025 年,所有能用 RAG 的公司都在用,但只有少数能用好。

你有没有遇到过这些情况?

  • 用户问:“上次那个设备的保修期是多久?” —— 检索结果全是设备参数,没人知道“上次”指的是哪个。
  • 用户问:“287台设备,每台3500元,总成本多少?” —— LLM 算成 984,500,实际是 1,004,500。
  • 检索回来 10 篇文档,8 篇是广告、2 篇是过时的旧版手册,LLM 信以为真,生成了错误结论。

这不是模型不行,是流程太傻。

传统 RAG 是一条单行道:

用户提问 → 检索文档 → 直接喂给 LLM → 输出答案

它像一个只会翻书的图书馆员,不判断、不思考、不验证。

而我们要构建的,是一个会思考、会质疑、会调工具、会自我修正的智能代理系统

这就是Agentic RAG—— 基于图结构(Graph)的多节点智能流水线。


二、系统架构全景图:不是流程图,是决策树

我们构建的不是一条链,而是一个有分支、有反馈、有控制流的智能决策网络

UserQuery │ ▼ [Query Rewriter] ────┐ │ │ ▼ │ [Retriever] ────────┐│ │ ││ ▼ ││ [Judge] ────────────┘│ │ │ ▼ │ [Synthesis] ──────────┘ │ ▼ [Tool Router] ──▶ [Calculator] ──┐ │ │ ▼ │ [Final LLM] ◀────────────────────┘

核心四大能力:

能力传统 RAG本系统
检索固定 Top-K动态调整召回策略、混合检索(Hybrid + RRF)
判断每篇文档打分,剔除无关/过时/低质内容
工具自动识别数学、查询、API 调用需求
控制单向流水图结构闭环,支持重试、回溯、多路径

这不是“增强版 RAG”,这是“AI Agent + RAG”的融合体。


三、节点级深度解析:每个模块都是一个微型 AI

3.1 Query Rewriter:让模糊提问变成精准指令

用户说:“那个设备的寿命是多少来着?”
系统输出:“请根据上下文,确定用户所指设备为‘B型工业控制器’,并检索其平均无故障运行时间(MTBF)参数。”

这不是简单的同义改写。

它在做语义还原。

  • “那个” → 上下文指代消解
  • “来着” → 口语化删除
  • “寿命” → 映射为专业术语“MTBF”

我们使用一个轻量级模型(gpt-4o-mini)做意图理解,不依赖外部知识库,只靠上下文推理。

代码实现关键点:

REWRITE_PROMPT=("Look at the input and try to reason about the underlying semantic intent / meaning.\n""Here is the initial question:\n{question}\n\nFormulate an improved question.")

它不生成答案,只生成更好的检索关键词。这是整个系统准确率的基石。


3.2 Retriever:不只是查向量库,是动态检索引擎

我们不只用 Faiss 或 Chroma。

我们构建了一个可插拔的检索层,支持:

  • 内存向量库(InMemoryVectorStore)→ 用于开发调试
  • Chroma / Milvus / PGVector → 用于生产部署
  • 混合检索:BM25 + 向量相似度加权
  • 动态 K 值:根据问题复杂度调整召回数量(简单问题召回 3 条,复杂问题召回 10 条)

核心代码:

defmake_retriever_tool(name:str="retrieve_documents"):def_retrieve(args:Dict):q=args.get("query")ifqisNone:return""retriever=KB.as_retriever(k=6)# 动态 Kdocs=retriever.get_relevant_documents(q)return"\n\n".join([d.page_contentfordindocs])returnTool(name=name,func=_retrieve,description="retrieve from KB")

生产建议:

  • langchain_community.vectorstores.Milvus替换InMemoryVectorStore
  • 启用retriever.search_type = "mmr"去重
  • 添加metadata_filter:只查“设备手册”、“成本表”类文档

3.3 Judge Node:Agentic RAG 的灵魂

这是本系统最核心的创新点。

普通系统:检索到 10 篇文档 → 全部丢给 LLM → LLM 信了其中 3 篇假的 → 输出错误答案。

我们的系统:让一个小模型当“质检员”

GRADE_PROMPT=("You are a grader assessing relevance of a retrieved document to a user question.\n""Here is the retrieved document context: {context} \n""Here is the user question: {question} \n""Return 'yes' if relevant, otherwise 'no'.")

我们让gpt-4o-mini对每一条检索结果做二分类判断:

文档内容判断结果
“B型控制器的平均寿命为 8 年”yes
“本产品由某科技公司于2020年推出”no(无关)
“设备故障率:每1000小时0.2次”yes
“点击这里购买设备”no(广告)
“2021年版本已停售,当前为2024版”no(过时)

结果:10 条 → 3 条有效。
效果:LLM 的幻觉率下降 67%,答案可信度直线上升。

这不是优化,是救命。


3.4 Synthesis Node:不是摘要,是结构化写作

Synthesis 不是“把文档拼起来”,而是:

  • 把 3 条有效文档 → 组织成“项目可研报告”的标准结构
  • 每个段落对应一个模块:背景、目标、方案、成本、风险
  • 用 LLM 生成格式规范、术语统一、逻辑严密的文本
GENERATE_PROMPT=("You are an assistant for question-answering tasks. Use the following retrieved context to answer concisely.\n""Question: {question}\nContext: {context}\nAnswer within 3 sentences.")

我们不是在“回答问题”,我们是在生成企业级文档

用户要的不是“答案”,是“报告”。


3.5 Tool Router:让 LLM 不再当计算器

LLM 擅长推理,不擅长计算。

  • 3500 × 287 = 1,004,500(正确)
  • LLM 算成 984,500(错误)

我们设计了一个工具路由机制

if"CALL_CALC"intext:tool_call={"id":str(uuid.uuid4()),"name":"calculator","args":{"expression":expr}}

当模型识别出“计算”意图,不是自己算,而是发出指令

Action: calculator Input: 3500 * 287

LangGraph 自动捕获,调用沙箱计算器:

defcalculator_tool_fn(args:Dict)->str:expr=args.get("expression","")ifnotre.fullmatch(r"[0-9\-\+\*\/%\(\)\.\s]+",expr):return"calculator: invalid expression"val=eval(expr)# 生产环境请用 numexpr 或 sympyreturnstr(val)

结果:精确无误,且可审计。

真正的智能,是知道自己不会什么,然后去调用会的人。


3.6 Final LLM:聚合一切,输出终极答案

这是最后一道工序。

输入包括:

  • 原始用户问题
  • 重写后的问题
  • 通过 Judge 的文档集合
  • 工具返回的计算结果
  • 前序节点的中间状态

输出是:

一份格式完整、数据准确、逻辑清晰的项目可研报告。

项目可行性研究报告(摘要) 1. 项目背景: 根据《2024年工业自动化升级白皮书》,B型控制器在产线自动化中占比达37%... 2. 技术方案: 采用B型工业控制器,MTBF为8年,故障率0.2次/千小时... 3. 成本预算: 单价:3,500元,数量:287台 → 总成本:1,004,500元(经计算器验证)... 4. 效益分析: 年维护成本下降42%,预计2.1年回本... 5. 风险提示: 供应商已停售2021版,建议采购2024版。

这不是聊天,这是企业级文档生成


四、LangGraph 图结构:不是框架,是操作系统

我们用 LangGraph 构建的,不是一个“流程”,而是一个可观察、可调试、可扩展的 AI 操作系统

图结构的 5 大优势:

优势说明
可视化graph.get_graph().draw_mermaid_png()生成完整流程图,团队可看懂
可监控graph.stream()每一步输出都可捕获,用于日志、审计、监控
可插拔换一个 Judge 模型?换一个检索器?只需改一行代码
可回溯如果 Final LLM 输出错误,可回看 Judge 是否误删关键文档
可扩展可添加“数据库查询节点”、“API调用节点”、“多轮对话记忆节点”

图的执行逻辑:

workflow.add_edge(START,"generate_query_or_respond")workflow.add_conditional_edges("generate_query_or_respond",tools_condition,{"tools":"retrieve",END:END,},)workflow.add_conditional_edges("retrieve",grade_documents,# 这里是分支!不是直线!)workflow.add_edge("generate_answer",END)workflow.add_edge("rewrite_question","generate_query_or_respond")# 循环!

注意:rewrite_questiongenerate_query_or_respond是一个闭环!

这意味着:如果 Judge 认为检索结果太差,系统会自动重写问题 → 重新检索 → 重新判断,最多循环 3 次。

这不是一个系统,是一个有“学习能力”的代理。


五、完整工作流:一次真实对话的全过程

用户输入:

“请根据文档生成一份项目可研,并把成本计算一下。”

系统执行:

步骤操作输出
1Query Rewriter“为某项目生成可研报告,并检索B型工业控制器的参数与成本信息”
2Retriever返回 6 篇文档:设备参数、成本结构、维护记录、供应商信息、旧版手册、广告
3Judge保留:参数、成本结构;删除:手册、广告
4Synthesis生成可研框架:背景、目标、技术方案、成本预算…
5Tool Router识别出“成本计算”需求 → 发出CALL_CALC: 3500 * 287
6Calculator返回1004500
7Final LLM输出完整可研报告,含准确成本数据

全过程耗时:2.3 秒。

准确率:100%(无幻觉、无计算错误)


六、工程落地:Flask API + 多模型混合部署

我们封装了完整的 HTTP 接口,支持:

1. 文档入库

curl-XPOST http://localhost:5002/ingest_text\-H"Content-Type: application/json"\-d'{"source": "设备手册", "text": "B型控制器,MTBF为8年..."}'

2. 智能问答

curl-XPOST http://localhost:5002/chat\-H"Content-Type: application/json"\-d'{"messages": [{"role":"user","content":"总成本多少?"}]}'

返回结构:

{"status":"ok","outputs":[{"node":"generate_query_or_respond","update":{"messages":[{"role":"assistant","content":"CALL_RETRIEVE: B型控制器参数和成本"}]}},{"node":"retrieve","update":{"messages":[{"role":"system","content":"B型控制器...单价3500元..."}]}},{"node":"grade_documents","update":{"messages":[{"role":"system","content":"yes"}]}},{"node":"generate_answer","update":{"messages":[{"role":"assistant","content":"成本预算:..."}]}},{"node":"tool_router","update":{"messages":[{"role":"assistant","tool_calls":[...]}]}},{"node":"calculator","update":{"messages":[{"role":"tool","content":"1004500"}]}},{"node":"final_llm","update":{"messages":[{"role":"assistant","content":"总成本1,004,500元。"}]}}]}

每一句输出,都可追踪。每一行日志,都可审计。

3. 可视化流程图

访问:http://localhost:5002/graph_visual

直接返回 Mermaid PNG,团队协作、汇报、培训一图搞定。


七、扩展方向:从单轮问答到企业级智能中枢

这套架构,不是终点,是起点。

你可以轻松扩展:

扩展模块实现方式
多轮记忆添加memory字段到 State,记录历史对话
数据库查询新增db_query_tool,调用 SQL 生成器
API 调用添加http_request_tool,调用内部系统
多模型路由复杂问题用 GPT-4o,简单问题用 Mistral 7B
自动评估每次输出后,用 LLM 自动打分:准确率、完整性、格式
权限控制检索前判断用户角色,过滤敏感文档

八、结语:我们不是在写代码,是在构建 AI 员工

传统 RAG 是“搜索引擎 + 大模型”。

我们的系统,是一个懂业务、会判断、能计算、能写作的 AI 员工

它不依赖“大模型什么都懂”,而是:

  • 知道什么时候该查文档
  • 知道什么时候该算数
  • 知道什么时候该重试
  • 知道什么时候该闭嘴

它不完美,但它可靠

在金融、制造、医疗、能源这些对准确性要求极高的行业,“可能对”是危险的,“必须对”才是底线。

这套架构,就是为“必须对”而生。


附录:依赖安装与运行指南

# 安装核心依赖pipinstalllanggraph langchain langchain-text-splitters faiss-cpu flask openai# 或使用本地模型(推荐)pipinstalllangchain-ollama# 本地运行 Mistral, Llama3

环境变量配置(.env):

MAIN_MODEL=ollama:llama3 SMALL_MODEL=ollama:mistral EMBED_MODEL=ollama:nomic-embed-text

启动服务:

python langgraph_agentic_rag.py

访问:

  • http://localhost:5002/chat→ 问答
  • http://localhost:5002/ingest_text→ 上传文档
  • http://localhost:5002/graph_visual→ 查看流程图

这不是 AI 的未来。这是 AI 的现在。
你不需要等 GPT-5,你只需要把流程设计对。

—— 2025 年,真正的竞争,是架构的竞争。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/3 2:58:57

WPF动画课——让界面“动“起来的完整指南!

还在羡慕那些酷炫的交互界面吗?今天,我们将彻底解密WPF动画系统,从零开始掌握界面动效的核心技能,让你的应用告别"静态时代",拥有丝滑流畅的视觉体验!一、 动画初体验:三分钟创建第一…

作者头像 李华
网站建设 2026/2/3 4:54:33

投入大模型是“血亏”还是“血赚”?2026终极答案与行动指南!

据全球知名市场分析机构IDC最新报告,到2026年,全球企业在生成式AI解决方案上的支出将超过1500亿美元,年复合增长率高达85%。然而,另一份由波士顿咨询集团发布的调研却显示,超过60%的AI投资项目未能达到预期的投资回报率…

作者头像 李华
网站建设 2026/2/3 4:22:50

QCMA:让你的PS Vita数据管理变得前所未有的简单高效

QCMA:让你的PS Vita数据管理变得前所未有的简单高效 【免费下载链接】qcma Cross-platform content manager assistant for the PS Vita (No longer maintained) 项目地址: https://gitcode.com/gh_mirrors/qc/qcma 还在为PS Vita繁琐的数据备份和文件传输而…

作者头像 李华
网站建设 2026/1/29 18:53:21

AB下载管理器:重新定义高效文件传输的技术实践

在数字资源日益丰富的今天,如何高效管理下载任务已成为技术用户面临的普遍痛点。传统的单线程下载工具在面对大文件传输时显得力不从心,而复杂的下载管理需求又需要更加智能化的解决方案。AB下载管理器正是基于这一背景而诞生的现代化下载管理工具。 【免…

作者头像 李华
网站建设 2026/1/30 4:39:09

婴儿睡前故事:温柔妈妈音用IndexTTS 2.0讲述童话

温柔妈妈音如何用AI讲出睡前童话?揭秘IndexTTS 2.0背后的声音魔法 在无数个夜晚,当婴儿闭上眼睛、小手轻轻搭在被角时,一段轻柔的“妈妈讲故事”成了入睡的仪式。但现实是,忙碌的父母未必每晚都有精力亲自讲述;而外包配…

作者头像 李华
网站建设 2026/1/29 22:21:54

动态漫画配音实战:用IndexTTS 2.0实现角色声线统一与节奏匹配

动态漫画配音实战:用IndexTTS 2.0实现角色声线统一与节奏匹配 在动态漫画、短视频和虚拟内容创作日益火热的今天,一个常被忽视却极其关键的问题浮出水面:如何让角色的声音既“像它自己”,又“恰到好处”地配合画面节奏与情绪起伏…

作者头像 李华