从顶会论文到履约 Agent:美团履约团队的技术路线怎么落地

2026-07-03 26 预计阅读时间: 1 分钟
来源: tech.meituan.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:12 分钟

美团履约业务天然复杂:订单、骑手、商家、用户、天气、交通、异常事件交织在一起,很多决策既要实时,又要可解释、可控。来源摘要提到,美团业务研发平台/履约 AI 算法团队正在围绕大模型构建 Agent 技术体系,并探索 Agent 自进化运营系统;技术方向覆盖 CPT、Post-training、Agentic RL、多模态理解,并持续在 ACL、EMNLP 等会议发表研究成果。

这类分享的价值不只在“又发了几篇论文”,而在于它展示了一条很清晰的工程路线:把语言模型从通用能力,逐步压到履约业务的任务、数据、工具和反馈闭环里。

履约场景为什么适合 Agent

履约不是单轮问答,而是一串带约束的行动:识别问题、查询系统、判断风险、调用工具、生成处置建议、观察结果,再调整下一步策略。传统规则系统擅长稳定流程,但面对异常组合时容易膨胀;单纯的大模型擅长理解文本,却缺少业务状态和行动能力。

Agent 技术体系的关键,是把大模型放进一个“能观察、能调用、能复盘”的运行框架里:

  • 观察:读取订单状态、配送轨迹、客服文本、图片、地图或天气等信息。
  • 推理:判断延误、地址异常、商家出餐慢、骑手绕路等问题的可能原因。
  • 行动:调用内部工具,例如查询 ETA、触发补偿策略、生成客服解释、升级人工处理。
  • 反馈:把执行结果、用户满意度、履约指标变化反哺训练与策略优化。

来源摘要提到的“Agent 自进化运营系统”,可以理解为团队希望让 Agent 不只是执行固定脚本,而是在反馈中持续改进策略。当然,真实生产系统不会让模型无限自由行动,权限、审计、灰度、回滚仍然是底线。

CPT、Post-training、Agentic RL 各自解决什么问题

围绕大模型做业务 Agent,通常不是只靠一个提示词就能解决。来源摘要列出的几个方向,正好对应不同阶段的能力建设。

CPT(Continual Pre-training) 更像“补业务常识”。通用模型知道什么是配送、订单、用户投诉,但不一定理解履约系统里的状态字段、异常标签、平台术语和历史处置模式。持续预训练可以让模型熟悉业务语料的语言分布。

Post-training 更像“教它按规范做事”。在履约场景里,回答不仅要正确,还要符合流程:什么时候查询工具,什么时候拒绝越权操作,什么时候给用户解释,什么时候升级人工。监督微调、偏好优化、指令对齐都可以落在这一层。

Agentic RL 更像“训练它在多步任务中拿结果”。单步回答好,不代表多步任务成功。Agent 可能第一步查错工具,第二步误判异常,第三步给出看似合理但不可执行的建议。强化学习关注的是轨迹级奖励:最终是否降低延误、是否减少人工介入、是否符合安全策略。

多模态理解 则把履约现场拉进模型输入。比如门店照片、骑手上传图片、地图截图、异常凭证等,都可能帮助判断问题。来源摘要没有展开具体系统,因此这里应保持克制:可以推断多模态是履约 Agent 的重要能力,但不能把未披露的产品细节当成事实。

可以这样实践:搭一个履约异常 Agent 原型

下面是一个可改造的最小原型,用于演示履约 Agent 的基本形态:模型根据订单状态决定是否调用工具,并输出下一步处置建议。示例使用 OpenAI Chat Completions 风格接口;如果你使用其他大模型服务,只需要替换 base_urlapi_key 和模型名。

运行前准备:

pip install openai
export OPENAI_API_KEY="你的 API Key"

保存为 delivery_agent_demo.py

import json
import os
from openai import OpenAI

client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

ORDER_DB = {
    "order_1001": {
        "order_id": "order_1001",
        "status": "delivering",
        "eta_minutes": 18,
        "promised_minutes": 10,
        "rider_distance_km": 2.4,
        "merchant_ready": True,
        "user_message": "已经超时了,骑手是不是走错了?",
    }
}


def get_order_snapshot(order_id: str) -> str:
    return json.dumps(ORDER_DB.get(order_id, {}), ensure_ascii=False)


tools = [
    {
        "type": "function",
        "function": {
            "name": "get_order_snapshot",
            "description": "查询订单履约状态快照,用于判断延误、距离、商家出餐等异常。",
            "parameters": {
                "type": "object",
                "properties": {
                    "order_id": {"type": "string", "description": "订单 ID"}
                },
                "required": ["order_id"],
            },
        },
    }
]

messages = [
    {
        "role": "system",
        "content": (
            "你是履约异常处理 Agent。你必须先查询订单状态,再给出建议。"
            "建议必须包含:异常判断、下一步动作、给用户的话术。"
            "不要承诺你无法执行的补偿或调度动作。"
        ),
    },
    {"role": "user", "content": "请处理 order_1001 的履约异常。"},
]

first = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=messages,
    tools=tools,
)

assistant_msg = first.choices[0].message
messages.append(assistant_msg)

for call in assistant_msg.tool_calls or []:
    if call.function.name == "get_order_snapshot":
        args = json.loads(call.function.arguments)
        result = get_order_snapshot(args["order_id"])
        messages.append(
            {
                "role": "tool",
                "tool_call_id": call.id,
                "content": result,
            }
        )

second = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=messages,
)

print(second.choices[0].message.content)

运行:

python delivery_agent_demo.py

这个例子故意很小,但它体现了生产 Agent 的几个关键约束:

  • 不让模型凭空判断订单状态,而是先查工具。
  • 在系统提示词里限制不可承诺的动作。
  • 把输出结构化为异常判断、下一步动作、用户话术。
  • 工具结果以 JSON 返回,方便后续记录、评估和回放。

如果继续向生产靠近,可以加入三类能力:

agent_runtime:
  safety:
    max_tool_calls: 5
    require_human_approval_for:
      - refund
      - rider_reassignment
      - user_compensation
  evaluation:
    offline_cases: data/delivery_incidents.jsonl
    metrics:
      - tool_call_accuracy
      - resolution_rate
      - policy_violation_rate
      - user_message_quality
  rollout:
    mode: shadow
    traffic_percent: 5
    fallback: human_operator

这段 YAML 不是来源系统配置,而是一个可参考的工程骨架:先做 shadow mode,只观察不执行;再小流量灰度;对退款、改派、补偿等高风险动作加人工审批。

论文能力如何进入业务闭环

顶会论文往往关注一个明确问题:更好的训练策略、更强的推理能力、更可靠的工具调用、更稳的多模态理解。但业务系统需要的是组合拳。

一个可落地的闭环通常长这样:

  1. 沉淀任务集:把历史履约异常整理成可回放案例,包括输入、工具结果、人工处置、最终结果。
  2. 训练基础能力:用 CPT 和 Post-training 让模型熟悉业务语言、流程规范和工具格式。
  3. 构建 Agent 运行时:统一工具注册、权限控制、调用日志、失败重试和降级策略。
  4. 离线评估:用历史案例测工具选择、动作合规、话术质量和任务完成率。
  5. 在线灰度:先影子模式,再辅助人工,再进入低风险自动化动作。
  6. 反馈再训练:把错误轨迹、人工修正、用户反馈纳入下一轮数据闭环。

这里最容易被低估的是评估系统。没有稳定评估,Agent 的“自进化”可能变成自我强化错误:模型学会了讨好某个指标,却损害用户体验或业务规则。

落地时要守住的边界

履约 Agent 很有想象力,但上线时要像处理交易系统一样谨慎。

  • 高风险动作必须可控:补偿、改派、取消、处罚等动作应有权限和审计。
  • 工具结果优先于模型猜测:模型不能用“看起来合理”替代实时状态。
  • 多模态输入要防噪声:图片、截图、定位信息可能缺失或误导,需要置信度和回退路径。
  • 奖励函数不能只看短期指标:降低人工量不等于用户体验变好,压缩配送时间也可能伤害骑手体验。
  • 论文方法需要工程化验证:ACL、EMNLP 论文提供方向和方法,业务落地还要经过数据、成本、延迟、安全的检验。

对工程团队来说,比较稳的采用路线是:先把 Agent 放在“建议层”和“质检层”,用真实业务流量做影子评估;当工具调用准确率、策略合规率、人工采纳率都稳定后,再逐步开放低风险自动化。这样既能吸收大模型和前沿论文的能力,也不会把履约系统的安全边界交给一次模型输出。


相关推荐