# 利用图优化 LLMOps 聊天机器人架构
# 01. LLMOps 聊天机器人架构优化
前文中,我们绘制了一张关于 LLMOps聊天机器人 的运行架构流程图,并往流程图中添加了 记忆 、 知识库检索 、 格式化输出 等内容,不过在代码中我们使用的是 LCEL 表达式进行构建,缺少工具、循环等功能。
在前面几章中,我们掌握了 LLM 与工具的调用、Agent 的创建、LangGraph 条件边与循环结构,将这些功能结合 LLMOps 应用编排页面,对整个 运行架构流程图 进行更新。
及时设计 UI 稿: https://js.design/f/I_B1Is?p=vuXZ0KfTWa&mode=design,应用编排页面展示如下:

更新后的架构图如下:

这个图看起来过于复杂,但是我们可以对其进行简化,将相同功能的模块封装到同一个节点中,并且通过分析,知道上述的 架构流程图 存在 条件边 与 循环流程 这两个部分,所以该架构肯定没法单纯使用 LCEL 表达式进行构建,可以结合 LangGraph + 可运行配置逐个构建,将与 AI聊天机器人 本身无关的部分进行简化,搭建 图结构 的应用,简化后的 图 为:

# 02. 数据状态与配置
在整个 LLMOps 项目中,我们更希望通过 应用编排 功能得到的 LLM/Agent应用 是一个在使用起来相对黑盒的应用,通过外部传递 配置 + 原始提问 的方式,让这个 黑盒应用 动态去执行一些不同的操作,而不需要调整代码。
对于 图结构 的 数据状态 ,我们可以先分析每个节点需要使用的数据,然后再将多个节点共用的数据汇总起来,从而得到一个完整的状态数据, 首先我们先来分析下每个节点需要使用的数据,如下:

除了 数据状态 之外,在 图架构 应用程序中,还会通过外部传递一些配置(非状态)让 图架构 应用程序执行一些动态的运行时,例如:
动态切换AI 应用的 大语言模型服务提供商 ,从 gpt-4o-mini 切换到 文心一言 ;
动态为 AI 应用 绑定特定工具 ,例如:谷歌搜索、DallE绘图、天气预报、代码解释器等,对于应用来说,有绑定则调用工具,没绑定则直接输出;
动态为 AI 应用关联 外挂知识库 ,如果外挂了知识库则每次提问前先检索知识库,在生成内容,否则直接生成;
动态为 AI 应用关联 审核工具 ,如果配置了则每次输出都进行审核,否则直接输出 LLM/Agent 生成内容;
用户传递 原始问题query 给该 LLM/Agent 应用的时候,应用会根据特定的配置创建不同的 Graph图程序 ,然后使用用户的 原始问题query 来去生成对应内容,对于配置部分的运行流程更新如下:

# 最新版 LangChain 用法提示
新版 LangChain 更推荐用 LCEL、
Runnable、ChatModel.bind_tools()、结构化输出和 LangGraph 来组织复杂链路;老式Chain、部分AgentExecutor写法可以读懂,但新项目应优先选择更清晰的图或 Runnable 编排。工具调用相关代码要区分两层:模型是否原生支持 tool/function calling,以及业务侧如何定义工具 schema、参数校验、错误兜底和观测日志。
如果示例中的导入路径和你当前安装版本不同,优先查当前版本包内导出位置;常见迁移方向是从
langchain拆到langchain-core、langchain-community、langchain-openai、langgraph等包。
# 拓展
工具或插件不要只看能不能调通,更要看是否可观测、可限流、可重试、可审计。联网类工具还要处理超时、空结果、搜索噪声和结果时效性。
Agent 场景里,Prompt 只是调度策略的一部分;工具描述、参数 schema、历史状态、错误反馈、停止条件和人工介入点同样会影响最终稳定性。
# 常见问题
为什么模型没有调用工具?常见原因是工具描述不清晰、参数 schema 过宽或过窄、用户问题不需要工具、模型本身不支持工具调用,或者工具绑定位置不对。
为什么工具调用后回答仍然不准?先看工具返回是否正确,再看工具结果是否被放回模型上下文,最后检查输出解析、历史消息和异常兜底是否覆盖了真实错误。
# 面试题
解释函数调用、工具调用和 Agent 的区别。
LangChain 中 tool schema 的作用是什么?为什么参数校验对生产环境很重要?
ReACT Agent 和 tool-calling Agent 的核心差异是什么?分别适合什么场景?
LangGraph 相比 LCEL 更适合解决哪些复杂编排问题?
# 生产问题排查
| 问题 | 常见原因 | 处理方式 |
|---|---|---|
| 工具没有被调用 | 工具描述弱、绑定失败、模型不支持 | 打印绑定后的模型配置,补充工具描述,换用支持工具调用的模型 |
| 参数格式错误 | schema 设计不清晰,模型生成字段不稳定 | 使用 Pydantic/JSON Schema 校验,失败后把错误反馈给模型重试 |
| 联网结果不可用 | 搜索为空、接口超时、命中低质量页面 | 增加超时、重试、结果过滤、来源白名单和降级回答 |
| Agent 循环不停止 | 缺少终止条件或工具返回被误判 | 设置最大迭代次数,记录每轮 thought/action/observation,增加停止规则 |
| 线上难以复现 | 缺少输入、工具请求和模型响应日志 | 给每次调用加 trace id,记录工具入参、出参、耗时和异常 |