资讯动态

法律AI智能体微服务化设计:从单体到协同工作流

发布时间:2026/10/13 4:27:00 来源:尧图企业网站定制
法律行业这几年被AI冲刷得厉害但真正能落地的案子并不多。市面上大多数“法律AI”还停留在单点工具的水平比如合同模板生成、关键词检索用起来总觉得差口气。问题出在哪法律业务本质上是一条流水线接案、事实梳理、法律检索、文书起草、风险审查、归档每一步都在消耗不同专业方向的人力和知识。单点工具解决不了流程问题只有把AI能力拆开、重组、编排做成一套能协同工作的“智能体集群”效率才能真正提上来。这篇文章我就从应用架构师的角度聊聊法律AI智能体微服务化设计的思路、拆解和落地细节给正在做或者准备做这类系统的团队一个参考。1. 法律AI智能体的整体架构思路1.1 为什么微服务化是法律AI落地的必然选择很多团队一开始会问我做一个智能体直接按单体的方式写不就行了用户提问进来模型返回加一个前端页面完事。听起来确实简单但放到法律业务里很快会碰壁。第一个问题是领域知识太重。法律AI不是只靠一个大模型就能跑通的它需要把法律法规库、历史判例、裁判规则、合同审查要点、诉讼流程约束这些都变成可检索、可计算的知识资产。这些资产的管理方式各不相同法规库适合用全文索引合同条款需要结构化的要素模板判例要按裁判观点做语义聚类。这些东西混在一起单体应用会越来越臃肿。第二个问题是团队协作模型不同。做法律AI产品算法工程师关心Prompt和模型推理规则工程师关心知识图谱和相似度匹配平台工程师关心接口稳定性和并发产品经理关心业务效果。不同角色迭代的节奏完全不一样混在一个单体项目里每次上线都要一起冒险。第三个问题是“一刀切”的推理策略根本覆盖不了所有法律任务。如果用户只是问一个法条原文小模型加检索就够如果要写一份复杂的股权投资协议必须调用多步推理、多轮修订用大模型加长时间上下文管理如果做的是批量合同审查还要考虑异步任务、并行切片、人工复核流程。这些任务对计算资源、响应时间、模型能力的要求差异极大单体结构根本无法在同一个请求链路里灵活调度。所以说白了法律AI智能体不是“一个AI”而是“一群AI加上一套业务系统”。微服务化本质上不是技术炫技而是业务复杂度到了某个临界点之后必须做的一种组织结构上的拆分。这也是为什么现在主流法律科技公司在第二代产品里普遍转向了服务编排和事件驱动架构而不是去堆一个超级大模型应用。1.2 单体到微服务的演进路径我也见过不少团队是“先单体、后拆分”的路径这很正常。第一个版本为了快速验证场景一个单体服务把所有法律流程串起来跑通能解决核心业务矛盾就行。但如果直接奔着法律AI智能体平台去做建议在架构图阶段就先把边界画出来不要等代码写了一万行再重构。拆分时有一个原则按“知识域”和“任务类型”两条轴切而不是按功能菜单切。知识域是指法律信息的不同来源与表达形式比如法条、案例、合同、文书。任务类型则是指AI在每一个环节做的事比如抽取、生成、检索、审查。有些团队按“合同模块”“诉讼模块”来切微服务结果发现合同模块里又需要检索、生成、审查三种能力三个微服务之间互相调用依赖关系乱成一团。正确做法是先把原子能力服务化再在上面组装业务模块。一个典型的演进过程是这样第一阶段一个带Prompt的模型服务直接回答问题验证业务价值。第二阶段把法律数据接入独立的知识库服务模型通过外挂知识做增强生成效果明显提升。第三阶段拆出检索服务、文书生成服务、要素抽取服务等原子能力各自独立部署开始有自己的数据库和缓存。第四阶段引入任务编排层把多个原子服务串成一条工作流形成真正意义上的智能体。第五阶段完善可观测性、数据隔离、人工复核机制满足法律行业对合规和审计的要求。到第五阶段这套系统就已经不是一个“能回答问题”的工具了而是能嵌入到律所工作流里的基础设施。1.3 整体架构的分层设计法律AI智能体平台的落地架构我习惯分成四层来设计。最上面是接入层负责把不同的使用方接进来包括律所的办案系统、法务SaaS平台、内部工作台甚至未来可能的司法行政公共法律服务小程序。接入层要解决的是协议适配问题因为每家客户的技术栈和权限体系都不一样。接入层下面是智能体编排层这是整个架构的灵魂。编排层负责理解用户的目标把一个大任务拆解成若干子任务调度不同微服务去执行并汇总中间结果。比如用户丢进来一份五十页的合作协议编排层需要决定先调用抽取服务提取合同要素再调用风险规则服务做合规审查同时把有歧义的条款送进生成模型做解释最后汇总成审查报告。这个过程不是简单的“请求-响应”而是一个有状态、多步骤、可中断的流程编排。再往下是AI能力服务层也就是各种原子能力语义检索、案例匹配、文书生成、风险判断、要素抽取、知识图谱查询。这一层的特点是每个服务只干一件事内部可以用最合适的技术方案去实现服务之间不直接共享数据库只通过接口交互。最底层是基础设施与数据层包括模型网关、向量数据库、图数据库、关系数据库、对象存储以及统一日志和审计系统。这层要做的是为上层提供稳定可靠的模型调用能力、海量向量检索能力以及安全合规保障。这样分层的核心逻辑是每一层的关注点都不同才好在团队里分派一个明确的责任人也才好在出问题时快速定位是模型问题、数据问题还是编排问题。这个是法律AI落地过程中靠经验换来的认知——一个跨层混在一起的问题排查起来往往是最痛苦的。2. 法律AI智能体的核心服务拆解2.1 检索与知识图谱服务检索服务看起来基础但实际上是法律AI的地基。法律场景下的检索不只是“找相关文档”这么简单用户往往在问法条、找类似判例、查历史裁判观点、核实某地法院的立案标准。这些检索背后对应的数据结构和检索策略完全不同所以检索服务内部还需要拆分子模块。我做的系统中检索服务分成三块。第一块是全文检索引擎直接吃法律法规和司法解释的原文靠倒排索引处理精确词条和法条编号第二块是向量语义检索把判例、裁判要旨、期刊文章都切成段落做向量化用来应对“这个情况法院一般怎么判”这类语义匹配的问题第三块是知识图谱查询把法律实体法条、罪名、合同类型、法院层级和它们之间的关系引用、冲突、依据、例外抽出来支持多跳查询比如查“某条款在近三年相关判例中被引用的次数”。这三块内容的服务化程度越高业务方越受益。原因在于真正需要“法律检索”的场景远不止用户搜索这一种合同审查要检索相关合规依据文书生成要检索相似合同模板诉讼策略分析要检索类似判例中的裁判倾向。如果这些场景各自开发一套检索逻辑数据不共享、效果不统一后期维护成本极高所以必须把这些能力收敛沉淀为一个服务提供统一查询接口只是在接口内部路由到不同的检索策略。落在实操上有个很重要的细节法律文本的切分策略不能完全照搬通用文档的处理范式。法规条文往往有“条、款、项”三个层级条款内容和它前后文的联系非常紧密不能简单按固定字符长度切割。我建议用正则和规则先识别条文边界再通过段落摘要向量化建立索引这样既保留上下文连续性又不会因为一条法条太长导致检索失灵。2.2 文书生成服务文书生成是法律AI最visible的能力也是用户期望值最高的一个。但文书生成服务在设计上要解决两个核心问题第一是格式正确性第二是内容可靠性。这两个问题不解决生成的文书只能当草稿连给客户看的价值都没有。格式正确性相对好办。法律文书的格式有严格的规范起诉状有固定的诉讼请求、事实与理由板块律师函要有事实概述、法律依据、警告性结论合同要有前言、定义、标的、违约责任、争议解决。我的做法是为每一类文书建一个结构化模板定义好段落顺序、必填字段和常用条款库把模板放在文书生成服务里做“格式骨架”模型只负责往骨架上填充表述性内容而不是自由发挥整篇生成的会话式输出。实践证明这样写出来的文书结构稳定、观感良好、后续修改量少得多。内容可靠性就麻烦得多。大模型天然会生成看似合理但实际站不住脚的内容法律文书里一旦出现这种内容轻则被退回修改重则引发执业风险。所以文书生成服务必须引入“生成-复核”双通道机制。生成通道负责起草复核通道则把模型输出的关键要件拿出来跟已知事实材料和检索到的法律依据做交叉验证发现矛盾的地方标记出来提交给人工确认。比如一份劳动仲裁申请书里如果申请人填写的赔偿计算基数跟证据材料里的工资条不一致复核通道就要能识别出来并提示不能直接放过去。这个双通道机制的技术实现其实不难关键在于服务边界要清晰。生成服务只管“写”复核服务只负责“查”两个服务之间通过结构化数据流传递而不是靠模型来回一遍遍对话。这样做的好处是可以单元测试、可以独立优化比如复核服务里更新一批更严格的规则不必重新调生成Prompt。2.3 审查与要素抽取服务审查服务是法律AI里最能体现“专业壁垒”的模块。市面上做所谓“合同审查”的产品很多但大多数是拿通用语言模型跑一遍给出几条通用建议。真正的合同审查需要做到要素级它能识别出一个特定合同里标的额是否为含税价、付款条件是否对己方有利、违约金比例是否超过法定上限、管辖条款是否与履行地一致这些判断背后是大量法律规则和商业惯例的沉淀。我的设计是把审查服务干脆拆得更细分成两层底层是要素抽取服务负责从文本中提取结构化的信息如双方主体、合同标的、金额、支付节点、违约责任、知识产权归属、保密义务等上层是规则引擎服务负责把抽取出来的要素与预设的合规规则做比对输出风险提示。要素抽取采用了一个混合策略。百分之七八十的场景可以用规则模型解决比如“付款方式……”“违约金……”这类表述其实非常格式化写一组正则就能覆盖。剩下百分之二三十的复杂表述比如“乙方逾期交付的甲方有权按每日千分之五收取滞纳金”这种变体需要借助大模型做长上下文阅读理解。混合策略的意义在于降低成本、提高可解释性把简单的任务留在规则层模型只处理疑难场景逻辑更清晰。规则引擎服务的核心资产是规则库每一条规则都包含触发条件、风险等级、法规依据和修改建议四部分。比如“违约金超过实际损失的百分之三十”这条规则触发条件是违约金比例和计算基数风险等级是高危法规依据是对违约金调整的司法解释修改建议是建议调整为合理范围。风险规则和AI生成的审查结论唯一的区别是确定性规则判定有问题就是有问题责任清晰可追溯这也是在法律服务里最难能可贵的。2.4 任务编排与工作流引擎任务编排层是法律AI智能体的“脑子”。没有编排层每个微服务都只是一台孤立的机器有了编排层这些机器才能组合成一条高效的生产线。编排层承担四个职责理解任务目标、拆解执行计划、调度服务执行、汇总结论与复核信息。编排层的一个关键设计思考是“是否要把大模型作为决策器”。确实可以用一个主模型来随时决定下一步调用哪个服务、怎么解析中间结果但这样做的代价是滞后、不稳定和不可审计。大模型每次输出的决策结果都是概率性的同一个请求可能走出两个不一样的执行路径这会让用户和测试人员都无从把握。我在生产环境里更偏好的方案是“白盒编排规则”。把常见的法律事务类型做一套模式库比如合同审查、法律检索报告、诉讼风险评估、文书生成每种事务类型预定义好执行步骤和步骤间的依赖关系。用户传入任务后先由分类模型判断属于哪一种模式然后编排按预设的DAG执行。如果过程中发现抽取结果异常或者模型生成结果未通过复核再走异常分支由人工介入或降级处理。这样既保留了大模型对自然语言的理解能力又保证了编排主流程的稳定可控。编排层的技术选型我建议直接用现成的开源工作流引擎像临时写成代码虽然直观易读但一旦需要支持并行节点、超时重试、人工确认事件代码量会迅速膨胀。选择开源工作流引擎带来了一个很大的附加价值天然支持人工审批节点而人工复核在法律业务中是完全绕不开的硬需求。3. 实操落地关键服务设计与实现3.1 技术选型对比为了这篇文章不至于太飘我整理一份实际投入过使用环境的技术选型清单但也给几个不同规模的选项方便读者看自己的团队情况来判断。服务类型轻量方案中大规模方案选型考量接入网关统一网关框架高性能网关集群律所客户可能走专线要兼容多种协议模型网关标准开发框架内实现更高性能网关法律场景强烈依赖多模型路由与降级知识库全文检索引擎全文检索向量检索法条用全文判例用向量文档存储关系数据库对象存储预签名地址文书的版本管理必不可少工作流编排开源编排引擎高可用集群部署SAGA模式能天然适配人工审批可观测性链路工具统一采集上报审计合规需要完整日志拿向量数据库来说法律场景下的数据量并不算特别大几百万段文本已经顶天了不像互联网搜索动辄几十亿。因此不需要盲目追求分布式部署单机版往往性能足够。真正要重点考虑的是数据安全部署方式律所的数据保密要求高向量数据库如果能以私有化形式部署在客户侧效果比任何性能参数都重要。另一个需要注意的是模型网关。法律AI前端的服务会调用多种模型有的做抽取、有的做生成、有的做摘要、有的做情感判断而且同一类任务可能在不同模型间做切换。好的模型网关需要具备请求路由、超时控制、结果缓存、错误降级这四个基本能力。尤其是降级策略我自己踩过一次教训主模型服务不稳定时如果网关没有及时把请求切到备用小模型整个文书生成服务的失败率就会飙升用户的体感是“系统崩了”实际上只是模型调用链路的容错没有做好。3.2 服务间通信与数据规范微服务之间的通信方式直接决定系统的复杂度和性能瓶颈。法律AI场景里各个服务间传的数据往往是大文本一段合同可能就得几十KB如果每个服务都同步调接口硬等链路可以拖到十几秒用户体验完全不可接受。我采用的方案是“同步异步混合通信”需要实时反馈的前置判断比如案件分类、风险初筛用同步调用来保证低延迟大批量的切片处理、文档要素抽取、批量审查任务用消息队列做异步解耦服务处理完再回调或轮询结果。异步化的第一步收益是系统能扛住突发批量请求比如一个公司法务突然丢进来三百份采购合同要求审查同步链路早就堆死异步队列则能平稳流动。还有一个容易忽视但很重要的点是数据契约版本管理。法律AI服务的接口往往会经历长期演化比如文书生成服务原来只输出纯文本后来要扩展到输出结构化JSON如果契约版本不一致下游的复核服务解析不了链路报错又难排查。我要求每个服务接口都使用带版本号的协议接口内部对版本做兼容适配旧版本客户不用立刻升级。这个规范看着琐碎实际维护成本很低但对系统的可持续性帮助极大。另外法律文本的数据标注格式也要提前统一。实体类型、关系类型、风险等级这些词表的术语必须全局一致。如果审查服务里用的“高危”在抽取服务里叫“高风险”下游规则引擎的统计就会出错。我建议从项目启动第一天就建好字段字典越早统一越好后期改造的代价是持续的。3.3 一个合同审查工作流的实现示例空讲架构有点干我给大家走一遍一个典型的合同审查工作流这样能更直观地看到微服务之间是怎么协同的。假设用户上传了一份采购合同并选择“快速审查”模式系统内部的处理过程如下用户请求到达编排层编排层首先调用服务发现接口判断用户权限和任务类型。合同审查属于“高风险”操作按照流程要求必须先走一遍基础校验确认用户身份、确认文件格式、确认合同类型。编排层把任务拆解为三个并行子任务第一个子任务调用解析服务把PDF转成结构化文本第二个子任务调用要素抽取服务提取合同主体、标的额、支付条款等第三个子任务做法规检索把合同涉及领域的相关法律条文和监管要求拉出来。这三个子任务可以并行执行大幅压缩总耗时。三个子任务完成后编排层把它们的结果汇总到规则引擎服务。规则引擎把抽取出来的要素与规则库逐一比对产出风险列表。此时模型生成服务也跟着介入把审查规则触发的风险点结合检索到的法规依据写成一段简明扼要的修改建议这段建议的表述可以通俗一点方便非法律背景的业务人员理解。最后编排层把风险列表、修改建议、法规依据、原文对照组成一份完整的审查报告推送回用户端同时把全程的调用链路由、模型输出、规则命中结果写入审计日志。这样一个环节跑下来总耗时取决于文件长度通常单页合同在十秒以内是可以接受的。代码层面我贴一段简化的服务编排逻辑用伪代码说明会比较清晰job { type: CONTRACT_REVIEW, input: {file_id: xxx, contract_type: procurement}, steps: [PARSE, EXTRACT, REGULATION_LOOKUP] } result workflowEngine.submit(job)每个步骤回调后编排层检查返回码如果有步骤超时走降级策略解析失败就直接告诉用户格式不支持不再继续后续环节抽取失败则降级为纯规则关键词审查保底输出一个基础报告不能白等。3.4 模型网关与多模型路由设计模型网关是法律AI微服务架构里的一个枢纽性组件。法律AI系统往往需要接入多个模型供应商、多个开源本地模型模型网关的作用是对上提供一致调用接口对内管理模型实例、做负载均衡和故障隔离。多模型路由有几个策略我概括成三层第一层是按任务类型路由比如摘要生成倾向于一个指令响应更好的模型要素抽取倾向于另一个结构化推理更强的模型这层路由逻辑相对固定由任务标签决定第二层是按输入特征路由比如输入是中文法律文书还是英文合同字符量有多大是否需要长上下文处理这一层做动态判断然后调整目标模型第三层是按服务质量路由部分高级模型或云端模型调用成本更高当低代价模型已经能给出稳定结果时就不必每个请求都冲高级模型优先级可以限定。模型网关还有个重要职责是输出校验。很多法律AI服务要求模型输出严格符合JSON Schema结构。只有输出合法JSON下游服务才能稳定解析。模型偶尔会产生非法JSON网关层要能识别这种异常自动触发一次修复调用让模型基于上一次输出重新整理格式而不是直接把错误抛给下游。说句题外话模型网关层面引入“按请求计费面板”这件事也很有价值。法律AI是按量计费场景一个合同审查任务的成本可能从几分钱到几块钱不等。如果账目无从归集业务就很难定价。我在网关层给每一次调用记录模型版本、输入输出字符数、耗时和费用这些数据沉淀成成本分析报表之后会发现很多可以优化的调用链路比如某个任务完全可以用更小的模型替代省下来的成本相当可观。4. 常见问题与排查技巧实录4.1 数据隔离与权限控制法律服务的数据隔离要求比多数行业都严格得多。一家律所A的客户合同跟另一家律所B的客户合同绝不能在逻辑层产生交叉访问的可能。如果多个律所接入同一个平台最稳妥的模式是物理隔离每个租户独立一套知识库实例和向量集合数据永不共享。落地时注意一个容易忽略的点模型服务可能是共享的但知识库的检索范围必须限定在租户数据域内这部分要靠网关做租户标识注入贯穿链路越早设计越好后期再补会非常痛苦。细粒度权限控制也是必须的。律所内部角色多样律师、助理、实习生、外部合作律师、法务经理不同角色能看到的数据范围和能执行的操作完全不同。这套权限不能只在接入层做一层校验AI服务的每个接口都应该基于上下文再做一次授权校验尤其涉及文书修改这类高风险操作权限校验不通过就整条链路拒绝。实际项目中另一个常见问题是有多个服务共享一套数据库的时候没人能说清楚某条数据到底由哪个服务负责写入。我建议从一开始就明确“数据主权归属”法规库属于检索服务模板属于文书生成服务审核记录属于审查服务每个库只有对应的服务可写其他服务只能通过接口读。这个归属一旦混乱后期做权限和审计都会非常棘手。4.2 结构化输出失败的兜底策略法律AI的微服务高度依赖结构化输出但模型输出永远存在概率性错误。要素抽取服务本来应该把合同中的金额字段抽成数字类型结果模型返回成一段描述性文字或者干脆漏抽了整段要素。这种问题需要设计兜底策略而不是寄希望于模型调参一次成功。我常用的手段是三层兜底。第一层是网关格式修复上面提到的由网关自动请求模型重新生成结构化输出第二层是服务内部规则回填抽取服务发现某字段缺失时会用正则和启发式规则在原文里做第二次查找很多格式化的表述这样就能找到第三层是编排层降级如果某个子任务反复失败且无法修复就把这个任务标记为“待人工确认”并交由人工补录不阻塞整个流程。这套兜底策略跑下来实际生产中大部分异常都能被兜住模型升级过程中的优化幅度会变得平和很多。4.3 长文档处理与上下文管理法律场景里长文档是常态一份商业合同动不动几十上百页。把整份文档直接塞进模型上下文既不经济也可能超过窗口限制。我采取的是切片加摘要两级处理第一级由解析服务按结构边界切块每个块独立做向量化和索引第二级由摘要服务对每个块生成摘要信息把核心信息汇总到上下文模型在处理任务时先看摘要再定位到具体块。长文档还有一个工程细节是跨服务传递大文件的方式。不要让服务之间直接传文件流把整个链路拖到超时。正确做法是文件先落到对象存储拿到一个预签名地址服务之间只传地址和偏移量。想读取哪个段落直接带Range请求去拉取对应内容极大减轻服务间通信压力。4.4 服务稳定性与审计要求法律服务SLA要求通常比较苛刻而且出问题不能“影响出证据”因此审计日志的完整性和链路可追踪性是规划阶段就要考虑的。我建议配合统一链路追踪系统为每一次用户请求生成一个全局请求ID贯穿编排层到各子服务每次模型调用记录模型版本、输入参数、输出结果和耗时每次规则命中记录规则ID和触发理由。这样一个请求从进门到出具报告的全过程都可回放律所内部的合规部门、平台的运维和客服只要拿到请求ID就能翻出一条完整的执行链。审计日志要防篡改物理上建议采用追加写权限上只有审计专用账号能读普通运维账号不可修改。很多团队把日志和业务数据库混在一起结果出了问题被质疑日志被改过这个信任问题对法律科技产品是致命伤。高可用上的一个经验是模型调用必须做熔断保护。某个模型供应商不稳定的时候网关要能自动把流量切到备用模型。如果所有备用模型都不可用也要优雅降级让用户知道是服务不可用而不是所有功能全部挂掉。这个熔断逻辑我建议放在模型网关因为只有它掌握所有模型的健康状态。5. 写在最后的一些大实话这套架构不是我拍了脑袋设计出来的是经历了几个法律AI项目踩坑后迭代出来的认知。早期我也天真过以为能用一个大模型把所有法律任务包了后来发现业务越深入越会发现“大而全”的模型反而两头不讨好办小事太贵、办难事不够稳、出问题不好追责、换掉不好迁移。微服务化的价值不在于“别人都用所以我也用”而在于它逼你把法律业务拆清楚把每一个能力做成独立的、可测试的、可进化的服务系统才敢在不稳定的大模型之上承担稳定的专业职能。最后再分享一个小技巧。如果团队刚启动一个法律AI项目不要一上来就铺开做十个微服务先拿单体应用把一个端到端的核心场景跑通比如“上传合同、输出审查风险清单”然后再按我的拆法把检索、抽取、生成、复核、编排逐步拆出去。每拆一块系统就稳定一分团队对服务边界的理解也会加深一层。最忌讳的是直接照着架构图铺开写代码边界还没摸清就开始微服务化只会把自己困在无休止的接口联调里。从我个人的实际经验来看真正把架构价值发挥出来基本是拆到第三个服务之后才感受到的。前期多一点耐心后期运维和迭代上的回报会是顺畅得多。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑