- 业务插件:声明应用元数据、配置、生命周期和目标产品面。
- 智能体中间件工具:由智能体中间件暴露,把业务动作转换成模型可按结构定义调用的工具。
- 业务服务与数据模型:保存结构化结果、审核状态、来源证据和执行记录。
- 工作台视图:给用户一个可核对、可修正、可提交的人工协同界面。
- 助手模板:让业务用户一键创建已经装配好工具、提示词和运行参数的智能体。
相关功能文档
阅读本文时,可以结合以下平台功能文档:参考架构
BOM 文档接入类插件的目标是把合同包、技术协议、图纸、BOM 表格和工程变更文档转成可审核、可追溯、可匹配的结构化数据。它的关键设计是让智能体负责抽取、比较和批量调用工具,让工作台负责上传、查看、确认、驳回和人工复核。 典型链路如下: 对于一个新的智能体应用,你也可以先按这条链路拆分职责:哪些事情由智能体自动完成,哪些事情必须让人确认,哪些结果需要可追溯保存。步骤 1:定义插件入口和目标应用能力
插件入口负责声明插件的基础信息、配置结构、模板贡献和注册模块。 在 BOM 插件中,XpertPlugin 的核心信息包括:
meta.name:插件包名,例如@acme/plugin-contract-review。meta.level:系统级、全局级或组织级插件。meta.targetApps:插件要出现在哪些上层应用中,例如data-xpert。meta.targetAppMeta["data-xpert"].types:上层应用使用的业务类型,例如workbench-view、assistant-tool、business-app。meta.targetAppMeta["data-xpert"].capabilities:可被插件中心、模板和治理逻辑识别的业务能力。config.schema与config.formSchema:运行时配置结构和前端配置表单。templates:向平台贡献可创建的助手模板。
- 把
targetAppMeta当作上层应用的能力合同,不要把业务能力只写在描述文本里。 - 如果插件需要在 data-xpert 插件中心展示,必须声明
targetApps: ['data-xpert']和非空的targetAppMeta["data-xpert"].types。 - 配置项只放真正需要部署或管理员调整的内容,例如默认资源 ID、召回方式、外部服务地址。
步骤 2:注册服务端模块、实体和生命周期
插件的服务端模块通常使用@XpertServerPlugin 注册,相关概念可参考插件核心概念。BOM 类插件会在服务端模块中注册 TypeORM 实体、业务服务、智能体中间件和工作台视图提供器。
一个智能体应用至少需要三类提供器:
- 业务服务:实现保存、查询、审核、匹配、提交等业务逻辑。
- 智能体中间件:把部分业务动作转换成中间件工具。
- 视图提供器:把业务数据和操作暴露给工作台。
- 原文证据、来源文件、页码、置信度。
- 智能体判断、人工审核状态、审核备注。
- 失败原因和重试任务。
- 与外部系统或知识库的匹配记录。
步骤 3:把业务动作暴露成智能体中间件工具
智能体中间件是智能体应用的自动化入口。这里的“工具”指中间件返回给智能体运行时的可调用工具。BOM 插件没有把“解析合同”做成一个大而全的工具,而是拆成了顺序明确的中间件工具:- 每个工具只做一个清晰业务动作。
- 使用 zod 结构定义输入,字段描述要告诉智能体何时调用、如何调用、哪些字段必填。
- 在工具描述中写清调用顺序和边界条件。
- 对长列表使用“逐条保存”而不是一次提交巨大数组。
- 提供失败上报工具,避免智能体无法完成时静默结束。
sourceRole、sourceDocumentName、page、evidenceText 和 confidence,让后续审核可以追溯到原文。
步骤 4:创建工作台审核界面
真正的业务应用不能只把结果丢回聊天窗口。用户需要在工作台中查看列表、筛选结果、打开来源文件、修改字段、确认差异和提交审核。 BOM 类插件会通过视图提供器注册一个固定视图,例如BOM 审核台。如果需要 iframe 形式的插件界面,可参考远程组件。它的清单声明了:
- 视图位置:智能体工作台主槽位或固定槽位。
- 渲染方式:
remote_component + react + iframe。 - 数据查询能力:分页、搜索、排序、参数。
- 操作能力:普通 JSON 动作、文件动作、行级动作、工具栏动作。
- 宿主事件订阅:监听助手工具完成事件并转发给 iframe。
postMessage 桥接请求数据和执行动作,由平台接口重新解析助手、组织、租户和权限,再转发到视图宿主。
步骤 5:用工具完成事件刷新视图
智能体应用的体验应该是连续的:用户在聊天里让助手解析合同,工具调用完成后,审核台自动切到对应标签页并刷新数据。 BOM 插件通过清单中的hostEvents.subscriptions 订阅工具完成事件。相关前端工作台与 ChatKit 事件链路可参考工作台与资源对话:
- 普通声明式视图可以使用
refresh。 - iframe 远程组件推荐使用
forward,由前端根据toolName和工具输出自己决定切换标签页、刷新局部数据或更新查询参数。 - 不要在 data-xpert 工作台宿主代码里硬编码某个插件的工具名或视图键;这些应该由插件清单声明。
- 转发给 iframe 的事件不能包含令牌、接口地址、
assistantId、tenantId、organizationId等敏感上下文。
步骤 6:提供助手模板
业务用户不应该手动装配每个中间件、模型参数和提示词。智能体应用应该通过模板贡献一个可创建的助手;助手的常规配置方式可参考配置 AI 助手。 BOM 类插件会通过模板贡献代码暴露助手模板,并加载一份 DSL(领域专用语言)内容。模板里声明了:type: AgenttargetApps: ['data-xpert']requiredPluginscapabilities- 默认业务域和管理方
- 初始提示词
- DSL 中的智能体、中间件、工具集、状态变量和模型参数
- 当前业务身份是什么。
- 可以调用哪些工具完成哪些任务。
- 什么情况下必须先读取文件或查看图片。
- 什么字段必须保留证据和置信度。
- 失败时应调用哪个失败工具或输出什么待处理结果。
步骤 7:独立插件仓库开发、构建和接入
正式的业务插件建议在独立插件仓库中开发,例如采用类似xpert-plugins 的工作区结构。宿主 Xpert 应只负责加载、校验和运行插件,不建议把正式插件代码直接写进宿主应用仓库。插件接入和发布流程可参考插件发布和使用。
一个插件包至少需要声明自己的包名、构建入口和 SDK 对等依赖:
- 独立发布:把插件作为 npm 包或企业内部制品发布,由平台按插件安装流程加载。
- 随产品内置:只有平台自带的系统插件才进入宿主默认插件清单和部署包清单。
@xpert-ai/plugin-sdk 为对等依赖,避免插件打包自己的 SDK 副本。
步骤 8:测试与验收
建议至少覆盖这些场景:- 插件生命周期:能被加载、启动、停止,SDK 对等依赖没有重复打包。
- 配置结构:默认值、表单字段、非法配置校验。
- 工具结构定义:必填字段、错误输入、调用顺序和失败工具。
- 业务服务:保存、覆盖、分页查询、状态流转、来源证据保留。
- 工作台清单:固定入口、动作、文件动作、宿主事件。
- 远程组件:iframe 初始化、数据加载、动作调用、工具完成事件刷新。
- 助手模板:创建后能看到正确中间件、提示词、模型参数和初始提示词。
- 端到端流程:用户上传文档,助手调用工具保存结果,工作台自动刷新,人工审核后提交。
- 每个业务行都有稳定行号。
- 每个关键字段都有来源证据。
- 智能体无法判断时不会强行填充,而是生成待确认差异或审核建议。
- 长文档分批保存后,最终状态可以正确完成或失败。
可迁移的设计清单
开发新的智能体应用时,可以用下面的清单快速自检:| 设计项 | 问题 |
|---|---|
| 业务闭环 | 智能体完成什么,人审核什么,系统最终沉淀什么? |
| 插件清单 | 是否声明了 targetApps、targetAppMeta、类型和能力字段? |
| 数据模型 | 是否保存来源证据、置信度、审核状态和失败原因? |
| 智能体中间件工具 | 是否有结构定义、调用顺序、逐条保存和失败上报? |
| 工作台视图 | 是否提供列表、详情、修改、确认、提交和文件预览? |
| 事件刷新 | 工具完成后视图是否能自动刷新到正确上下文? |
| 助手模板 | 用户是否能一键创建已经装配好的业务智能体? |
| 测试 | 是否覆盖工具、服务、视图、模板和端到端流程? |