jiayan-xu/agent-core

GitHub: jiayan-xu/agent-core

一款用 Rust 构建的企业级 AI 代理引擎,以极简核心加按需分发的技能体系和多层安全防线,解决全能型 Agent 在企业环境中权限失控的问题。

Stars: 1 | Forks: 0

# Agent-Core ## 为什么选择 Agent-Core? ### 企业级痛点 大多数 AI agent 框架试图包揽一切。它们内置了网页抓取、代码执行、图像生成等工具——简直是大杂烩。这在企业环境中是**危险**的。 财务人员不需要网页编码工具。HR 专家不应拥有数据库写权限。运维人员不应能够执行 shell 命令。 **全能型 agent 是安全隐患,而非生产力助推器。** ### 我们的方法 Agent-Core 采取了相反的方法——它**只提供基础的 agent 能力**: - 与 LLM 交互 - 调用 MCP 工具 - 执行安全边界 - 管理 session 和记忆 其他一切都来自于管理员分发的 **skills**。agent 初始为空白。它只会扩展用户所需的能力。 ``` Company MCP (enterprise-wide skills: auth, HR policies, org data) └─ Department MCP (domain skills: finance, HR, operations) └─ Project MCP (project-specific tools) └─ User Role (assigned skills) ``` **Agent-Core 的使命不是取代人类。它是成为一个真正的 AI 助手——在其职责范围内能力出众,且绝不越界。** ## 架构 ``` ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ Desktop App │────▶│ Agent-Core │────▶│ Memoria │ │ (any MCP │ │ (:9753) │ │ (:9003) │ │ client) │ │ │ │ │ └──────────────┘ └──────┬───────┘ └──────────────┘ │ ┌───────▼───────┐ │ MCP Sources │ │ ┌─────────┐ │ │ │ Company │ │ (enterprise-wide) │ ├─────────┤ │ │ │Dept/HR │ │ (department-level) │ ├─────────┤ │ │ │ Project │ │ (project-specific) │ └─────────┘ │ └───────────────┘ ``` **Desktop App** 是桌面壳 **Jan / PFAiX**(官方壳,基于 Tauri)——只做壳,不直接连内网 Memoria,所有请求经 agent-core 转发。任何 MCP 兼容客户端亦可接入。壳与引擎的边界与序列图见 [`docs/SHELL_ENGINE_BOUNDARY.md`](docs/SHELL_ENGINE_BOUNDARY.md)。 **Agent-Core** 负责处理推理、工具路由、安全和 skill 管理。 **Memoria** 提供持久化记忆和跨 agent 的知识共享。 **MCP Sources** 定义了每个用户/角色可以做什么——不多也不少。 ## 设计理念 ### 极简核心,极致扩展 Agent-Core 不附带任何特定领域的 skill。它是一块白板。skill 从 skill 市场安装或由管理员针对不同角色进行配置。这使得核心保持小巧、安全且可审计。 ### 默认安全 **默认本机、默认鉴权、默认拒绝。** - **仅本机监听**:默认 `127.0.0.1`,不暴露公网;公开部署请走反向代理 + TLS。 - **统一鉴权**:所有 API 需经 `auth_middleware`;桌面壳(Jan / PFAiX)通过 `x-user-tag` 自动注册身份并向 Memoria 反查命名空间授权。 - **危险工具硬闸门**:`delete_*` 等红线工具无审批人时直接硬拒绝,不进入 LLM 下一轮、不调用 MCP。 - **外发收敛**:`export_/send_/upload_/webhook_/exfil/share_` 等前缀动作走确认 / 审批。 - **Kill switch**:`POST /api/admin/killswitch` 可全局拒绝工具、仅留状态查询(受统一鉴权保护)。 - **降级收缩**:某 MCP 源连续失败 → 标记 unhealthy 剔除并审计;全部业务 MCP 不可用 → 仅 Memoria 只读 + 纯聊天;LLM 主备皆失败 → 返回可重试错误。状态见 `GET /api/admin/degrade`。 在运行时强制执行 7 条红线:权限衰减、代码隔离、治理不可变性、防范数据外发、kill switch、唯一身份和供应链审查。每次工具调用都会针对这 7 条线进行检查。 ### 三级 MCP - **Company MCP**:企业级工具(认证、组织数据、合规) - **Department MCP**:特定领域工具(财务、HR、运维、研发) - **Project MCP**:项目级工具(代码仓库、CI/CD、监控) ### 故障安全降级 当出现问题时,Agent-Core 会**收缩权限**而不是崩溃:MCP 宕机 → 仅提供基本查询工具;LLM 超时 → 切换至备用提供商;锁中毒 → 优雅恢复。 ### Skill 蒸馏 (Harness) 您使用得越多,它在您的领域中就越智能。执行日志会被蒸馏成可复用的 skill 模板。重复性任务将完全跳过 LLM——直接匹配到已知的解决方案。 ## 功能特性 - **LLM 集成** — 多提供商支持并带有自动故障转移 - **MCP 协议** — 原生支持 Company/Department/Project 级 MCP 来源的客户端 - **Skill 市场** — 按用户角色安装 skill,受白名单控制 - **7 条红线安全** — 权限链、沙箱、治理、防范数据外发、kill switch、身份、供应链 - **任务确认闸门** — 在执行危险操作前采用 SAD 式重述确认 - **Skill 蒸馏** — 从执行日志中自动学习 - **Session 管理** — 基于 LRU 的对话历史记录并带有命名空间隔离 - **审计日志** — 结构化审计追踪,并对敏感密钥进行脱敏处理 - **内嵌 Web UI** — 内置聊天界面,地址为 `http://localhost:9753` ## 快速开始 ### 构建与运行 ``` cargo build --release cp agent.toml.example agent.toml # 编辑 agent.toml;密钥请用环境变量注入(见下),不要写明文 # 默认即无窗服务(监听 127.0.0.1:9753);勿裸启 GUI,「AI 助手」窗需显式 --gui ./target/release/agent-core # 等价:./target/release/agent-core --service # Windows: target\release\agent-core.exe # 调试桌面窗(一般不要):target\release\agent-core.exe --gui ``` ### 密钥不落盘(P2-6) `agent.toml` 中**不要写明文密钥**。两种注入方式: 1. 配置文件用 `${ENV_VAR}` 占位符,运行时展开: api_key = "${AGENT_API_KEY}" memoria_admin_key = "${MEMORIA_ADMIN_KEY}" [[mcp_source]] name = "finance-dept" token = "${FINANCE_MCP_TOKEN}" 2. 或直接在环境变量中提供 `AGENT_API_KEY` / `MEMORIA_ADMIN_KEY`(优先级最高,覆盖配置文件)。 ### 配置 | 字段 | 默认值 | 描述 | |-------|---------|-------------| | `agent_id` | `default` | Agent 标识符 | | `api_key` | — | LLM API key | | `server` | `http://127.0.0.1:9003` | Memoria 服务器 | | `port` | `9753` | HTTP 端口 | | `memoria_admin_key` | — | Memoria 管理员密钥 | | `[[mcp_source]]` | — | MCP 源(公司/部门/项目) | ### 多级 MCP 示例 ``` # Company MCP [[mcp_source]] name = "company-hr" url = "http://company-mcp.internal/hr" token = "${COMPANY_MCP_TOKEN}" # Department MCP [[mcp_source]] name = "finance" url = "http://dept-mcp.internal/finance" token = "${DEPT_MCP_TOKEN}" # Project MCP [[mcp_source]] name = "project-data" url = "http://localhost:8000/mcp" ``` ## 项目结构 ``` src/ ├── main.rs — HTTP server, routes, config, auth middleware ├── agent.rs — Core agent loop, confirmation state machine, MCP routing ├── llm.rs — LLM client with failover (chat + streaming) ├── mcp_client.rs — MCP protocol client (HTTP + stdio) ├── boundary.rs — 7 red lines safety, namespace gating, exfiltration guard ├── checkpoint.rs — P1-1 Checkpoint 控制面(与数据面分离的续跑状态机) ├── degrade.rs — P1-5 降级收缩状态机 (Normal/PartialDegraded/MemoriaReadonlyChat/KillSwitch) ├── composer.rs — Multi-step task decomposition (HITL 预览) ├── approval.rs — Human-in-the-loop approval ├── audit.rs — Audit logging (敏感字段脱敏) ├── session.rs — Session state and LRU history ├── namespace.rs — Multi-tenant namespace isolation ├── harness.rs — Skill distillation engine └── chat.html — Embedded web chat UI ``` ## 对比 | 系统 | 对比 Agent-Core | |--------|--------------| | **全能型 Agent** | 自带所有功能,难以按角色保障安全 | | **LangChain Agent** | 锁定框架、仅支持 Python,无内置安全机制 | | **AutoGPT** | 无安全边界,无 skill 蒸馏 | | **Agent-Core** | **极简核心 + 基于角色的 skill,7 条安全防线,MCP 原生支持** | ## AI 协作说明 ## 示例与设计记录 - **示例技能(空核心 + 赋权的活示范)**:[`examples/skills/`](./examples/skills) — 含 `echo` / `calculator` 两个零机密 stdio MCP 服务,可直接接线验证链路。 - **架构决策记录(ADR)**:[`docs/decisions/`](./docs/decisions) - ADR-002 组合式 Skill 路由 - ADR-003 统一鉴权与本机默认(P0-1) - ADR-004 Checkpoint 控制面落盘(P1-1) - ADR-005 Tracing 可观测底盘(P0-3) - **优化路线图**:[`docs/OPTIMIZATION_PLAN_2026-07-11.md`](./docs/OPTIMIZATION_PLAN_2026-07-11.md) — W1(P0 安全) / W2(P1 可运营) / W3(P2 可开源示范) 全量条目与进度。 ## 许可证 MIT ## 相关项目 - [Memoria](https://github.com/jiayan-xu/memoria) — 持久化记忆与知识共享
标签:AI智能体, DLL 劫持, MCP协议, Python安全, Rust, 企业级应用, 可视化界面, 大语言模型, 权限控制, 网络流量审计, 轻量级框架