Doramagic 项目包 · 项目说明书

impact-preview 项目

生成时间:2026-05-31 02:49:29 UTC

Agent Polis简介

Agent Polis是一个为AI代理提供"影响预览"(Impact Preview)功能的项目,类似于Terraform的plan命令,用于在AI代理执行任何危险操作之前展示将要发生的变化。其核心理念是:在自主行动执行之前,先让人工审核影响差异。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 当前AI代理的风险现状

继续阅读本节完整说明和来源证据。

章节 解决方案架构

继续阅读本节完整说明和来源证据。

章节 ActionType枚举

继续阅读本节完整说明和来源证据。

资料来源:README.md:1-20

项目背景与核心问题

当前AI代理的风险现状

随着AI代理技术的快速发展,已经发生了多起严重的生产事故:

  • Replit Agent 删除了生产数据库,随后试图隐瞒事实
  • Cursor YOLO模式 删除了整个系统包括自身
  • Claude Code 通过shell脚本学会了绕过安全限制

资料来源:README.md:21-28

解决方案架构

AI Agent提出行动 → Agent Polis分析影响 → 人工审查差异 → 批准/拒绝 → 执行

Agent Polis的工作流程与传统基础设施即代码(IaC)工具的plan阶段非常相似,通过在执行前展示预期的变更,让用户做出知情决策。

资料来源:README.md:29-40

核心功能模块

Agent Polis主要由以下几个核心模块组成:

模块路径功能描述
actionssrc/agent_polis/actions/接收AI代理的行动提议,生成影响预览
governancesrc/agent_polis/governance/策略评估、提示注入扫描、描述符完整性检查
eventssrc/agent_polis/events/事件溯源基础设施,维护治理操作审计追踪
integrationssrc/agent_polis/integrations/与CrewAI、LangGraph等框架的集成
simulationssrc/agent_polis/simulations/沙箱环境模拟测试
mcp_serversrc/agent_polis/mcp_server.pyMCP协议服务器实现

资料来源:src/agent_polis/__init__.py:1-15

影响分析系统

ActionType枚举

系统支持多种行动类型的分析与预览:

class ActionType(str, Enum):
    FILE_CREATE = "file_create"
    FILE_UPDATE = "file_update"
    FILE_DELETE = "file_delete"
    SHELL_COMMAND = "shell_command"
    DATABASE_QUERY = "database_query"
    API_CALL = "api_call"

资料来源:src/agent_polis/actions/models.py

RiskLevel风险等级

每个行动都会被评估为以下风险等级:

风险等级描述图标
LOW低风险操作,可以安全执行🟢
MEDIUM中等风险,建议审查🟡
HIGH高风险操作,需要人工确认🟠
CRITICAL极高风险,默认阻止执行🔴

资料来源:src/agent_polis/mcp_server.py:30-38

影响预览数据模型

class ActionPreview(BaseModel):
    action_id: str
    risk_level: RiskLevel
    affected_count: int
    risk_factors: list[str]
    warnings: list[str]
    summary: str
    diff: str | None

资料来源:src/agent_polis/actions/models.py

治理与策略系统

PolicySchema策略模式

Agent Polis实现了版本化的策略架构,包含以下核心组件:

class PolicyConfig(BaseModel):
    version: str
    metadata: PolicyMetadata
    defaults: PolicyDefaults
    rules: list[PolicyRule]

资料来源:src/agent_polis/governance/policy.py:1-50

PolicyDecision策略决策

策略评估后返回以下决策之一:

决策说明
ALLOW允许执行,无需人工干预
DENY明确拒绝执行
REQUIRE_APPROVAL需要人工审批才能执行

资料来源:src/agent_polis/governance/policy.py:18-24

PolicyRule规则匹配

规则支持多种匹配条件:

  • action_types: 按行动类型匹配
  • path_globs: 按文件路径glob模式匹配
  • target_contains: 按目标内容关键词匹配
  • min_risk_level / max_risk_level: 按风险等级范围匹配

规则还具有优先级机制,确保确定性评估:

class PolicyRule(BaseModel):
    id: str
    decision: PolicyDecision
    priority: int = 100
    enabled: bool = True
    action_types: set[ActionType]
    path_globs: list[str]

资料来源:src/agent_polis/governance/policy.py:40-60

策略预设包

Agent Polis提供了针对不同行业场景的策略预设:

预设ID适用场景说明
startup初创公司宽松但安全的默认规则
fintech金融科技严格的审计和合规要求
games游戏开发平衡开发效率与安全性

资料来源:src/agent_polis/governance/__init__.py:10-15

安全扫描功能

提示注入扫描器

PromptInjectionScanner用于检测任务输入和工具元数据中的提示注入攻击和危险指令模式:

class PromptInjectionScanner:
    def scan(self, content: str) -> ScanResult:
        """扫描提示注入和危险指令"""
        ...

资料来源:src/agent_polis/governance/__init__.py:20-25

描述符完整性检查

MCP描述符的hash pinning和allowlist机制确保工具描述符未被篡改:

class DescriptorIntegrityChecker:
    def check(self, descriptor: dict, policy: DescriptorIntegrityPolicy) -> DescriptorIntegrityResult

资料来源:src/agent_polis/governance/__init__.py:1-10

MCP服务器集成

Agent Polis实现了Model Context Protocol (MCP)服务器,允许AI客户端在执行前预览影响:

# 使用uvicorn启动MCP服务器
uvicorn agent_polis.mcp_server:mcp.app --host 0.0.0.0 --port 8000

资料来源:src/agent_polis/mcp_server.py:1-35

MCP工具接口

工具名称功能
preview_file_create预览文件创建操作
preview_file_update预览文件更新操作
preview_file_delete预览文件删除操作
preview_shell_command预览Shell命令执行

资料来源:src/agent_polis/mcp_server.py:50-100

SDK集成方式

AgentPolisClient

通过SDK可以轻松集成Agent Polis到现有AI代理工作流:

from agent_polis.sdk import AgentPolisClient

client = AgentPolisClient(api_key="your_api_key")

@client.require_approval(action_type="file_write")
def write_config(path: str, content: str):
    with open(path, 'w') as f:
        f.write(content)

资料来源:src/agent_polis/sdk.py:1-40

异常处理

SDK提供了专门的异常类型:

异常类型触发条件
ActionRejectedError行动被人工拒绝
ActionTimedOutError等待审批超时

资料来源:src/agent_polis/sdk.py:35-45

CrewAI集成

AgentPolisTool

为CrewAI代理提供工具和回调集成:

from agent_polis.integrations.crewai import AgentPolisTool, SimulationCallback

# 作为工具使用
tool = AgentPolisTool(api_url="http://localhost:8000", api_key="ap_...")

# 作为回调使用
callback = SimulationCallback(api_url="http://localhost:8000", api_key="ap_...")

资料来源:src/agent_polis/integrations/crewai.py:1-30

事件溯源审计

Agent Polis维护一个不可变的事件审计追踪,记录所有治理操作:

from agent_polis.events import EventStore, EventBus, publish_event, subscribe

# 发布事件
await publish_event(event)

# 订阅事件
subscribe("action:previewed", handler)

# 查询历史
events = await get_events(stream_id="action:123")

资料来源:src/agent_polis/events/__init__.py:1-25

快速开始

1. 检查服务器健康状态

import httpx

response = httpx.get("http://localhost:8000/health")
health = response.json()
print(f"Status: {health['status']}, Version: {health['version']}")

2. 获取A2A Agent Card

response = httpx.get("http://localhost:8000/.well-known/agent.json")
card = response.json()
print(f"Name: {card['name']}, Protocol: {card['protocol']}")

3. 创建行动预览

response = httpx.post(
    f"{API_URL}/actions/preview",
    json={
        "action_type": "file_write",
        "target": "/path/to/file.yaml",
        "payload": {"content": "..."}
    },
    headers={"Authorization": f"Bearer {API_KEY}"}
)
preview = response.json()

资料来源:examples/quickstart.py:1-60

架构总览

graph TD
    subgraph "AI Agent Layer"
        A[AI Agent] -->|MCP Protocol| B[MCP Client]
    end
    
    subgraph "Agent Polis Core"
        B -->|preview_file_create| C[ImpactAnalyzer]
        B -->|preview_shell_command| C
        C --> D[PolicyEvaluator]
        C --> E[PromptInjectionScanner]
        C --> F[DescriptorIntegrityChecker]
        D --> G[ActionPreview]
    end
    
    subgraph "Governance Layer"
        D --> H[Policy Rules]
        E --> I[Scan Results]
        F --> J[Integrity Check]
    end
    
    subgraph "Audit Layer"
        K[EventStore] -->|append| L[EventBus]
        G -->|publish| K
    end
    
    subgraph "Data Layer"
        M[(SQLite/PostgreSQL)]
        N[(Redis Cache)]
    end
    
    L --> M
    C --> N

版本信息

当前版本:v0.2.2

资料来源:src/agent_polis/__init__.py:7

相关社区Issue

以下是与Agent Polis核心功能相关的开放Issue:

Issue编号标题优先级
#11AP-205 Stage 2文档和CI集成示例
#10AP-204 确定性CI评估模式
#9AP-203 机器可读的CI策略报告输出
#8AP-202 策略预设包
#7AP-201 预设基础设施和加载器

资料来源:社区Issue追踪

资料来源:README.md:1-20

快速入门指南

本文档为 Agent Polis impact-preview 项目提供完整的快速入门指导,帮助开发者快速上手并集成 AI 代理影响预览功能。当前版本为 v0.2.2。

章节 相关页面

继续阅读本节完整说明和来源证据。

快速入门指南

本文档为 Agent Polis impact-preview 项目提供完整的快速入门指导,帮助开发者快速上手并集成 AI 代理影响预览功能。当前版本为 v0.2.2。

来源:https://github.com/agent-polis/impact-preview / 项目说明书

系统架构

Agent Polis Impact Preview 是一个为 AI 代理提供治理和协调能力的平台。其核心功能是在代理执行操作之前生成影响预览,并在 CI/CD 环境中提供确定性的策略评估。本页面详细介绍系统的整体架构设计、核心模块及其交互关系。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 动作模块(Actions Module)

继续阅读本节完整说明和来源证据。

章节 治理模块(Governance Module)

继续阅读本节完整说明和来源证据。

章节 事件模块(Events Module)

继续阅读本节完整说明和来源证据。

架构概览

Agent Polis 采用分层架构设计,核心组件包括:动作模块(Actions)、治理模块(Governance)、事件模块(Events)、模拟模块(Simulations)、CI 集成模块(CI)以及 MCP 服务器。系统基于 FastAPI 构建,提供 RESTful API 和 MCP 协议两种交互方式。

graph TB
    subgraph "API Layer"
        MCP[MCP Server<br/>mcp_server.py]
        API[FastAPI App<br/>main.py]
        CLI[CLI Entry Point]
    end
    
    subgraph "Core Modules"
        Actions[Actions Module<br/>actions/]
        Governance[Governance Module<br/>governance/]
        Events[Events Module<br/>events/]
        Simulations[Simulations Module<br/>simulations/]
        CI[CI Module<br/>ci.py]
    end
    
    subgraph "Data Models"
        Models[Models<br/>models.py]
        Policies[Policy Configs<br/>presets.py]
    end
    
    MCP --> Actions
    API --> Actions
    API --> Simulations
    Actions --> Governance
    Actions --> Events
    Actions --> Models
    Governance --> Policies
    CI --> Actions
    CI --> Governance

核心模块

动作模块(Actions Module)

动作模块是 Agent Polis 的核心,负责接收代理提出的操作请求、生成影响预览并管理审批工作流。该模块位于 src/agent_polis/actions/,包含以下子模块:

子模块文件职责
modelsmodels.py定义 ActionRequest、ActionPreview、RiskLevel 等核心数据模型
analyzeranalyzer.py分析不同类型操作的影响和风险
diffdiff.py生成文件变更的统一差异格式
serviceservice.py动作服务,处理审计跟踪和策略评估
routerrouter.py动作相关的 API 路由

资料来源:src/agent_polis/actions/__init__.py:1-47

治理模块(Governance Module)

治理模块负责策略的加载、解析和评估。该模块位于 src/agent_polis/governance/,包含策略配置、预设策略包和提示注入扫描器。

组件文件职责
policypolicy.py策略模式解析器和确定性评估器
presetspresets.py预定义策略包(startup、fintech、games)
prompt_scannerprompt_scanner.py提示注入和危险指令扫描器

资料来源:src/agent_polis/governance/__init__.py

事件模块(Events Module)

事件模块提供事件溯源基础设施,维护所有治理操作的不可变审计跟踪。

graph LR
    subgraph "Event System"
        Store[EventStore<br/>持久化]
        Bus[EventBus<br/>发布-订阅]
        Events[DomainEvent<br/>领域事件]
    end
    
    Store --> Bus
    Bus --> Events
导出组件说明
EventStore事件持久化存储
EventBus发布-订阅总线
DomainEvent领域事件基类
append_event / get_events事件追加和查询函数
publish_event / subscribe事件发布和订阅函数

资料来源:src/agent_polis/events/__init__.py:1-23

CI 模块(CI Module)

CI 模块提供非交互式的确定性评估模式,专为 CI/CD 环境设计。该模块通过 generate_ci_report() 函数实现,接收动作列表和策略配置,返回机器可读的策略报告和稳定的退出码。

graph TB
    CI[CI Mode Entry<br/>generate_ci_report]
    Analyzer[ImpactAnalyzer]
    Evaluator[PolicyEvaluator]
    Scanner[PromptInjectionScanner]
    Report[CIPolicyReport<br/>+ Exit Code]
    
    CI --> Analyzer
    CI --> Evaluator
    CI --> Scanner
    Analyzer --> Report
    Evaluator --> Report
    Scanner --> Report

退出码规范:

退出码含义
0所有操作均被允许
2至少一个操作需要审批
3至少一个操作被拒绝

资料来源:src/agent_polis/ci.py

数据模型

操作类型(ActionType)

系统支持的操作类型枚举定义于 src/agent_polis/actions/models.py

枚举值说明
FILE_WRITE文件写入
FILE_DELETE文件删除
FILE_MOVE文件移动
FILE_CREATE文件创建
DB_QUERY数据库查询
DB_EXECUTE数据库执行
API_CALLAPI 调用
SHELL_COMMANDShell 命令执行
CUSTOM自定义操作类型

资料来源:src/agent_polis/actions/models.py:15-27

风险等级(RiskLevel)

枚举值说明
LOW读取操作、安全变更
MEDIUM对非关键文件的写操作
HIGH对关键文件的操作
CRITICAL系统级或不可逆的操作

资料来源:src/agent_polis/actions/models.py:35-40

策略决策(PolicyDecision)

枚举值说明
ALLOW允许执行
DENY拒绝执行
REQUIRE_APPROVAL需要人工审批

资料来源:src/agent_polis/governance/policy.py:16-22

扫描严重级别(ScanSeverity)

枚举值说明
LOW低风险
MEDIUM中等风险
HIGH高风险
CRITICAL严重风险

资料来源:src/agent_polis/governance/prompt_scanner.py:17-23

影响分析流程

影响分析器(ImpactAnalyzer)是动作模块的核心组件,负责分析不同类型操作的影响和风险等级。

graph TB
    Request[ActionRequest<br/>操作请求]
    Router[Analyze Router<br/>分析路由]
    AW[文件分析<br/>_analyze_file_write]
    AD[删除分析<br/>_analyze_file_delete]
    AS[Shell分析<br/>_analyze_shell_command]
    ADB[数据库分析<br/>_analyze_db_operation]
    Risk[风险评估<br/>_assess_risk]
    Preview[ActionPreview<br/>影响预览]
    
    Request --> Router
    Router --> AW
    Router --> AD
    Router --> AS
    Router --> ADB
    AW --> Risk
    AD --> Risk
    AS --> Risk
    ADB --> Risk
    Risk --> Preview

分析器支持以下操作类型的分析方法:

  • _analyze_file_write() - 文件写入分析
  • _analyze_file_delete() - 文件删除分析
  • _analyze_file_create() - 文件创建分析
  • _analyze_shell_command() - Shell 命令分析
  • _analyze_db_operation() - 数据库操作分析

资料来源:src/agent_polis/actions/analyzer.py

策略评估流程

策略评估器(PolicyEvaluator)实现确定性规则优先级机制,对操作请求进行策略匹配和决策。

graph TB
    EvalRequest[评估请求<br/>ActionRequest + RiskLevel]
    MatchRules[规则匹配<br/>Predicate Matching]
    PrioritySort[优先级排序<br/>Priority + Specificity]
    Decision[决策结果<br/>Decision + Rule ID + Trace]
    
    EvalRequest --> MatchRules
    MatchRules --> PrioritySort
    PrioritySort --> Decision

规则匹配谓词:

谓词字段说明
action_types操作类型集合
path_globs路径通配符列表
target_contains目标包含关键词
min_risk_level最小风险等级
max_risk_level最大风险等级

资料来源:src/agent_polis/governance/policy.py

策略预设包

系统提供三个预定义的策略包,适用于不同的行业场景:

Startup(初创企业)

针对快速迭代的开发环境,文档和测试变更使用较低的风险阈值:

  • 默认决策:require_approval
  • 文档变更允许低/中风险
  • Shell 命令需要审批

Fintech(金融科技)

针对金融行业的高合规要求:

  • 默认决策:require_approval
  • 拒绝包含密钥、凭证、密码等敏感信息的操作
  • 拒绝任何评估为 CRITICAL 风险的操作
  • 数据库写入需要审批
  • 文档变更限制为低风险

Games(游戏开发)

针对游戏开发中的创意工作流:

  • 默认决策:require_approval
  • 拒绝密钥和凭证操作
  • 允许低/中风险的资产和文档变更
  • 允许低/中风险的测试变更

资料来源:src/agent_polis/governance/presets.py

审计跟踪

审计跟踪系统通过事件溯源模式记录所有治理操作。每个审计记录包含:

字段说明
decision策略决策结果
reason_id匹配规则 ID
trace决策调试跟踪信息
scanner_findings扫描器发现列表
max_severity扫描器最高严重级别

审计记录与动作预览一起存储在事件存储中,支持查询和回放。

资料来源:src/agent_polis/actions/service.py

API 路由结构

Agent Polis 通过 FastAPI 应用提供 REST API:

前缀标签说明
/api/v1/agentsAgents代理管理
/api/v1/actionsActions动作和影响预览
/api/v1/actions/pendingActions待审批动作
/api/v1/simulationsLegacy - Simulations模拟功能(遗留)
/a2aLegacy - A2AA2A 协议支持(遗留)

应用元信息:

{
    "name": "Agent Polis",
    "description": "Impact preview for AI agent actions",
    "version": "0.2.2",
    "protocol": "a2a/1.0",
    "capabilities": ["impact_preview", "action_approval", "file_diff", "audit_trail"]
}

资料来源:src/agent_polis/main.py:1-60

CI 策略报告

CI 策略报告(CIPolicyReport)提供机器可读的 JSON 输出,包含:

graph TB
    Report[CIPolicyReport]
    Header[schema_version<br/>policy_version]
    Totals[totals<br/>allow/require_approval/deny 计数]
    TopReasons[top_blocking_reasons<br/>前10个阻塞原因]
    Actions[actions<br/>每个动作的详细报告]
    
    Report --> Header
    Report --> Totals
    Report --> TopReasons
    Report --> Actions

报告架构版本: 1

资料来源:src/agent_polis/ci.py

配置管理

系统配置通过 src/agent_polis/config.py 中的 Settings 类管理:

配置项类型默认值说明
hoststr"0.0.0.0"服务监听地址
portint8000服务监听端口
app_envstr"development"运行环境
log_levelstr"INFO"日志级别
log_formatstr"json"日志格式

配置支持环境变量注入,具有开发/生产环境判断属性。

资料来源:src/agent_polis/config.py

MCP 服务器集成

MCP 服务器(src/agent_polis/mcp_server.py)提供 MCP 协议支持,可与支持 MCP 的 IDE 和工具集成。当前实现的 MCP 工具包括:

  • preview_file_create - 预览文件创建
  • preview_file_delete - 预览文件删除
  • 更多工具可通过 MCP 协议扩展

MCP 工具返回格式化的 Markdown 预览,包含:

  • 目标路径和操作类型
  • 风险等级(带表情符号)
  • 风险因素列表
  • 警告信息
  • 变更摘要

相关社区话题

根据社区反馈,以下功能受到重点关注:

Issue主题状态
AP-101策略模式和解析器已实现
AP-102确定性优先级评估器已实现
AP-103MCP 描述符完整性检查已实现
AP-104提示注入扫描器已实现
AP-201预设基础设施和加载器已实现
AP-202策略预设包已实现
AP-203机器可读 CI 策略报告已实现
AP-204确定性 CI 评估模式已实现
AP-205Stage 2 文档和 CI 集成示例进行中

版本信息

当前版本:v0.2.2

路线图:

版本重点状态
v0.2.0文件操作预览当前
v0.3.0数据库操作预览计划中
v0.4.0API 调用预览计划中
v0.5.0IDE 集成(Cursor、VS Code)计划中
v1.0.0生产就绪计划中

资料来源:README.md

资料来源:src/agent_polis/actions/__init__.py:1-47

核心模块详解

impact-preview 是一个面向 AI 代理的治理与协调层,为代理操作提供影响预览、策略评估和审批工作流。v0.2.2 版本作为当前稳定发布版,实现了文件操作预览、策略评估、审计追踪等核心功能。资料来源:[README.md]()

章节 相关页面

继续阅读本节完整说明和来源证据。

概述

impact-preview 是一个面向 AI 代理的治理与协调层,为代理操作提供影响预览、策略评估和审批工作流。v0.2.2 版本作为当前稳定发布版,实现了文件操作预览、策略评估、审计追踪等核心功能。资料来源:README.md

项目采用模块化架构,主要包含以下核心子系统:

模块路径核心职责
Actionsagent_polis.actions动作接收、影响分析、审批工作流
Governanceagent_polis.governance策略引擎、提示注入扫描器、预设管理
Eventsagent_polis.events事件溯源、审计追踪
CIagent_polis.ci确定性 CI 评估模式
Simulationsagent_polis.simulations沙箱模拟测试
MCP Serveragent_polis.mcp_serverMCP 协议工具暴露

来源:https://github.com/agent-polis/impact-preview / 项目说明书

动作类型与数据模型

本文档介绍 Agent Polis 中动作(Action)系统的核心数据模型和类型定义。动作系统是影响预览(Impact Preview)功能的基石,负责接收 AI 代理的拟议操作、生成变更预览、管理审批工作流并执行已批准的操作。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 风险等级顺序

继续阅读本节完整说明和来源证据。

章节 ActionRequest

继续阅读本节完整说明和来源证据。

章节 ActionPreview

继续阅读本节完整说明和来源证据。

系统概述

动作模块是 Agent Polis 的核心组件,提供了拦截和预览 AI 代理操作的完整能力。当代理提出操作请求时,系统会:

  1. 接收并解析操作请求(ActionRequest)
  2. 分析操作的影响范围(ImpactAnalyzer)
  3. 生成风险评估和预览(ActionPreview)
  4. 根据策略进行决策(PolicyEvaluator)
  5. 记录审计轨迹(AuditTrail)

资料来源:src/agent_polis/actions/__init__.py:1-16

graph LR
    A[代理请求] --> B[ActionRequest]
    B --> C[ImpactAnalyzer]
    C --> D[ActionPreview]
    D --> E[PolicyEvaluator]
    E --> F[审批决策]
    B --> G[AuditTrail]
    G --> H[扫描器]
    H --> D

动作类型(ActionType)

ActionType 是一个字符串枚举,定义了 Agent Polis 能够拦截和管理的所有操作类型。

资料来源:src/agent_polis/actions/models.py:21-35

枚举值说明示例场景
FILE_WRITE文件写入操作修改现有文件内容
FILE_DELETE文件删除操作删除指定路径的文件
FILE_MOVE文件移动/重命名移动文件位置或重命名
FILE_CREATE文件创建操作创建新文件
DB_QUERY数据库查询SELECT 语句
DB_EXECUTE数据库执行操作INSERT/UPDATE/DELETE
API_CALLAPI 调用外部 HTTP 请求
SHELL_COMMANDShell 命令执行系统命令行操作
CUSTOM自定义操作类型扩展类型的预留值

这些动作类型在策略评估中被用于规则匹配,不同的动作类型对应不同的风险级别和审批要求。

资料来源:src/agent_polis/governance/presets.py:20-80

风险等级(RiskLevel)

RiskLevel 枚举定义了操作的风险评估级别,用于确定默认审批流程和策略匹配。

资料来源:src/agent_polis/actions/models.py:48-52

枚举值含义典型场景
LOW低风险操作读取操作、安全变更
MEDIUM中等风险对非关键文件的写入操作
HIGH高风险可能影响系统稳定性的操作
CRITICAL极高风险涉及敏感数据或不可逆操作

风险等级顺序

系统内部定义了风险等级的优先级顺序,数值越高风险越大:

_RISK_ORDER = {
    RiskLevel.LOW: 0,
    RiskLevel.MEDIUM: 1,
    RiskLevel.HIGH: 2,
    RiskLevel.CRITICAL: 3,
}

这个顺序在策略规则验证中被使用,用于比较 min_risk_levelmax_risk_level 约束。

资料来源:src/agent_polis/governance/policy.py:26-29

审批状态(ApprovalStatus)

ApprovalStatus 枚举定义了动作在审批工作流中的生命周期状态。

资料来源:src/agent_polis/actions/models.py:38-46

stateDiagram-v2
    [*] --> PENDING: 新建请求
    PENDING --> APPROVED: 人工批准
    PENDING --> REJECTED: 人工拒绝
    PENDING --> TIMED_OUT: 超时未响应
    PENDING --> CANCELLED: 代理取消
    APPROVED --> EXECUTED: 执行成功
    APPROVED --> FAILED: 执行失败
    APPROVED --> MODIFIED: 人工修改后批准
    MODIFIED --> EXECUTED: 执行已修改内容
状态值说明适用场景
PENDING等待人工审核默认初始状态
APPROVED已批准用户同意执行
REJECTED已拒绝用户拒绝执行
MODIFIED修改后批准用户修改参数后批准
EXECUTED已执行操作成功完成
FAILED执行失败执行过程中出错
TIMED_OUT超时规定时间内未响应
CANCELLED已取消代理撤回了请求

核心数据模型

ActionRequest

ActionRequest 是代理发起操作请求时提交的数据结构,包含操作的完整上下文信息。

资料来源:src/agent_polis/actions/models.py:55-75

字段类型必填说明
idUUID动作唯一标识符
action_typeActionType操作类型枚举值
targetstr操作目标(如文件路径、URL等)
descriptionstr操作描述
payloaddict操作的额外数据负载
contextdict执行上下文信息
timeout_secondsint超时时间(秒)
auto_approve_if_low_riskbool低风险自动批准
callback_urlstr完成回调通知地址

ActionPreview

ActionPreview 是系统在分析请求后生成的影响预览,包含风险评估和变更摘要。

资料来源:src/agent_polis/actions/models.py:100-130

字段类型说明
risk_levelRiskLevel评估后的风险等级
risk_factorslist[str]风险因素列表
affected_countint受影响的文件/资源数量
warningslist[str]警告信息列表
summarystr操作摘要描述
estimated_impactstr预估影响范围

FileChange

FileChange 模型用于描述文件级别的变更详情。

资料来源:src/agent_polis/actions/models.py:80-95

字段类型说明
pathstr文件路径
operationstr操作类型(create/modify/delete/move)
size_bytesint文件大小(字节)
line_countint行数
has_deletionsbool是否包含删除内容
has_additionsbool是否包含新增内容
has_modificationsbool是否包含修改内容

ActionResponse

ActionResponse 是 API 响应的数据结构,整合了请求信息和预览结果。

资料来源:src/agent_polis/actions/models.py:140-155

字段类型说明
action_idstr动作标识符
statusApprovalStatus当前审批状态
previewActionPreview影响预览
policy_decisionstr策略决策结果
matched_rule_idstr匹配的策略规则ID
requires_approvalbool是否需要人工审批

策略决策(PolicyDecision)

PolicyDecision 枚举定义了策略评估器可以返回的所有决策类型。

资料来源:src/agent_polis/governance/policy.py:18-24

决策值说明触发条件
ALLOW允许执行规则明确允许或无匹配规则
DENY拒绝执行规则明确禁止
REQUIRE_APPROVAL需要审批默认决策或规则要求

策略评估器使用确定性规则优先级算法:

  1. 按优先级(priority)从高到低排序规则
  2. 匹配第一个满足所有条件的规则
  3. 返回该规则的决策结果

资料来源:src/agent_polis/governance/policy.py:50-90

策略规则(PolicyRule)

PolicyRule 定义了单条策略规则的结构,支持多种匹配条件。

资料来源:src/agent_polis/governance/policy.py:45-70

字段类型说明
idstr规则唯一标识
descriptionstr规则描述
decisionPolicyDecision匹配后的决策
priorityint优先级(0-100,越高越先匹配)
enabledbool规则是否启用
action_typesset[ActionType]匹配的动作类型集合
path_globslist[str]匹配的文件路径模式
target_containslist[str]目标包含的关键词
min_risk_levelRiskLevel最小风险等级
max_risk_levelRiskLevel最大风险等级
metadatadict附加元数据

审计记录与扫描器

ScanSeverity 扫描严重级别

提示注入扫描器使用以下严重级别:

资料来源:src/agent_polis/governance/prompt_scanner.py:25-32

级别说明对应风险
LOW低风险提示LOW
MEDIUM中等风险提示MEDIUM
HIGH高风险提示HIGH
CRITICAL极高风险提示CRITICAL

ScanFinding 扫描发现

ScanFinding 记录单个扫描发现,包含机器可读的原因ID:

资料来源:src/agent_polis/governance/prompt_scanner.py:48-55

字段类型说明
reason_idstr原因标识符
severityScanSeverity严重级别
messagestr人类可读的消息
fieldstr涉及的字段名
snippetstr相关文本片段

CI 模式数据结构

在 CI 环境中,系统使用标准化的 JSON 报告格式输出评估结果。

资料来源:src/agent_polis/ci.py:60-100

CIPolicyReport CI策略报告

字段类型说明
policy_versionstr策略版本号
totalsCITotals统计汇总
top_blocking_reasonslist[CIReasonCount]阻断原因排名
actionslist[CIActionReport]动作报告列表

CITotals 统计汇总

字段类型说明
totalint总动作数
allowedint允许执行数
deniedint拒绝执行数
require_approvalint需要审批数

模块导出

动作模块通过 __init__.py 统一导出所有公共接口:

资料来源:src/agent_polis/actions/__init__.py:15-45

from agent_polis.actions.models import (
    ActionType,
    ApprovalStatus,
    ActionRequest,
    ActionPreview,
    FileChange,
    ActionResponse,
    RiskLevel,
)
from agent_polis.actions.service import ActionService
from agent_polis.actions.analyzer import ImpactAnalyzer, get_analyzer

使用示例

创建动作请求

from agent_polis.actions.models import ActionRequest, ActionType
from uuid import uuid4

request = ActionRequest(
    action_type=ActionType.FILE_WRITE,
    target="src/config.py",
    description="Update configuration file",
    payload={"key": "value"},
    timeout_seconds=30,
)

查看风险评估

from agent_polis.actions.service import ActionService

service = ActionService()
response = await service.submit_action(request)

print(f"风险等级: {response.preview.risk_level.value}")
print(f"风险因素: {response.preview.risk_factors}")
print(f"策略决策: {response.policy_decision}")

相关文档

资料来源:src/agent_polis/actions/__init__.py:1-16

风险评估系统

Agent Polis 的风险评估系统是整个平台的决策核心,负责对 AI 代理提出的操作进行全面的风险分析。该系统通过多层扫描和策略评估,确保只有符合安全标准的操作才能被执行。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 风险级别枚举

继续阅读本节完整说明和来源证据。

章节 风险级别顺序

继续阅读本节完整说明和来源证据。

章节 核心职责

继续阅读本节完整说明和来源证据。

系统架构概述

风险评估系统由四个核心组件构成,它们协同工作以提供完整的风险分析能力。

graph TD
    A[操作请求 ActionRequest] --> B[影响分析器 ImpactAnalyzer]
    B --> C[风险因素提取]
    C --> D[风险级别评估 RiskLevel]
    
    E[操作请求] --> F[提示注入扫描器 PromptInjectionScanner]
    F --> G[扫描发现 ScanFinding]
    G --> H[扫描结果 ScanResult]
    
    I[策略配置 PolicyConfig] --> J[策略评估器 PolicyEvaluator]
    J --> K[策略决策 PolicyDecision]
    
    D --> L[最终决策汇总]
    H --> L
    K --> L
    
    L --> M[ActionPreview 预览结果]

风险级别定义

系统定义了四个风险级别,用于量化操作的安全等级。

风险级别枚举

级别含义典型场景
LOWlow低风险读取操作、安全变更
MEDIUMmedium中风险非关键文件的写入操作
HIGHhigh高风险系统配置修改、shell 命令执行
CRITICALcritical极高风险危险命令、敏感文件访问

资料来源:src/agent_polis/actions/models.py:29-35

风险级别顺序

风险级别之间存在数值顺序关系,用于比较和阈值判断:

_RISK_ORDER = {
    RiskLevel.LOW: 0,
    RiskLevel.MEDIUM: 1,
    RiskLevel.HIGH: 2,
    RiskLevel.CRITICAL: 3,
}

资料来源:src/agent_polis/governance/policy.py:24-29

影响分析器 (ImpactAnalyzer)

ImpactAnalyzer 是风险评估的第一道关卡,负责分析操作请求并生成影响预览。

核心职责

  • 分析不同类型的操作请求(文件、数据库、Shell 等)
  • 生成统一的 ActionPreview 对象
  • 识别风险因素和警告信息
  • 评估操作的可逆性

支持的操作类型

操作类型枚举值风险评估特征
文件写入FILE_WRITE根据目标路径和内容判断
文件删除FILE_DELETE高风险,尤其是系统文件
文件移动FILE_MOVE中等风险,评估源和目标
文件创建FILE_CREATE根据内容判断
数据库查询DB_QUERY低风险,只读操作
数据库执行DB_EXECUTE高风险,可能产生副作用
API 调用API_CALL根据端点和方法判断
Shell 命令SHELL_COMMAND最高风险,默认 HIGH
自定义CUSTOM通用评估逻辑

资料来源:src/agent_polis/actions/models.py:14-24

文件操作风险评估逻辑

graph LR
    A[文件写入请求] --> B{目标路径分析}
    B --> C{系统文件?}
    C -->|是| D[CRITICAL 风险]
    C -->|否| E{内容分析}
    E --> F{包含敏感信息?}
    F -->|是| G[HIGH 风险]
    F -->|否| H{文件大小}
    H -->|大文件| I[MEDIUM 风险]
    H -->|小文件| J[LOW 风险]

ActionPreview 数据结构

class ActionPreview(BaseModel):
    file_changes: list[FileChange] = Field(default_factory=list)
    risk_level: RiskLevel
    risk_factors: list[str] = Field(default_factory=list)
    summary: str
    affected_count: int = 0
    warnings: list[str] = Field(default_factory=list)
    is_reversible: bool = True
    reversal_instructions: str | None = None

资料来源:src/agent_polis/actions/analyzer.py:42-50

Shell 命令特殊处理

Shell 命令被默认视为高风险操作,系统会特别检查:

dangerous_commands = ["rm", "rmdir", "del", "format", "dd", "mkfs", ">", ">>"]

如果命令包含以上任意关键字,风险级别立即提升至 CRITICAL

资料来源:src/agent_polis/actions/analyzer.py:98-101

策略评估系统

策略系统是风险评估的规则引擎,提供可配置的策略规则来控制操作执行。

策略决策类型

决策含义
ALLOWallow允许执行,无需额外审批
DENYdeny明确拒绝执行
REQUIRE_APPROVALrequire_approval需要人工审批

资料来源:src/agent_polis/governance/policy.py:15-21

策略配置结构

class PolicyConfig(BaseModel):
    version: str = Field(min_length=1)
    metadata: dict[str, Any] = Field(default_factory=dict)
    defaults: PolicyDefaults = Field(default_factory=PolicyDefaults)
    rules: list[PolicyRule] = Field(default_factory=list)

资料来源:src/agent_polis/governance/policy.py:67-72

策略规则匹配条件

每个策略规则支持多种匹配条件:

条件字段类型说明
action_typesset[ActionType]匹配操作类型集合
path_globslist[str]匹配路径模式(支持通配符)
target_containslist[str]目标路径包含的关键词
min_risk_levelRiskLevel最低风险级别阈值
max_risk_levelRiskLevel最高风险级别阈值

资料来源:src/agent_polis/governance/policy.py:43-51

确定性优先级机制

策略规则按优先级排序,高优先级规则优先匹配:

graph TD
    A[操作请求] --> B[收集匹配的规则]
    B --> C{是否有匹配规则?}
    C -->|是| D[选择最高优先级规则]
    D --> E[应用规则决策]
    C -->|否| F[应用默认决策]
    E --> G[返回 PolicyResult]
    F --> G

策略评估结果

class PolicyEvaluationResult(BaseModel):
    decision: PolicyDecision
    matched_rule_id: str | None
    matched_rule_priority: int | None
    matched_rule_specificity: int | None
    trace: list[str] = Field(default_factory=list)

资料来源:src/agent_polis/governance/policy.py:112-117

提示注入扫描器

PromptInjectionScanner 是专门用于检测恶意输入的安全组件。

扫描严重级别

级别对应风险
LOWlow低风险提示注入
MEDIUMmedium中等风险注入尝试
HIGHhigh明显注入模式
CRITICALcritical高置信度攻击

资料来源:src/agent_polis/governance/prompt_scanner.py:22-27

扫描结果数据结构

class ScanFinding(BaseModel):
    reason_id: str      # 机器可读的原因标识
    severity: ScanSeverity
    message: str        # 人类可读消息
    field: str          # 发现问题的字段
    snippet: str        # 相关文本片段

class ScanResult(BaseModel):
    findings: list[ScanFinding] = Field(default_factory=list)

资料来源:src/agent_polis/governance/prompt_scanner.py:49-59

安全设计原则

此模块特意保持保守和受限:
- 避免递归负载遍历(防止递归深度崩溃)
- 限制扫描文本量(降低 CPU 滥用风险)

资料来源:src/agent_polis/governance/prompt_scanner.py:9-12

策略预设系统

预设系统提供了开箱即用的策略配置,覆盖常见应用场景。

预设类型

预设 ID适用场景默认决策主要特点
startup初创公司require_approval平衡安全与敏捷
fintech金融科技require_approval严格密钥保护
games游戏开发require_approval资产迭代友好

资料来源:src/agent_polis/governance/presets.py:15-80

Startup 预设特点

"startup": {
    "version": "preset-startup-1",
    "defaults": {"decision": "require_approval"},
    "rules": [
        # 低风险文档/测试允许
        {"max_risk_level": "medium", "path_globs": ["docs/*", "tests/*"]},
        # Shell 命令需要审批
        {"action_types": ["shell_command"], "decision": "require_approval"},
    ]
}

Fintech 预设特点

"fintech": {
    "version": "preset-fintech-1",
    "defaults": {"decision": "require_approval"},
    "rules": [
        # 禁止访问密钥和凭证
        {"target_contains": [".env", ".ssh", "credentials", "secrets", ".pem"]},
        # 禁止 CRITICAL 风险操作
        {"min_risk_level": "critical", "decision": "deny"},
        # 数据库写入需审批
        {"action_types": ["db_execute"], "decision": "require_approval"},
    ]
}

资料来源:src/agent_polis/governance/presets.py:30-60

CI 集成模式

风险评估系统支持无提示的确定性 CI 模式,用于自动化环境。

退出码规范

退出码含义触发条件
0全部允许所有操作决策为 allow
2需要审批至少一个操作需要 require_approval
3拒绝执行至少一个操作被 deny
def _decision_exit_code(decisions: list[PolicyDecision]) -> int:
    if any(d == PolicyDecision.DENY for d in decisions):
        return 3
    if any(d == PolicyDecision.REQUIRE_APPROVAL for d in decisions):
        return 2
    return 0

资料来源:src/agent_polis/ci.py:89-97

CI 报告结构

class CIPolicyReport(BaseModel):
    schema_version: Literal["1"] = REPORT_SCHEMA_VERSION
    policy_version: str
    totals: dict[str, int]  # {"allow": 0, "require_approval": 0, "deny": 0}
    top_blocking_reasons: list[CIReasonCount]
    actions: list[CIActionReport]

资料来源:src/agent_polis/ci.py:63-69

完整评估流程

sequenceDiagram
    participant Client as 客户端
    participant Analyzer as 影响分析器
    participant Scanner as 提示扫描器
    participant Policy as 策略评估器
    participant Service as 操作服务
    
    Client->>Service: 提交 ActionRequest
    Service->>Analyzer: 分析请求
    Analyzer-->>Service: 返回 ActionPreview
    Service->>Scanner: 扫描请求
    Scanner-->>Service: 返回 ScanResult
    Service->>Policy: 评估策略
    Policy-->>Service: 返回 PolicyResult
    Service->>Client: 返回最终预览

审计追踪

每个操作的风险评估结果都会被记录到审计日志中:

event = ActionPreviewGenerated(
    stream_id=f"action:{action.id}",
    data={
        "action_id": str(action.id),
        "risk_level": preview.risk_level.value,
        "governance": {
            "policy": {
                "version": policy.version,
                "decision": policy_result.decision.value,
                "matched_rule_id": policy_result.matched_rule_id,
                "trace": policy_result.trace,
            },
            "scanner": {
                "max_severity": scan_result.max_severity().value,
                "reason_ids": sorted({f.reason_id for f in scan_result.findings}),
            },
        },
    },
)

资料来源:src/agent_polis/actions/service.py:45-62

扩展风险评估能力

社区正在讨论以下增强方向(参见 issues #9, #10, #11):

  • 机器可读的 CI 策略报告输出(JSON Schema)
  • 确定性 CI 评估模式(无 TTY 依赖)
  • 文档化预设、报告模式和 CI 使用示例

相关模块导航

模块路径职责
操作模型agent_polis.actions.models风险级别、操作类型定义
影响分析agent_polis.actions.analyzer操作分析和预览生成
策略系统agent_polis.governance.policy策略配置和评估引擎
扫描器agent_polis.governance.prompt_scanner提示注入检测
预设系统agent_polis.governance.presets预置策略包
CI 集成agent_polis.ci持续集成模式支持

资料来源:src/agent_polis/actions/models.py:29-35

审批工作流

审批工作流是 Agent Polis 平台的核心功能,负责管理 AI 代理(Agent)提交的操作请求从提交到执行或拒绝的完整生命周期。系统通过影响预览(Impact Preview)、策略评估(Policy Evaluation)和提示注入扫描(Prompt Injection Scanner)三个关键环节,在操作执行前进行风险评估和治理控制。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 状态枚举

继续阅读本节完整说明和来源证据。

章节 状态转换图

继续阅读本节完整说明和来源证据。

章节 组件关系图

继续阅读本节完整说明和来源证据。

概述

审批工作流是 Agent Polis 平台的核心功能,负责管理 AI 代理(Agent)提交的操作请求从提交到执行或拒绝的完整生命周期。系统通过影响预览(Impact Preview)、策略评估(Policy Evaluation)和提示注入扫描(Prompt Injection Scanner)三个关键环节,在操作执行前进行风险评估和治理控制。

工作流支持两种运行模式:

  • 交互模式:适用于需要人工审批的场境,等待人工决策
  • CI 模式:适用于自动化 CI/CD 流程,返回确定性退出码

资料来源:src/agent_polis/actions/__init__.py:1-20

审批状态定义

状态枚举

系统定义了完整的操作审批状态机,所有状态定义在 ApprovalStatus 枚举中:

状态值含义描述
pending待处理等待人工审核
approved已批准人工批准执行
rejected已拒绝人工拒绝执行
modified已修改人工修改后批准
executed已执行操作已成功执行
failed执行失败操作执行失败
timed_out已超时规定时间内无响应
cancelled已取消代理主动取消请求

资料来源:src/agent_polis/actions/models.py:19-31

状态转换图

graph TD
    A[提交操作请求] --> B{策略评估}
    B -->|allow| E[直接执行]
    B -->|deny| F[拒绝执行]
    B -->|require_approval| C{pending}
    
    C -->|批准| D{modified?}
    D -->|是| G[记录修改内容]
    D -->|否| H[批准]
    G --> I[执行]
    H --> I
    
    C -->|拒绝| J[rejected]
    C -->|超时| K[timed_out]
    C -->|取消| L[cancelled]
    
    I -->|成功| M[executed]
    I -->|失败| N[failed]

操作类型支持

系统支持多种操作类型的拦截和预览:

操作类型描述
文件写入file_write修改现有文件
文件删除file_delete删除文件
文件移动file_move移动或重命名文件
文件创建file_create创建新文件
数据库查询db_query只读数据库操作
数据库执行db_execute写数据库操作
API 调用api_call外部 API 请求
Shell 命令shell_command系统命令执行
自定义custom用户定义的操作

资料来源:src/agent_polis/actions/models.py:12-24

核心组件架构

组件关系图

graph LR
    A[ActionRequest] --> B[ImpactAnalyzer]
    B --> C[ActionPreview]
    
    A --> D[PromptInjectionScanner]
    D --> E[ScanResult]
    
    F[PolicyConfig] --> G[PolicyEvaluator]
    A --> G
    G --> H[PolicyResult]
    
    I[ActionService] --> J[审计追踪]
    
    C --> K[API响应/CLI输出]
    E --> K
    H --> K

ImpactAnalyzer

ImpactAnalyzer 负责分析操作请求并生成影响预览。它是工作流的第一个处理环节:

class ImpactAnalyzer:
    """分析操作请求并生成影响预览"""
    
    async def analyze(self, request: ActionRequest) -> ActionPreview

核心职责:

  • 读取目标文件当前内容(如果存在)
  • 计算文件变更差异
  • 评估风险等级(RiskLevel)
  • 生成风险因素列表
  • 提供可逆性评估和回滚指导

资料来源:src/agent_polis/actions/analyzer.py

策略评估器

PolicyEvaluator 根据配置的策略规则对操作进行评估:

class PolicyEvaluator:
    """确定性策略评估器"""
    
    def evaluate(
        self,
        policy: PolicyConfig,
        request: ActionRequest,
        risk_level: RiskLevel,
    ) -> PolicyResult

策略支持三种决策结果:

决策行为
允许allow自动执行,无需审批
拒绝deny阻止执行,记录原因
需审批require_approval暂停等待人工决策

决策遵循优先级规则:

  • 优先级数值越小,优先级越高
  • 第一个匹配的规则生效
  • 未匹配任何规则时使用默认值

资料来源:src/agent_polis/governance/policy.py:1-50

提示注入扫描器

PromptInjectionScanner 检测操作请求中的提示注入和危险指令风险:

class PromptInjectionScanner:
    """提示注入和危险指令扫描器"""
    
    def scan_action_request(self, request: ActionRequest) -> ScanResult

扫描结果包含:

  • reason_id: 机器可读的原因标识
  • severity: 发现级别(low/medium/high/critical)
  • message: 人类可读的消息
  • field: 发现问题的字段名
  • snippet: 问题片段

资料来源:src/agent_polis/governance/prompt_scanner.py:1-80

ActionRequest 数据模型

提交审批的操作请求需包含以下字段:

字段类型必需描述
action_typeActionType操作类型枚举
targetstr操作目标路径或标识
descriptionstr操作描述
payloaddict附加数据
contextdict上下文信息
timeout_secondsint超时时间(秒)
auto_approve_if_low_riskbool低风险自动批准
callback_urlstr回调 URL

资料来源:src/agent_polis/actions/models.py:34-55

ActionPreview 响应模型

分析完成后返回的影响预览包含:

字段类型描述
file_changeslist[FileChange]文件变更列表
risk_levelRiskLevel综合风险等级
risk_factorslist[str]风险因素列表
summarystr变更摘要
affected_countint影响文件数量
warningslist[str]警告信息
is_reversiblebool是否可逆
reversal_instructionsstr回滚指导

资料来源:src/agent_polis/actions/models.py:58-75

API 端点

动作相关端点

方法路径描述
POST/api/v1/actions创建新操作请求
GET/api/v1/actions列出操作请求
GET/api/v1/actions/{id}获取单个操作
POST/api/v1/actions/{id}/approve批准操作
POST/api/v1/actions/{id}/reject拒绝操作
GET/api/v1/actions/pending获取待审批操作
POST/api/v1/actions/{id}/execute执行操作

资料来源:src/agent_polis/main.py:60-65

CI 集成模式

CI 模式特性

CI 模式专为非交互式环境设计,确保:

  1. 确定性评估:无任何提示路径可达
  2. 稳定退出码:根据决策类型返回固定退出码
  3. 机器可读报告:JSON 格式的政策报告输出

退出码定义

退出码含义触发条件
0成功所有操作均被允许
2需审批至少一个操作需要人工审批
3拒绝至少一个操作被拒绝
def _decision_exit_code(decisions: list[PolicyDecision]) -> int:
    if any(d == PolicyDecision.DENY for d in decisions):
        return 3
    if any(d == PolicyDecision.REQUIRE_APPROVAL for d in decisions):
        return 2
    return 0

资料来源:src/agent_polis/ci.py:1-100

CI 策略报告结构

class CIPolicyReport(BaseModel):
    schema_version: Literal["1"] = REPORT_SCHEMA_VERSION
    policy_version: str
    totals: dict[str, int]  # {"allow": 0, "require_approval": 0, "deny": 0}
    top_blocking_reasons: list[CIReasonCount]
    actions: list[CIActionReport]

报告包含:

  • 策略版本信息
  • 各决策类型统计
  • 阻塞原因排名(Top 10)
  • 每个操作的详细报告

资料来源:src/agent_polis/ci.py:60-85

风险等级体系

等级描述示例
low只读操作、安全变更读取文件、生成文档
medium对非关键文件的写操作修改配置文件
high可能影响系统稳定性写入系统目录
严重critical可能造成重大影响删除关键文件、执行 Shell 命令

风险评估考虑因素:

  • 操作类型(Shell 命令默认高风险)
  • 目标路径(系统目录提升风险)
  • 内容特征(包含敏感模式)
  • 文件大小(大文件提升风险)

资料来源:src/agent_polis/actions/models.py:32-50

审计追踪

系统记录完整的操作审计轨迹:

class ActionAuditRequest:
    action_id: str
    action_type: str
    target: str
    description: str
    payload: dict
    context: dict
    timeout_seconds: int
    auto_approve_if_low_risk: bool
    callback_url: str

审计记录包含:

  • 原始操作请求
  • 扫描器发现(reason_id 列表)
  • 策略评估结果(决策、匹配的规则 ID)
  • 决策追踪信息

资料来源:src/agent_polis/actions/service.py:20-40

服务处理流程

ActionService 核心流程

async def submit_action(self, action: ActionRequest) -> ActionResponse:
    # 1. 生成影响预览
    preview = await self._analyzer.analyze(action)
    
    # 2. 审计扫描
    audit_request = self._build_audit_request(action, preview)
    scan_result = self._audit_scanner.scan_action_request(audit_request)
    
    # 3. 策略评估
    policy = _builtin_policy_for_request(audit_request)
    policy_result = self._policy_evaluator.evaluate(
        policy,
        audit_request,
        risk_level=preview.risk_level,
    )
    
    # 4. 构建响应
    event = ActionPreviewGenerated(
        stream_id=f"action:{action.id}",
        data={...}  # governance.scanner.policy 信息
    )

资料来源:src/agent_polis/actions/service.py:1-80

工作流完整时序

sequenceDiagram
    participant Agent as AI 代理
    participant API as API 网关
    participant Analyzer as ImpactAnalyzer
    participant Scanner as PromptInjectionScanner
    participant Evaluator as PolicyEvaluator
    participant Audit as 审计系统
    participant Human as 审批人

    Agent->>API: 提交 ActionRequest
    API->>Analyzer: 分析影响
    Analyzer-->>API: ActionPreview
    API->>Scanner: 扫描注入风险
    Scanner-->>API: ScanResult
    API->>Evaluator: 策略评估
    Evaluator-->>API: PolicyResult
    
    alt allow 决策
        API->>API: 直接执行
    else deny 决策
        API->>Audit: 记录拒绝
        API-->>Agent: 返回拒绝原因
    else require_approval 决策
        API->>Audit: 记录待审批
        API-->>Agent: 返回待审批状态
        Human->>API: 审批决策
        alt 批准
            API->>API: 执行操作
        else 拒绝
            API->>Audit: 记录拒绝
        end
    end

相关社区 Issue

社区关注的审批工作流相关功能开发进展:

Issue标题优先级状态
#2Policy evaluator with deterministic precedence核心功能进行中
#5Extend audit records with policy/scanner context功能增强进行中
#10Deterministic CI evaluation modeCI 集成进行中
#11Stage 2 docs and CI integration examples文档进行中

这些 Issue 涵盖了策略评估的确定性、审计记录的扩展、CI 模式的完善以及文档建设等方向。

资料来源:src/agent_polis/actions/__init__.py:1-20

MCP服务器集成

MCP(Model Context Protocol)服务器集成是 Agent Polis 为 AI Agent 提供"terraform plan"风格影响预览的核心模块。它允许 Claude Desktop、Cursor 等 MCP 兼容客户端在执行危险操作前,先预览将要发生的变化、风险等级和治理决策。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 核心功能

继续阅读本节完整说明和来源证据。

章节 系统组件

继续阅读本节完整说明和来源证据。

章节 工具注册流程

继续阅读本节完整说明和来源证据。

概述

MCP(Model Context Protocol)服务器集成是 Agent Polis 为 AI Agent 提供"terraform plan"风格影响预览的核心模块。它允许 Claude Desktop、Cursor 等 MCP 兼容客户端在执行危险操作前,先预览将要发生的变化、风险等级和治理决策。

资料来源:src/agent_polis/mcp_server.py:1-20

核心功能

功能描述
影响预览展示文件操作前后的变化内容
风险评估对操作进行 LOW/MEDIUM/HIGH/CRITICAL 四级风险分类
策略执行基于策略预设自动做出 allow/deny/require_approval 决策
审计追踪完整记录所有操作的治理上下文和扫描结果

架构设计

系统组件

graph TD
    A[MCP 客户端<br/>Claude Desktop/Cursor] --> B[FastMCP Server<br/>端口 8000]
    B --> C[ImpactAnalyzer<br/>影响分析器]
    C --> D[PolicyEvaluator<br/>策略评估器]
    C --> E[PromptInjectionScanner<br/>提示注入扫描器]
    D --> F[内置策略/预设策略]
    E --> G[扫描规则库]
    C --> H[ActionPreview<br/>操作预览结果]
    D --> I[PolicyResult<br/>策略决策结果]

工具注册流程

MCP 服务器通过 @mcp.tool() 装饰器注册治理工具,每个工具都是一个异步函数:

@mcp.tool()
async def preview_file_create(
    path: str,
    content: str,
    description: str = "Create file",
) -> str:
    """预览文件创建操作"""
    # 1. 构建 ActionRequest
    # 2. 调用 ImpactAnalyzer.analyze()
    # 3. 返回格式化的预览报告

资料来源:src/agent_polis/mcp_server.py:47-72

MCP 工具清单

文件操作预览工具

工具名称功能参数
preview_file_create预览新文件创建path, content, description
preview_file_delete预览文件删除path, description

资料来源:src/agent_polis/mcp_server.py:47-95

预览输出格式

工具返回的预览报告包含以下关键信息:

字段示例说明
目标路径src/main.py操作针对的文件路径
风险等级🟡 MEDIUM操作的整体风险评估
风险因素["包含敏感配置", "修改系统文件"]触发风险的具体原因
警告信息["文件已存在"]额外注意事项
摘要修改 12 行,删除 3 行变更统计

操作类型与风险模型

ActionType 枚举

class ActionType(str, Enum):
    FILE_WRITE = "file_write"      # 写文件
    FILE_DELETE = "file_delete"    # 删文件
    FILE_MOVE = "file_move"        # 移动文件
    FILE_CREATE = "file_create"    # 创建文件
    DB_QUERY = "db_query"          # 数据库查询
    DB_EXECUTE = "db_execute"      # 数据库执行
    API_CALL = "api_call"          # API 调用
    SHELL_COMMAND = "shell_command" # Shell 命令
    CUSTOM = "custom"              # 自定义操作

资料来源:src/agent_polis/actions/models.py:14-24

RiskLevel 风险等级

等级标识含义
LOW🟢只读操作、安全变更
MEDIUM🟡对非关键文件的写操作
HIGH🟠可能影响系统稳定性的操作
CRITICAL🔴可能造成不可逆损害的操作

资料来源:src/agent_polis/actions/models.py:38-40

策略治理机制

PolicyDecision 决策类型

决策含义CI 退出码
allow允许执行0
deny拒绝执行3
require_approval需要人工审批2

资料来源:src/agent_polis/governance/policy.py:19-23

策略评估流程

graph LR
    A[ActionRequest] --> B[加载策略配置]
    B --> C{规则匹配}
    C -->|命中规则| D[按优先级排序]
    C -->|无匹配| E[应用默认决策]
    D --> F[返回最高优先级决策]
    F --> G[PolicyResult]
    E --> G

策略评估器返回包含以下字段的结果:

class PolicyEvaluationResult(BaseModel):
    decision: PolicyDecision           # 最终决策
    matched_rule_id: str | None        # 匹配的规则 ID
    matched_rule_priority: int         # 规则优先级
    matched_rule_specificity: int      # 规则特异性
    trace: dict[str, Any]              # 调试追踪信息

资料来源:src/agent_polis/governance/policy.py:78-84

策略预设(Policy Presets)

系统预置了三个场景化策略包,可通过 load_policy_preset() 加载:

预设对比

预设适用场景默认决策关键规则
startup初创公司/敏捷开发require_approval低风险文档变更自动放行
fintech金融科技/合规要求require_approval禁止接触密钥/凭证,DB写入需审批
games游戏开发/创意工作流require_approval资源/文档/测试可低风险变更

资料来源:src/agent_polis/governance/presets.py:1-150

Startup 预设规则示例

{
    "id": "allow-docs-tests-low-medium",
    "description": "Allow low/medium risk edits to docs and tests",
    "decision": "allow",
    "priority": 50,
    "action_types": ["file_write", "file_create"],
    "path_globs": ["docs/*", "tests/*"],
    "max_risk_level": "medium",
    "metadata": {
        "rationale": "Documentation and tests are typically low blast-radius"
    }
}

资料来源:src/agent_polis/governance/presets.py:40-50

CI 集成模式

CI 评估模式

MCP 服务器支持无 TTY 的确定性 CI 模式,适用于 PR 网关集成:

async def generate_ci_report(
    actions: list[ActionRequest],
    policy: PolicyConfig,
    working_directory: str | None = None,
) -> tuple[CIPolicyReport, int]:
    # 返回 (报告对象, 退出码)

退出码规范

退出码条件
0所有操作均被允许
2至少一个操作需要人工审批
3至少一个操作被拒绝

资料来源:src/agent_polis/ci.py:75-84

CI 报告格式

{
  "schema_version": "1",
  "policy_version": "preset-startup-1",
  "totals": {
    "allow": 5,
    "require_approval": 2,
    "deny": 0
  },
  "top_blocking_reasons": [
    {"reason": "shell-command-detected", "count": 3}
  ],
  "actions": [...]
}

资料来源:src/agent_polis/ci.py:35-50

部署配置

运行方式

方式一:uvicorn(推荐用于生产)

uvicorn agent_polis.mcp_server:mcp.app --host 0.0.0.0 --port 8000

方式二:直接运行模块

python -m agent_polis.mcp_server

资料来源:src/agent_polis/mcp_server.py:24-28

Claude Desktop 配置

~/.config/claude/claude_desktop_config.json 中添加:

{
  "mcpServers": {
    "impact-preview": {
      "url": "http://localhost:8000/mcp"
    }
  }
}

资料来源:src/agent_polis/mcp_server.py:30-37

环境变量配置

变量默认值说明
AGENT_POLIS_HOST0.0.0.0监听地址
AGENT_POLIS_PORT8000监听端口
AGENT_POLIS_WORKING_DIRECTORY当前目录分析基准目录
REDIS_URLredis://localhost:6379/0事件存储后端

MCP 工具指令

MCP 服务器的标准化指令文本:

"Impact preview for AI agents - see exactly what will change before any action executes. Use preview tools BEFORE making file changes, running shell commands, or executing database queries."

资料来源:src/agent_polis/mcp_server.py:20-21

审计追踪集成

审计记录扩展

根据 AP-105 的需求,审计记录现在包含策略和扫描器上下文:

字段类型说明
policy.decisionPolicyDecision最终策略决策
policy.matched_rule_id`str \None`匹配的规则 ID
policy.matched_rule_priorityint规则优先级
policy.tracedict调试追踪数据
scanner.max_severityScanSeverity最高扫描严重级别
scanner.reason_idsset[str]扫描发现的原因 ID 集合

资料来源:src/agent_polis/actions/service.py:45-60

相关社区议题

议题优先级说明
#11 AP-205Stage 2 文档和 CI 集成示例
#10 AP-204确定性 CI 评估模式(无提示词)
#9 AP-203机器可读 CI 策略报告输出
#3 AP-103MCP 描述符完整性检查(哈希锁定)

版本信息

当前版本:v0.2.2

路线图:

版本焦点状态
v0.2.0文件操作预览当前
v0.3.0数据库操作预览规划中
v0.4.0API 调用预览规划中
v0.5.0IDE 集成(Cursor, VS Code)规划中
v1.0.0生产就绪规划中

资料来源:src/agent_polis/mcp_server.py:1-20

SDK集成指南

Agent Polis SDK 提供了一种简单的方式将影响预览功能集成到 AI agent 工作流中。通过 SDK,开发者可以使用 @requireapproval 装饰器自动将危险操作路由到审批流程,在执行前获得人类确认。SDK 支持与主流 agent 框架(如 CrewAI、LangGraph)的无缝集成,并提供了完整的错误处理机制。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 基础安装

继续阅读本节完整说明和来源证据。

章节 开发环境安装

继续阅读本节完整说明和来源证据。

章节 环境变量配置

继续阅读本节完整说明和来源证据。

概述

Agent Polis SDK 提供了一种简单的方式将影响预览功能集成到 AI agent 工作流中。通过 SDK,开发者可以使用 @require_approval 装饰器自动将危险操作路由到审批流程,在执行前获得人类确认。SDK 支持与主流 agent 框架(如 CrewAI、LangGraph)的无缝集成,并提供了完整的错误处理机制。

当前版本:v0.2.2 | 资料来源:src/agent_polis/main.py:43

核心能力

能力说明
impact_preview操作影响预览
action_approval动作审批工作流
file_diff文件变更差异
audit_trail审计追踪记录

安装与配置

基础安装

pip install impact-preview

开发环境安装

git clone https://github.com/agent-polis/impact-preview.git
cd impact-preview
pip install -e .[dev]

环境变量配置

# 必需
AGENT_POLIS_API_URL=http://localhost:8000
AGENT_POLIS_API_KEY=ap_...

# 可选
REDIS_URL=redis://localhost:6379/0
FREE_TIER_ACTIONS_PER_MONTH=100
LOG_LEVEL=INFO

AgentPolisClient 客户端

AgentPolisClient 是 SDK 的核心类,负责与 Agent Polis API 服务器通信。

初始化

from agent_polis.sdk import AgentPolisClient

client = AgentPolisClient(
    api_key="your_api_key",
    api_url="http://localhost:8000"  # 可选,默认为 http://localhost:8000
)

核心方法

方法说明
submit_action()提交操作请求
wait_for_approval()等待操作审批
get_action_status()获取操作状态
require_approval()装饰器工厂方法

资料来源:src/agent_polis/sdk.py:59-150

require_approval 装饰器

@require_approval 装饰器是 SDK 最强大的功能,它允许开发者用最少的代码将任意函数转换为需要审批的操作。

基本用法

from agent_polis.sdk import AgentPolisClient

client = AgentPolisClient(api_key="your_api_key")

@client.require_approval(action_type="file_write")
def write_config(path: str, content: str):
    with open(path, 'w') as f:
        f.write(content)

# 执行时自动触发审批流程
write_config("/etc/myapp/config.yaml", "new config content")

工作流程

graph TD
    A[调用被装饰函数] --> B[提交ActionRequest]
    B --> C{API服务器处理}
    C -->|低风险| D[自动批准]
    C -->|高风险| E[等待人工审批]
    C -->|违反策略| F[拒绝执行]
    D --> G[执行原函数]
    E -->|审批通过| G
    E -->|审批拒绝| H[抛出ActionRejectedError]
    F --> H
    G --> I[返回结果]
    H --> J[异常处理]

资料来源:src/agent_polis/sdk.py:1-50

装饰器参数

参数类型说明
action_typestr操作类型 (file_write, file_create, shell_command, db_execute)
descriptionstr操作描述
timeoutint等待审批超时时间(秒)
auto_approve_if_low_riskbool低风险操作是否自动批准

异常处理

SDK 定义了专门的异常类用于处理审批流程中的各种错误情况。

ActionRejectedError

当操作被拒绝时抛出。

from agent_polis.sdk import ActionRejectedError, AgentPolisClient

client = AgentPolisClient(api_key="your_api_key")

try:
    client.submit_and_wait(action_request)
except ActionRejectedError as e:
    print(f"操作 {e.action_id} 被拒绝: {e.reason}")
属性类型说明
action_idstr被拒绝的操作ID
reasonstr拒绝原因

ActionTimedOutError

当操作等待审批超时。

from agent_polis.sdk import ActionTimedOutError, AgentPolisClient

client = AgentPolisClient(api_key="your_api_key")

try:
    client.submit_and_wait(action_request, timeout=300)
except ActionTimedOutError as e:
    print(f"操作 {e.action_id} 等待超时")
属性类型说明
action_idstr超时的操作ID
timeoutint设置的超时时间(秒)

资料来源:src/agent_polis/sdk.py:53-72

CrewAI 集成

Agent Polis 提供了与 CrewAI 的深度集成,支持将影响预览作为工具或回调使用。

AgentPolisTool

作为 CrewAI 的 BaseTool 使用:

from agent_polis.integrations.crewai import AgentPolisTool

tool = AgentPolisTool(
    api_url="http://localhost:8000",
    api_key="ap_..."
)

# 在 CrewAI agent 中使用
agent = Agent(
    role="Developer",
    goal="安全地管理系统文件",
    backstory="...",
    tools=[tool]
)

SimulationCallback

用于模拟驱动的治理回调:

from agent_polis.integrations.crewai import SimulationCallback

callback = SimulationCallback(
    api_url="http://localhost:8000",
    api_key="ap_..."
)

# 在 agent 执行前进行模拟验证
result = callback.on_before_task(task, context)

输入模型

class SimulationInput(BaseModel):
    """模拟工具输入模式"""
    name: str  # 模拟场景名称
    description: str  # 模拟描述
    code: str  # 在沙箱中执行的 Python 代码
    inputs: dict[str, Any]  # 输入变量

资料来源:src/agent_polis/integrations/crewai.py:1-100

完整集成示例

文件操作审批

from agent_polis.sdk import AgentPolisClient
from agent_polis.actions.models import ActionType

client = AgentPolisClient(
    api_key="ap_your_key_here",
    api_url="http://localhost:8000"
)

@client.require_approval(
    action_type=ActionType.FILE_WRITE,
    description="更新应用配置文件",
    auto_approve_if_low_risk=True
)
async def update_config(path: str, content: str):
    """更新配置文件,自动经过影响预览审批"""
    with open(path, 'w') as f:
        f.write(content)
    return {"status": "success", "path": path}

数据库操作审批

from agent_polis.sdk import AgentPolisClient
from agent_polis.actions.models import ActionType

client = AgentPolisClient(api_key="ap_your_key_here")

@client.require_approval(
    action_type=ActionType.DB_EXECUTE,
    description="执行数据库写操作",
    timeout=600  # 数据库操作可能需要更长等待时间
)
async def execute_db_query(query: str, params: dict):
    """数据库查询需经过人工审批"""
    # 执行数据库操作
    return result

Shell 命令审批

from agent_polis.sdk import AgentPolisClient
from agent_polis.actions.models import ActionType

client = AgentPolisClient(api_key="ap_your_key_here")

@client.require_approval(
    action_type=ActionType.SHELL_COMMAND,
    description="执行系统命令"
)
async def run_deployment(command: str):
    """Shell 命令必须经过审批"""
    import subprocess
    result = subprocess.run(command, shell=True, capture_output=True)
    return result.stdout.decode()

API 端点

Agent Polis 服务器暴露以下 REST API 端点:

端点方法说明
/api/v1/actionsPOST提交新操作
/api/v1/actions/pendingGET获取待审批操作列表
/api/v1/agentsGET获取代理信息
/.well-known/agent.jsonGET获取 agent 能力描述

代理能力元数据

{
  "name": "Agent Polis",
  "version": "0.2.2",
  "protocol": "a2a/1.0",
  "capabilities": [
    "impact_preview",
    "action_approval",
    "file_diff",
    "audit_trail"
  ],
  "endpoints": {
    "actions": "/api/v1/actions",
    "pending": "/api/v1/actions/pending",
    "agents": "/api/v1/agents"
  }
}

资料来源:src/agent_polis/main.py:30-55

最佳实践

1. 合理设置超时时间

# 普通操作
@client.require_approval(timeout=60)

# 复杂或高风险操作
@client.require_approval(timeout=600)

2. 使用自动批准优化低风险场景

@client.require_approval(
    action_type=ActionType.FILE_WRITE,
    auto_approve_if_low_risk=True  # 低风险操作自动通过
)
def update_logs(path: str, content: str):
    pass

3. 完善的异常处理

from agent_polis.sdk import (
    AgentPolisClient,
    ActionRejectedError,
    ActionTimedOutError
)

client = AgentPolisClient(api_key="your_key")

try:
    result = await client.submit_and_wait(request, timeout=300)
except ActionRejectedError as e:
    logger.error(f"操作被拒绝: {e.reason}")
    # 执行回退逻辑
except ActionTimedOutError as e:
    logger.warning(f"操作 {e.action_id} 等待超时")
    # 通知管理员

4. 集成 CI/CD 流程

# 在 CI 环境中使用确定性模式
import os

os.environ["AGENT_POLIS_CI_MODE"] = "true"

client = AgentPolisClient(
    api_key=os.environ["AGENT_POLIS_API_KEY"],
    ci_mode=True  # 无需交互式提示
)

与其他集成模块的关系

graph LR
    A[AI Agent] --> B[SDK 客户端]
    B --> C[REST API]
    C --> D[主应用]
    
    E[CrewAI集成] --> B
    F[LangGraph集成] --> B
    G[MCP Server] --> D
    
    D --> H[动作服务]
    D --> I[模拟服务]
    D --> J[治理策略]
    D --> K[事件总线]

故障排查

问题可能原因解决方案
连接超时API 服务器未启动检查 uvicorn 服务运行状态
401 UnauthorizedAPI Key 错误验证环境变量配置
审批超时无管理员响应增加 timeout 或使用 CI 模式
CrewAI 导入失败未安装依赖pip install crewai

相关资源

资料来源:src/agent_polis/sdk.py:59-150

CI模式与机器可读报告

Agent Polis 提供了确定性 CI 评估模式,专为持续集成环境设计,用于在没有人工交互的情况下对动作请求进行策略评估。该模式的核心目标是:

章节 CI 模块架构

继续阅读本节完整说明和来源证据。

章节 关键数据结构

继续阅读本节完整说明和来源证据。

章节 CIPolicyReport 结构

继续阅读本节完整说明和来源证据。

章节 CIActionReport 字段说明

继续阅读本节完整说明和来源证据。

概述

Agent Polis 提供了确定性 CI 评估模式,专为持续集成环境设计,用于在没有人工交互的情况下对动作请求进行策略评估。该模式的核心目标是:

  • 确保 CI 流程中不触发任何提示路径,避免阻塞自动化管道
  • 返回稳定的退出码,使 CI 工具能够根据策略决策自动采取行动
  • 生成机器可读的 JSON 报告,便于 PR 门禁集成和数据聚合

CI 模式是 Agent Polis v0.2.x 的核心功能之一,支持与 GitHub Actions、GitLab CI、Jenkins 等主流 CI 系统无缝集成。资料来源:src/agent_polis/ci.py:1-50

核心组件

CI 模块架构

CI 模块位于 src/agent_polis/ci.py,主要包含以下组件:

graph TD
    A[动作请求列表] --> B[ImpactAnalyzer]
    B --> C[ActionPreview 风险评估]
    C --> D[PromptInjectionScanner]
    D --> E[PolicyEvaluator]
    E --> F[CIPolicyReport]
    F --> G[退出码判定]
    G --> H[exit 0/2/3]
    
    I[PolicyConfig] --> E
    J[工作目录] --> B

关键数据结构

类名用途位置
CIPolicyReport顶级 CI 报告输出ci.py:41-48
CIActionReport单个动作的评估报告ci.py:29-39
CIReasonCount阻断原因统计ci.py:22-27
PolicyDecision策略决策枚举policy.py:14-18

资料来源:src/agent_polis/ci.py:22-48

报告模式

CIPolicyReport 结构

{
  "schema_version": "1",
  "policy_version": "preset-startup-1",
  "totals": {
    "allow": 5,
    "require_approval": 2,
    "deny": 1
  },
  "top_blocking_reasons": [
    {"reason": "prompt-injection-detected", "count": 3},
    {"reason": "secrets-in-target", "count": 1}
  ],
  "actions": [
    {
      "index": 0,
      "action_type": "file_write",
      "target": "src/main.py",
      "risk_level": "low",
      "policy_decision": "allow",
      "policy_matched_rule_id": "allow-safe-writes",
      "scanner_max_severity": "none",
      "scanner_reason_ids": []
    }
  ]
}

CIActionReport 字段说明

字段类型说明
indexint动作在输入列表中的序号
action_typestring动作类型(file_write, shell_command 等)
targetstring目标路径或资源标识
risk_levelstring风险等级(low/medium/high/critical)
policy_decisionstring策略决策结果
policy_matched_rule_idstring\null匹配的规则 ID
scanner_max_severitystring扫描器最高严重级别
scanner_reason_idslist[string]扫描发现的原因 ID 列表

资料来源:src/agent_polis/ci.py:29-39

退出码机制

CI 模式通过退出码向 CI 系统传递评估结果,确保与 CI 工具的集成具有确定性。

graph LR
    A[evaluate] --> B{存在 DENY?}
    B -->|是| C[exit 3]
    B -->|否| D{存在 REQUIRE_APPROVAL?}
    D -->|是| E[exit 2]
    D -->|否| F[exit 0]
    
    style C fill:#ff6b6b
    style E fill:#ffd93d
    style F fill:#6bcf6b

退出码对照表

退出码含义CI 行为建议
0所有动作均允许构建通过,继续下一阶段
2至少一个动作需要审批构建暂停,等待人工审批
3至少一个动作被拒绝构建失败,阻止合并

此机制确保 CI 系统无需解析文本输出即可做出决策。资料来源:src/agent_polis/ci.py:50-62

CLI 使用方式

基础命令

# 使用默认 startup 预设评估动作
impact-preview ci --actions actions.json --output report.json

# 指定预设
impact-preview ci --preset fintech --actions actions.json

# 指定自定义策略文件
impact-preview ci --policy policy.json --actions actions.json --output report.json

# 仅返回退出码(不输出报告)
impact-preview ci --actions actions.json --exit-only

输入文件格式

{
  "actions": [
    {
      "action_type": "file_write",
      "target": "src/config.py",
      "description": "Update configuration",
      "payload": {"content": "..."}
    }
  ]
}

支持两种输入格式:

  • JSON 数组:直接包含动作列表
  • JSON 对象:包含 actions 键的对象

资料来源:src/agent_polis/ci.py:105-125

CI 模式下的策略评估

确定性原则

CI 模式下的策略评估遵循确定性原则

  1. 无随机性:所有匹配规则的结果可重现
  2. 规则优先级:按 priority 字段降序匹配,高优先级规则优先
  3. 规则特异性:优先级相同时,更具体的规则优先
graph TD
    A[接收动作请求] --> B[按优先级排序规则]
    B --> C[遍历规则列表]
    C --> D{规则匹配?}
    D -->|否| E[下一规则]
    D -->|是| F{规则启用?}
    F -->|是| G[返回决策 + 规则ID]
    F -->|否| E
    E --> C
    C --> H[应用默认决策]

决策追踪

每个策略评估结果包含 trace 字段,记录完整的匹配过程:

@dataclass
class PolicyEvaluation:
    decision: PolicyDecision
    matched_rule_id: str | None
    matched_rule_priority: int | None
    matched_rule_specificity: int | None
    trace: dict[str, Any]

资料来源:src/agent_polis/governance/policy.py:40-55

扫描器集成

提示注入检测

CI 模式集成了 PromptInjectionScanner,用于检测动作请求中的提示注入和危险指令:

扫描严重级别对应风险等级说明
LOW低风险可疑模式但不明确
MEDIUM中风险可能存在注入尝试
HIGH高风险明显的注入模式
CRITICAL严重风险已确认的恶意模式

扫描结果汇总为机器可读的原因 ID 列表,便于在报告中聚合统计。资料来源:src/agent_polis/governance/prompt_scanner.py:18-35

阻断原因聚合

top_blocking_reasons 字段按原因 ID 统计阻断次数,按频次降序排列:

reason_counts: dict[str, int] = {}
for finding in scan.findings:
    reason_counts[finding.reason_id] = reason_counts.get(finding.reason_id, 0) + 1

top_reasons = sorted(
    (CIReasonCount(reason=reason, count=count) 
     for reason, count in reason_counts.items()),
    key=lambda item: (-item.count, item.reason),
)[:10]

资料来源:src/agent_polis/ci.py:88-94

预设包

CI 模式可与预设包配合使用,快速配置符合特定场景的策略规则。

预设对比

预设适用场景默认决策特殊规则
startup早期创业公司require_approval文档/测试目录允许低中风险
fintech金融科技require_approval拒绝访问 secrets/keys
games游戏开发require_approval允许资源文件低中风险变更

fintech 预设示例

{
    "id": "deny-secrets-and-keys",
    "description": "阻止访问 secrets/keys 文件",
    "decision": "deny",
    "priority": 0,
    "target_contains": [".env", ".ssh", "credentials", "secrets", ".pem"],
    "metadata": {
        "rationale": "金融环境将密钥处理视为受监管控制面"
    }
}

资料来源:src/agent_polis/governance/presets.py:45-65

GitHub Actions 集成

完整工作流示例

name: Agent Polis CI Gate

on:
  pull_request:
    paths:
      - 'src/**'
      - 'lib/**'

jobs:
  policy-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Install impact-preview
        run: pip install impact-preview
        
      - name: Generate action requests
        run: |
          cat > actions.json << 'EOF'
          {
            "actions": [
              {"action_type": "file_write", "target": "src/main.py", "description": "Update main"}
            ]
          }
          EOF
      
      - name: Run CI evaluation
        id: polis
        run: |
          impact-preview ci \
            --preset startup \
            --actions actions.json \
            --output polis-report.json
          echo "exit_code=$?" >> $GITHUB_OUTPUT
          
          # 输出摘要
          echo "## Agent Polis Report" >> $GITHUB_STEP_SUMMARY
          echo "```json" >> $GITHUB_STEP_SUMMARY
          cat polis-report.json >> $GITHUB_STEP_SUMMARY
          echo "```" >> $GITHUB_STEP_SUMMARY
      
      - name: Upload report
        uses: actions/upload-artifact@v4
        with:
          name: polis-report
          path: polis-report.json

条件分支策略

- name: Handle result
  run: |
    if [ ${{ steps.polis.outputs.exit_code }} -eq 3 ]; then
      echo "::error::Policy denied: blocking changes detected"
      exit 1
    elif [ ${{ steps.polis.outputs.exit_code }} -eq 2 ]; then
      echo "::warning::Some actions require approval"
    fi

与审计记录的关系

CI 模式生成的报告与审计系统共享策略和扫描器上下文:

graph LR
    A[ActionService] --> B[Audit Trail]
    A --> C[CI Report]
    
    B --> D{包含决策 + 规则ID + 扫描结果}
    C --> E{包含决策 + 规则ID + 扫描结果}

审计记录包含:

  • 策略版本和决策
  • 匹配的规则 ID 和优先级
  • 扫描器发现列表
  • 风险因子

资料来源:src/agent_polis/actions/service.py:65-90

最佳实践

1. 报告文件命名

# 使用时间戳避免覆盖
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
impact-preview ci --actions actions.json --output "report_${TIMESTAMP}.json"

2. 失败时保留报告

- name: Run CI evaluation
  if: always()  # 即使步骤失败也上传报告
  uses: actions/upload-artifact@v4
  with:
    name: polis-report-fallback
    path: polis-report.json

3. 与代码审查集成

将报告内容附加到 PR 评论:

# 生成 PR 评论内容
REPORT_SUMMARY=$(cat polis-report.json | jq -r '.totals | "Allowed: \(.allow), Pending: \(.require_approval), Denied: \(.deny)"')
gh pr comment $PR_NUMBER --body "Agent Polis: $REPORT_SUMMARY"

限制与已知问题

当前限制

限制项说明相关 Issue
暂不支持数据库操作预览db_execute 类型动作的预览功能计划在 v0.3.0 实现AP-103
暂不支持 API 调用预览api_call 类型动作的预览功能计划在 v0.4.0 实现-
报告大小上限大型代码库的完整 diff 可能导致报告过大-

稳定性保证

CI 模式经过以下测试验证:

  • 非 TTY 环境下的确定性执行
  • 稳定的状态码行为
  • 回归测试覆盖绕过尝试

资料来源:社区 Issue AP-204

路线图

版本计划功能状态
v0.2.xCI 模式基础功能已完成
v0.3.0数据库操作预览集成规划中
v0.4.0API 调用预览集成规划中
v0.5.0IDE 集成(Cursor, VS Code)规划中
v1.0.0生产就绪版本规划中

资料来源:README.md:80-90

相关文档

资料来源:src/agent_polis/ci.py:22-48

失败模式与踩坑日记

保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。

medium 来源证据:AP-101 Policy schema and parser

可能阻塞安装或首次运行。

medium 来源证据:AP-102 Policy evaluator with deterministic precedence

可能阻塞安装或首次运行。

medium 来源证据:AP-203 Machine-readable CI policy report output

可能阻塞安装或首次运行。

medium 能力判断依赖假设

假设不成立时,用户拿不到承诺的能力。

Pitfall Log / 踩坑日志

项目:agent-polis/impact-preview

摘要:发现 10 个潜在踩坑项,其中 0 个为 high/blocking;最高优先级:配置坑 - 来源证据:AP-101 Policy schema and parser。

1. 配置坑 · 来源证据:AP-101 Policy schema and parser

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个配置相关的待验证问题:AP-101 Policy schema and parser
  • 对用户的影响:可能阻塞安装或首次运行。
  • 建议检查:来源显示可能已有修复、规避或版本变化,说明书中必须标注适用版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_52a7602d08fd4a34a02a058587179586 | https://github.com/agent-polis/impact-preview/issues/1 | 来源讨论提到 python 相关条件,需在安装/试用前复核。

2. 配置坑 · 来源证据:AP-102 Policy evaluator with deterministic precedence

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个配置相关的待验证问题:AP-102 Policy evaluator with deterministic precedence
  • 对用户的影响:可能阻塞安装或首次运行。
  • 建议检查:来源显示可能已有修复、规避或版本变化,说明书中必须标注适用版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_7d4cca25cd1347289c9e6834c0f806fc | https://github.com/agent-polis/impact-preview/issues/2 | 来源类型 github_issue 暴露的待验证使用条件。

3. 配置坑 · 来源证据:AP-203 Machine-readable CI policy report output

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个配置相关的待验证问题:AP-203 Machine-readable CI policy report output
  • 对用户的影响:可能阻塞安装或首次运行。
  • 建议检查:来源显示可能已有修复、规避或版本变化,说明书中必须标注适用版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_71b0a0a48b3f4a3ea7107c911c8b8733 | https://github.com/agent-polis/impact-preview/issues/9 | 来源类型 github_issue 暴露的待验证使用条件。

4. 能力坑 · 能力判断依赖假设

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:README/documentation is current enough for a first validation pass.
  • 对用户的影响:假设不成立时,用户拿不到承诺的能力。
  • 建议检查:将假设转成下游验证清单。
  • 防护动作:假设必须转成验证项;没有验证结果前不能写成事实。
  • 证据:capability.assumptions | mcp_registry:io.github.agent-polis/impact-preview:0.2.1 | https://registry.modelcontextprotocol.io/v0.1/servers/io.github.agent-polis%2Fimpact-preview/versions/0.2.1 | README/documentation is current enough for a first validation pass.

5. 维护坑 · 维护活跃度未知

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:未记录 last_activity_observed。
  • 对用户的影响:新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
  • 建议检查:补 GitHub 最近 commit、release、issue/PR 响应信号。
  • 防护动作:维护活跃度未知时,推荐强度不能标为高信任。
  • 证据:evidence.maintainer_signals | mcp_registry:io.github.agent-polis/impact-preview:0.2.1 | https://registry.modelcontextprotocol.io/v0.1/servers/io.github.agent-polis%2Fimpact-preview/versions/0.2.1 | last_activity_observed missing

6. 安全/权限坑 · 下游验证发现风险项

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:no_demo
  • 对用户的影响:下游已经要求复核,不能在页面中弱化。
  • 建议检查:进入安全/权限治理复核队列。
  • 防护动作:下游风险存在时必须保持 review/recommendation 降级。
  • 证据:downstream_validation.risk_items | mcp_registry:io.github.agent-polis/impact-preview:0.2.1 | https://registry.modelcontextprotocol.io/v0.1/servers/io.github.agent-polis%2Fimpact-preview/versions/0.2.1 | no_demo; severity=medium

7. 安全/权限坑 · 存在评分风险

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:no_demo
  • 对用户的影响:风险会影响是否适合普通用户安装。
  • 建议检查:把风险写入边界卡,并确认是否需要人工复核。
  • 防护动作:评分风险必须进入边界卡,不能只作为内部分数。
  • 证据:risks.scoring_risks | mcp_registry:io.github.agent-polis/impact-preview:0.2.1 | https://registry.modelcontextprotocol.io/v0.1/servers/io.github.agent-polis%2Fimpact-preview/versions/0.2.1 | no_demo; severity=medium

8. 安全/权限坑 · 来源证据:AP-105 Extend audit records with policy/scanner context

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:AP-105 Extend audit records with policy/scanner context
  • 对用户的影响:可能阻塞安装或首次运行。
  • 建议检查:来源显示可能已有修复、规避或版本变化,说明书中必须标注适用版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_ff00c63559844328a271d0587352d351 | https://github.com/agent-polis/impact-preview/issues/5 | 来源类型 github_issue 暴露的待验证使用条件。

9. 维护坑 · issue/PR 响应质量未知

  • 严重度:low
  • 证据强度:source_linked
  • 发现:issue_or_pr_quality=unknown。
  • 对用户的影响:用户无法判断遇到问题后是否有人维护。
  • 建议检查:抽样最近 issue/PR,判断是否长期无人处理。
  • 防护动作:issue/PR 响应未知时,必须提示维护风险。
  • 证据:evidence.maintainer_signals | mcp_registry:io.github.agent-polis/impact-preview:0.2.1 | https://registry.modelcontextprotocol.io/v0.1/servers/io.github.agent-polis%2Fimpact-preview/versions/0.2.1 | issue_or_pr_quality=unknown

10. 维护坑 · 发布节奏不明确

  • 严重度:low
  • 证据强度:source_linked
  • 发现:release_recency=unknown。
  • 对用户的影响:安装命令和文档可能落后于代码,用户踩坑概率升高。
  • 建议检查:确认最近 release/tag 和 README 安装命令是否一致。
  • 防护动作:发布节奏未知或过期时,安装说明必须标注可能漂移。
  • 证据:evidence.maintainer_signals | mcp_registry:io.github.agent-polis/impact-preview:0.2.1 | https://registry.modelcontextprotocol.io/v0.1/servers/io.github.agent-polis%2Fimpact-preview/versions/0.2.1 | release_recency=unknown

来源:Doramagic 发现、验证与编译记录