欢迎光临
我们一直在努力

企业智能体工程体系v1.1| 企业智能体工程卷 · 第0期·企业公民——Agent 是同事,不是工具

#企业智能体工程体系v1.1| 企业智能体工程卷 · 第0期

企业公民——Agent 是同事,不是工具

作者:技术治理研究组
系列:企业智能体工程卷(发布版 v1.1)
主案例:CASE-CR-0042(信用提额申请)
适合读者:架构师、技术负责人、AI 产品经理、企业数字化转型决策者

📌 本文档声明

  • 性质:本文为企业智能体工程化设计参考框架的第0期,提供架构思路与治理协议的概念基底,不构成生产级实现方案或法律合规意见。
  • 证据锚定:文中案例(CASE-CR-0042)为教学示意,不对应任何真实客户系统。
  • 系列定位:本篇为十期专栏的概念奠基篇,后续各期将在本期的对象模型和案例基础上逐层加厚。
  • 摘要

    当智能体进入企业,它会做决策、跨系统操作、与其他 Agent 协作。此时,它不再是“工具”,而是一个需要被治理的“企业公民”。

    本文是企业智能体工程卷的开篇,回答三个核心问题:

  • 为什么 Agent 不能只当工具用? —— 工具观带来的失控风险
  • 企业 Agent 应该长什么样? —— 总架构与核心对象模型
  • 一个具体案例如何落地? —— CASE-CR-0042 的公民档案
  • 全文围绕「星河零售」信用提额申请案例展开,建立了 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 能力
    财务 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 期。欢迎转载,请注明出处与原文标题。

    赞(0)
    未经允许不得转载:171主机测评 » 企业智能体工程体系v1.1| 企业智能体工程卷 · 第0期·企业公民——Agent 是同事,不是工具
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址