API 参考¶
本文档为 Symbiont 运行时 API 提供全面的文档。Symbiont 项目提供两个针对不同用例和开发阶段设计的独立 API 系统。
概述¶
Symbiont 提供两个 API 接口:
- 运行时 HTTP API - 完整的 API,用于直接运行时交互、智能体管理和工作流执行
- 工具审查 API(生产环境) - 全面的、生产就绪的 AI 驱动工具审查和签名工作流 API
运行时 HTTP API¶
运行时 HTTP API 提供对 Symbiont 运行时的直接访问,用于工作流执行、智能体管理和系统监控。当启用 http-api 特性时,所有端点均已完全实现并可用于生产环境。
基础 URL¶
身份验证¶
智能体管理端点需要 Bearer 令牌认证。请设置 API_AUTH_TOKEN 环境变量,并在 Authorization 头中包含令牌:
受保护端点:
- 所有 /api/v1/agents/* 端点需要认证
- /api/v1/health、/api/v1/workflows/execute 和 /api/v1/metrics 端点不需要认证
可用端点¶
健康检查¶
返回当前系统健康状态和基本运行时信息。
响应(200 OK):
{
"status": "healthy",
"uptime_seconds": 3600,
"timestamp": "2024-01-15T10:30:00Z",
"version": "1.0.0"
}
响应(500 内部服务器错误):
{
"status": "unhealthy",
"error": "Database connection failed",
"timestamp": "2024-01-15T10:30:00Z"
}
可用端点¶
工作流执行¶
使用指定参数执行工作流。
请求体:
响应(200 OK):
智能体管理¶
所有智能体管理端点需要通过 Authorization: Bearer <token> 头进行认证。
列出智能体¶
检索运行时中所有活跃智能体的列表。
响应(200 OK):
获取智能体状态¶
获取特定智能体的详细状态信息,包括实时执行指标。
响应(200 OK):
{
"agent_id": "uuid",
"state": "running|ready|waiting|failed|completed|terminated",
"last_activity": "2024-01-15T10:30:00Z",
"scheduled_at": "2024-01-15T10:00:00Z",
"resource_usage": {
"memory_usage": 268435456,
"cpu_usage": 15.5,
"active_tasks": 1
},
"execution_context": {
"execution_mode": "ephemeral|persistent|scheduled|event_driven",
"process_id": 12345,
"uptime": "00:15:30",
"health_status": "healthy|unhealthy"
}
}
新的智能体状态:
- running:智能体正在活跃执行,有运行中的进程
- ready:智能体已初始化并准备就绪
- waiting:智能体在执行队列中等待
- failed:智能体执行失败或健康检查失败
- completed:智能体任务成功完成
- terminated:智能体已被优雅关闭或强制终止
创建智能体¶
使用提供的配置创建新智能体。
请求体:
响应(200 OK):
更新智能体¶
更新现有智能体的配置。至少需要提供一个字段。
请求体:
响应(200 OK):
删除智能体¶
从运行时中删除现有智能体。
响应(200 OK):
执行智能体¶
触发特定智能体的执行。
请求体:
响应(200 OK):
获取智能体执行历史¶
检索特定智能体的执行历史。
响应(200 OK):
{
"history": [
{
"execution_id": "uuid",
"status": "completed",
"timestamp": "2024-01-15T10:30:00Z"
}
]
}
智能体心跳¶
从运行中的智能体发送心跳以更新其健康状态。
推送事件到智能体¶
推送外部事件到运行中的智能体,用于事件驱动执行。
系统指标¶
检索涵盖调度器、任务管理器、负载均衡器和系统资源的全面指标快照。
响应(200 OK):
{
"timestamp": "2026-02-16T12:00:00Z",
"scheduler": {
"total_jobs": 12,
"active_jobs": 8,
"paused_jobs": 2,
"failed_jobs": 1,
"total_runs": 450,
"successful_runs": 445,
"dead_letter_count": 2
},
"task_manager": {
"queued_tasks": 3,
"running_tasks": 5,
"completed_tasks": 1200,
"failed_tasks": 15
},
"load_balancer": {
"total_workers": 4,
"active_workers": 3,
"requests_per_second": 12.5
},
"system": {
"cpu_usage_percent": 45.2,
"memory_usage_bytes": 536870912,
"memory_total_bytes": 17179869184,
"uptime_seconds": 3600
}
}
指标快照还可以使用运行时的 MetricsExporter 系统导出到文件(原子 JSON 写入)或 OTLP 端点。参见下方的指标与遥测部分。
指标与遥测¶
Symbiont 支持将运行时指标导出到多个后端:
文件导出器¶
将指标快照写入原子 JSON 文件(临时文件 + 重命名):
use symbi_runtime::metrics::{FileMetricsExporter, MetricsExporterConfig};
let exporter = FileMetricsExporter::new("/var/lib/symbi/metrics.json");
exporter.export(&snapshot)?;
OTLP 导出器¶
将指标发送到任何 OpenTelemetry 兼容端点(需要 metrics 特性):
use symbi_runtime::metrics::{OtlpExporter, OtlpExporterConfig, OtlpProtocol};
let config = OtlpExporterConfig {
endpoint: "http://localhost:4317".to_string(),
protocol: OtlpProtocol::Grpc,
..Default::default()
};
复合导出器¶
同时扇出到多个后端——单个导出失败会被记录但不会阻塞其他导出器:
use symbi_runtime::metrics::CompositeExporter;
let composite = CompositeExporter::new(vec![
Box::new(file_exporter),
Box::new(otlp_exporter),
]);
后台收集¶
MetricsCollector 作为后台线程运行,定期收集快照并导出:
use symbi_runtime::metrics::MetricsCollector;
let collector = MetricsCollector::new(exporter, interval);
collector.start();
// ... 稍后 ...
collector.stop();
技能扫描(ClawHavoc)¶
SkillScanner 在加载前检查智能体技能内容中的恶意模式。它内置了 40 条 ClawHavoc 防御规则,覆盖 10 个攻击类别:
| 类别 | 数量 | 严重性 | 示例 |
|---|---|---|---|
| 原始防御规则 | 10 | 严重/警告 | pipe-to-shell、eval-with-fetch、rm-rf-pattern |
| 反向 shell | 7 | 严重 | bash、nc、ncat、mkfifo、python、perl、ruby |
| 凭据窃取 | 6 | 高 | SSH 密钥、AWS 凭据、云配置、浏览器 cookie、钥匙串 |
| 网络外泄 | 3 | 高 | DNS 隧道、/dev/tcp、netcat 出站 |
| 进程注入 | 4 | 严重 | ptrace、LD_PRELOAD、/proc/mem、gdb attach |
| 权限提升 | 5 | 高 | sudo、setuid、setcap、chown root、nsenter |
| 符号链接/路径遍历 | 2 | 中等 | 符号链接逃逸、深层路径遍历 |
| 下载链 | 3 | 中等 | curl 保存、wget 保存、chmod 执行 |
请参阅安全模型获取完整的规则列表和严重性模型。
使用方法¶
use symbi_runtime::skills::SkillScanner;
let scanner = SkillScanner::new(); // 包含所有 40 条默认规则
let result = scanner.scan_skill("/path/to/skill/");
if !result.passed {
for finding in &result.findings {
eprintln!("[{}] {}: {} (line {})",
finding.severity, finding.rule, finding.message, finding.line);
}
}
可以在默认规则基础上添加自定义拒绝模式:
let scanner = SkillScanner::with_custom_rules(vec![
("custom-pattern".into(), r"my_dangerous_pattern".into(),
ScanSeverity::Warning, "Custom rule description".into()),
]);
服务器配置¶
运行时 HTTP API 服务器可以使用以下选项进行配置:
- 默认绑定地址:
127.0.0.1:8080 - CORS 支持:可为开发配置
- 请求跟踪:通过 Tower 中间件启用
- 特性门控:在
http-apiCargo 特性后可用
特性配置参考¶
云端 LLM 推理(cloud-llm)¶
通过 OpenRouter 连接到云端 LLM 提供商,用于智能体推理:
环境变量:
- OPENROUTER_API_KEY — 您的 OpenRouter API 密钥(必需)
- OPENROUTER_MODEL — 使用的模型(默认:google/gemini-2.0-flash-001)
云端 LLM 提供商与推理循环的 execute_actions() 管线集成。它支持流式响应、指数退避自动重试和 token 使用量跟踪。
独立智能体模式(standalone-agent)¶
将云端 LLM 推理与 Composio 工具访问结合,用于云原生智能体:
环境变量:
- OPENROUTER_API_KEY — OpenRouter API 密钥
- COMPOSIO_API_KEY — Composio API 密钥
- COMPOSIO_MCP_URL — Composio MCP 服务器 URL
Cedar 策略引擎(cedar)¶
使用 Cedar 策略语言进行正式授权:
Cedar 策略与推理循环的 Gate 阶段集成,提供细粒度的授权决策。请参阅安全模型获取策略示例。
向量数据库配置¶
Symbiont 默认使用 LanceDB 作为嵌入式向量后端——无需外部服务。对于扩展部署,Qdrant 可作为可选后端使用。
LanceDB(默认):
无需额外配置。数据存储在运行时本地。
Qdrant(可选):
[vector_db]
enabled = true
backend = "qdrant"
collection_name = "symbi_knowledge"
url = "http://localhost:6333"
环境变量:
- SYMBIONT_VECTOR_BACKEND — lancedb(默认)或 qdrant
- QDRANT_URL — Qdrant 服务器 URL(仅在使用 Qdrant 时需要)
高级推理原语(orga-adaptive)¶
启用工具筛选、卡住循环检测、上下文预获取和范围约定:
请参阅 orga-adaptive 指南 获取完整的配置参考。
数据结构¶
核心类型¶
// 工作流执行请求
WorkflowExecutionRequest {
workflow_id: String,
parameters: serde_json::Value,
agent_id: Option<AgentId>
}
// 智能体状态响应
AgentStatusResponse {
agent_id: AgentId,
state: AgentState,
last_activity: DateTime<Utc>,
resource_usage: ResourceUsage
}
// 健康检查响应
HealthResponse {
status: String,
uptime_seconds: u64,
timestamp: DateTime<Utc>,
version: String
}
// 创建智能体请求
CreateAgentRequest {
name: String,
dsl: String
}
// 创建智能体响应
CreateAgentResponse {
id: String,
status: String
}
// 更新智能体请求
UpdateAgentRequest {
name: Option<String>,
dsl: Option<String>
}
// 更新智能体响应
UpdateAgentResponse {
id: String,
status: String
}
// 删除智能体响应
DeleteAgentResponse {
id: String,
status: String
}
// 执行智能体请求
ExecuteAgentRequest {
// 当前为空结构体
}
// 执行智能体响应
ExecuteAgentResponse {
execution_id: String,
status: String
}
// 智能体执行记录
AgentExecutionRecord {
execution_id: String,
status: String,
timestamp: String
}
// 智能体执行历史响应
GetAgentHistoryResponse {
history: Vec<AgentExecutionRecord>
}
运行时提供者接口¶
API 实现了一个具有以下增强方法的 RuntimeApiProvider trait:
execute_workflow()- 使用给定参数执行工作流get_agent_status()- 检索带实时执行指标的详细状态get_system_health()- 获取带调度器统计的整体系统健康状态list_agents()- 列出所有智能体(运行中、排队中和已完成)shutdown_agent()- 优雅关闭,支持资源清理和超时处理get_metrics()- 检索包含任务统计的全面系统指标create_agent()- 创建智能体,支持执行模式指定update_agent()- 更新智能体配置并持久化delete_agent()- 删除智能体,正确清理运行中的进程execute_agent()- 触发执行,支持监控和健康检查get_agent_history()- 检索带性能指标的详细执行历史
调度 API¶
所有调度端点需要认证。需要 cron 特性。
列出调度¶
响应(200 OK):
[
{
"job_id": "uuid",
"name": "daily-report",
"cron_expression": "0 0 9 * * *",
"timezone": "America/New_York",
"status": "active",
"enabled": true,
"next_run": "2026-03-04T09:00:00Z",
"run_count": 42
}
]
创建调度¶
请求体:
{
"name": "daily-report",
"cron_expression": "0 0 9 * * *",
"timezone": "America/New_York",
"agent_name": "report-agent",
"policy_ids": ["policy-1"],
"one_shot": false
}
cron_expression 使用六个字段:sec min hour day month weekday(可选第七个字段为年份)。
响应(200 OK):
更新调度¶
请求体(所有字段可选):
{
"cron_expression": "0 */10 * * * *",
"timezone": "UTC",
"policy_ids": ["policy-2"],
"one_shot": true
}
暂停 / 恢复 / 触发调度¶
POST /api/v1/schedules/{id}/pause
POST /api/v1/schedules/{id}/resume
POST /api/v1/schedules/{id}/trigger
Authorization: Bearer <your-token>
响应(200 OK):
删除调度¶
响应(200 OK):
获取调度历史¶
响应(200 OK):
{
"job_id": "uuid",
"history": [
{
"run_id": "uuid",
"started_at": "2026-03-03T09:00:00Z",
"completed_at": "2026-03-03T09:01:23Z",
"status": "completed",
"error": null,
"execution_time_ms": 83000
}
]
}
获取下次运行¶
响应(200 OK):
调度器健康状态¶
返回调度器特定的健康状态和统计信息。
通道适配器 API¶
所有通道端点需要认证。将智能体连接到 Slack、Microsoft Teams 和 Mattermost。
列出通道¶
响应(200 OK):
注册通道¶
请求体:
{
"name": "slack-general",
"platform": "slack",
"config": {
"webhook_url": "https://hooks.slack.com/...",
"channel": "#general"
}
}
支持的平台:slack、teams、mattermost。
响应(200 OK):
获取 / 更新 / 删除通道¶
GET /api/v1/channels/{id}
PUT /api/v1/channels/{id}
DELETE /api/v1/channels/{id}
Authorization: Bearer <your-token>
启动 / 停止通道¶
响应(200 OK):
通道健康状态¶
响应(200 OK):
{
"id": "uuid",
"connected": true,
"platform": "slack",
"workspace_name": "my-team",
"channels_active": 3,
"last_message_at": "2026-03-03T15:42:00Z",
"uptime_secs": 86400
}
身份映射¶
GET /api/v1/channels/{id}/mappings
POST /api/v1/channels/{id}/mappings
Authorization: Bearer <your-token>
将平台用户映射到 Symbiont 身份,用于智能体交互。
通道审计日志¶
调度器功能¶
实际任务执行: - 带安全执行环境的进程生成 - 5 秒间隔的资源监控(内存、CPU) - 健康检查和自动故障检测 - 支持临时、持久、定时和事件驱动执行模式
优雅关闭: - 30 秒优雅终止期限 - 对无响应进程的强制终止 - 资源清理和指标持久化 - 队列清理和状态同步
增强的上下文管理¶
高级搜索功能:
{
"query_type": "keyword|temporal|similarity|hybrid",
"search_terms": ["term1", "term2"],
"time_range": {
"start": "2024-01-01T00:00:00Z",
"end": "2024-01-31T23:59:59Z"
},
"memory_types": ["factual", "procedural", "episodic"],
"relevance_threshold": 0.7,
"max_results": 10
}
重要性计算: - 多因素评分,考虑访问频率、时效性和用户反馈 - 记忆类型权重和时间衰减因子 - 共享知识的信任评分计算
访问控制集成: - 策略引擎与上下文操作连接 - 带安全边界的智能体范围访问 - 带细粒度权限的知识共享
工具审查 API(生产环境)¶
工具审查 API 提供了一个完整的工作流,用于安全地审查、分析和签名 MCP(模型上下文协议)工具,使用 AI 驱动的安全分析和人工监督功能。
基础 URL¶
身份验证¶
所有端点都需要 Bearer JWT 身份验证:
核心工作流¶
工具审查 API 遵循以下请求/响应流程:
graph TD
A[提交工具] --> B[安全分析]
B --> C{风险评估}
C -->|低风险| D[自动批准]
C -->|高风险| E[人工审查队列]
E --> F[人工决策]
F --> D
D --> G[代码签名]
G --> H[已签名工具就绪]
端点¶
审查会话¶
提交工具进行审查¶
提交 MCP 工具进行安全审查和分析。
请求体:
{
"tool_name": "string",
"tool_version": "string",
"source_code": "string",
"metadata": {
"description": "string",
"author": "string",
"permissions": ["array", "of", "permissions"]
}
}
响应:
列出审查会话¶
检索带有可选过滤的分页审查会话列表。
查询参数:
- page (integer):分页的页码
- limit (integer):每页项目数
- status (string):按审查状态过滤
- author (string):按工具作者过滤
响应:
{
"sessions": [
{
"review_id": "uuid",
"tool_name": "string",
"status": "string",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T11:00:00Z"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 100,
"has_next": true
}
}
获取审查会话详情¶
检索特定审查会话的详细信息。
响应:
{
"review_id": "uuid",
"tool_name": "string",
"tool_version": "string",
"status": "string",
"analysis_results": {
"risk_score": 85,
"findings": ["array", "of", "security", "findings"],
"recommendations": ["array", "of", "recommendations"]
},
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T11:00:00Z"
}
安全分析¶
获取分析结果¶
检索特定分析的详细安全分析结果。
响应:
{
"analysis_id": "uuid",
"review_id": "uuid",
"risk_score": 85,
"analysis_type": "automated",
"findings": [
{
"severity": "high",
"category": "code_injection",
"description": "Potential code injection vulnerability detected",
"location": "line 42",
"recommendation": "Sanitize user input before execution"
}
],
"rag_insights": [
{
"knowledge_source": "security_kb",
"relevance_score": 0.95,
"insight": "Similar patterns found in known vulnerabilities"
}
],
"completed_at": "2024-01-15T10:45:00Z"
}
人工审查工作流¶
获取审查队列¶
检索等待人工审查的项目,通常是需要手动检查的高风险工具。
响应:
{
"pending_reviews": [
{
"review_id": "uuid",
"tool_name": "string",
"risk_score": 92,
"priority": "high",
"assigned_to": "reviewer@example.com",
"escalated_at": "2024-01-15T11:00:00Z"
}
],
"queue_stats": {
"total_pending": 5,
"high_priority": 2,
"average_wait_time": "2h 30m"
}
}
提交审查决策¶
提交人工审查员对工具审查的决策。
请求体:
{
"decision": "approve|reject|request_changes",
"comments": "Detailed review comments",
"conditions": ["array", "of", "approval", "conditions"],
"reviewer_id": "reviewer@example.com"
}
响应:
{
"review_id": "uuid",
"decision": "approve",
"processed_at": "2024-01-15T12:00:00Z",
"next_status": "approved_for_signing"
}
工具签名¶
获取签名状态¶
检索已审查工具的签名状态和签名信息。
响应:
{
"review_id": "uuid",
"signing_status": "completed",
"signature_info": {
"algorithm": "RSA-SHA256",
"key_id": "signing-key-001",
"signature": "base64-encoded-signature",
"signed_at": "2024-01-15T12:30:00Z"
},
"certificate_chain": ["array", "of", "certificates"]
}
下载已签名工具¶
下载带有嵌入签名和验证元数据的已签名工具包。
响应: 已签名工具包的二进制下载。
统计与监控¶
获取工作流统计¶
检索关于审查工作流的全面统计和指标。
响应:
{
"workflow_stats": {
"total_reviews": 1250,
"approved": 1100,
"rejected": 125,
"pending": 25
},
"performance_metrics": {
"average_review_time": "45m",
"auto_approval_rate": 0.78,
"human_review_rate": 0.22
},
"security_insights": {
"common_vulnerabilities": ["sql_injection", "xss", "code_injection"],
"risk_score_distribution": {
"low": 45,
"medium": 35,
"high": 20
}
}
}
速率限制¶
工具审查 API 对每种端点类型实施速率限制:
- 提交端点:每分钟 10 个请求
- 查询端点:每分钟 100 个请求
- 下载端点:每分钟 20 个请求
所有响应中都包含速率限制头:
错误处理¶
API 使用标准 HTTP 状态码并返回详细的错误信息:
{
"error": {
"code": "INVALID_REQUEST",
"message": "Tool source code is required",
"details": {
"field": "source_code",
"reason": "missing_required_field"
}
}
}
入门指南¶
运行时 HTTP API¶
-
确保运行时是使用
http-api特性构建的: -
设置智能体端点的认证令牌:
-
启动运行时服务器:
-
验证服务器正在运行:
-
测试已认证的智能体端点:
工具审查 API¶
- 从您的 Symbiont 管理员处获取 API 凭据
- 使用
/sessions端点提交工具进行审查 - 通过
/sessions/{reviewId}监控审查进度 - 从
/signing/{reviewId}/download下载已签名工具