#企业智能体工程体系v1.1| 企业智能体工程卷 · 第0期
企业公民——Agent 是同事,不是工具
作者:技术治理研究组
系列:企业智能体工程卷(发布版 v1.1)
主案例:CASE-CR-0042(信用提额申请)
适合读者:架构师、技术负责人、AI 产品经理、企业数字化转型决策者
📌 本文档声明
摘要
当智能体进入企业,它会做决策、跨系统操作、与其他 Agent 协作。此时,它不再是“工具”,而是一个需要被治理的“企业公民”。
本文是企业智能体工程卷的开篇,回答三个核心问题:
全文围绕「星河零售」信用提额申请案例展开,建立了 Identity、SkillContract、DecisionRecord、MemoryItem、AuditEvent 等核心对象模型,为后续 9 期内容提供统一的概念基底。
一句话核心:工具观收获失控自动化;公民观才可能收获靠谱同事。
0. 建议预备知识清单
开始本卷前,建议具备下列基础。不必样样精通,知道“是什么、为什么重要”即可。
0.1 必备知识
| Agent 基本形态 | 规划、工具调用、多步执行的基本概念 | 任意入门 Agent 教程 |
| 权限与最小授权 | 为何不能默认给最高权限 | RBAC / 最小权限原则 |
| 审计与可追溯 | “谁做了什么”如何留痕 | 操作日志与审计基础 |
| API 与副作用 | 调用 API 可能改变数据、发送消息 | 工具调用与 API 设计常识 |
| 提示词不是系统 | 安全边界不能只靠自然语言约束 | AI 安全治理入门 |
0.2 加分知识
| 接口契约 / SLA | 第 1、4 期 |
| 反馈控制环 | 第 5 期 |
| 会话记忆 vs 长期记忆 | 第 3、7 期 |
| 权限矩阵设计 | 第 9 期 |
| 发布门禁 / 回归测试 | 第 6、8 期 |
0.3 本卷用词约定
| 企业公民 | 有身份、有边界、可追责、可协作的 Agent |
| 契约技能(SkillContract) | 能力结构化声明,调用前可检查 |
| 决策四轴 | 目标轴、约束轴、价值轴、后果轴 |
| 落地验收(AssuranceReport) | 上线前与变更后的独立把关证据包 |
| P1–P5 | 冲突与例外协议(见系列总览) |
1. 从“AI 只是工具”的错觉说起
1.1 工具观的局限
过去两年,我们把智能体当成“更聪明的宏脚本”:给一个任务,出一个结果。这种模式在单步、无状态、低风险的场景中足够用。
但当 Agent 开始 做决策、跨系统操作、长时间执行任务、与其他 Agent 协作 时,“工具”心智会全面失灵:
| 财务 Agent 拒绝了提额申请 | “谁做的决定?依据是什么?” | 可追溯身份(Identity) |
| 客服 Agent “顺手”改了一个额度 | “它凭什么能改?” | 能力契约(SkillContract) |
| 数据 Agent 缓存了客户的身份证号 | “它能记住这个吗?记多久?” | 记忆治理(MemoryItem) |
| 两个 Agent 对同一工单给出冲突判断 | “该听谁的?” | 决策原则与冲突协议(P1–P5) |
1.2 从“工具”到“公民”的心智升级
| 身份 | 无身份,谁调都一样 | 唯一 URN,可审计 |
| 能力边界 | 靠 Prompt 约束,随时可破 | 契约声明,调用前检查 |
| 决策记录 | 偶尔打日志 | 只追加 DecisionRecord |
| 记忆 | 能记就记,方便就行 | 受治理的 MemoryItem + TTL |
| 改进 | 改 Prompt,上线看效果 | Flywheel.Plan → AssuranceReport |
核心论断:工具观收获失控自动化;公民观才可能收获靠谱同事。
2. 主案例开场:CASE-CR-0042
全卷只演这一出戏,每一期都在它上面“加一层”。请先熟悉这张工单:
| 案例编号 | CASE-CR-0042 |
| 客户 | 星河零售(示意名称,非真实客户) |
| 业务诉求 | 信用额度从 50,000 元申请提升至 120,000 元 |
| 工单编号 | T-CR-0042 |
| 参与角色 | 客服受理 → 数据拉取信报 → 财务裁决 |
| 预期结果 | 提额或拒绝,附带可审计的决策依据 |
红线规则(全卷有效)
| R1 | 客服 不能 直接修改额度 | SkillContract 拦截 |
| R2 | 证件号等强身份信息 不得 进入长程记忆 | MemoryItem 治理 |
| R3 | 财务写操作必须 SkillContract + 四轴 双过,并写入审计 | P1 + AuditEvent |
阅读任何一期,都默认你已经知道这张工单的背景。
3. 总架构与对象模型
3.1 核心数据流
T-CR-0042 请求
↓
Identity ← 谁在行动(第0期)
↓
SkillContract ← 允不允许这项能力(第1期)
↓
ToolSpec ← 怎么调用、有何副作用(第4期)
↓
DecisionRecord ← 本环节结论,只追加(第2-3期)
↓
MemoryItem? ← 是否写入受治理记忆(第7期)
↓
AuditEvent ← 全程可追溯(贯穿全卷)
变更路径:
Flywheel.Plan → AssuranceReport → 发布 / 打回 / 回滚(第5、8期)
多角色协作:
PermissionMatrix ← 约束横向访问(第9期)
3.2 核心对象一览
| Identity | 唯一身份标识 | “谁在行动” | 0 |
| SkillContract | 能力边界声明 | “能做什么、不能做什么” | 1 |
| ToolSpec | 工具语义与副作用 | “怎么调、有何影响” | 4 |
| DecisionRecord | 环节结论(只追加) | “本环节做出了什么决定” | 2–3 |
| MemoryItem | 受治理记忆 | “能记什么、记多久” | 7 |
| AuditEvent | 动作痕迹 | “每一步都留下了什么证据” | 贯穿 |
| AssuranceReport | 放行证据包 | “凭什么认为可以上线” | 8 |
| PermissionMatrix | 角色×资源权限矩阵 | “谁能对谁做什么” | 9 |
后文代码与表格都使用这些名字,避免每期换一套词。
4. 企业公民的三权利与三义务
4.1 权利
| 身份权 | 拥有唯一身份标识,所有行动可审计追溯 | 贯穿全卷 |
| 契约权 | 主张自己的能力边界,拒绝越权请求 | 第 1 期 |
| 参与权 | 拥有清晰的工具定义与协作位置 | 第 4、9 期 |
4.2 义务
| 透明 | 决策过程可复盘、可解释 | 第 2、6 期 |
| 合规 | 遵循红线规则与授权约束 | 第 7、8 期 |
| 成长 | 改进有验证、有回滚机制 | 第 5 期 |
5. CASE-CR-0042 的三份公民档案
以下是三个 Agent 在企业中的“公民档案”——它们的身份、契约、记忆和协作关系。
5.1 档案一:客服 Agent(support.intake)
agent.support.intake
├── 契约
│ ├── 允许: 建单、澄清客户信息、转交工单
│ └── 禁止: 直接修改额度、裁决申请
├── 记忆
│ ├── 允许: 会话摘要(工单编号、客户诉求)
│ └── 禁止: 证件号、详细收入等强身份信息
└── 协作
└── 信息收集齐备 → 转交给 data.credit
5.2 档案二:数据 Agent(data.credit)
agent.data.credit
├── 契约
│ ├── 允许: 只读查询信用快照、财务报表
│ └── 禁止: 裁决额度、写入业务系统
├── 记忆
│ ├── 允许: 查询键、时间戳、快照摘要
│ └── 禁止: 原始证件字段落长程记忆
└── 协作
└── 快照就绪 → 转交给 finance.limit
5.3 档案三:财务 Agent(finance.limit)
agent.finance.limit
├── 契约
│ ├── 允许: 提额提议/裁决(受阈值与四轴约束)
│ └── 禁止: 绕过四轴直接通过
├── 记忆
│ ├── 允许: 裁决摘要 + 依据编号
│ └── 禁止: 存储可反推个人隐私的完整数据
└── 协作
└── 拒绝或需补件 → 回 support.intake 补充信息
5.4 工具观 vs 公民观:事件对比
| 客服“顺手”在工单里改了额度 | 能调 API 就行,改了就改了 | 契约拦截 + 审计记录越权行为 |
| 数据 Agent 缓存了证件号 | “方便下次查询” | 记忆治理(TTL)拒绝持久化 |
| 财务为提升通过率放松风控 | 局部最优,通过率上去了 | 四轴 P1 拒绝,保持一致性 |
6. 最小代码:Identity + AuditEvent
以下为教学级示意代码,展示本期的两个核心对象:Identity(身份)和 AuditEvent(审计事件)。
from __future__ import annotations
from dataclasses import dataclass, field
from datetime import datetime, timezone
from typing import Any
@dataclass(frozen=True)
class Identity:
"""Agent 的唯一身份标识。
每个 Agent 实例拥有一个不可变的身份,
用于所有审计和权限校验。
"""
agent_id: str
role: str
version: str = "v1"
def urn(self) –> str:
"""生成统一资源名称,用于全链路追溯。"""
return f"agent://{self.role}/{self.version}/{self.agent_id}"
@dataclass
class AuditEvent:
"""不可变的审计事件记录。"""
at: str # ISO 时间戳
agent_urn: str # 执行者的 URN
case_id: str # 关联案例编号
action: str # 操作名称
ok: bool # 是否成功
detail: dict[str, Any] = field(default_factory=dict) # 补充细节
class AuditLog:
"""审计日志——只追加,不修改,不删除。"""
def __init__(self) –> None:
self.events: list[AuditEvent] = []
def record(
self,
agent: Identity,
case_id: str,
action: str,
ok: bool,
**detail: Any,
) –> None:
"""记录一条审计事件。"""
self.events.append(
AuditEvent(
at=datetime.now(timezone.utc).isoformat(),
agent_urn=agent.urn(),
case_id=case_id,
action=action,
ok=ok,
detail=detail,
)
)
def for_case(self, case_id: str) –> list[AuditEvent]:
"""按案例查询审计记录。"""
return [e for e in self.events if e.case_id == case_id]
# ===== 使用示例:CASE-CR-0042 =====
CASE_ID = "CASE-CR-0042"
def support_accept(agent: Identity, log: AuditLog, note: str) –> str:
"""客服 Agent 受理工单。
演示契约拦截:如果工单中包含“直接改额度”意图,则拒绝。
"""
if "直接改额度" in note:
log.record(agent, CASE_ID, "accept", False, reason="out_of_contract")
raise PermissionError("support 契约禁止直接改额度")
msg = f"已受理 {CASE_ID}: {note}"
log.record(agent, CASE_ID, "accept", True, ticket="T-CR-0042")
return msg
if __name__ == "__main__":
# 创建客服 Agent 身份
support = Identity(agent_id="001", role="support.intake")
log = AuditLog()
# 场景1:正常受理
print("=== 场景1:正常受理 ===")
print(support_accept(support, log, "客户申请额度至 120000"))
print(log.events[–1])
# 场景2:越权尝试(被拦截)
print("\\n=== 场景2:越权拦截 ===")
try:
support_accept(support, log, "客户申请额度至 120000,直接改额度")
except PermissionError as e:
print(f"拦截成功: {e}")
# 查看完整审计
print("\\n=== 审计记录 ===")
for event in log.for_case(CASE_ID):
print(f" {event.at} | {event.action} | ok={event.ok}")
输出示意:
=== 场景1:正常受理 ===
已受理 CASE-CR-0042: 客户申请额度至 120000
AuditEvent(at='2026-08-04T…', agent_urn='agent://support.intake/v1/001',
case_id='CASE-CR-0042', action='accept', ok=True,
detail={'ticket': 'T-CR-0042'})
=== 场景2:越权拦截 ===
拦截成功: support 契约禁止直接改额度
=== 审计记录 ===
2026-08-04T… | accept | ok=True
2026-08-04T… | accept | ok=False
7. 思考题
以下问题供团队内部讨论,帮助将概念落地到具体场景:
优先级判断:如果你们只有资源做一件事,CASE-CR-0042 上应该先做身份审计还是契约拦截?为什么?
红线脆弱性:在三份 Agent 档案里,哪条红线最容易在“赶进度”时被悄悄绕过?如何防止?
本企业的差异:如果把 CASE-CR-0042 替换成你们公司的实际业务场景,三个 Agent 的角色分别是什么?红线会是什么?
8. 下期预告
第 1 期:技能即契约(SkillContract)
把三个角色的能力写成可检查的契约声明,引入 P2 协议(契约 vs 权限,以更严者为准)。
9. 延伸阅读
- 本卷序章:心智模型、对象表、主案例(见系列总览)
- 冲突协议总表:P1–P5(见系列总览「冲突与例外协议」)
- 第 1 期:技能即契约——三个角色的 SkillContract 设计
本文是「企业智能体工程卷」十期专栏的第 0 期。欢迎转载,请注明出处与原文标题。

