我觉得这个挺有意思的,正好我有一个不错的 idea,我们来试试。

这个项目是让我们设计一个 Agent 卡车司机,让他在不断变化的货源环境中取得更好的分数。系统给定一批司机、50 万条货源、模拟地理位置在广东省、31 天模拟时间,要求在连续仿真过程中做出以下四类动作:搜货、等待、接单、空驶。每一次的动作决策都需要详细的推理,而我觉得这就非常适合设计一个 Agent 去做出决策。

当然这个问题的 难点 在于,司机会自带一些偏好,就是扣分项,不是单纯地看哪个货源收益最高就去接了。比如,司机要求每日 0 点到 8 点休息,不然违反一次扣 3000,而每天勤勤恳恳接货送货的收益可能也就 1500,这样一来一回直接变成负收益。所以,我们要多方面考虑各种约束:司机偏好约束、货源约束、地理位置约束、时长约束等等,来让 Agent 选择出最优的决策。

赛题背景

在现代货运平台上,司机找货与接单属于 高度动态、持续进行 的经营活动。司机需要在不断变化的时间、空间、货源与自身条件下,在「接单」「休息」与「空驶迁往其他区域」等策略之间做出选择;每一类选择都会改变后续可观货源与阶段收益。仅针对「单次接单」进行预测,往往难以刻画上述 跨时段、多步衔接 的决策特征。

本赛题在 货运业务场景 下构建仿真环境:系统在每轮交互中仅提供必要的司机身份类信息,智能体须自主获取环境状态与可选行动,在 模拟的一个自然月 内持续推进决策,在遵守业务约束的前提下,实现 月度净收益 的提升,并尽可能满足与司机运营相关的 个性化偏好

为什么是 Agent 而不是 Workflow?

首先我们要知道,Agent 的基本动作循环是:感知-思考-行动-感知,也就是 observe-think-act-observe。它会根据环境状态思考,采取对应的行动,然后根据环境反馈继续思考下一步行动。这很符合我们这个项目想做的事情:司机在满足自己偏好的情况下,根据市场动态和热点,自主决定是否要搜货、是否要去接货,而不是一搜到货就去接,只追求眼前最大利益。

如果是 Workflow,那大概只能是:遇到偏好规定的就完成偏好,没有偏好限制就搜货,然后挑选最大收益的货物去接,或者选择不接、等待。

但是这个问题肯定没有这么简单:

  • 现在搜不到高价值的货,不代表 30 分钟后就搜不到;这个地方搜不到,也不代表别的地方就没有;现在接了货,可能就会错过后面一些突发的偏好任务。
  • 司机的偏好不是简单的 if-else。 比如每月休息天数要求、禁行区、回家、接哪里的货,这些都要动态平衡风险。举个最简单的例子:这一单接了赚 3000,但是会违反偏好扣 300;这个时间段下别的单子可能最高只能赚 1000,你接还是不接?
  • 目标是多目标权衡。 收益、时间、偏好、风险、未来机会之间要平衡。纯 Workflow 很容易变成短视规则。
  • 在整个过程中,司机要根据反馈迭代,实时做出调整。每一步都要 observe 当前状态、think 当前局势、act 调用工具,然后根据新状态继续调整策略。

为什么是 Multi-Agent 而不是 Single-Agent?

假如我们使用 Single-Agent,那么系统就要让一个 LLM 完成超多多多多的事情:

理解司机偏好
追踪长期 memory
判断是否搜索
分析货源可达性和收益
权衡偏好风险
选择最终动作
总结失败经验

这么多事情塞给一个 Agent,首先会带来一个问题:上下文爆炸。Prompt 过长了,对于能力不强的小模型来说容易 Lost in Middle,不能很好地完成任务。

同时还有很多其他问题:

  • 一个 Agent 既要搜索,又要接单,又要看自己的动作是否合法、是否符合偏好,就容易出现一种很不好的情况:包庇自己。它会自己给自己找理由,出现高收益货物就接,全然不顾偏好;并且中间一个环节推理错了,就可能导致后面一起错,出现连锁效应。
  • 错误难以定位。 线上效果差时,Single-Agent 很难知道问题来自哪里:是偏好没理解?搜索错了?货盘分析错了?还是主决策没决策好?如果用 Multi-Agent,每个 Agent 的职责清晰,可以把每个 Agent 的 io、trace 抓出来详细分析,逐节点定位。
  • 不利于系统的长期更新。 Memory、Preference、CargoAnalysis、Search 都是可以独立优化的模块。拆成多个 Agent 后,可以单独替换 parser、增强 memory、改 scoring、优化 Search,而不影响整个系统。

这点看起来,单智能体和多智能体的对比就像一个人和一个团队的对比一样,都是类似的。

所以,单智能体的 上下文爆炸、职责过于庞杂、错误难以定位、系统难以优化,在我们使用多智能体之后都会得到有效改善,使整个系统处于 可验证、可追踪、可迭代 的环境之中。

一个真实实验里的小例子

发生在我们的真实实验中,当我们使用单智能体时,有这样一个决策环境:

当前时间:21:30
司机偏好:每天 22:00-06:00 必须连续休息,不休息罚款 5000
候选货源 A:21:45 装货,预计 02:00 完成,收益很高,2000
候选货源 B:短单,22:00 前可完成,收益一般,500
动作选择:take_order(A)

这时候智能体就做了一个绝对错误的决定:

A 单收益最高,而且装货时间很近,当前车辆距离也合适。
虽然会影响休息窗口,但可以完成后再休息,因此选择 A。

在我的视角看来,这里绝对应该选择 take_order(B)。但是单智能体选择了 A,这可能是因为模型还不够强,或者它理解错了偏好,并且没有计算罚款,导致后续决策出现了很大的问题。

之后的篇章中,我们会详细说一下这个项目的框架设计与思考,以及系统具体模块的拆解。

参考来源

赛题信息参考天池比赛页面:算法大赛-天池大赛-阿里云