构建治理约 12 分钟
knowledge-scaffold 知识包
把领域对象、业务规则、确定性脚本和数据映射打包成可版本化的知识包;数值计算交给沙箱里的脚本,会话锁定知识版本。
依据 agent-solution 0.1.3 · main@bf702bc9(2026-11-03)核实
问题不在"模型知道得不够多"
企业里智能体常犯的错有四类:误解术语、猜字段名、编规则、算错数。knowledge-scaffold 的思路不是让模型记住更多,而是把这四件事各交给最合适的执行层:
| 问题 | 交给谁 |
|---|---|
| 不懂内部术语和对象关系 | 知识包里的对象、关系、别名、操作定义 |
| 猜数据库表名和字段名 | 对象 → 数据字段的映射,加独立的数据 Provider |
| 多步数值计算漏算错算 | 知识包里的确定性脚本,在沙箱中执行 |
| 知识升级影响已有推理 | 多版本共存,会话锁定版本 |
知识包长什么样
<知识包>/
├── manifest.yaml ID、名称、版本、语言、启用状态
├── index.md 总入口
├── objects/ 业务对象、属性、别名、数据语义
├── operations/ 业务流程、计算规则、工具路由
├── scripts/ 确定性脚本及调用说明
└── mappings/
└── object-data-mappings.json 对象属性 → 真实数据字段
套到本站的交期承诺案例上(示意,非仓库内容):
objects/定义"订单""物料""产线"及它们的关系,"交货期""交期""承诺日期"登记为同一概念的别名operations/写"交期承诺"的步骤:查库存 → 查产能 → 计算 → 需要时请经理授权scripts/放交期计算脚本:输入数量、库存、日产能、运输天数,输出最早可承诺日期mappings/把"物料.可用库存"映射到库存系统的实际字段
这样模型负责理解和规划,数字由脚本算,字段由映射给,不靠猜。
脚本在哪里跑
知识包脚本通过 execute_script 工具执行。默认在本地运行;显式启用后,优先提交给独立的 JiuwenBox 容器,它用只读挂载、策略文件和容器隔离限制脚本权限,不支持时会审计后回落本地。
版本:会话锁定
导入后,同一知识包的多个版本并存在工作空间里,由 manifest.yaml 记录当前激活版本:
- 明确选择知识包创建的会话,锁定创建时的版本
- 切换激活版本只影响新会话
- 被会话引用的版本不能直接删除
业务数据连接按"工作空间 + 知识包"配置,各版本共享。版本锁定的是知识语义,不复制业务数据。
平台的其他部分
| 部分 | 作用 |
|---|---|
| Consumer | 控制台、API、基于 openJiuwen 的 ReAct 推理、MCP、SDK |
| auth-server | 独立的 OAuth2 / OIDC 鉴权服务 |
| 数据 Provider | NL2SQL 服务、SQL 模板、图数据库等多种接法 |
| 协议 | HTTP、SDK、MCP,以及 A2A、ACP 适配 |
推理过程通过 SSE 输出回答、思考摘要、工具进度和最终状态,对话右侧能看到每次知识读取、数据查询和脚本执行。知识包的建模工具在另一个独立仓库,不在本模块里。
小结
- 知识包 = 对象 + 操作 + 脚本 + 数据映射,把术语、字段、规则、计算从模型手里拿出来。
- 数值计算交给确定性脚本,可放进 JiuwenBox 沙箱执行。
- 会话锁定知识版本,数据连接按知识包共享。
源码出处
链接指向固定提交,仓库后续更新不影响这里的行号。
过关测验
1. 智能体需要计算一个多步骤的数值结果(比如交期),knowledge-scaffold 推荐怎么做?
2. 知识包从 1.0.0 升级到 1.1.0 并激活后,一个用 1.0.0 创建、还在进行中的会话会用哪个版本?
3. 多个版本的同一个知识包,业务数据连接是怎么配的?