让多个智能体各司其职:VB.NET语义分析器的工程拆解 | xkmchenmu Blog

让多个智能体各司其职:VB.NET语义分析器的工程拆解

复杂语义分析不宜交给一个无限职责的智能体。本文以VB.NET桌面应用为载体,拆解协调器、专门分析器、共享上下文、工具权限、实时界面和中断恢复之间的关系,并强调人格线索分析的非诊断边界。

让模型阅读多人对话并推测某个参与者的认知功能倾向,表面像一道长提示词题,工程上却同时包含数据清洗、并行推理、证据归并、界面流式更新和用户中断。如果把所有职责塞给同一个智能体,它既要判断材料是否有效,又要计算多个维度,还要写报告和回答追问,任何一步偏离都会污染后续结论。多智能体的价值不在于角色越多越好,而在于把可验证的责任分开。

先限定输出:描述表达线索,不做诊断

对话只呈现人在特定关系、话题和时段中的表达方式,无法等同于稳定人格,更不能替代心理测评或临床判断。系统应把“荣格八维”当作组织观察维度的一套语言,把输出写成带证据和不确定性的假设。所谓人格面具,可以理解为个体为适应情境而展现的外在策略;分析器看到的是枝叶般的行为线索,不是能够直接读取的内在根系。

可靠输出应回答“哪些话支持哪种解释、还有哪些反例”,而不是给用户贴上不可撤销的类型标签。

产品界面需要在输入前说明用途、限制和数据处理方式。聊天记录可能包含第三方隐私,最小化收集、脱敏、访问控制和可删除性都应先于模型效果。报告中应区分原始证据、模型推断与规则汇总,用户才能知道哪一部分可以复核。

把复杂判断拆成四类角色

一种清晰的架构是由协调器维护任务进度,再把不同性质的工作交给专门单元。输入校验器负责确认材料确实是可解析的对话,并提取目标人物;八个维度分析器分别寻找支持与反对线索;位置分析器在各维度结果之上比较组合可能;报告器只消费已确认的中间结果,不回头凭空补充事实。

  • 协调器:选择下一个未完成任务,控制工具范围,并处理暂停或重置。
  • 维度分析器:在同一份经过清洗的材料上独立评分,同时返回证据与置信说明。
  • 综合器:发现互相冲突的判断,要求补证或降低结论强度。
  • 报告器:把结构化结果转成可读文本,保留反例和数据不足提示。
让多个智能体各司其职:VB.NET语义分析器的工程拆解 - 角色编排与证据流

协调器只推进状态,不替子任务下结论

协调器若同时参与具体评分,就会形成隐藏耦合:修改流程提示可能意外改变分析结论。更稳妥的做法是让它只查看待办项、选择处理函数并记录完成状态。预设的任务顺序可以是收集材料、产生维度证据、比较位置可能、生成报告,全部完成后才进入答疑。每一步都要声明输入来自哪个共享字段、输出写入何处,以及什么条件算完成。

共享上下文应像账本,而不是聊天垃圾桶

无状态智能体之间需要一个可追踪的载体。VB.NET 中可以用包含并发字典、待办列表和分析结果的上下文对象保存中间状态,但字段不应任意追加长文本。笔记应有固定键名、更新时间和生产者,评分结果应使用结构化类型,待办项则包含状态与失败原因。这样既方便恢复任务,也能阻止后一个智能体误把旧对话当成新证据。

上下文区域 建议内容 写入规则
输入区 脱敏对话与目标人物 校验通过后只读
证据区 维度线索、反例和分数 按分析器分区覆盖
流程区 待办状态、重试计数 由协调器更新
展示区 报告版本与答疑摘要 从结构化结果派生

上下文过长时,不应简单截掉前半段。先由独立清洗步骤筛除系统噪声、重复消息和无关话题,再把保留内容与摘要建立索引。若某个判断只依赖摘要,报告里要显式降低确定性;需要复核时,还能沿索引回到原始片段。

工具权限决定智能体能越过哪些边界

笔记读写、维度计算、位置比较和报告生成都可以封装成统一工具,并用字典注册。基于 Microsoft.Extensions.AI.Abstractions 的公共调用接口能让传统算法和模型能力采用一致入口,但每个角色只应看到完成当前任务所需的子集。评分单元无需清空会话,答疑单元也不应重新写入已确认的原始材料。

限制工具集不仅减少误调用,还让审计更简单。每次执行记录调用者、工具名、参数摘要、开始与结束时间以及结果状态;涉及修改或清空的动作必须经过界面确认。工具描述可以帮助模型选择,但权限判断必须由程序完成,不能把“请勿调用”仅写在提示词里。

流式界面需要跨线程纪律

桌面端若想展示每个智能体的推理进度,可以让日志项实现属性变更通知,再由 ItemsControl 或类似控件绑定集合。流式响应到达时更新对应项,集合增加或内容变化后把视图滚动到最新位置。关键点是推理回调未必运行在界面线程,任何集合修改都应通过 Avalonia 的 UI 调度器投递,否则并发分析越快,越容易出现随机异常。

用户插话与彻底重置必须分流

取消按钮可能表达两种完全不同的意图。用户只是补充一段材料时,应停止当前推理,把补充内容写入临时笔记,再从受影响的任务继续;用户确认清空时,才重建上下文、日志和待办状态。两者若共用一个布尔值,轻微插话可能误删全部进度。可以让 CancellationToken 负责停止工作,再用明确的取消原因决定恢复路径。

恢复时还要防止旧回调继续写界面。每轮运行持有自己的任务代号,回调提交更新前核对代号与当前会话是否一致;重置后即使旧网络请求迟到,也只能被丢弃。这个小设计能避免用户看到已经取消的分析结果突然回到屏幕。

并行不是同时相信八份答案

八个维度分析器相互独立时,可以通过 Task.WhenAll 并行等待,从而利用推理服务的并发能力。但速度优化不能省略结果校验。每个子任务应返回规定范围内的分数、引用证据和解释;解析失败、越界或证据为空时只重试该维度,并设置明确上限。达到上限后,系统应报告数据不足,而不是悄悄填入中间值。

  • 对暂时性网络错误使用退避重试,对格式错误先收紧输出约束。
  • 为每个子任务设置独立超时,避免一个维度拖住整份报告。
  • 保留互相矛盾的结果,让综合器解释冲突,不做简单平均。
  • 并发数量应受服务限额和成本预算控制,不能无限创建请求。

答疑阶段读取证据,不重写历史

报告完成后,应用可以切换到普通问答循环,让用户询问某项判断为何成立。此时可用工具应收缩为查看报告、读取证据和定位原对话片段。回答必须引用已有材料;若用户提供新信息,应创建新的分析版本,而不是在旧结论上无痕覆盖。版本化能让用户比较前后差异,也方便发现某个新增片段究竟改变了哪项推断。

这套编排方式并不限于人格线索。凡是需要多个视角核验、结果可分阶段保存、用户可能中途补充材料的语义任务,都可以复用协调器、专门单元、共享账本和受限工具的组合。真正值得复用的不是某组角色名称,而是清晰的输入契约、可恢复的状态以及对不确定性的诚实表达。

(0)
打赏 支付宝扫一扫 支付宝扫一扫

发表回复

登录后才能评论