一、为什么Agent需要“资产化”管理

传统IT资产管理管的是“固定资产”:服务器、软件许可,有明确的采购成本、折旧年限和报废流程。AI Agent的管理长期停留在“功能管理”——能不能用、好不好用。

但当Agent开始规模化承担业务任务,三个问题浮出水面:

第一,成本摊销问题。 一个Agent的构建成本包括技能配置、知识库建设、系统对接、权限初始化和测试调优。这些投入应该按什么周期摊销?如果Agent运行三个月就被替换,沉没成本怎么算?

第二,能力衰减问题。 Agent的能力不是“部署即恒定”的。知识库会过时、对接的API会变更、业务规则会调整。一个三个月前表现良好的Agent,三个月后可能已经“带病运行”。

第三,退役决策问题。 Agent何时应该升级、何时应该退役?退役时权限如何回收、日志如何归档、依赖它的任务如何迁移?没有生命周期管理,就会出现“僵尸Agent”——占着资源、持有权限、持续运行但已无人维护。

这三个问题,指向同一个工程需求:把Agent当作有生命周期的数字资产来管理,而不是当作一次性部署的软件功能。

二、整体架构:Event-Driven的Agent资产化管理平台

┌─────────────────────────────────────────────────────────────────┐
│                    Event Bus(事件总线)                         │
│    Agent注册 / 技能变更 / 健康告警 / 退役请求 / 权限变更         │
└─────────────────────────────────────────────────────────────────┘
                              │
        ┌─────────────────────┼─────────────────────┐
        ▼                     ▼                     ▼
┌───────────────┐   ┌───────────────┐   ┌───────────────┐
│ 资产注册中心  │   │ 健康度监控    │   │ 生命周期引擎  │
│ 资产标签/成本 │   │ AIOps指标     │   │ 状态机/折旧   │
│ 折旧参数      │   │ 异常检测      │   │ 退役编排      │
└───────────────┘   └───────────────┘   └───────────────┘
        │                     │                     │
        └─────────────────────┼─────────────────────┘
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│              Human-in-the-loop 决策节点                          │
│    退役审批 / 升级确认 / 异常处置 / 成本超限审批                 │
└─────────────────────────────────────────────────────────────────┘

核心设计原则:Agent的每一次状态变化都是一个事件,生命周期引擎订阅事件驱动状态流转,AIOps负责健康度信号的持续采集,Human-in-the-loop守住高风险决策节点。

用 Mermaid 表达同一套架构,可以更清晰地看到事件总线与三大核心组件的关系:

审批通过

审批通过

Event Bus 事件总线
注册 / 技能变更 / 健康告警 / 退役请求 / 权限变更

资产注册中心
资产标签 / 成本 / 折旧参数

健康度监控
AIOps 指标 / 异常检测

生命周期引擎
状态机 / 折旧 / 退役编排

Human-in-the-loop 决策节点
退役审批 / 升级确认 / 异常处置 / 成本超限审批

三、资产注册:给Agent打上“资产标签”

Agent注册时,除了声明能力,还需要声明资产属性:构建成本、预期使用寿命、折旧方式、依赖项。

from dataclasses import dataclass, field
from typing import List, Optional
from enum import Enum
import time

class DepreciationMethod(Enum):
    STRAIGHT_LINE = "straight_line"      # 直线折旧
    DECLINING_BALANCE = "declining"       # 加速折旧(能力衰减快)
    USAGE_BASED = "usage_based"           # 按使用量折旧

@dataclass
class AgentAsset:
    """Agent资产标签:把Agent当作有生命周期的资产"""
    agent_id: str
    name: str
    capabilities: List[str]
    # 资产属性
    build_cost: float                     # 构建成本(技能配置+对接+测试)
    deployed_at: int                      # 部署时间戳
    expected_life_months: int = 24        # 预期使用寿命
    depreciation_method: DepreciationMethod = DepreciationMethod.STRAIGHT_LINE
    # 依赖与关联
    dependent_tasks: List[str] = field(default_factory=list)  # 依赖它的任务
    owned_skills: List[str] = field(default_factory=list)
    # 生命周期状态
    status: str = "active"                # active | degraded | pending_retire | retired
    health_score: float = 1.0             # 健康度 0-1

class AssetRegistry:
    """资产注册中心:管理Agent的资产属性与折旧"""
    
    def __init__(self, store):
        self.store = store
    
    def register(self, asset: AgentAsset):
        self.store.save_asset(asset)
        self._publish_event("agent.registered", {"agent_id": asset.agent_id})
    
    def compute_book_value(self, agent_id: str, at_time: int = None) -> float:
        """计算Agent的账面价值(基于折旧)"""
        asset = self.store.get_asset(agent_id)
        at_time = at_time or int(time.time() * 1000)
        
        months_elapsed = (at_time - asset.deployed_at) / (30 * 86400 * 1000)
        months_elapsed = min(months_elapsed, asset.expected_life_months)
        
        if asset.depreciation_method == DepreciationMethod.STRAIGHT_LINE:
            # 直线折旧:每月等额摊销
            monthly = asset.build_cost / asset.expected_life_months
            return max(0, asset.build_cost - monthly * months_elapsed)
        
        elif asset.depreciation_method == DepreciationMethod.DECLINING_BALANCE:
            # 加速折旧:能力衰减快的Agent,前期摊销更多
            rate = 2.0 / asset.expected_life_months
            return asset.build_cost * ((1 - rate) ** months_elapsed)
        
        elif asset.depreciation_method == DepreciationMethod.USAGE_BASED:
            # 按使用量折旧:根据实际执行任务数摊销
            usage = self.store.get_usage(agent_id)
            return max(0, asset.build_cost - usage * self.store.get_unit_cost(agent_id))
        
        return asset.build_cost
    
    def _publish_event(self, event_type: str, payload: dict):
        """发布事件到事件总线"""
        self.store.publish(event_type, payload)

关键设计:折旧方式的选择应该匹配Agent的能力衰减曲线。知识库密集型Agent(如制度问答)能力衰减慢,适合直线折旧;对接外部API密集的Agent(如竞品监控)能力衰减快,适合加速折旧。

四、生命周期状态机:Event-Driven的状态流转

Agent的生命周期不是线性的“上线→退役”,而是一个由事件驱动的状态机。

状态机的流转关系可以用下图概括,其中进入 RETIRING 之前必须经过人工审批:

"agent.registered"

"health.degraded"

"health.recovered"

"retire.requested"

"health.critical"

"retire.approved(HITL 审批通过)"

"retire.rejected"

"retire.completed"

ACTIVE

DEGRADED

PENDING_RETIRE

RETIRING

RETIRED

from enum import Enum
from typing import Callable

class LifecycleState(Enum):
    ACTIVE = "active"              # 正常运行
    DEGRADED = "degraded"          # 健康度下降,告警中
    PENDING_RETIRE = "pending_retire"  # 待退役审批
    RETIRING = "retiring"          # 退役执行中
    RETIRED = "retired"            # 已退役

class LifecycleEngine:
    """生命周期引擎:订阅事件,驱动状态流转"""
    
    # 状态转移表:{当前状态: {事件: 下一状态}}
    TRANSITIONS = {
        LifecycleState.ACTIVE: {
            "health.degraded": LifecycleState.DEGRADED,
            "retire.requested": LifecycleState.PENDING_RETIRE,
        },
        LifecycleState.DEGRADED: {
            "health.recovered": LifecycleState.ACTIVE,
            "health.critical": LifecycleState.PENDING_RETIRE,
        },
        LifecycleState.PENDING_RETIRE: {
            "retire.approved": LifecycleState.RETIRING,
            "retire.rejected": LifecycleState.DEGRADED,
        },
        LifecycleState.RETIRING: {
            "retire.completed": LifecycleState.RETIRED,
        },
    }
    
    def __init__(self, asset_store, event_bus, hitl_gateway):
        self.store = asset_store
        self.bus = event_bus
        self.hitl = hitl_gateway  # Human-in-the-loop网关
    
    def on_event(self, event: dict):
        """事件处理入口"""
        agent_id = event["agent_id"]
        event_type = event["type"]
        asset = self.store.get_asset(agent_id)
        
        current = LifecycleState(asset.status)
        transitions = self.TRANSITIONS.get(current, {})
        
        if event_type not in transitions:
            return  # 该事件不触发状态变化
        
        next_state = transitions[event_type]
        
        # 高风险转移:需要Human-in-the-loop审批
        if next_state == LifecycleState.RETIRING:
            if not self.hitl.request_approval(
                agent_id=agent_id,
                action="retire",
                context={"current_state": current.value, "event": event}
            ):
                self.bus.publish("retire.rejected", {"agent_id": agent_id})
                return
        
        # 执行状态转移
        asset.status = next_state.value
        self.store.save_asset(asset)
        self.bus.publish("lifecycle.transitioned", {
            "agent_id": agent_id,
            "from": current.value,
            "to": next_state.value
        })
        
        # 进入RETIRING时触发退役编排
        if next_state == LifecycleState.RETIRING:
            self._orchestrate_retirement(agent_id)
    
    def _orchestrate_retirement(self, agent_id: str):
        """退役编排:权限回收→任务迁移→日志归档→资源释放"""
        # 1. 权限回收
        self.bus.publish("permission.revoke_requested", {"agent_id": agent_id})
        # 2. 任务迁移(通知依赖方)
        asset = self.store.get_asset(agent_id)
        for task_id in asset.dependent_tasks:
            self.bus.publish("task.migration_requested", {
                "agent_id": agent_id, "task_id": task_id
            })
        # 3. 日志归档
        self.bus.publish("audit.archive_requested", {"agent_id": agent_id})
        # 4. 资源释放
        self.bus.publish("resource.release_requested", {"agent_id": agent_id})

五、AIOps驱动的健康度监控:让“折旧”有数据依据

折旧模型需要“健康度”作为输入。健康度不是拍脑袋定的,而是由AIOps从运行数据中持续计算。

健康度从指标采集到事件触发的链路如下:

health < 0.6

0.6 ≤ health < 0.8

health ≥ 0.9

运行指标
成功率 / 延迟 / 错误率 / 权限拒绝率

基线对比
相对基线偏离度

加权计算
0.4 / 0.2 / 0.2 / 0.2

健康度分级

health.critical
触发退役评估

health.degraded
告警并观察

health.recovered
恢复 ACTIVE

class HealthMonitor:
    """健康度监控:AIOps指标驱动"""
    
    def __init__(self, metrics_store, baseline_store):
        self.metrics = metrics_store
        self.baseline = baseline_store
    
    def compute_health(self, agent_id: str, window_days: int = 7) -> dict:
        """计算Agent健康度"""
        m = self.metrics.query(agent_id, window_days)
        b = self.baseline.get(agent_id)
        
        # 四个核心指标
        task_success_rate = m.success_count / max(m.total_count, 1)
        avg_latency_ratio = m.avg_latency / max(b.avg_latency, 1)  # 相对基线的延迟比
        error_rate = m.error_count / max(m.total_count, 1)
        permission_denied_rate = m.permission_denied / max(m.total_count, 1)
        
        # 加权健康分
        health = (
            0.4 * task_success_rate +
            0.2 * (1.0 - min(avg_latency_ratio - 1, 1)) +
            0.2 * (1.0 - error_rate) +
            0.2 * (1.0 - permission_denied_rate)
        )
        
        # 健康度分级触发事件
        if health < 0.6:
            self.metrics.publish_event("health.critical", {"agent_id": agent_id, "health": health})
        elif health < 0.8:
            self.metrics.publish_event("health.degraded", {"agent_id": agent_id, "health": health})
        elif health >= 0.9:
            self.metrics.publish_event("health.recovered", {"agent_id": agent_id, "health": health})
        
        return {
            "agent_id": agent_id,
            "health_score": health,
            "metrics": {
                "task_success_rate": task_success_rate,
                "latency_ratio": avg_latency_ratio,
                "error_rate": error_rate,
                "permission_denied_rate": permission_denied_rate
            }
        }

关键设计:健康度监控的四个指标——任务成功率、延迟比、错误率、权限拒绝率——分别反映“能不能干成”“干得快不快”“干得稳不稳”“权限配得对不对”。四个指标加权,比单一“成功率”更能反映Agent的真实状态。

六、Human-in-the-loop:退役决策不能全自动

Agent的退役是一个高风险决策:它可能有依赖它的任务、有正在运行的流程、有未归档的审计数据。全自动退役可能导致业务中断。

Human-in-the-loop在这里的作用是守住“不可逆动作”的闸门:

退役审批的完整流程如下,超时默认拒绝:

"事件总线""运维人员""HITL 网关""生命周期引擎""事件总线""运维人员""HITL 网关""生命周期引擎"alt[审批通过][审批拒绝或超时]"request_approval(agent_id, retire)""发送审批通知(24h 超时)""approve""true""retire.approved → 进入 RETIRING""reject / timeout""false""retire.rejected → 回退 DEGRADED"
class HITLGateway:
    """Human-in-the-loop网关:高风险动作的人工确认"""
    
    def __init__(self, approval_store, notification):
        self.approvals = approval_store
        self.notify = notification
    
    def request_approval(self, agent_id: str, action: str, 
                         context: dict, timeout_hours: int = 24) -> bool:
        """发起人工审批,超时默认拒绝"""
        request_id = self.approvals.create(
            agent_id=agent_id,
            action=action,
            context=context,
            timeout_hours=timeout_hours,
            default_on_timeout=False  # 超时默认拒绝,安全优先
        )
        self.notify.send(
            channel="agent_lifecycle",
            message=f"Agent {agent_id} 请求执行 {action},请审批",
            request_id=request_id
        )
        return self.approvals.wait(request_id)

工程原则:退役、权限回收、任务迁移这类不可逆动作,必须有人工确认节点。超时默认拒绝,而不是默认通过。安全优先于效率。

七、API调用逻辑:资产查询与生命周期操作

资产化管理平台对外提供标准API,供运维系统和业务系统调用。

# 资产查询API
GET /api/v1/agents/{agent_id}/asset
Response: {
    "agent_id": "agent_finance_recon_001",
    "status": "active",
    "book_value": 12800.00,
    "health_score": 0.92,
    "deployed_at": "2026-03-15T00:00:00Z",
    "expected_life_months": 24,
    "dependent_tasks": ["task_monthly_recon", "task_daily_check"],
    "last_health_check": "2026-10-28T09:00:00Z"
}

# 发起退役API(触发HITL审批)
POST /api/v1/agents/{agent_id}/retire
Body: {
    "reason": "replaced_by_new_version",
    "requested_by": "ops_team"
}
Response: {
    "request_id": "retire_req_20261028_001",
    "status": "pending_approval",
    "requires_human_approval": true
}

# 健康度查询API
GET /api/v1/agents/{agent_id}/health?window_days=7
Response: {
    "health_score": 0.92,
    "task_success_rate": 0.97,
    "latency_ratio": 1.05,
    "error_rate": 0.02,
    "permission_denied_rate": 0.01
}

API设计原则:资产查询是只读的,可以直接调用;生命周期操作(退役、权限变更)是写操作且不可逆,必须触发Human-in-the-loop审批,API返回“待审批”而不是“已执行”。

从调用方视角看,读操作与写操作的路径差异如下:

GET 资产 / 健康度

POST 退役 / 权限变更

通过

拒绝 / 超时

调用方(运维 / 业务系统)

请求类型

只读查询
直接返回结果

写操作
创建审批请求

HITL 审批

执行生命周期动作

返回 rejected

Response: 资产 / 健康度数据

Response: pending_approval

八、工程实践要点

折旧模型要匹配能力衰减曲线。 知识密集型Agent衰减慢,用直线折旧;对接外部系统密集的Agent衰减快,用加速折旧。一刀切的折旧模型会高估或低估资产价值。

状态流转必须事件驱动。 Agent的健康变化、权限变更、退役请求都是事件。生命周期引擎订阅事件驱动状态流转,而不是靠人工定期检查。

健康度要有基线。 没有基线的“成功率90%”没有意义。健康度是相对基线的偏离度,不是绝对值。

退役必须Human-in-the-loop。 退役涉及权限回收、任务迁移、日志归档,是不可逆动作。人工确认节点是安全底线,超时默认拒绝。

审计覆盖全生命周期。 注册、状态变更、健康告警、退役审批、权限回收——每一个动作都按trace_id记录,满足审计追溯要求。

在行业实践中,类似沈管家这类全自动AI数字员工的管理底座,已经将独立身份、任务级权限收敛和全链路审计作为基础能力,为“资产化”的生命周期管理提供了工程前提——Agent有独立身份,才能被当作资产来追踪;权限随任务收敛,才能安全退役;审计覆盖全链路,才能算清楚“这笔资产值不值”。

九、结语

把AI Agent当“工具”管,管的是“功能有没有”;把AI Agent当“资产”管,管的是“价值还在不在、成本合不合理、风险可不可控”。

当企业的Agent数量从几个走向几十个、上百个,“资产化”就不再是一个管理概念,而是一套需要Event-Driven架构、AIOps监控和Human-in-the-loop决策共同支撑的工程体系。

你们企业的Agent,是在“用”还是在“管”?有没有算过它们的“账面价值”和“健康度”?欢迎在评论区交流你们的生命周期管理实践。

Logo

更多推荐