Agent 架构设计
内容提要
该文介绍了一个基于LLM的Agent架构设计,用于将自然语言转换为Mermaid图表。核心是将流程分为外层“信息澄清”和内层“代码生成与修复”两个循环,并采用多角色分工(如记录员、审查员、决策官等)实现流水线处理。关键经验包括:严格区分记录与猜测、集中决策逻辑、以及通过预算控制追问次数,以提升纠错和审计能力。
延伸解读
两层循环分离的价值
文章强调将“信息澄清”和“代码生成与修复”拆分为两个独立循环,而非混在一起。这种设计避免了“歧义该不该问”的困境,因为外层管信息完整性,内层管代码正确性。实际收益是:内层修复不打扰用户,外层追问有明确依据,整体调试更清晰。
角色分工与纯函数化
将Agent拆分为记录员、审查员、决策官等角色,每个角色职责单一且为纯函数,便于单独测试和调试。前台作为唯一有状态组件维护对话历史,决策官集中所有策略判断。这种架构降低了复杂度,使修改追问策略只需改动一处。
记录与猜测的严格区分
记录员只记录用户明确说的事实,绝不猜测;律师可以补充合理假设但必须留档。这一原则保证了追问信号不被污染,且能自动检测“夹带私货”。用户说“不要X”会被记为负事实,避免后续重复出现,提升了系统的审计能力。
全局预算控制追问成本
通过设置全局预算(如5轮主动提问),限制Agent主动打扰用户的次数,而用户主动修改或确认不消耗预算。这防止用户因频繁被打扰而减少交互,同时保留了追问的弹性。预算策略集中在决策官中,便于调整。
Q&A
这个Agent架构设计的主要目标是什么?
该Agent架构设计的目标是将自然语言描述转换为Mermaid图表,并解决单次LLM调用中出现的语法错误和语义偏差问题,通过多轮对话、自我纠错和记忆用户信息来提升生成质量和用户体验。
为什么需要将Agent流程分为外层和内层两个循环?
外层循环负责信息澄清,确保用户需求明确;内层循环负责代码生成与修复,确保生成的Mermaid代码正确。分开处理可以避免混淆用户没说清和生成错误两类歧义,使每个循环目标单一,便于调试和优化。
Agent中各个角色(如记录员、审查员、决策官等)的职责是什么?
记录员负责从对话中提取事实并记录,不进行猜测;审查员检查档案中缺失的信息;决策官决定是否追问用户或开始生成;律师负责生成Mermaid代码,可补充合理假设但需记录;校对员检查语法和语义,发现夹带私货;前台作为调度者维护对话状态。
记录员和律师在信息处理上有什么关键区别?
记录员必须严格保守,只记录用户明确说过的信息,不进行任何推断;律师在生成代码时可以补充合理假设,但必须将假设记录在档案中,以便校对员审计。这种区分确保了追问信号的准确性和生成内容的可追溯性。
决策官(Planner)是如何决定是否追问用户的?
决策官根据候选问题池、剩余预算和之前问过的问题来决定下一步行动,输出三种可能:追问一个问题、信息足够开始生成、或给用户看摘要确认。所有追问决策集中在此函数中,便于调整策略。
全局预算在Agent中是如何运作的?
每个会话有一个全局预算(如5次主动提问),只有Agent主动追问用户时才消耗预算,用户主动修改需求或要求重画不消耗。这防止用户因担心打扰而不敢说话,同时控制Agent的追问频率。
内层修复循环是如何工作的?
内层修复循环发生在律师和校对员之间:律师生成代码后,校对员进行语法检查,如果失败则退回给律师修改,直到语法正确。此过程不打扰用户,实现Mermaid语法错误的自动修复。
语义检查发现夹带私货时如何处理?
校对员进行语义检查,如果发现图中包含未声明的元素(夹带私货),不会阻塞出图,而是将图与追问一起呈现给用户,例如提示“我加了完整响应流程,想保留吗?”,让用户基于图进行判断。
添加新图类型(如ERD、State等)需要修改哪些部分?
添加新图类型需要新写记录员、审查员、校对员和措辞员四个角色的实现,因为不同图类型的事实提取、必填字段、夹带私货规则和提问措辞都不同。决策官、前台和状态存储无需改动,因为它们与图类型无关。
文章总结的三条值得借鉴的经验是什么?
三条经验是:1)将“问清楚”和“画出来”作为两个独立循环,避免歧义混淆;2)严格区分记录员保守和律师可猜,确保假设留档可审计;3)将所有决策逻辑集中在决策官纯函数中,便于调整策略。