十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Agent跨服务一致性验证系统:从零搭建最小实施方案

Agent跨服务一致性验证系统:从零搭建最小实施方案 最近排查一个 Agent 项目的线上问题时我意识到了一个容易被忽略的痛点模型回答是否“聪明”已经不是最让人头疼的部分。真正让人头疼的是——当 Agent 决定去调用订单、库存、支付等多个服务时你几乎没有一种可靠机制能回答三个问题它到底做了什么各个服务是否按同一个语义执行了如果某个环节静默失败能不能第一时间发现如果只看模型输出的“成功”你根本不知道各个服务是否真的达成同一个决策。传统分布式系统可以靠数据库事务、分布式锁、最终一致性方案来兜底但 Agent 决策是自然语言驱动的、非确定性的、多步骤的它的一次“动作”会被拆散到多个独立服务里执行。这个时候跨服务的一致性验证就不再是分布式系统教材里的理论话题而是 Agent 工程落地必须补上的短板。这篇文章会和你一起从零搭一个最小可运行的一致性验证系统。我们会先讲清楚核心概念再落地事件建模、规则校验、Webhook 采集、幂等保护和结果验证。读完之后你可以把它直接移植到你自己的 Agent 服务链路里先做观测再做阻断让“Agent 到底干了什么”变成可验证、可追踪、可回溯的工程事实。如果你是正在做 Agent 应用、多服务编排、自动化决策系统的开发者这篇文章尤其值得看完。它不讨论 Prompt 调优也不讨论模型选型而是讨论在模型之外那个容易被忽略的可靠性问题。1. 跨服务一致性验证为什么值得关注先看一个真实场景。假设你开发了一个客服 Agent用户申请退款。Agent 经过“理解意图、查询订单、调用退款接口、发送通知”这一系列步骤后告诉用户“退款成功”。从用户视角看任务完成了。但从系统视角看这个过程中可能发生了很多事情订单服务把订单状态改成了“已退款”支付服务返回了“退款失败余额不足”通知服务因为上游超时根本没有发出通知由于 Agent 具备自主决策能力它可能会自动重试退款操作导致支付服务收到两次退款请求。这些事件分散在不同服务中各自有各自的状态。如果没有一个统一验证机制最终的真相只能靠开发人员事后翻日志、对比数据库记录、拼链路追踪数据。如果运气好问题能被发现如果运气不好线上会积累大量“用户以为成功、系统实际失败”的脏数据。跨服务一致性验证解决的就是这个问题以一次 Agent 决策为单位把分散在不同服务中的执行结果收集起来用规则判断它们是否在语义上一致并在不一致时给出告警或阻断。为什么它在 Agent 时代比在传统微服务时代更关键因为传统系统里的调用链是确定的A 调用 BB 调用 C每一步都有明确的接口、参数和错误码。而 Agent 的决策链路是动态的它可能根据模型输出决定调 A 还是调 B甚至同一个用户请求会触发完全不同的执行路径。路径不确定就意味着你不能靠“固定写死”的编排逻辑保证一致性必须引入一种专门的对账机制来验证“任何一个决策分支”下的结果是否自洽。从材料看HN 上这个标题“Cross-service consistency verification for autonomous agent decisions”更像是工程原型的展示而不是一个大型框架。但这恰恰说明已经有越来越多的人意识到Agent 应用走向生产环境卡点往往不在模型效果而在工程可信度。2. 核心概念Agent 决策、跨服务调用与一致性验证要理解这个主题需要先把几个概念边界划清楚。2.1 自主智能体Autonomous Agent自主智能体是一类能根据目标自行规划、调用外部工具或 API、执行多步骤动作并观察结果调整策略的程序。它和传统“接收请求、返回响应”的服务不同它的核心特征是有目标而不是只响应单次输入会使用工具比如调用订单服务、支付服务、数据库会自我修正比如第一次调用失败后进行重试。决策路径不固定同样的输入可能走不同分支。这些特征决定了一件事Agent 产生的不只是“回答”还有“动作”。而动作会改变多个服务的状态。2.2 跨服务Cross-service跨服务指的是同一次 Agent 决策会触达多个独立部署的服务。这些服务通常有自己的数据库、自己的状态表示方式、自己的错误处理逻辑它们之间通过 API、消息队列或事件总线通信。一个典型的退款决策可能涉及服务可能的状态变更订单服务order_status 改为 REFUNDED支付服务创建退款记录资金原路返回库存服务恢复被锁定的库存通知服务发送退款通知给用户每个服务都认为自己做了正确的事情但“每个服务都做了自己的事”不等于“整条链路做对了”。这就是跨服务一致性的难点局部正确不代表全局一致。2.3 一致性验证Consistency Verification一致性验证不是新概念。数据库里有 CP/AP 之分分布式系统里有最终一致性、强一致性、线性一致性。但在 Agent 决策场景下一致性验证的重点不是数据复制层面的同步延迟而是语义层面的“决策一致性”。我把它理解为三层层次验证问题示例状态一致性各个服务最终落库的状态是否互相匹配订单已退款支付流水必须存在决策一致性同一个决策在各服务里是否被识别为同一个动作订单服务和支付服务收到同一个 decision_id语义一致性各服务的“成功”是不是同一个意思Agent 认为“退款成功”支付服务实际返回“退款提交成功”在传统分布式系统里状态一致性可以用事务或分布式锁保证在 Agent 场景下由于决策是模型生成的你无法在生成阶段强制它遵循事务协议只能在执行完成之后做验证和对账。这就是“验证”这个动作必须独立存在的原因。2.4 与传统一致性的区别对比维度传统分布式一致性Agent 决策跨服务一致性控制主体事务管理器、分布式锁、状态机Agent 决策链路主要手段两阶段提交、幂等、最终一致事件采集、规则校验、对账失败形态超时、网络分区、节点宕机语义漂移、决策状态分裂、动作不可复现验证重点数据状态是否一致决策动作与各服务实际执行是否一致理解这个区别后后面的设计就好懂了。我们的目标不是让所有服务同步提交一个事务而是把所有服务与 Agent 决策相关的事件收集起来用一套独立规则去判断“这次决策是否被一致地执行了”。3. 验证原理从意图到执行结果的闭环在动手写代码之前先给你一个完整的验证设计思路否则代码写出来也是散的。3.1 最小验证闭环一致性验证系统要形成闭环至少需要四个阶段定义“一次 Agent 决策”的边界。一个用户请求到最终完成会生成哪些决策点比如“订单状态变更”“库存预占”“退款执行”“用户通知”。每个决策点必须有唯一标识。采集决策事件。Agent 本身在“计划做什么”的时候先上报一条意图事件每个服务在“执行完动作”后上报一条结果事件。关联事件。依靠 request_id、agent_run_id、decision_id 把一条决策链路的所有事件聚合在一起。运行规则校验。对聚合后的事件集合执行一致性规则输出验证通过或违规明细。这四个阶段形成一个闭环决策发生时留下记录决策执行后验证对错验证结果可以接告警、接阻断、接人工审批。3.2 事件流设计核心是事件不是调用链。调用链Trace能告诉我们“调了哪些服务”但它很难告诉我们“各个服务对同一个决策的理解是否一致”。比如订单服务记录“退款中”支付服务记录“退款失败”这条链路从 Trace 上看是完整的但从语义上看是冲突的。所以我们需要的是“决策事件流”意图事件Agent 决定要做某个动作。包含决策类型、目标服务、预期状态。执行事件服务实体执行后的真实结果。包含实际状态、错误码、执行时间。一体关联所有事件共享同一个 request_id 和 decision_id。事件流本质上是把 Agent 的“想法”和各服务的“事实”同时记录下来一致性验证就是比较“想法”与“事实”是否匹配。3.3 规则类型最小实现里建议先写三类规则状态不分裂规则同一个决策点不能出现部分服务成功、部分服务失败且没有补偿的情况。预期与实际一致规则Agent 的预期状态和服务实际返回状态必须对应。必达事件规则某些关键服务必须返回事件比如退款必须调用支付服务缺事件即视为异常。这三类规则覆盖了开头说的三个痛点决策是否被正确执行、执行结果是否和预期一致、是否有服务静默漏执行。4. 环境准备与项目结构设计下面从零搭一个最小工程。先说环境。4.1 运行环境建议使用 Python 3.10 以上版本配合 FastAPI 和 Pydantic 2.x。事件存储先用 Redis 或者内存实现生产环境可替换为消息队列和时序数据库。本文示例使用Python 3.10FastAPIPydantic 2.xRedis 7用于幂等去重Docker Compose可选用于本地启动 Redis具体版本以你实际项目为准这里更侧重通用思路避免因为某一个小版本差异导致你卡住。4.2 项目结构建议按照下面的目录组织代码agent-consistency-verify/ ├── app/ │ ├── __init__.py │ └── main.py # FastAPI 入口接收决策事件上报 ├── agent_consistency/ │ ├── __init__.py │ ├── models.py # 决策事件 Pydantic 模型 │ ├── storage.py # 事件存储内存版示例用 │ ├── verifier.py # 一致性校验规则 │ ├── idempotency.py # 幂等保护 │ └── cli.py # 命令行验证工具 ├── tests/ │ └── test_verifier.py # 规则校验测试 ├── docker-compose.yml └── requirements.txt不需要过度设计。先跑通再替换中间件。4.3 依赖文件# 文件路径requirements.txt fastapi uvicorn[standard] pydantic redis pytest安装命令pip install -r requirements.txt5. 核心代码决策事件建模与一致性验证实现这一步是全文的关键。我会分三个文件来实现事件模型、一致性验证器、Webhook 接收端再补充一个幂等保护工具。5.1 决策事件模型先定义事件结构。它决定了你能不能把分散在不同服务里的数据关联起来。# 文件路径agent_consistency/models.py from datetime import datetime, timezone from enum import Enum from typing import Any, Dict, Optional from pydantic import BaseModel, Field class DecisionType(str, Enum): ORDER_UPDATE order_update INVENTORY_CHANGE inventory_change REFUND refund NOTIFY notify class AgentDecisionEvent(BaseModel): event_id: str Field(..., description事件唯一 ID) request_id: str Field(..., description用户请求 ID用于关联一次完整任务) agent_run_id: str Field(..., descriptionAgent 一次运行的任务 ID) decision_id: str Field(..., description同一个决策点的唯一 ID例如订单更新动作) service_name: str Field(..., description执行服务的名称) decision_type: DecisionType status: str Field(..., description执行状态success / failed / skipped) expected_state: Dict[str, Any] Field( default_factorydict, descriptionAgent 预期的业务状态 ) actual_state: Dict[str, Any] Field( default_factorydict, description服务实际执行后的业务状态 ) created_at: datetime Field(default_factorylambda: datetime.now(timezone.utc)) trace_id: Optional[str] Field(defaultNone, description链路追踪 ID)这里有三个字段最关键request_id唯一关联一次用户请求。decision_id一个请求可能会有多次决策例如“先改订单状态再退款”。decision_id 用于区分不同的决策动作。expected_state 和 actual_state分别记录 Agent 的预期和服务的事实。这是后续一致性校验的数据基础。5.2 事件存储为了先跑通流程先用内存存储。生产环境可以替换成 Redis 列表、Kafka 或 ClickHouse。# 文件路径agent_consistency/storage.py from typing import List from .models import AgentDecisionEvent # 仅用于演示生产环境请替换为 Redis / Kafka / 数据库 _event_store: List[AgentDecisionEvent] [] def append_event(event: AgentDecisionEvent) - None: _event_store.append(event) def query_events(request_id: str) - List[AgentDecisionEvent]: return [event for event in _event_store if event.request_id request_id] def clear_events() - None: _event_store.clear()5.3 一致性验证器验证器是整个系统的核心。它会按 decision_id 分组然后执行三类规则。# 文件路径agent_consistency/verifier.py from collections import defaultdict from typing import Dict, List from .models import AgentDecisionEvent def group_by_decision_id(events: List[AgentDecisionEvent]) - Dict[str, List[AgentDecisionEvent]]: result defaultdict(list) for event in events: result[event.decision_id].append(event) return result def verify_success_consistency(events: List[AgentDecisionEvent]) - bool: 规则 1同一个决策点不能出现部分成功、部分失败的“状态分裂”。 如果目标服务的执行结果互相矛盾就认为不一致。 has_success any(event.status success for event in events) has_failed any(event.status failed for event in events) return not (has_success and has_failed) def verify_expected_vs_actual(event: AgentDecisionEvent) - List[Dict]: 规则 2Agent 预期状态与服务实际状态必须一致。 会返回所有不一致的字段明细。 violations [] if event.status ! success: return violations for field_name, expected_value in event.expected_state.items(): actual_value event.actual_state.get(field_name) if actual_value ! expected_value: violations.append( { field: field_name, expected: expected_value, actual: actual_value, } ) return violations def generate_consistency_report(events: List[AgentDecisionEvent]) - Dict: 生成一致性报告聚合校验结果、给出一致性分数。 分数只是帮助快速判断最终是否阻断还是要看具体违规项。 if not events: return { passed: False, consistency_score: 0.0, message: no_events_found, violations: [], } groups group_by_decision_id(events) total_rules 0 passed_rules 0 all_violations [] for decision_id, event_list in groups.items(): # 规则 1状态不分裂 total_rules 1 if verify_success_consistency(event_list): passed_rules 1 else: all_violations.append( { decision_id: decision_id, rule: success_consistency, message: 同一个决策点存在成功事件和失败事件状态分裂, } ) # 规则 2预期状态与实际状态一致 for event in event_list: total_rules 1 field_violations verify_expected_vs_actual(event) if not field_violations: passed_rules 1 else: all_violations.append( { decision_id: decision_id, event_id: event.event_id, rule: expected_vs_actual, violations: field_violations, } ) passed len(all_violations) 0 score passed_rules / total_rules if total_rules else 0.0 return { passed: passed, consistency_score: round(score, 2), event_count: len(events), decision_count: len(groups), violations: all_violations, }这段代码的逻辑很简单但它的价值在于把“正确性”从人的经验判断变成机器可执行的规则。你可以继续往里面加规则比如“某个关键服务必须出现事件”“同一 decision_id 下事件数必须等于预期数”扩展方式都是一样的。5.4 幂等保护工具Agent 任务天然容易重试。模型在前一次请求超时后大概率会重新发起同样的请求。如果验证系统把重复事件当成新事件就会产生大量误报。因此必须在入口处做幂等判断。# 文件路径agent_consistency/idempotency.py import redis # 生产环境请通过环境变量或配置中心注入连接信息 redis_client redis.Redis.from_url(redis://127.0.0.1:6379/0) def is_duplicate_event(event_id: str, expire_seconds: int 86400) - bool: 基于 Redis SETNX 实现幂等去重。 同一个 event_id 在一段时间内只会成功写入一次。 return not bool( redis_client.set( namefdecision_event:{event_id}, value1, nxTrue, exexpire_seconds, ) )这里默认 Redis 在本地。如果你不想依赖 Redis也可以在 storage 层用一个 set 记录已见 event_id但生产环境建议用 Redis 或数据库唯一约束。5.5 FastAPI 事件接收端Agent 侧和各服务侧把事件上报到这个接口即可。这是整个验证系统的入口所有后续分析都从这里开始。# 文件路径app/main.py from fastapi import FastAPI from agent_consistency.idempotency import is_duplicate_event from agent_consistency.models import AgentDecisionEvent from agent_consistency.storage import append_event app FastAPI(titleAgent Decision Consistency Collector) app.post(/internal/decision-events) async def collect_decision_event(event: AgentDecisionEvent): if is_duplicate_event(event.event_id): return {ok: True, duplicated: True} append_event(event) return {ok: True, duplicated: False}这个接口内部逻辑很薄只负责“接收、去重、存储”。不要在接口里做复杂业务判断保持数据采集入口的简单性非常重要。5.6 命令行验证工具写好存储和验证器后还需要一个入口来查询某次请求的验证结果。# 文件路径agent_consistency/cli.py import argparse import json from .storage import query_events from .verifier import generate_consistency_report def main() - None: parser argparse.ArgumentParser(descriptionAgent 跨服务一致性验证工具) parser.add_argument(--request-id, requiredTrue, help用户请求 ID) args parser.parse_args() events query_events(args.request_id) report generate_consistency_report(events) print(json.dumps(report, ensure_asciiFalse, indent2, defaultstr)) if __name__ __main__: main()这里用defaultstr解决 datetime 在 JSON 序列化时的兼容问题简单实用。5.7 本地编排文件如果你不想手动安装 Redis可以用 Docker 快速起一个。# 文件路径docker-compose.yml version: 3.8 services: redis: image: redis:7-alpine ports: - 6379:6379 restart: unless-stopped启动 Redisdocker compose up -d6. 运行、测试与效果验证代码写完后不能停留在“能运行”还要知道怎么看结果。6.1 启动采集服务在项目根目录执行uvicorn app.main:app --host 0.0.0.0 --port 8000启动成功后日志里会出现Application startup complete。6.2 模拟上报多服务事件用 curl 模拟一次 Agent 决策产生的三个事件。假设这次请求的 request_id 是req_20250101_001决策点是“订单更新退款”。先模拟订单服务成功上报curl -X POST http://127.0.0.1:8000/internal/decision-events \ -H Content-Type: application/json \ -d { event_id: evt_order_001, request_id: req_20250101_001, agent_run_id: run_agent_001, decision_id: decision_refund_001, service_name: order-service, decision_type: order_update, status: success, expected_state: {order_status: REFUNDED}, actual_state: {order_status: REFUNDED} }再模拟支付服务失败上报curl -X POST http://127.0.0.1:8000/internal/decision-events \ -H Content-Type: application/json \ -d { event_id: evt_pay_001, request_id: req_20250101_001, agent_run_id: run_agent_001, decision_id: decision_refund_001, service_name: payment-service, decision_type: refund, status: failed, expected_state: {refund_status: SUCCESS}, actual_state: {refund_status: FAILED, error_code: BALANCE_NOT_ENOUGH} }连续上报两条后运行验证命令python -m agent_consistency.cli --request-id req_20250101_001你可能会得到下面的输出{ passed: false, consistency_score: 0.5, event_count: 2, decision_count: 1, violations: [ { decision_id: decision_refund_001, rule: success_consistency, message: 同一个决策点存在成功事件和失败事件状态分裂 } ] }这个结果是合理的因为订单服务成功了支付服务却失败了两个服务的状态无法匹配。系统在几秒内就能告诉你这次 Agent 决策存在跨服务不一致。6.3 如何判断验证是否成功判断标准不是输出里有几条违规而是已采集的事件能被 request_id 正确关联违规项能被精确定位到具体决策点和规则在 Agent 执行成功且各服务状态一致时系统给出passed: true。你可以在项目里添加一个测试来保证这一点。# 文件路径tests/test_verifier.py from agent_consistency.models import AgentDecisionEvent from agent_consistency.verifier import generate_consistency_report def _build_event(**kwargs): data { event_id: evt_001, request_id: req_001, agent_run_id: run_001, decision_id: decision_001, service_name: order-service, decision_type: order_update, status: success, expected_state: {order_status: REFUNDED}, actual_state: {order_status: REFUNDED}, } data.update(kwargs) return AgentDecisionEvent(**data) def test_consistency_report_passed_when_all_match(): event _build_event() report generate_consistency_report([event]) assert report[passed] is True assert report[consistency_score] 1.0 def test_consistency_report_failed_when_state_split(): success_event _build_event(event_idevt_success, service_nameorder-service) failed_event _build_event( event_idevt_failed, service_namepayment-service, decision_typerefund, statusfailed, expected_state{refund_status: SUCCESS}, actual_state{refund_status: FAILED}, ) report generate_consistency_report([success_event, failed_event]) assert report[passed] is False assert report[consistency_score] 0.5运行测试pytest -q这能保证你后续扩展规则时不会把已有逻辑改坏。7. 常见问题与排查思路这类系统在生产落地时最容易出问题的不是在规则层而是在数据采集层。下面整理几个高频问题。问题现象可能原因排查方式解决方案验证工具始终提示 no_events_foundAgent 或服务端没有上报事件检查上报接口日志和事件 ID先确认采集入口已接通再排查存储查询条件大量重复事件导致误报Agent 重试了相同的决策动作对比 event_id 是否重复接入 Redis 幂等或数据库唯一约束事件对不上决策 ID 为空Agent 未把上下文参数透传给下游检查 Agent 调用参数和模型输出在 Agent 侧强制注入 decision_id字段值明明一样却判定不一致时间格式、单位或类型不同查看 expected 与 actual 原始值统一规范时间用 UTC ISO8601金额用最小单位整数部分服务成功、部分服务失败链路缺少补偿机制查看失败服务错误码和调用顺序增加补偿任务或转人工处理一致性分数始终很低规则过严或存在弱校验场景分析 violations 分布把规则分强规则和弱规则强规则阻断弱规则只告警Redis 重启后幂等失效幂等记录丢失检查 Redis 持久化配置关键场景用数据库唯一键代替或打开 AOF每个问题都能在真实链路中找到对应。这里想提醒一点不要把一致性分数量化成唯一标准。分数可以帮助你快速评估整体健康度但真正要关注的是违规明细里的每条记录尤其是success_consistency和expected_vs_actual。分数是趋势指标违规项是定位线索。8. 工程落地最佳实践从 Demo 到生产中间还差一些工程决策。下面是我认为最重要的几条。8.1 事件先行先有“意图”再有“事实”在产品设计上一条决策一致性验证绝不能只依赖服务执行后的反馈。Agent 在执行动作之前就应该先发出“意图事件”。这带来的好处是即使某个服务彻底挂了你也能从事件流里看到“Agent 打算做什么、哪个服务没响应”。这种“行动前留痕、行动后对账”的思路比单纯记录日志要可靠得多。8.2 统一决策 ID 是全链路的关键很多项目一开始只传 request_id但一个请求里可能包含多次不同类型的决策。例如“先改订单再退款再发通知”如果用同一个 ID 关联所有事件验证器就无法区分究竟是哪一步不一致。正确做法是request_id 标识一次用户请求decision_id 标识一次具体决策agent_run_id 标识一次 Agent 运行。三者各有各的粒度组合起来才能精确关联。8.3 先观测后阻断这套系统上线初期建议只做记录和告警不要直接阻断 Agent 流程。原因很简单规则可能有误报事件采集链路也可能有漏洞。本来 Agent 是正常的结果因为你的验证规则写错了把退款流程全拦住了这个风险远大于问题本身。更稳妥的路径是先跑两周只读模式收集事件和违规记录人工核对每条违规是否真实准确率稳定后再对强规则开启阻断模式保留人工审核队列作为自动阻断的后备。8.4 关注状态字段的“可比较性”跨服务一致性验证很容易栽在字段表达上。同一个退款金额订单服务存的是分支付服务返回的是元同一个时间一个服务返回时间戳另一个返回字符串。这类问题与 Agent 无关但在跨服务验证里会被瞬间放大。建议所有上报事件遵循统一的字段规范时间ISO 8601 标准格式且统一为 UTC金额统一用最小货币单位整数状态统一枚举值禁止同一状态有多种英文写法布尔字段统一用 true/false不用 1/0 混用。8.5 权限与安全边界事件采集接口虽然没有直接的写库权限但它接收跨服务数据必须做好访问控制。不能把这个接口直接暴露到公网也不能不校验来源。至少要做到只在可信内网中使用或通过网关做服务身份认证上报接口只接收固定字段结构的 JSON用 Pydantic 模型做强校验对关键操作进行审计确保没有普通开发人员能绕过验证系统直接修改事件流。8.6 给规则留扩展点我们的最小实现里规则是硬编码在 verifier.py 中的。生产环境建议把规则配置化例如用 JSON 或 YAML 描述哪些字段必填、哪些状态组合合法。这样调整规则时不用改代码重新发布只需要改配置并热加载。9. 总结与后续学习方向这篇文章从“Agent 决策到底可不可信”这个问题出发介绍了跨服务一致性验证的基本原理并用一个最小可运行的工程示例演示了事件建模、规则校验、Webhook 采集、幂等保护和结果验证的全流程。核心观点可以总结为Agent 时代的正确性问题正在从模型层转移到跨服务执行层一致性验证不能靠日志审计事后补救必须在上游形成事件闭环最小验证系统不需要复杂架构做好事件模型、决策 ID 和规则引擎就能覆盖大部分生产场景。接下来你可以做三件事第一把事件模型引入你现有的 Agent 链路先不做验证只做埋点采集。第二写 3 到 5 条针对你业务场景的一致性规则用真实请求历史数据回放看能发现多少隐藏问题。第三在规则稳定后再接入告警和阻断逐步把验证系统从“事后看”升级为“事前拦”。一条路走到这里你会发现跨服务一致性其实没有想象中那么玄。关键是先让决策过程留下可验证的痕迹再用规则把它约束起来。只有当你能够回答“这次决策在所有关联服务里是否被一致地执行”时Agent 才算真正具备进入生产环境的底气。
返回列表