FEATURED · 精选文章

企业级AI搜索进阶:从单轮对话到Agentic Search 2.0落地实践

发布时间 / 2026/9/8 16:27:54
来源 / 创域科博编辑部
栏目 / 资讯中心
企业级AI搜索进阶:从单轮对话到Agentic Search 2.0落地实践 做了一年多企业级AI搜索项目我越来越确信一件事单轮对话只是起点Agentic Search 2.0才是企业级AI搜索自动驾驶Agent真正拉开差距的地方。这两年大家聊RAG聊得很热闹不少团队的第一版智能搜索就是“向量检索大模型问答”交互模式永远是一问一答。单轮对话能解决“这个合同条款怎么规定的”“上季度营收是多少”这类事实型问题但处理不了“帮我梳理一下华东区下个月需要续约的合同并标记出有合规风险的那几份最后按客户重要度生成一份提醒清单”这种任务。后者需要跨系统检索、多步推理、工具调用和结果验证这就是Agentic Search 2.0要回答的问题。这篇文章不打算做概念科普而是从我实际踩坑的角度拆解企业级AI搜索从单轮对话迈向Agentic Search 2.0时真正会被卡住的几个环节架构怎么搭、权限怎么控、记忆怎么做、成本怎么压、评测怎么跑。如果你所在团队正准备把“搜索机器人”升级成“能干活的任务执行体”这篇文章应该能帮你少走不少弯路。1. 单轮对话的“天花板”为什么企业搜索必须走向Agentic1.1 传统搜索和单轮问答的现实瓶颈传统企业搜索的本质是召回。关键词命中或者embedding相似度命中然后把最相关的几份文档返给用户。后来接了大模型变成了RAG问答系统能根据文档总结一段答案体验确实上了一个台阶但交互模式还是单轮的用户问一句系统答一句答完这个任务就结束了。这种模式在真实业务里会遇到三个很扎心的问题。第一问题本身往往不是单轮问题。业务人员问“帮我看看哪些合同快到期了”潜台词可能是“按违约风险排序还得联动客户欠款数据”。传统搜索把问题拆解后每一步都要用户自己再来一轮提问体验非常割裂。第二检索结果之间缺乏关联验证。单轮RAG只负责“从文档里找答案”它不负责判断两份合同的数据是否矛盾也不会主动去财务系统里核一个数字。结果就是答案看起来流畅但经不起追问。第三没有行动能力。搜索再聪明最终也只能输出文字。可是企业里的价值产生在行动里生成提醒、更新台账、触发审批流、给客户分级。如果搜索系统只能读书不能动手它的效率上限就被锁死了。我们项目早期接了一个合同智能问答需求第一批上线测试时业务部门提的第一句反馈是“你们能不能别让我一个个问直接告诉我下个月要做什么。”这个需求单轮对话真的接不住。1.2 Agentic Search 2.0改变了什么Agentic Search 2.0的核心变化是把“搜索”从一个查询动作放大成一个可以自主规划、执行、验证的多步任务闭环。它不再是“根据query召回文档”而是“理解用户目标拆解子任务按需检索必要时调用工具最后汇总出可执行的结论”。这么说有点抽象我拿合同续约场景举个例子。传统搜索模式下用户要分四次提问“有哪些合同下个月到期”“这些合同的客户方分别是谁”“这些客户有没有历史欠款”“帮我做一份续约优先级排序。”Agentic Search 2.0下用户只需要给一个目标“整理下个月到期的合同评估续约风险输出一份优先级清单。”系统自己会拆成子任务调合同库检索接口调CRM拿客户信息调财务系统核欠款最后调用一个报告生成流程把结果写入文档。这个变化可以概括成一张对比表维度单轮搜索 / RAG问答Agentic Search 2.0交互模式问一句答一句给一个目标系统拆解并执行数据处理单次检索生成多次检索跨源推理工具调用基本不支持原生支持API、数据库、自动化脚本任务边界单任务、短链路多任务、有状态的长链路错误处理答错了就是错了可验证、可反思、可重试最终产物一段回答一份可执行的结果、报告或动作那为什么叫“自动驾驶Agent”我的理解是它具备一定的自主性能在给定目标和约束下自己选择路径但和L4/L5自动驾驶一样不能完全脱离人工兜底。企业场景里关键动作仍然需要人工审批确认这也决定了我们后面架构设计时必须在链路里留出“人在环”的检查点。2. Agentic Search 2.0的核心架构把“搜索引擎”变成“执行体”2.1 规划-检索-行动-验证搜索Agent的执行循环Agentic Search 2.0的主体不是单条Prompt而是一个循环。我把它简化成四步规划、检索、行动、验证。这个循环可以走一轮也可以走多轮直到系统确认任务完成。规划阶段负责把用户目标拆成一组子任务比如“列出到期合同”“查客户风险”“汇总输出”这个阶段的模型输出是一份任务清单而不是最终答案。检索阶段针对子任务去知识库、文档系统里找素材使用的可能是向量检索、关键词检索、SQL查询的组合。行动阶段会根据需要调用业务工具比如发起一个审批流、写入一条待办记录。验证阶段则是对生成的结果做检查比如“刚才生成的清单里有没有遗漏某类合同”“引用的数据是否来自最新版本”。我之前在工程里给这种循环画了一个很直观的比喻以前的搜索引擎是一个图书管理员你要什么书他去帮你搬。Agentic Search 2.0更像一个项目经理你先告诉他目标他拆成会议、找材料、写方案、找人确认每一步做完还要回头检查偏差甚至处理预期之外的异常。实际编码时我强烈建议不要把这四步全部压在一个大模型调用里。原因有两个一是Token消耗高二是一旦某一步出错你无法定位是哪一环出了问题。后面落地部分我会给出一个基于LangGraph的实现思路它天然支持把每个步骤变成一个节点方便追踪和重试。2.2 工具与知识源Agent的“四肢”单轮对话只需要考虑“读什么”Agentic Search 2.0必须考虑“能做什么”。能做哪些事取决于你暴露给Agent哪些工具。我在设计工具层时坚持一个原则工具不是直接封装业务逻辑而是封装“原子操作”。比如“获取客户欠款金额”可以做成一个工具“发送催款邮件”也可以做成一个工具但不要做一个“处理所有客户风险”的巨型工具。原因很简单大模型对工具的调用遵循的是匹配输入输出模式工具越原子它就越容易判断什么时候该调用、参数怎么填。工具注册时需要给Agent明确的可调用信息包括工具名称、功能描述、输入参数schema、输出格式。我习惯在描述里写清楚使用场景和注意事项比如某个接口只接受客户编号不接受客户名称就必须写进描述否则模型会自己瞎猜然后调用失败。给你看一个简化版工具注册例子tools [ { name: query_contract_expiry, description: 根据日期范围和业务区域查询合同到期列表返回合同编号、客户名称、到期日期、合同金额等字段。仅适用于已归档合同库。, parameters: { type: object, properties: { start_date: {type: string, description: 开始日期YYYY-MM-DD}, end_date: {type: string, description: 结束日期YYYY-MM-DD}, region: {type: string, description: 业务区域例如华东、华北} }, required: [start_date, end_date] } }, { name: query_customer_credit, description: 查询客户当前欠款金额和信用等级输入客户编号输出欠款总额、逾期金额、信用等级。, parameters: { type: object, properties: { customer_id: {type: string, description: 客户内部编号} }, required: [customer_id] } } ]工具定义越准确后续越不容易出现模型把一个日期格式传错、把参数张冠李戴的问题。工具调用结果建议统一包一层结构里面有正确标记、数据、错误信息三个字段Agent可以根据错误信息决定是否修正参数后重试。2.3 状态管理让多步任务不迷路单轮搜索不需要状态每次请求都独立。但Agentic Search 2.0要做多步任务状态管理就成了基础设施。什么叫状态最简单说就是“Agent目前已经拿到了哪些信息、还缺哪些信息、已经调用了哪些工具、走到了哪一步”。如果没有状态Agent做第三步的时候会忘记第一步的结果导致重复检索、前后矛盾。我们在项目里用状态图来管理流程。以LangGraph为例状态是一个全局对象每个节点只负责读取和更新自己相关的字段。整个链路被描述成一张有向图节点是“规划”“检索”“行动”“验证”等步骤边是执行条件。一个简化版的状态定义大概是这个样子from typing import TypedDict, List class SearchAgentState(TypedDict): user_goal: str plan: List[str] search_results: List[dict] tool_outputs: List[dict] current_step: str errors: List[str] final_answer: str不同节点之间通过这个状态对象协作。比如“规划节点”写入plan字段“检索节点”读取plan并写入search_results“验证节点”检查search_results是否覆盖计划中的每个子任务不满足就打回重做。状态管理最需要注意的坑是“边界”。不要把所有历史都无脑塞进上下文否则多轮任务跑到后面模型会被一堆中间结果冲晕。我一般只保留当前任务相关的摘要状态具体原始数据存入临时存储等到最终汇总阶段再按需取用。这不只是效率问题更直接影响结果质量。3. 从Demo到企业级“自动驾驶”模式要解决的关键问题3.1 权限与安全不能让搜索Agent变成越权工具很多团队做Demo时不会考虑权限因为Demo环境只有一个知识库、一个搜索框。但到了企业内部权限问题会直接决定Agent能不能上线。企业知识是有边界的。同样是“查看所有合同”销售VP能看到全部区域经理只能看自己区域一线销售只能看自己名下的客户。如果Agent不做权限打通就会变成一个所有人都能查全量数据的越权机器人这在合规上是非常严重的问题。我在架构上做了两层权限控制。第一层在检索入口。用户发起任务时系统先拿到用户的身份Token和RBAC角色权限检索服务在生成召回Query时自动追加过滤条件确保任何文档召回都不会越过用户权限范围。这一层主要防止“权限内的数据不小心被非授权用户看到”。第二层在工具调用。搜索Agent调用业务接口前工具层会再次校验当前用户对目标数据是否有操作权限甚至某些高敏感操作直接禁止Agent代为执行。比如“发送邮件给客户”这类有外部影响的动作我们强制走人工审批节点Agent只负责生成草稿。有一个比较隐蔽的问题是“推理泄漏”。模型可能根据权限外的信息推断出一些结论比如它看到合同编号规律推断出总共有多少份合同。这个目前只能靠系统提示和结果脱敏来控制没法100%杜绝所以我的建议是对输出做一次敏感字段过滤器凡是用户权限外的客户名称、金额、编号即使在推理过程中出现过也不允许落到最终答案里。3.2 长周期记忆企业级搜索Agent的“路况记忆”单轮对话不需要记忆但Agentic Search 2.0跑的是多步任务而且企业内部任务往往不是一分钟能做完的。用户可能中途离开过半小时回来看结果也可能同一个用户连续三天追问同一个业务问题希望Agent记得之前已经给过什么结论。记忆要分层次管理我通常拆成三类。任务级记忆最简单就是Agent当前这个执行循环里的中间状态任务结束后可以丢弃或归档。用户级记忆则要跨会话保存比如用户过去半年经常查华东区合同那下次提到“华东区”时Agent可以优先理解成业务区域而不是地理区域。组织级记忆更宏观包括公司常用的业务术语、产品线划分、常见流程规则这些一般来自知识库。实现用户级记忆时不要只靠大模型上下文窗口硬扛。我的做法是把用户的关键行为抽成结构化记忆条目比如“用户最近查询的客户风险偏好”“用户上次确认过的续约策略”存储到向量数据库里在任务开始阶段做记忆召回再拼接到System Prompt里。这样既控制了上下文长度又能保留跨会话的连续性。还有一点必须重视记忆隔离。不同用户之间的记忆不能串同一用户在不同业务域的记忆最好也分开。曾经出现过Agent把A用户查过的合同金额带到了B用户的问题排查下来就是记忆存储没有带用户维度标签。这种错误很隐晦但对企业的信任打击非常大。3.3 成本、延迟与可靠性自动驾驶的硬指标功能演示时大家关心Agent“能不能做”。上生产时老板更关心“用得起吗反应快吗别出错”。成本上Agentic Search 2.0比普通RAG要贵不少因为每个任务可能触发多次大模型调用。我做过一个粗略估算环节调用模型预估输入Token预估输出Token折算成本占比意图理解与任务规划中大模型500-1500200-800中等子任务检索小模型/嵌入模型1000-3000嵌入向量较低工具调用解析中大模型500-1500100-500中等结果汇总生成中大模型2000-5000800-2000较高反思与验证中大模型1000-2000200-600中等再往下算如果每天有一万次企业搜索请求每次消耗几万Token一个月光模型费用就可能到大几万美元。所以降本不是可选项是必答题。我的降本组合是“路由分流优先本地模型缓存”。简单任务直接走小模型判断有难度了再升级到大模型合同库这类可以预处理的文本提前做切片和摘要已经问过的问题或者高度相似的问题命中语义缓存后直接返回历史结果。延迟和成本往往正相关减小模型规模、缩短上下文、并行化工具调用都能明显降低延迟。可靠性方面最需要注意的是“沉默失败”。Agent调用一个工具没有返回但模型可能以为工具执行成功继续往下走最终产出一个缺数据却看起来很完整的报告。我们专门加了一层校验器在最终输出前检查所有计划中的子任务是否都有对应的检索或工具结果缺了就标记为“未完成”而不是硬编一个答案出来。这比“让模型自信”重要得多。4. 落地实战搭建一个企业级Agentic Search的参考路径4.1 技术选型LangGraph、Semantic Kernel还是自研编排我们调研过几类Agentic Search的底座方案。市面上的选择其实各有利弊我挑接触最多的三个聊一下。LangGraph是国外社区用得比较多的工作流编排框架它的优势是有向状态图模型做得比较清晰适合做“过程的显式建模”任务每一步都可以可视化追踪调试体验好。缺点是上手曲线比直接写Prompt高一些团队成员需要对图状态有一定的理解。Semantic Kernel更偏向微软生态如果你企业基础设施大量使用Azure、Graph API等微软服务集成会比较顺手。它把Planner和Memory作为内置能力但灵活性相比LangGraph稍弱复杂任务流的自由编排不够酣畅。自研编排是很多大厂团队的选择。好处是完全贴合自己的业务模型想怎么扩展就怎么扩展坏了知道去哪修。坏处是Agentic Search的边界其实还在快速变化自研很容易做成“面向当前需求的定制工具”一旦需求变了又要重写一大片。我自己目前的推荐是如果团队没有存量编排平台想快速验证直接上LangGraph这类开源框架如果已经有成熟的BPM或流程编排体系可以基于它扩展Agent节点尽量不要一上来就自研全套编排。企业级Agentic Search的难点从来不在“能不能跑”而在“能不能长时间稳定跑”稳定性的沉淀需要时间框架能帮你少踩一部分坑。4.2 最小可跑的Agentic Search链路抛开一切营销概念一个最小可跑的企业级Agentic Search链路其实只有五个节点意图分析与任务规划企业知识检索业务工具调用结果汇总生成权限校验与人工确认我用LangGraph思路描述一下伪代码结构from langgraph.graph import StateGraph, END from typing import TypedDict, List class AgentState(TypedDict): goal: str plan: List[str] documents: List[str] tool_results: List[dict] draft: str final: str def plan_node(state: AgentState): # 调用大模型分析目标拆解子任务 # 输出 plan [查询持续合同, 查询客户风险, 生成续约建议] return {plan: [...]} def retrieve_node(state: AgentState): # 根据plan生成检索query并行查向量库和关键词索引 # 调用权限过滤返回documents return {documents: [...]} def tool_node(state: AgentState): # 根据plan决定是否需要调用业务工具如CRM、财务系统 # 每个工具调用前都要做权限校验 return {tool_results: [...]} def generate_node(state: AgentState): # 综合documents和tool_results生成最终报告 return {draft: ...} def verify_node(state: AgentState): # 校验draft是否有遗漏子任务、是否包含越权信息 # 没有通过则回到retrieve_node或tool_node return {final: ...} graph StateGraph(AgentState) graph.add_node(plan, plan_node) graph.add_node(retrieve, retrieve_node) graph.add_node(tool, tool_node) graph.add_node(generate, generate_node) graph.add_node(verify, verify_node) graph.set_entry_point(plan) graph.add_edge(plan, retrieve) graph.add_edge(retrieve, tool) graph.add_edge(tool, generate) graph.add_edge(generate, verify) graph.add_conditional_edges(verify, lambda state: retrieve if not state[final] else END)这段代码是结构示意不代表生产可用。但它是我们项目里第一版可跑通的原型链路。你可以发现一个特点每个节点只做自己那一件事节点之间通过状态对象传递数据这比把所有逻辑塞进一个大Prompt里好排查得多。生产化的时候再往外面套一层API Gateway接上统一身份认证、日志追踪、审计系统就基本具备企业服务的雏形了。4.3 实测中的典型坑与调优经验跑通原型只是一小步真正折磨人的是生产环境里的各种边界情况。我总结几个真实遇到过的坑希望对你有帮助。第一个坑是死循环。Agent在验证节点发现结果不完整回到检索节点重新检索然后生成的新结果又不符合预期再回来检索循环往复。最后我们做了两层限制一是在状态里增加最大循环次数超过就直接跳到人工兜底二是验证节点不只说“结果不行”还要说清楚“哪里不行”比如“缺少客户风险数据”下一轮检索就只补缺失部分不整盘重做。第二个坑是工具调用参数幻觉。模型明明知道工具需要一个customer_id却传了一个customer_name进去。后来我们在工具描述里明确写了“请先调用query_customer_code把客户名称转为编号”并且在前一步的工具输出里保留映射关系大幅降低调用失败率。第三个坑是权限校验滞后。早期我们在检索后才做权限过滤结果模型可能会根据被过滤掉的文档做推理导致最终答案仍然泄露敏感信息。后面我们把权限过滤前移到检索Query生成阶段Tool调用过程中也做权限校验输出阶段再做一次脱敏三道闸门才把问题压下来。第四个坑是区域模型评测失真。把Agent放在演示集上跑效果很好上生产就崩。我们后来建了一个专门的回归评测集里面全是真实业务人员提交过的问题和标准答案模板每次改动都先跑一遍评测集。宁可慢一点也不能让效果开倒车。5. 从辅助驾驶到自动驾驶Agentic Search的演进路线5.1 反馈闭环让搜索Agent越跑越准Agentic Search 2.0上线以后最大的资产不是模型不是代码而是用户的反馈数据。用户对搜索结果是否满意Agent执行过程中在哪一步出了问题这些都是优化系统的燃料。我在项目里做的是三层反馈闭环。第一层是显式反馈用户可以直接点“有用/没用”或打标签第二层是隐式反馈观察用户是否复制了答案、是否继续追问、是否在报告基础上修改第三层是执行反馈统计每次Agent调用工具的成功率、重试次数、验证不通过的比例。这些反馈不会直接灌回给模型做训练而是先进入一个评估集。每周挑一批新增的真实案例人工标注标准答案然后跑回归测试。如果某类问题连续多次失败就针对这类问题优化流程或Prompt。这种做法可能不如微调模型听起来炫酷却是让Agentic Search在长周期里持续变稳的最朴素、最可靠的方法。5.2 混合增强知识图谱RAG工具调用的协同Agentic Search的未来不太可能是纯大模型“一个模型吃遍天”而是多种搜索能力的融合。我现在的设计里检索阶段会同时跑向量检索、关键词检索、知识图谱查询再把三路结果做融合排序。为什么需要知识图谱因为很多企业关系型问题比如“A客户是B公司代理商B公司又持有C公司股份C公司最近有诉讼”用向量检索很难一次把多层关系捞出来关键词搜索更无能为力。知识图谱能天然表达这种关系配合Agent的推理能力可以处理更复杂的跨实体问题。RAG负责“读文档”工具调用负责“做动作”知识图谱负责“理关系”向量检索负责“找语义”。它们之间由Agent的规划能力统一调度。这样每个组件都能在自己最擅长的场景发挥作用整体鲁棒性比单一方案强得多。5.3 给正在规划Agentic Search的团队建议如果你所在的团队正准备启动Agentic Search相关项目我的建议是不要一上来就追求“全自动驾驶”的宏大目标。先挑一个价值明确、链路可控的场景跑通闭环比如“合同续约提醒”“风险名单筛查”“工单关联分析”这些场景目标清晰、边界有限、试错成本低。等这个场景跑稳了再逐步把工具面扩大把权限模型做得更细把反馈闭环做得更完整。过程中一定要让业务人员参与评测不要只让算法自嗨。Agentic Search 2.0本质上是给业务人员配了一个会办事的助手好不好用他们说了才算。我在实际项目里最深的一个体会是技术架构决定这个Agent能跑多快但权限体系和反馈闭环决定它能走多远。我们见过太多Demo效果惊艳、一上生产就寸步难行的搜索Agent差别往往不在模型选得多强而在工程底座稳不稳。先想清楚“谁能用、能用什么、做错了怎么办”再把自动驾驶的油门踩下去这条路会踏实很多。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻