当前位置: 首页 > news >正文

山东大学创新实训(六)--基于Multi-Agent的剧本杀平台博客

这段时间,我们组线下讨论一下,觉得作为一个Agent系统,项目虽然可以跑,但我们事前的功能都是相当于在部分主文件不断的加功能,功能越来越多,但主链路越来越模糊。我们考虑收口主链路。因为一个Agent最怕的,不是暂时缺少某个 feature,而是同一类逻辑在不同地方各写一份。就比如我们这个项目一个重心是NPC Agent文字的输出,我们会考虑

  • 它到底在做什么决策
  • 它输出的文本是什么
  • 它有没有 tool intent
  • 它有没有越权泄漏
  • 它要不要转成语音
  • 它要不要进 trace
  • 它会不会更新 belief 或房间状态

如果这些事情在项目里没有统一链路,而是散落在多个局部函数里,我们后续不管是修改功能还是测试,都会愈发困难。我们要先统一主链路,继续做升级。

Agent“决策”和“输出”拆开

我先做的第一件事,是新建 backend/app/core/agent_protocol.py,把几个核心协议对象单独定义出来:

  • AgentDecision
  • MessageRender
  • AudioRenderTask
  • BeliefUpdate
  • GuardrailResult

这一步看起来像是“加了几个 dataclass”,但它其实是这次收口的起点。

因为以前很多逻辑默认把“NPC 想做什么”和“NPC 最后说了什么”混在一起。
一旦混在一起,后面所有层都会痛苦:文本、语音、字幕、复盘、工具调用、状态写入都会互相打架。

所以我把这几个对象先抽出来,目的很明确:

  • AgentDecision 负责表达“它打算做什么”
  • MessageRender 负责表达“它最终向玩家展示什么”
  • AudioRenderTask 负责表达“这条文本是否要异步转成语音”
  • BeliefUpdate 负责表达“这一轮输出对内部判断产生了什么更新”

这一步做完后,后面的 Structured Outputs、Voice、Replay、Behavior Evals 才有了统一落点。

公共输出收口到统一链路

接下来我把公共输出尽量统一收口到 backend/app/core/agent_output_pipeline.py。

这条 pipeline 现在负责的事情包括:

  • output mode metadata 规范化
  • guardrail 检查
  • decision/render 结构补齐
  • trace 打点
  • tool intent 分发
  • belief update 写入
  • 房间消息落盘
  • SSE 发布
  • 语音异步任务调度

也就是说,以前那些“消息发出去就算完”的逻辑,现在不再只是简单 publish,而是走完整的主链路。

我这样做的原因很现实:
如果以后我要继续做 BeliefState、voice-safe rewrite、tool dispatch side effect、replay explainability,它们都必须挂在同一条链路上,否则每加一层都要反复补分支。

所以这一步不是“抽象得更漂亮”,而是把系统未来所有能力的落点先定死。

阶段推进迁到workflow

如果说 service 层是在拆“职责”,那 workflow 层就在拆“流程”。我这几天做的另一条主线,是把阶段推进继续迁进 backend/app/core/workflows/game_workflow.py。

例如advance_discussion_turn,这段逻辑原来要同时处理:

  • 当前轮到谁发言
  • NPC 是陈述还是提问
  • NPC 对 NPC 的即时问答
  • human turn ready 提示
  • discussion round 结束后的收尾

它本质上就是 orchestration,而不是 route 应该承担的职责。不应该存在于game.py,应该迁徙到独立的workflow

Belief、Voice、Recovery

BeliefState 不是只存字段,而是真正写进 room state,而且 belief 已经开始影响vote target,discussion question target,private reply 策略,也就是说,Belief 已经不只是一个结构化字段,而开始参与 Agent 后续行为。而对于Voice-safe rewrite, voice_persona 和 voice_safe_rewrite,并且把它们挂回主链路。
现在文本仍然是业务事实,语音是渲染层;但在 TTS 之前,系统会先尝试做 voice-safe rewrite,而不是直接拿原始文本朗读。Durable recovery不只是能落盘,我不满足于仅仅把任务存到 durable_tasks.json,我把他们推进到了回复失败记录,最大回复次数等,使得方便后续测试。

http://www.jsqmd.com/news/928231/

相关文章:

  • 第三周进度
  • 2026年最新厦门市金银首饰回收+金条金币+铂金K金 高价回收;实体老店回收黄金 多年口碑 交易放心;TOP5实力权威排行榜推荐+联系方式 - 亦辰小黄鸭
  • 2026年最新汕头市金银首饰回收+金条金币+铂金K金 高价回收;实体老店回收黄金 多年口碑 交易放心;TOP5实力权威排行榜推荐+联系方式 - 亦辰小黄鸭
  • 第五章:年终
  • Product Hunt 每日热榜 | 2026-05-31
  • 10. JavaArrayList 核心笔记
  • 扔掉塑料尺:给未来孤勇者的科学排毒指南
  • [分享]EssentialPIM安卓版(手机个人信息管理软件)
  • 告别静音!Windows 11系统声音保姆级配置指南(附完整音效清单与事件对照表)
  • 智慧火灾巡检-基于深度学习火灾烟雾识别系统,森林火灾识别系统。森林火灾检测 无人机森林火灾检测
  • 【周报】液冷板块集体跌停,但我在算一笔账
  • 【AI问答】GO代码循环返值
  • GHelper完整指南:华硕笔记本轻量控制神器的终极教程
  • 技术如何重塑人类感知与希望:算法、AR/VR与数据可视化的中介作用
  • 保姆级教程:用Python和PyTorch从零搭建一个行人重识别(ReID)原型系统
  • 基于YOLOv8的美国手语手势检测系统 美国手语手势检测数据集训练及应用
  • VSCode配置QT环境
  • 华为eNSP静态路由实验教学
  • 第六章:觉醒
  • 航拍地面目标数据集1713张VOC+YOLO格式
  • Ubuntu 远程登录配置
  • 礼盒定制避坑指南!新手品牌常见问题总结
  • 工厂设备预测性维护的必要性与实践案例
  • 别再死记硬背了!用Spring Boot实战案例,5分钟搞懂UML类图的6种关系
  • UE图层混合地形材质
  • 告别无效刷屏!TrendRadar:最快30秒部署的开源热点助手,让你只看真正关心的新闻
  • 如何利用Seraphine智能助手提升英雄联盟游戏体验:5个实战场景终极指南
  • AI Agent 浏览器任务遇到安全验证时,如何设计暂停与人工复核流程
  • 数据结构从零开始③:栈和队列——操作受限的线性表,一篇搞懂
  • mongodb数据库服务器内存过高分析处理