牛火山企业智能体平台(内部代号:nhs)是基于 Java 21 与 AgentScope Java 构建的企业级通用智能体平台工程实践,围绕任务驱动、数字员工、工作空间与业务接入四个核心域,将系统划分为控制面、运行时、执行面与治理面:控制面负责 Agent、模型、Skill、MCP、知识与数据资源的声明式配置和版本化发布;运行时承载多 Agent 协作、上下文编排、工具路由与事件流;执行面通过 Browser 与 Sandbox 提供类 RPA 的受控操作环境和隔离计算能力;治理面统一接入身份、权限、审批、风控、审计与用量计量。平台支持多垂类 Agent 的能力装配与相互通信,目标是将模型推理转化为可授权、可执行、可观测、可验收、可追溯的企业级数字生产力。
文档状态:2026年08月27日 项目快照。当前仓库适合作为后续续建、拆分或重构的业务与工程参考,不应直接视为已经完成生产验收的发布版本。
牛火山企业智能体平台不是单纯的聊天页面,也不是只供研发人员使用的 Agent 配置工具。产品按使用人群拆成三个相互关联、权限隔离的工作面:
| 工作面 | 主要用户 | 入口 | 核心目标 |
|---|---|---|---|
| 用户客户端 | 普通业务用户、项目成员 | /app,兼容别名 /client |
用对话、任务和项目完成日常工作,不暴露底层工程配置 |
| 配置管理端 | Agent 工程师、数据工程师、平台运维 | /home 及动态授权菜单 |
配置 Agent、模型、Skill、MCP、知识库、数据源、自动化和开放能力 |
| 治理运营端 | 管理人员、安全人员、审计人员 | /dashboard、/risk-control、/system 等 |
查看运行情况、Token 消耗、权限、风险、审批、审计和平台健康度 |
平台目前采用"单企业私有化"边界,不额外引入产品级多租户模型。不同用户、项目、任务和资源之间仍通过主体、角色、权限包、访问策略与数据范围进行隔离。
当前代码已经从基础框架扩展为覆盖面较广的智能体平台工程原型,核心领域、主要页面、数据库迁移和运行时适配均已形成。它具有继续开发和按模块复用的价值,但当前代码版本尚未作为一个完整候选版本重新做全量验收。
理解项目状态时需要区分三个层次:
| 层次 | 当前结论 |
|---|---|
| 历史联调结果 | 登录、私有会话、任务、Agent 调用、流式响应等核心链路曾完成阶段性联调,相关结果只能证明当时版本 |
| 当前源码实现 | 用户端、配置端、治理端及后端主要业务域均有源码实现,数据库迁移已推进至 V99 |
| 生产可用状态 | 尚不能据此判定为生产就绪;仍需从空库迁移、真实供应商接入、跨用户权限、浏览器与 Sandbox、性能安全和私有化交付验证 |
完整产品规划
本 README 主要记录当前实现情况,产品完整形态、16 个产品域及详细功能定义请参阅
企业级智能体工作平台功能模块规划.md。
以下截图记录当前产品实现,原图统一归档在 doc/screenshots/。
以项目和历史会话组织上下文,主区域聚焦对话内容与输入,支持自动路由、指定 Agent、文件与执行工具。
按任务状态形成可拖动看板,并提供搜索、状态筛选、排序、视图切换和快速创建入口。
根据重要性和紧急度排列任务,帮助用户区分优先处理、计划推进、快速处理和按序安排的工作。
集中展示项目状态、关联任务、默认智能体和协作空间,为会话与任务提供长期项目上下文。
汇总个人待办、Token、技能、MCP、任务和数据入口,并通过推荐场景与最近任务连接日常配置和运营工作。
通过基本信息、角色与指令、引擎与运行、能力装配、体验与发布五个步骤完成智能体配置,降低专业参数的理解成本。
以类型化表单配置 Provider、服务地址、凭证、模型能力、上下文长度和推理参数,并提供模型发现与连接测试。
按步骤配置服务地址、传输协议、命名空间、鉴权方式和超时策略,并在接入前完成连接验证与工具发现。
统一管理知识库、文档、可见范围和检索能力,并提供跨库检索、A/B 检索与运营指标入口。
围绕数据源、数据集与元数据、只读查询三个层次管理企业数据连接,支持托管凭证、连接测试和启停控制。
将审批工作台、审计日志、通知收件箱和风险策略放在同一治理入口,集中处理高风险执行和人工确认。
提供 API 应用、服务账号、Playground、接口文档和 Embed 调试能力,支持将已发布 Agent 安全嵌入外部业务系统。
在成员详情中统一查看并配置权限包、个人覆盖、临时授权和参考用户复制,兼顾授权效率与变更留痕。
按时间范围统计输入、输出和交互次数,展示智能体与用户消耗排行,并保留逐次调用明细。
平台以"完成可验收的工作"为主线,而不是以模型返回一段文本为终点。
登录 / 身份识别
-> 私有会话或显式创建任务
-> 绑定项目与任务上下文
-> 冻结 Agent、资源和权限快照
-> 运行时执行(当前适配 AgentScope)
-> 调用工具 / MCP / 知识库 / 数据源 / Sandbox / Browser
-> 在高风险节点发起审批、确认或用户追问
-> 生成消息、文件、报表等制品
-> 用户验收或退回重做
-> 留存通知、审计、Trace 和用量统计
核心对象的职责边界如下:
- 会话:默认属于用户私域,用于低门槛交互、上下文延续和结果展示。
- 项目:组织成员、任务、默认 Agent、文件与运行策略,是长期协作上下文。
- 任务:企业共享和协作的正式工作单元,拥有目标、优先级、状态、版本和验收结果。
- 执行:一次具体运行,拥有独立运行状态、事件时间线、资源快照、消耗和错误信息;任务状态与运行状态不混用。
- 制品:执行产生的文件、查询结果、图表、报告或其他可交付结果。
- 验收:由业务用户确认完成、驳回或要求重做。模型声称"已完成"不等于任务闭环。
- 审批与审计:对敏感工具、数据访问和关键操作进行人工控制,并记录可追溯证据。
用户客户端采用独立全屏布局,默认进入 /app。它刻意隐藏大部分平台工程配置,只保留业务用户高频使用的三个入口。
| 模块 | 已有能力 |
|---|---|
| 智能对话 | 项目与会话分组、会话搜索、历史记录、自动路由、@Agent、指定 Agent、流式消息、执行事件、用户确认与追问、引用内容、图表、代码、SQL 计划、Mermaid、工作区文件和制品预览 |
| 任务中心 | 名称与条件筛选、列表视图、状态看板、重要/紧急四象限、新建任务、单 Agent 或固定多 Agent 编排、资源授权、运行详情、版本快照、步骤、制品和验收记录 |
| 项目中心 | 卡片与列表视图、项目搜索、新建与编辑、默认 Agent、项目成员、关联任务、工作区和隔离策略 |
客户端与管理端共用登录态和后端权限体系。只有拥有管理端路由权限的账号,才应看到并使用工作区切换入口。
配置管理端基于 SoybeanAdmin 标准布局,通过后端动态路由控制账号实际可见菜单。主要面向专业人员,而不是普通业务用户。
| 模块 | 路由 | 已有能力 |
|---|---|---|
| 管理工作台 | /home |
待办、常用 Agent、推荐场景、最近任务和数据入口 |
| 协作工作区 | /workspace |
管理端智能对话、工作区文件与浏览器控制 |
| 任务与项目运营 | /task-center、/project-center |
企业任务运行和验收、项目成员与角色、文件、网络及通知策略 |
| Agent 中心 | /agent-center |
向导式创建、系统提示词、模型与运行策略、Skill/工具/知识库装配、欢迎体验、版本发布、执行历史与 Trace |
| Agent 调试 | /agent-debug |
调试运行、实时事件、重放、审批状态和浏览器控制 |
| 资源中心 | /resource-center |
模型、MCP/Search/API 连接器、工具、Skill、记忆;包含连接测试、工具发现、ZIP Skill 导入、版本与发布审核 |
| 知识库 | /knowledge |
目录、权限、文档、解析、切片、Embedding、检索策略、指标和检索实验 |
| 数据接入 | /data-source |
数据源、数据集、元数据目录、字段与指标、画像、表关系、行策略、导入导出和只读查询 |
| 自动化 | /automation |
手动、Cron、Webhook 触发,绑定固定任务版本和服务账号,配置重试策略 |
| 开放接口 | /open-api |
API 应用、服务账号、机器身份授权、凭证、接口文档、Playground、Embed 和迁移归档 |
| 提示词与场景 | /prompt-studio、/scenario-templates、/slash-commands |
提示词版本与变量测试、场景模板交付、个人快捷命令 |
配置体验遵循"表单、向导和分步选择优先"的原则。原始 JSON 只应作为系统内部传输或高级诊断数据存在,不应要求普通配置人员手工编写未知结构的 JSON。
| 模块 | 路由 | 已有能力 |
|---|---|---|
| 风控中心 | /risk-control |
审批工作台、审计日志、通知收件箱和风险策略 |
| 身份与系统管理 | /system |
成员、固定角色、权限包、权限复制历史、身份同步、Token 额度、运行健康、Redis 运维、日志留存和平台配置 |
| 运营看板 | /dashboard、/token-stats |
执行成功率、Token/API 使用趋势、Agent 健康、用户与 Agent 排行和调用明细 |
| 数据门户与 ChatBI | /data-portal、/chatbi |
数据目录、自然语言分析、只读 SQL、图表与透视、历史、简报、监控和下钻 |
| 报表与案例 | /saved-reports、/examples |
报表定义、参数化运行、订阅、运行历史和 ChatBI 案例治理 |
| 个人与记忆 | /personal-center、/memory |
个人资料、有效权限、额度、通知、个人资源、会话摘要、长期偏好和记忆运维 |
此外,前端保留 /embed/chat 嵌入式对话与 /client/debug Widget 协议调试能力,用于将平台能力集成进第三方业务系统。
flowchart LR
User[业务用户] --> Client[用户客户端 /app]
Engineer[工程与运维人员] --> Admin[配置与治理端 /home]
Client --> API[nhs-admin REST / SSE]
Admin --> API
API --> Platform[nhs-platform 业务领域]
API --> System[nhs-system / nhs-common 基础能力]
Platform --> SPI[nhs-runtime-spi]
SPI --> AgentScope[nhs-runtime-agentscope]
Platform --> PostgreSQL[(PostgreSQL + pgvector)]
Platform --> Redis[(Redis / Redisson)]
Platform --> Browser[Node / Playwright Browser Worker]
Platform --> Sandbox[Sandbox Runner]
AgentScope --> Providers[模型 / MCP / API / Search]
Platform --> DataSystems[知识库 / 数据源 / 文件系统]
- Vue 3、TypeScript、Vite 8、Naive UI、UnoCSS。
- 以 SoybeanAdmin 作为管理端基座,保留其认证、动态路由、布局和工程工具链。
/app使用独立客户端布局;/home及其他管理页面使用标准后台布局。- 页面候选路由在前端生成,最终菜单与可访问范围由后端权限结果决定,不能只依赖"隐藏菜单"做安全控制。
- 查询和配置采用 REST,长时间执行与对话增量结果采用 SSE/事件流展示。
| Maven 模块 | 职责 |
|---|---|
nhs-admin |
Spring Boot 应用入口、环境配置和模块装配 |
nhs-platform |
Agent、会话、项目、任务、执行、资源、知识、数据、审批、审计、开放接口等平台业务域 |
nhs-runtime-spi |
与具体智能体引擎无关的运行时契约 |
nhs-runtime-agentscope |
AgentScope Java 运行时适配器 |
nhs-sandbox-runner |
面向不可信或高隔离执行的独立 Runner |
nhs-migration-cli |
迁移清点、转换与验证辅助工具 |
nhs-system、nhs-common-* |
继承基础框架的用户、权限、Web、MyBatis、Redis、日志、加密等通用能力 |
nhs-api、nhs-extend |
公共 API 契约及监控、任务等可选扩展服务 |
nhs-platform 内部按业务域组织代码,主要包括 agent、conversation、project、task、execution、workflow、model、connector、skill、knowledge、memory、data、approval、artifact、automation、notification、identity、iam、openapi、embed、audit、risk、browser、sandbox、report、scenario、operations 和 portal。
- 项目已抽取
nhs-runtime-spi,AgentScope 通过适配模块接入,为未来增加运行引擎提供依赖边界;当前仍存在 AgentScope 专属语义和恢复协议,替换能力尚未验证。 - AgentScope 适配器是条件启用组件。接手时必须核对实际运行 Profile 与
NHS_RUNTIME_AGENTSCOPE_ENABLED,不能仅凭 Maven 依赖存在就判断运行时已经启用。 - Agent 发布后形成版本;任务运行时冻结 Agent、模型、工具、Skill、知识与权限快照,避免配置变化破坏历史可解释性。
- Browser Worker 是独立 Node/Playwright 进程。Java 主进程只调用其 HTTP API,不在 JVM 中执行不可信浏览器代码;浏览器上下文只保存在 Worker 内存中,Worker 重启后必须失效旧会话并重新打开。
- Sandbox Runner 承担代码与 Skill 依赖等隔离执行,避免主应用直接暴露宿主环境。
- 高风险工具、浏览器接管、敏感数据操作和 Agent 主动提问通过可持久化的等待/恢复状态衔接人工操作。
- PostgreSQL 16+ 是业务持久化事实源,
pgvector用于向量数据;Redis/Redisson 只承担缓存、锁和短期协调,不作为最终业务事实源。 - 平台 SQL 位于
backend/script/sql/postgres/agent/。当前迁移头为V99,共有 98 个迁移脚本,V58为预留版本。该目录内的旧版说明仍停留在V94,续建时应以实际迁移文件和本节为准并同步修正文档。 - 已发布的迁移脚本应保持不可变,后续修改通过新增版本演进。
- 数据模型尽量避免复杂外键和跨业务域级联耦合,优先使用唯一约束、状态机、事务、版本号和应用层校验;当前迁移中存在少量必要外键,不能假设数据库为"零外键"。
- 平台按单企业私有部署设计,不在核心平台表中再复制一套产品级租户模型。
- 密钥、数据库密码、模型 API Key 和连接器凭证必须加密存储或保存安全引用,不能出现在种子 SQL、前端回显、日志或截图中。
- 业务闭环优先:对话只是入口,任务、执行、制品和验收共同定义"工作完成"。
- 使用人群分层:普通用户只面对对话、任务和项目;复杂资源配置进入管理端;运营与安全信息进入治理端。
- 人类可理解的配置:模型、API、MCP、Search、Skill、知识和数据源使用类型化表单或向导,避免让用户直接填写无说明的 JSON。
- 配置与运行分离:可变配置形成不可变发布版本,执行引用冻结快照,支持审计、回放和问题定位。
- 最小权限与默认拒绝:显式拒绝优先;私有会话和企业共享任务属于不同可见域;后端必须再次执行资源级授权判断。
- 身份类型分离:人类用户、服务账号和 API 应用是不同主体,凭证、授权范围和审计记录不混用。
- 运行引擎解耦演进:已通过 SPI 建立依赖边界,后续仍需继续收敛 AgentScope 专属语义并验证第二种运行引擎。
- 持久化事实可追溯:关键状态、审批、事件、快照、消耗和结果进入 PostgreSQL,缓存丢失不应改变最终业务结论。
- 不可信执行隔离:浏览器、代码、第三方 Skill 和外部连接器按风险分区运行,并保留租约、超时、确认和审计机制。
- 私有化交付可运维:设计需覆盖离线安装、配置加密、健康检查、备份恢复、升级和回滚,而不仅是开发环境启动。
平台权限不是单一"角色菜单"模型,而是多个层次共同决定:
登录主体
-> 固定角色 / 权限包 / 直接授权
-> 路由与操作权限
-> 项目成员关系和任务访问规则
-> Agent 与资源授权快照
-> 数据目录、知识目录、连接器和工具的细粒度策略
-> 风险策略、审批与审计
主要约束:
- 私有会话默认仅会话所有者可见,不因同属一个企业而自动共享。
- 项目和任务可按成员、角色和访问规则共享;任务运行只能使用当次已授权并冻结的资源。
deny规则优先于allow,不存在授权时默认拒绝。- 菜单权限只决定入口可见性,接口和数据访问仍由后端校验。
- 权限复制面向"参考用户选择",不是让管理员手工输入用户 ID;复制行为本身需要留痕。
- 服务账号用于自动化和机器调用,不应伪装成人类用户,也不应拥有不可解释的全局权限。
后端基于 RuoYi-Vue-Plus,前端基于 SoybeanAdmin,两个项目均采用 MIT License,许可证文件分别保留在 backend/LICENSE 和 frontend/LICENSE。nhs 仅作为源码、服务和数据库对象的内部代号,产品名称为"牛火山企业智能体平台"。
后续计划:考虑到 AI 智能体领域的 Java 生态仍相对受限,项目后续将以全新的 Python 项目形态重新设计并开源,本仓库继续作为现有业务实现与架构设计的参考保留。