阿里商旅基于 AgentScope 构建多智能体差旅助手,通过多智能体架构,事项收集准确率从50%提升至90%。
原文标题:准确率提升至 90%,阿里商旅基于 AgentScope 构建多智能体差旅助手最佳实践
原文作者:阿里云开发者
冷月清谈:
怜星夜思:
2、文章提到通过动态 Prompt 组装机制,为 AI 构建了一个状态机,这个状态机是如何根据用户对话阶段进行精准识别的?其中“状态”是如何定义的,又是如何转换的?
3、阿里商旅在构建 AI 应用可观测性体系时,选择了 Langfuse,并提到其在开源透明、数据安全、成本控制和可扩展性方面具有优势。除了这些,Langfuse 还有哪些特性或功能,是阿里商旅特别看重的?
原文内容
阿里商旅是阿里巴巴旗下一站式数智化差旅服务平台。依托阿里巴巴生态强大的供应链及信息数字整合能力,帮助企业实现降本增效,增加合规透明度,全方位提升企业组织效率及员工差旅体验。其中AliGo阿里商旅的差旅助手,用户只需要输入确定的行程时间和地点,AliGo就会自动规划行程为用户推荐合适的交通方式,实现"出差事项收集 → 行程规划 → 一键下单"的完整业务闭环。
一、背景
阿里商旅早期通过workflow+单智能体的模式快速构建并成功上线了 AliGo 系统的第一个版本,然而,在实际使用过程中,我们发现这种模式存在技术瓶颈和架构局限性,亟需进行代码化升级。
(一) 痛点分析
1.单智能体模式的技术瓶颈
随着业务逻辑复杂度的持续攀升,Prompt Token 数量急剧增长,token 过多,就会导致大模型的注意力机制开始出现明显衰减,无法满足业务对高准确率的核心要求。具体表现为:
-
准确性不足:以点选需求为例,尽管经过百余次的 Prompt 调优,准确率仍仅维持在 50%左右。
-
稳定性问题:线上频繁出现"事项识别异常请重试"、"事项收集结论不输出"等核心问题,严重影响用户体验。
2.架构泛化能力不足
-
协作机制缺失:各 Agent 之间缺乏有效的通信机制,导致能力无法复用和协同,扩展性不足。
-
规划能力薄弱:系统缺乏统一的规划和协调中枢,只能处理单一意图识别,无法应对复杂的多意图融合场景。
3.上下文工程的初级阶段
-
数据结构混杂:未有效分离用户视角的对话记录与智能体所需的上下文信息,造成大模型理解负担。
-
共享机制缺失:缺乏合理的上下文分层机制,不同子智能体间无法实现上下文的有效共享和传递。
(二) 目标
为了解决上述核心痛点,我们启动了 AliGo 代码化架构升级,主要目标包括:
二、方案
(一) 技术选型
1. 技术栈:Python or Java
结论:最终采用“Python 写核心 AI 逻辑 + Java 写服务层” 的混合模式。用 Python 实现 Agent 核心智能逻辑,包括 规划、记忆、LLM 调用;Java 构建外围高并发服务,比如前置的鉴权、MTop 对接、MCP 服务等。
编者:AliGo选型时间为2025年中旬,目前,AgentScope已经提供AgentScope Java,供Java开发者选择
2. 智能体框架选型:AgentScope vs LangGraph
团队对两个框架进行了多个场景的实操和调研,直观感受:对于基础能力,如 MCP 服务调用、与 Qwen LLM 集成时 AgentScope 开箱即用,LangGraph 要额外做一些适配工作等原因,最终选型AgentScope,原因如下:
-
提供实时控制、中断处理、沙箱执行等企业级能力;
-
内置AgentStudio 可视化工具,可以帮助我们获得透明开发体验,掌握智能体开发的全部生命周期;
-
对 Qwen 系列模型原生支持;
3. Web 框架:FastAPI or Flask
Python 主流的 Web 框架主要是 FastAPI(新)和 Flask(老)。
结论:使用 FastAPI,原因如下:
-
现代 Web 开发趋势,异步和类型安全是未来,异步处理需求较多;
-
性能更好,FastAPI 的类型安全更有助于大型项目维护。
(二) Multi Agent架构
基于商旅业务特性,我们尝试了几种常见的 Multi Agent 架构模式。
结论:基于准确度与耗时的考量,我们采用了“Handoffs(交接模式)+ Routing(纯路由方式)”混合的模式,比如在行程规划、知识库查询的场景下采用 Routing 模式,在信息查询的场景下采用 Handoffs 模式,模式不固定可按需调整。
1. 架构图
以主规划智能体为核心,协调多个专业化子智能体协同工作,形成完整的差旅规划解决方案。
(三) 意图识别
意图识别智能体的职责如下:
主智能体+意图识别智能体实现-Level3 组件图
在系统运行过程中我们发现了一个性能问题:当用户有明确意图并通过界面操作触发功能时(如点击“为我规划行程”、“为我提申请”、“开始规划”),系统仍需经过大模型的完整分析流程,导致不必要的延迟。
我们重新审视了架构设计,提出了分层处理策略:将明确的用户意图通过快速通道直接路由,复杂语义理解仍交由 AI 智能分析。整体就是个"快慢车道"的设计:
-
快车道:规则引擎,处理那些固定套路的话,比如“为我规划行程”、“为我提申请”、“开始规划”这种,可以直接跳过意图分析直接路由到对应智能体。
-
慢车道:大模型分析,处理那些复杂的、长句子、多意图的请求。
第二阶段的主智能体+意图识别架构
核心的设计在于主智能体的动态 Prompt 生成机制。主智能体(main_plan_agent)并不是简单地调用规则引擎或 LLM 意图识别,而是根据规则引擎的 classify() 结果动态选择不同的处理路径:
def get_prompt_main_plan(user_input: str) -> str:
# 运行时决策:根据规则引擎结果动态选择Prompt模板
rule_match_result = classifier.classify(user_input)
if rule_match_result:
# 规则匹配成功:生成简单意图Prompt,直接路由到对应智能体
return _get_simple_intent_prompt(...)
else:
# 规则匹配失败:生成复杂意图Prompt,先调用intent_recognition_agent
return _get_complex_intent_prompt(...)
在项目初期样本量有限的情况下,为兼顾推理速度与准确率,可采用推理速度快的大模型(如 Qwen3-Next-80B-A3B-Instruct),通过显式输出其推理逻辑,有效提升意图识别的准确性。商旅应用场景:意图识别、日期时间转化。
(四) 实时思考链&流式输出
引入多智能体架构模式不可避免地增加了整体响应耗时,因此我们通过设计实时思考链动态展示各智能体的推理与协作过程,来缓解用户在等待最终结果时的焦虑感。
1. ReActAgent
该智能体是一种基于“思考(Reason)-行动(Act)-观察(Observation)”循环架构的系统,深度融合大语言模型的推理能力与外部工具调用能力,通过交替生成推理轨迹与执行动作高效完成复杂任务。
在 AgentScope 中,其核心由两个抽象方法_reasoning和_acting构成,并通过钩子机制(Hooks)在推理、执行等关键节点注入自定义逻辑,从而支持实时引导、并行工具调用、结构化输出等高级功能。
-
推理过程(
_reasoning):调用大语言模型生成下一步行动方案;支持流式输出以实时呈现思考链;并能自动将纯文本响应解析为结构化的工具调用格式。 -
执行过程(
_acting):支持工具的并行或串行调用;统一处理执行结果并持久化至内存上下文;同时提供中断响应与错误恢复机制。
observation = initial_user_input history = []while True:
# 调用大语言模型,基于当前观察和历史生成思考与行动
thought, action, action_input = llm_agent.reason_and_act(observation, history)
if action == “Finish”:
# 任务完成,输出最终答案
return thought # 即最终回答
else:
# 执行工具调用
result = execute_tool(action, action_input)
# 将工具结果作为新的观察
observation = result
# 记录本轮推理与执行到历史
history.append((thought, action, result))
2. ReActAgent Hook
通过前置打印钩子函数(print hook),可在 Agent 执行过程中实时拦截每一条生成的消息;当捕获到tool_use类型消息时,自动调用add_tool_use,而检测到tool_result类型消息时,则触发add_tool_result,从而实现对工具调用及其结果的细粒度追踪与状态同步。
# 在_react_agent.py中的_acting方法实现了工具调用的实时返回 async def _acting(self, tool_call: ToolUseBlock) -> Msg | None: # 创建工具结果消息容器 tool_res_msg = Msg(...)try:
# 执行工具调用,返回AsyncGenerator
tool_res = await self.toolkit.call_tool_function(tool_call)response_msg = None
# 异步迭代处理工具响应块
async for chunk in tool_res:
# 实时更新工具结果
tool_res_msg.content[0][“output”] = chunk.content# 实时打印输出(除非是完成函数且成功执行)
if (tool_call[“name”] != self.finish_function_name or
not chunk.metadata.get(“success”)):
await self.print(tool_res_msg, chunk.is_last)# 处理中断
if chunk.is_interrupted:
raise asyncio.CancelledError()# 返回最终响应消息
if (tool_call[“name”] == self.finish_function_name and
chunk.metadata and chunk.metadata.get(“success”)):
response_msg = chunk.metadata.get(“response_msg”)
return response_msg
[ { "type": "tool", "id": "{id}", "name": "query_tool", "input": { "question": "什么是差标管控" } } ]
[
{
“type”: “result”,
“id”: “{id}”,
“name”: “query_tool”,
“output”: [
{
“type”: “text”,
“text”: “问题: 什么是差标管控\n\n搜索结果:\n\n1. 相似度: N/A\n\n\n在阿里商旅出差审批单中,预算与差标的区别如下:\n- 预算是指本次差旅出行的整体预算费用。\n- 差标是指本次差旅形成中,出行人乘坐飞机以及入住酒店等差旅类目的费用标准。\n\n”
}
]
}
]
ReActAgent.register_class_hook('print', 'task_print_hook', task_print_hook)
3. TaskCollector
TaskCollector 是一个自定义任务状态收集器,核心职责是统一管理思考链状态信息。其主要功能包括:管理任务的完整生命周期(PENDING、DOING、DONE、FAILED)、维护任务间的层级关系、通过发布-订阅模式实时推送状态更新,以及管理任务队列与订阅者列表。
关键方法涵盖:
-
add_use()用于添加工具调用任务。 -
add_result()用于记录工具执行结果。 -
subscribe()/unsubscribe()实现灵活的订阅管理机制。
4. 流式输出层
该模块的核心职责包括:
TaskCollector 实例以统一管理任务状态。
task_update 类型消息以实时渲染思考链,并监听 text 类型消息以展示最终回答。
5. 一句话经验
基于 ReAct 智能体在调用工具时暴露的 hook,可构建实时推理链(Chain-of-Thought),通过逐步展示智能体的思考与行动过程,有效缓解用户在等待最终结果时的焦虑感。
(五) 上下文工程
核心上下文技术架构:
-
全局上下文管理
-
会话记忆管理
-
动态 Prompt(状态机)
-
工具注册管理
1. 记忆架构设计
通过出入栈的方式维护智能体调用链的层级关系以及共享 sessionId 来实现模块间的记忆共享。主要解决以下三个核心问题:
2. 数据表关系
-
消息存储表:用于存储详细的消息记录;
-
会话管理表:用于管理会话的基本信息和会话描述;
-
对话记录表:用于存储精简的对话记录,主要记录用户查询和智能体的最终回答;
3. 记忆共享
为确保智能体(Agent)的独立性与数据隔离,系统默认采用各智能体独立管理自身对话历史的设计;然而,在复杂的多智能体协作场景中,用户体验的连续性至关重要。为此,我们引入上下文共享机制,对高相关性的智能体动态开放必要的上下文信息,从而实现对话的无缝流转与状态同步,在保障隔离性的同时兼顾协作效率与体验一致性。
4. 一句话经验
AgentScope 框架提供了标准化的上下文格式,在技术实现上以业务关系驱动智能体间的记忆复用,并基于最小权限原则动态供给各智能体所需的上下文信息,在有效降低上下文规模的同时,显著提升模型推理的准确度与效率。
(六) Prompt工程(工程与智能体结合)
我们此前将业务流程、规则及工具调用规范全部嵌入 Prompt 中,虽保证了整体性,但其结构本质上是一个线性的“工作流程说明书”,难以适配用户非线性、动态变化的对话需求。同时,要求模型在全量业务规则基础上实时推理用户当前状态,对其能力要求会非常高。
为此,我们转而采用动态 Prompt 组装机制,本质上为 AI 构建了一个状态机:通过工程手段结合自然语言理解与程序化状态控制,精准识别用户所处的对话阶段,并将模型注意力聚焦于当前主链路,从而打造出一个鲁棒性更强、更智能的对话 Agent。
一句话经验
在工程实践中,应协同模型共同确定当前及下一轮对话的注意力焦点,并据此明确业务边界;在此可控范围内,交由 AI 自主处理逻辑细节,从而在工程确定性与 AI 灵活性之间实现有效平衡。
三、周边生态
(一) 知识库
在 AliGo 多智能体架构中,为了给各个企业提供内部知识检索能力,也为了支持差旅场景的专业问答(差旅政策、申请单规则、企业制度等),我们构建了一套完整的企业级知识库系统,具备以下核心能力:
1. 技术选型
一、方案对比
我们调研了市面上的两种成熟的方案:
二、选型结论
最终选择 MaxKB 作为基础框架,主要原因:
2. 架构设计
(二) 观测
在 AliGo 多智能体系统迭代过程中,我们面临着三大核心观测挑战:
为了解决上述痛点,我们尝试构建完整的AI应用可观测性体系,核心目标包括:
1. 技术选型
在 LLM 应用开发和监控领域,主要的可观测性平台是 Langfuse(开源)和 LangSmith(商业)。
选型结论:经综合评估,Langfuse 在开源透明、数据安全、成本控制和可扩展性方面具有更具优势,完全满足商旅 Saas + 本地化部署的诉求,是构建可控、可靠的 LLM 应用监控平台的最佳选择。
2. 架构设计
(三) 评测
在阿里商旅行程规划系统中,AI测评系统作为质量保障的核心基础设施,为多智能体系统的输出结果提供自动化、智能化的评测能力。随着智能体能力的不断迭代升级,我们需要一套完整的测评体系来确保每次发布的质量稳定性, 因此构建了这套AI测评系统,具备以下核心能力:
1. 架构设计
四、效果
-
升级前不可解决的 bug 列表,通过版本升级100%解决。
-
试用日志从 12 月代码化版本上线后,体感和指标都逐步变好。
-
有幸获得了 InfoQ 2025 年度 AI Agent 最具生产力产品/应用/平台。
-
阿里商旅 AI 解决方案有幸荣获量子位颁发的 2025 人工智能年度杰出解决方案奖认可。
五、未来规划
传统的迭代依赖人工复盘和手动调优的方式效率低、响应慢,难以支撑系统持续进化。后续,我们会持续通过冷启动优化、主动发现异常、引入 Prompt 优化智能体等构建一套多智能体自进化(Self-Evolving Agent System)方案,驱动阿里商旅向更智能、更敏捷、更可靠的方向升级。
AgentScope 是通义实验室开源的企业级智能体开发框架,提供智能体编排、工具调用与评测等核心能力,并原生支持智能体微调,助力开发者快速搭建企业级 Agent 系统。目前在GitHub已经有16k的star,欢迎大家关注使用AgentScope探索并沉淀多智能体最佳实践。 https://github.com/agentscope-ai


















