Governed Agent架构:LLM与规则引擎结合的业务流程控制

📅 2026/7/27 13:41:14
Governed Agent架构:LLM与规则引擎结合的业务流程控制
1. 先搞清楚 Governed Agent 到底解决什么问题如果你用过基于 LLM 的智能助手或自动化流程大概率遇到过这种情况模型有时候会“自由发挥”给出不符合业务规则的回答或者在代码生成、数据处理等需要精确输出的场景里产生不可控的结果。Governed Agent 这个方案的核心就是把 LLM 的“创意”和业务规则的“确定性”分开处理让 LLM 负责理解用户请求、提取关键信息但最终决策和执行交给预设的规则和代码。这样做最直接的好处是在需要严格遵循流程、合规要求或数据一致性的任务中你能确保输出结果不会因为模型的随机性而偏离预期。比如财务审核、合同条款检查、数据转换脚本生成这类场景模型可以帮你快速理解需求但具体的判断逻辑、计算规则、输出格式都由代码牢牢控制。我建议先从这个角度判断你是否需要深入了解 Governed Agent如果你的任务中既有需要自然语言理解的灵活部分又有必须准守的固定规则而且你对模型直接输出结果的稳定性有顾虑那这个架构就值得一试。2. 拆解 Governed Agent 的基本工作流程Governed Agent 不是某一个具体工具或框架而是一种架构模式。它的核心流程可以拆成三步2.1 LLM 只做意图解析和信息提取第一步用户输入的自然语言请求比如“帮我把上个月销售额超过 10 万的订单找出来按地区统计数量”先交给 LLM 处理。但这里 LLM 的任务被严格限定为解析意图和提取结构化参数而不是直接生成最终答案。LLM 在这一步的输出可能是这样的结构化信息{ intent: query_sales_data, filters: { time_range: last_month, amount_threshold: 100000 }, aggregation: { field: region, operation: count } }这个环节的关键约束是LLM 不需要决定怎么查询数据、用什么统计方法、输出什么格式——它只负责把用户的话“翻译”成机器可处理的参数。2.2 规则引擎验证参数合法性第二步LLM 输出的参数会进入规则验证阶段。这里的规则可以是业务规则比如“销售额阈值不能超过系统上限 100 万”、安全规则比如“用户只能查询自己权限范围内的数据”或技术规则比如“时间范围格式必须符合 YYYY-MM-DD”。如果参数验证失败流程会直接返回错误信息给用户或者让 LLM 重新澄清需求不会进入执行阶段。这个环节完全由确定性代码控制没有模型的随机性参与。2.3 代码模块执行具体操作第三步通过验证的参数会触发对应的代码模块执行实际任务。比如上面的销售统计例子可能会调用一个预设的数据查询函数传入时间范围、金额阈值等参数执行 SQL 查询然后按地区分组计数。最终输出可能是表格、图表或结构化数据格式完全由代码决定。LLM 在这一步可能参与结果的自然语言摘要比如“统计完成共发现 3 个地区符合条件”但核心数据和逻辑不依赖模型生成。3. 什么时候该用 Governed Agent 架构不是所有 LLM 应用都需要这么严格的控制。通过几个具体场景对比你能更清楚这个模式的适用边界。3.1 适合 Governed Agent 的场景数据查询和报表生成用户用自然语言描述想要的数据LLM 解析成查询条件但实际的数据库查询、计算、格式化都由代码处理。这样能保证数据准确性和查询效率。工作流审批LLM 可以理解用户提交的申请内容但具体的审批规则比如金额分级审批、权限检查由规则引擎严格执行避免模型误判。代码生成和校验LLM 根据需求描述生成代码片段但编译、测试、安全检查由自动化流程完成确保生成的代码可运行且安全。合同和文档审核LLM 提取关键条款和数值但合规性检查、格式标准化由预设规则处理减少漏检风险。这些场景的共同点是任务有明确的标准流程输出需要高度一致性错误成本较高。3.2 可能不需要 Governed Agent 的场景创意写作和头脑风暴这类任务本身就需要模型的发散性过度约束会限制创造性。简单问答和知识查询如果只是事实性问答直接让 LLM 回答通常更高效不需要拆解成解析-执行两阶段。探索性数据分析和可视化如果用户需要快速尝试不同分析角度交互式地让 LLM 直接生成图表可能更灵活。判断的关键在于你的任务是否需要“每次都必须得出相同结果”的确定性。如果需要Governed Agent 架构能提供更好的可控性。4. 实际搭建一个最小可行案例下面我用一个具体的例子演示如何实现一个简单的 Governed Agent。这个案例模拟“员工报销审批”场景用户用自然语言提交报销申请LLM 解析金额和类别规则引擎检查是否符合公司政策最终输出审批结果。4.1 环境准备和依赖选择这个 demo 需要以下基础环境Python 3.8任选一个 LLM API如 OpenAI GPT、Claude、本地部署的模型简单的规则引擎可以用 Python 字典或轻量级库如durable_rules如果你只是实验建议先用 OpenAI API 或 Claude API它们有清晰的接口文档和稳定的服务。如果考虑数据隐私或成本也可以选择本地部署的开源模型但要注意模型能力是否足够准确解析意图。安装基础依赖pip install openai requests4.2 定义业务规则和数据模型先明确报销规则这是整个系统的确定性基础# 报销规则定义 REIMBURSEMENT_RULES { max_amount: { meal: 1000, # 餐费最高 1000 元 transport: 500, # 交通费最高 500 元 accommodation: 2000 # 住宿费最高 2000 元 }, require_receipt: True, # 是否需要发票 approval_flow: { low: {max_amount: 500, approver: direct_manager}, medium: {max_amount: 2000, approver: department_head}, high: {approver: finance_director} } }同时定义标准的数据模型确保 LLM 输出和规则引擎使用相同的结构from typing import TypedDict class ReimbursementRequest(TypedDict): amount: float category: str # meal, transport, accommodation description: str has_receipt: bool4.3 实现 LLM 解析模块LLM 的任务是把自然语言转换成结构化数据。这里需要设计清晰的提示词来约束输出格式import openai def parse_reimbursement_request(user_input: str) - ReimbursementRequest: prompt f 请将以下报销申请解析为结构化数据。用户输入{user_input} 输出必须是严格的 JSON 格式包含以下字段 - amount: 数字表示报销金额 - category: 字符串只能是 meal、transport、accommodation 中的一个 - description: 字符串简要描述报销事由 - has_receipt: 布尔值表示是否有发票 示例输出 {{amount: 300, category: meal, description: 客户接待餐费, has_receipt: true}} 现在解析以下输入 response openai.ChatCompletion.create( modelgpt-3.5-turbo, messages[{role: user, content: prompt}], temperature0.1 # 低随机性确保输出稳定 ) # 这里应该添加 JSON 解析和错误处理 return parse_json_response(response.choices[0].message.content)关键点temperature 设为较低值如 0.1减少模型创造性提示词中明确指定输出格式和取值范围实际使用时需要添加完整的错误处理。4.4 实现规则验证模块规则验证部分完全用确定性代码实现def validate_reimbursement(request: ReimbursementRequest) - dict: errors [] # 检查类别是否有效 if request[category] not in REIMBURSEMENT_RULES[max_amount]: errors.append(f无效的报销类别: {request[category]}) # 检查金额是否超限 category_max REIMBURSEMENT_RULES[max_amount][request[category]] if request[amount] category_max: errors.append(f{request[category]}类别报销金额不能超过{category_max}元) # 检查发票要求 if REIMBURSEMENT_RULES[require_receipt] and not request[has_receipt]: errors.append(此类报销必须提供发票) # 确定审批流程 amount request[amount] if amount 500: approval_level low elif amount 2000: approval_level medium else: approval_level high approver REIMBURSEMENT_RULES[approval_flow][approval_level][approver] return { is_valid: len(errors) 0, errors: errors, approval_level: approval_level, approver: approver }这个模块没有任何随机性同样的输入永远产生同样的输出。4.5 组装完整流程最后把各个模块组合起来def process_reimbursement_request(user_input: str) - dict: # 1. LLM 解析 try: parsed_request parse_reimbursement_request(user_input) except Exception as e: return {error: f解析请求失败: {str(e)}} # 2. 规则验证 validation_result validate_reimbursement(parsed_request) # 3. 生成最终响应 if validation_result[is_valid]: response { status: approved, message: f报销申请已受理金额{parsed_request[amount]}元需要{validation_result[approver]}审批, next_step: f请将材料提交给{validation_result[approver]} } else: response { status: rejected, message: 报销申请不符合规定, errors: validation_result[errors] } # 可以在这里添加 LLM 生成的自然语言摘要 response[user_friendly_message] generate_summary(response, parsed_request) return response这个简单 demo 展示了 Governed Agent 的核心思想LLM 负责理解代码负责决策。5. 生产环境需要考虑的关键问题如果要把这个架构用到实际项目中有几个方面需要特别注意。5.1 LLM 解析的可靠性保障LLM 解析是整个流程中最可能出错的环节。在生产环境中需要多轮澄清机制当 LLM 解析置信度低或参数缺失时应该让模型主动向用户提问澄清而不是猜测。解析结果验证对 LLM 的输出添加完整性检查比如必填字段是否齐全、数值格式是否正确。备用解析方案对于关键任务可以准备模板化的输入格式作为备选当自然语言解析连续失败时切换。版本控制LLM 模型版本升级可能影响解析效果要有版本回滚和 A/B 测试机制。5.2 规则引擎的维护复杂度随着业务发展规则会变得越来越复杂。需要规则版本管理业务规则变更要有明确的版本控制和发布流程。规则测试套件每次规则修改都要有完整的测试用例覆盖边界情况。规则冲突检测当多条规则可能产生冲突时要有优先级机制和冲突预警。规则可视化编辑非技术人员可能需要通过界面配置简单规则而不是直接修改代码。5.3 错误处理和重试策略Governed Agent 涉及多个环节错误处理要更细致环节间超时控制LLM 调用、规则执行、代码运行都要设置合理的超时时间。** graceful degradation**当某个环节失败时系统应该有能力降级处理而不是完全不可用。详细日志记录每个环节的输入输出都要完整记录便于问题排查。用户反馈机制当系统处理结果不符合用户预期时要有便捷的反馈渠道来优化模型和规则。5.4 性能和扩展性考虑LLM 调用优化批量处理请求、缓存常见解析结果、使用更轻量的模型处理简单任务。规则引擎性能复杂的规则匹配可能成为性能瓶颈需要考虑规则索引和优化。水平扩展无状态的设计更容易水平扩展但要确保规则配置的一致性。6. 与其他架构模式的对比理解 Governed Agent 的独特价值最好通过与其他常见架构的对比。6.1 与纯 LLM 应用的对比纯 LLM 应用把整个任务都交给模型处理优势是灵活简单适合创意类任务。缺点是输出不可控可能产生不符合业务规则的结果也不适合需要精确计算或数据操作的场景。Governed Agent 通过规则和代码约束模型的输出范围牺牲一部分灵活性换取确定性和可靠性。6.2 与传统规则系统的对比传统规则系统完全基于预设逻辑处理结构化输入很高效但无法理解自然语言。当用户需求用自然语言表达时需要先人工翻译成系统能理解的参数。Governed Agent 结合了两者的优势用 LLM 处理自然语言的理解问题用规则系统保证执行的确定性。6.3 与 RAG检索增强生成的对比RAG 主要解决模型知识陈旧和幻觉问题通过检索外部知识来增强生成的准确性。但 RAG 不解决业务规则执行的问题——即使引用了正确的知识模型仍然可能生成不符合规则的输出。Governed Agent 可以和 RAG 结合使用用 RAG 确保模型基于准确的知识用规则引擎确保输出符合业务要求。7. 实际落地时的经验建议基于我在类似项目中的经验Governed Agent 架构落地时有几个实用建议。7.1 先从高风险场景的小范围试点开始不要一上来就在全公司推广。选择一个业务价值明显、错误成本较高的场景作为试点比如财务报销、合规检查、数据质量验证等。试点阶段重点验证几个问题LLM 解析的准确率是否能达到业务要求规则引擎是否能覆盖所有边界情况整个流程的响应时间是否可接受用户对交互方式的接受程度7.2 建立明确的职责分工Governed Agent 涉及多个技术栈最好有明确的团队分工LLM 工程师负责提示词优化、模型选择、解析准确性提升业务规则专家负责规则设计、验证、维护后端工程师负责系统集成、性能优化、错误处理产品经理负责定义用户体验、设计交互流程小团队可能一人多职但要确保每个环节都有明确的责任人。7.3 设计渐进式复杂度的实施路径不要试图一次性实现完美的 Governed Agent。建议按这个顺序推进第一阶段实现基本的解析-验证流程处理最简单的用例人工审核所有输出。第二阶段扩大用例范围优化解析准确率建立自动化测试。第三阶段添加多轮对话、错误恢复、个性化规则等高级功能。第四阶段考虑规模化部署、监控告警、性能优化。每个阶段都要有明确的成功标准和退出条件。7.4 重点关注可观测性和调试能力Governed Agent 的复杂性意味着问题可能出现在多个环节。要投入足够精力建设可观测性详细日志记录每个环节的输入输出、处理时间、错误信息。用户会话追踪能够完整重现用户的一次请求处理过程。性能监控监控 LLM 调用延迟、规则执行时间、系统资源使用情况。业务指标跟踪解析准确率、规则匹配率、用户满意度等业务指标。好的调试工具能大幅降低运维成本加快问题排查速度。Governed Agent 架构在需要结合自然语言灵活性和业务规则确定性的场景中很有价值但实施复杂度较高。建议先从明确的小场景开始验证重点保障 LLM 解析的可靠性和规则引擎的完备性再逐步扩大应用范围。