1. 从一份"日报"说起:Agent 与 LLM 生态到底在卷什么
做 AI 应用开发这几年,我养成了一个习惯:每天早上花二十分钟扫一遍 Agent 和 LLM 领域的新动态。不是为了追热点,而是这个领域的迭代速度实在太快——上周还在用的方案,这周可能就被新的范式替代了。2026 年 9 月这个时间节点回头看,整个技术栈已经和两年前完全不是一个面貌。以前大家聊的是"怎么把大模型接进业务",现在聊的是"怎么让 Agent 稳定地自主干活"。
这份日报的选题本身就很有意思。它把 Agent、LLM、RAG、GraphRAG、MCP 这几个词放在一起,基本勾勒出了当前 AI 工程化的完整拼图:LLM 是底座能力,Agent 是执行主体,RAG 是知识供给,GraphRAG 是知识组织的高级形态,MCP 是连接外部世界的标准接口。这五块拼在一起,才构成一个能真正落地的智能系统。单独看任何一块都不完整,这也是为什么很多团队做出来的 Demo 很惊艳,一上生产就拉胯——缺的往往不是模型能力,而是这几层之间的工程衔接。
我写这篇东西,不是要复述日报里的条目,而是想借这个由头,把这几条技术线背后的真实工程问题拆开讲清楚。适合谁看?如果你正在做 Agent 项目、正在搭 RAG 知识库、正在纠结要不要上 GraphRAG、或者被 MCP 的各种概念绕晕了,那这篇应该能帮你省下不少试错时间。我会尽量说人话,把那些文档里不会写的坑和取舍讲明白。
先说一个我观察到的现象:大部分 Agent 项目失败,不是因为模型不够聪明,而是因为容错没做好。热词里有个词叫"识的 llm 智能体自主容错控制",虽然表述有点绕,但点到了要害。Agent 和传统程序最大的区别在于,它的执行路径是不确定的,同一个任务跑两次可能走不同的路。这就要求我们在设计时,必须假设"每一步都可能出错",而不是假设"它会按我想的走"。这个思维转变,是做好 Agent 工程的第一道门槛。
2. LLM 底座选型:别被榜单牵着鼻子走
2.1 榜单分数和实际体感的差距在哪
每次有新模型发布,各种榜单就刷屏。但我在实际项目里踩过太多次坑:榜单上排名靠前的模型,放到具体业务里反而不如排名靠后的好用。原因很简单,榜单考的是通用能力,而你的业务考的是特定场景下的稳定性。
举个例子,做结构化信息抽取时,某些在推理榜单上表现一般的模型,因为指令遵循更严格,输出格式反而更稳定。而一些"聪明"的模型喜欢自由发挥,你让它输出 JSON,它给你加一段解释,解析直接崩掉。所以选型的第一步,不是看榜单,而是先明确你的任务类型:是生成、抽取、分类、还是多轮决策?不同类型对模型的要求完全不同。
我一般会用一个简单的对照表来快速筛选:
| 任务类型 | 优先看重的能力 | 容易踩的坑 |
|---|---|---|
| 结构化抽取 | 指令遵循、格式稳定 | 模型自作主张加解释 |
| 长文生成 | 上下文长度、连贯性 | 长文后半段跑题 |
| 多轮决策 | 工具调用准确率 | 参数幻觉、循环调用 |
| 分类打标 | 一致性、低温度稳定性 | 边界样本摇摆 |
2.2 本地部署还是调 API:算一笔真实的账
这个问题我被问过无数次。很多人一上来就说"要私有化部署",但根本没算过账。我的建议是:先用 API 把业务跑通,等调用量和数据敏感度都到临界点了,再考虑本地化。
算账的逻辑是这样的:本地部署一台能跑中等规模模型的机器,硬件成本加上运维人力,一年下来是笔不小的固定支出。而 API 是按量付费,业务没起来的时候几乎不花钱。只有当你的日均调用量稳定超过某个阈值,本地部署的边际成本才会低于 API。这个阈值因模型规模而异,但通常不是小数目。
更重要的是,本地部署带来的不只是成本问题,还有一整套工程负担:模型版本管理、推理服务稳定性、并发调度、显存优化……这些都需要专人维护。我见过太多团队,模型是部署起来了,但推理服务的可用性还不如直接调 API。所以除非有硬性的数据合规要求,否则我一般建议先用 API 快速验证。
提示:如果确实需要本地部署,优先考虑推理框架的成熟度,而不是模型本身。一个推理框架不成熟的模型,部署起来会让你怀疑人生。
2.3 微调、RAG 还是提示词工程:三条路的边界
热词里有"使用聊天记录模型精调 llm",这代表了一类常见需求:想让模型更懂自己的业务。但微调不是万能药,很多时候 RAG 或者提示词工程就够了。我总结了一个判断标准:
- 知识类问题(模型不知道的事实)→ 优先 RAG,因为知识会更新,微调成本太高
- 风格类问题(模型知道但表达不对)→ 优先提示词工程,实在不行再微调
- 能力类问题(模型压根不会的技能)→ 才考虑微调,而且要有足够高质量数据
微调最大的坑是数据质量。我见过团队拿几千条聊天记录直接去微调,结果模型学了一堆废话和错误格式。聊天记录里充斥着口语、错别字、不完整表达,直接拿来训练等于给模型喂垃圾。真要用聊天记录,必须先做清洗和结构化,把"用户问-助手答"整理成规范的指令数据,这一步的工作量往往比训练本身还大。
3. RAG 的瓶颈:为什么你的知识库总是答不准
3.1 检索不准,八成是切分和嵌入的锅
RAG 看起来简单:把文档切块、向量化、存库、检索、拼进提示词。但真正做起来,检索环节的坑最多。热词里"rag 瓶颈"这个词很真实,大部分 RAG 系统的瓶颈就在检索质量上。
最常见的错误是切分策略一刀切。很多人不管什么文档,统一按固定字数切。结果技术文档被从代码块中间切断,合同被从条款中间切断,检索出来的片段语义不完整,模型自然答不准。我的经验是:切分要跟着文档结构走。Markdown 按标题层级切,代码按函数切,合同按条款切,实在没有结构的才按语义切。
嵌入模型的选择也很关键。热词里"rag 知识库能存储图片嘛"这个问题,其实反映的是多模态检索的需求。纯文本嵌入模型处理不了图片,如果你的知识库里有大量图表,就得考虑多模态嵌入方案,或者先用视觉模型把图片转成文字描述再入库。这个决策要在建库初期就定好,后期改起来很痛苦。
3.2 重排和混合检索:被低估的两个提效手段
很多人做完向量检索就收工了,其实重排(Rerank)是性价比极高的优化点。向量检索召回的是"语义相近"的片段,但相近不等于相关。重排模型会对召回的候选做精细打分,把真正相关的排到前面。实测下来,加上重排后,答案准确率往往有明显提升。
另一个被低估的是混合检索:向量检索加关键词检索。向量检索擅长语义匹配,但对专有名词、编号、代码符号不敏感。比如用户搜"错误码 E1024",纯向量检索可能召回一堆语义相近但编号不对的内容,而关键词检索能精准命中。两者结合,用加权或融合排序,效果比单用任何一种都稳。
| 检索方式 | 擅长 | 短板 |
|---|---|---|
| 向量检索 | 语义相近、同义表达 | 专有名词、精确匹配 |
| 关键词检索 | 精确命中、编号符号 | 同义表达、语义泛化 |
| 混合检索 | 兼顾两者 | 需要调权重、实现复杂 |
| 加重排 | 精排相关性 | 增加延迟和成本 |
3.3 RAG 知识库和结构化知识库:别混为一谈
热词里有个很好的问题:"kg 知识库、rag 知识库和结构知识库区分以及应用场景"。这三者经常被混着说,但本质不同。
RAG 知识库存的是非结构化文本的向量,适合"模糊查询、语义问答"的场景,比如客服问答、文档助手。结构化知识库(比如关系型数据库、图数据库)存的是实体和关系,适合"精确查询、关系推理"的场景,比如"找出所有和某公司有股权关系的企业"。KG 知识库(知识图谱)是结构化知识库的一种,强调实体间的语义关系。
实际项目里,这三者往往是组合使用的。用户问一个模糊问题,先用 RAG 检索相关文档,再从文档里抽取实体去结构化库查精确信息,最后综合回答。单独用任何一种都有局限,组合起来才能覆盖复杂需求。
4. GraphRAG:什么时候值得上,什么时候是过度设计
4.1 GraphRAG 解决的到底是什么问题
GraphRAG 这两年被炒得很热,但很多人其实没搞明白它解决什么问题。简单说,传统 RAG 处理不了"全局性、跨文档"的问题。比如你问"这批文档里反复出现的核心矛盾是什么",传统 RAG 只能召回几个片段,拼不出全局图景。而 GraphRAG 通过构建实体关系图,能沿着关系链做多跳推理,回答这类问题就从容得多。
它的核心思路是:先把文档里的实体和关系抽出来,建成图,然后基于图做社区发现和摘要。查询时,既能走图的关系路径,也能结合向量检索。代价是建图成本高:实体抽取要调模型,图构建要处理冲突和消歧,社区摘要又是一轮生成。所以它不是免费的午餐。
4.2 判断要不要上 GraphRAG 的三个信号
我的经验是,满足以下信号之一,才值得考虑 GraphRAG:
- 问题需要多跳推理:答案不在单个文档里,需要串联多个文档的信息
- 实体关系是核心:业务本身就以实体和关系为主,比如风控、供应链、科研文献
- 全局性问题频繁:用户经常问"整体趋势""主要矛盾"这类需要俯瞰的问题
反过来,如果你的场景就是简单的文档问答,用户问的都是"某条规定是什么"这种单点问题,那 GraphRAG 就是过度设计。我见过团队为了"技术先进"硬上 GraphRAG,结果建图成本高、维护复杂,效果还不如优化好的传统 RAG。
4.3 Ontology RAG:给知识加一层"骨架"
热词里"ontology rag"值得单独说。Ontology(本体)本质上是给知识定义一套概念框架和关系规则。传统 RAG 是"扁平"的,所有片段平等地躺在向量库里。而 Ontology RAG 会先定义好"有哪些类型的实体、它们之间允许什么关系",再按这个框架组织知识。
好处是检索和推理更有章法。比如医疗场景,本体里定义了"疾病-症状-药物-禁忌"的关系,检索时就能沿着这些关系做约束,避免召回不相关的内容。代价是前期建模成本高,需要领域专家参与定义本体。所以它更适合领域边界清晰、知识结构相对稳定的场景,比如医疗、法律、金融。
5. MCP:把 Agent 接进真实世界的标准接口
5.1 MCP 到底解决了什么痛点
MCP(Model Context Protocol)这两年的热度肉眼可见,热词里从"mcp 是什么"到"ruoyi-vue-pro 合并 mcp 功能"再到"altium designer ai 接口 mcp",说明它已经从概念走向了各种具体工具的集成。
它解决的核心痛点是:Agent 要调用外部工具,但每个工具的接入方式都不一样。以前每接一个工具,就要写一套适配代码,工具一多,维护成本爆炸。MCP 提供了一套标准协议,工具方按协议暴露能力,Agent 方按协议调用,双方解耦。这就像 USB 接口统一了外设连接一样,是个基础设施级别的进步。
我实测下来,MCP 最大的价值在于让工具生态可以复用。一个团队写好的 MCP 服务,别的团队可以直接用,不用重复造轮子。热词里"使用 mcp 工具流式输出内容到文件 cherrystudio"就是典型场景:通过 MCP 把文件操作能力标准化,任何支持 MCP 的客户端都能调用。
5.2 接入 MCP 时最容易忽略的细节
MCP 用起来简单,但有几个坑我踩过:
第一是权限边界。MCP 服务暴露的能力,Agent 不一定都该用。比如文件操作服务,如果 Agent 能删任意文件,那就是灾难。所以接入时一定要做能力白名单,只开放必要的操作。
第二是错误处理。MCP 调用失败时,返回的错误信息格式不统一,Agent 很难判断是"重试就行"还是"彻底失败"。我的做法是在 MCP 服务层做一层错误归一化,把错误分类成可重试和不可重试,再返回给 Agent。
第三是流式输出的处理。热词里"流式输出内容到文件"看着简单,但流式场景下,如果中途断了,文件可能处于半写状态。稳妥的做法是先写临时文件,全部完成后再原子性地重命名。
注意:MCP 服务的能力设计要遵循最小权限原则。宁可多拆几个细粒度的服务,也不要做一个"什么都能干"的超级服务。
5.3 MCP 和传统工具调用的取舍
不是所有场景都值得上 MCP。如果你的 Agent 只调用一两个固定工具,直接写函数调用更简单直接。MCP 的价值在工具多、需要复用、需要跨团队协作的场景。判断标准很简单:当你的工具接入代码开始重复、开始难以维护时,就是上 MCP 的时候。
另外,MCP 目前还在演进中,协议细节可能变化。所以我在设计时会把 MCP 相关逻辑隔离在一个适配层里,万一协议变了,改适配层就行,不影响业务代码。这个隔离设计,是我做任何"还在演进中的标准"时的通用习惯。
6. Agent 工程化:容错、并发和安全这三座大山
6.1 自主容错:让 Agent 学会"摔倒了爬起来"
回到开头说的那个词——"自主容错控制"。这是 Agent 从 Demo 走向生产的关键。传统程序出错会抛异常,Agent 出错可能只是"走错了一步",如果不处理,它会沿着错误路径一路狂奔。
我的做法是给 Agent 设计多层容错:
- 单步重试:工具调用失败时,先重试几次,很多失败是瞬时的
- 路径回退:如果某条执行路径连续失败,回退到上一个决策点,换条路走
- 目标校验:每完成一个子目标,校验结果是否符合预期,不符合就重新规划
- 兜底降级:实在搞不定,转人工或返回明确的失败信息,而不是硬编一个答案
关键是每一步都要有可观测的状态。Agent 执行时,我会把每一步的输入、输出、决策理由都记下来。出问题时,能完整复现它的"心路历程",才知道是哪一步开始跑偏的。没有可观测性,容错就是空谈。
6.2 并发:Agent 扛并发的难点不在模型
热词里"ai agent 怎么扛并发"是个很实际的问题。很多人以为并发瓶颈在模型推理,其实真正的瓶颈往往在工具调用和状态管理。
模型推理可以批处理、可以加机器,相对好扩展。但工具调用涉及外部系统,每个工具都有自己的限流和延迟。如果 Agent 并发调用同一个工具,很容易把下游打挂。我的做法是给每个工具配独立的限流器和队列,Agent 的并发请求先排队,按下游能承受的速率放行。
状态管理也是难点。Agent 是有状态的,多轮对话、任务上下文都要维护。高并发下,状态存储的读写会成为瓶颈。我一般用带过期策略的分布式缓存存会话状态,同时把长任务的状态持久化到数据库,避免进程重启丢状态。
6.3 Agent 安全:被投毒的记忆和知识库
热词里"agentpoison: red-teaming llm agents via poisoning memory or knowledge ba"点出了一个容易被忽视的风险:Agent 的记忆和知识库可能被投毒。如果攻击者能往知识库里注入恶意内容,Agent 检索到后可能被诱导做出危险操作。
防御思路有几层:入库前做内容审核,过滤明显恶意的内容;检索后做来源校验,对来自不可信来源的内容降低权重或标记;执行前做操作确认,涉及敏感操作时要求二次确认。特别是当 Agent 有写权限时,一定要限制它能写什么、写到哪,避免被诱导去篡改关键数据。
这块目前还没有银弹,我的态度是假设知识库不可信,在关键决策点加人工或规则兜底。安全这事,宁可保守一点。
7. 一些实操中的零碎经验
聊了这么多框架性的东西,最后分享几个我在实际项目里攒下的小经验,都是文档里不太会写、但很影响体验的细节。
关于 LLM as judge:用模型给模型打分是个好工具,但别全信。我一般用它做初筛,把明显有问题的筛出来,边界样本还是人工看。而且 judge 模型本身也有偏好,比如倾向于给长回答高分,所以评分标准要写清楚,最好给几个示例校准。
关于基于 LLM 的单元测试:热词里提到这个,我的经验是,LLM 生成的测试用例适合做"补充覆盖",不适合做"核心验证"。它能发现一些你没想到的边界,但生成的断言可能不严谨。稳妥的做法是 LLM 生成、人工审核后再纳入测试集。
关于 Agent 框架选型:框架更新太快,我的建议是别把业务逻辑深度绑定到某个框架。用框架的编排能力,但核心的业务逻辑、工具实现、状态管理尽量自己掌控。这样框架换代时,迁移成本可控。我见过太多项目因为深度绑定某个框架,框架一停更就动弹不得。
关于提示词版本管理:提示词是代码,必须纳入版本管理。我见过团队改提示词全靠手改,出了问题都不知道改前改后差在哪。把提示词存文件、进 Git、配变更记录,这是基本功。
关于成本控制:Agent 的 token 消耗很容易失控,尤其是多轮循环的场景。我会给每个任务设 token 预算上限,超了就降级或终止。同时缓存高频查询的结果,很多重复问题没必要每次都调模型。
这些经验谈不上高深,但都是真金白银试出来的。Agent 和 LLM 这个领域,概念满天飞,但真正决定项目成败的,往往是这些不起眼的工程细节。把底座选对、把检索做准、把容错做扎实、把安全守住,比追任何一个新概念都实在。