构建治理约 12 分钟

knowledge-scaffold 知识包

把领域对象、业务规则、确定性脚本和数据映射打包成可版本化的知识包;数值计算交给沙箱里的脚本,会话锁定知识版本。

依据 agent-solution 0.1.3 · main@bf702bc9(2026-11-03)核实

问题不在"模型知道得不够多"

企业里智能体常犯的错有四类:误解术语、猜字段名、编规则、算错数。knowledge-scaffold 的思路不是让模型记住更多,而是把这四件事各交给最合适的执行层:

问题交给谁
不懂内部术语和对象关系知识包里的对象、关系、别名、操作定义
猜数据库表名和字段名对象 → 数据字段的映射,加独立的数据 Provider
多步数值计算漏算错算知识包里的确定性脚本,在沙箱中执行
知识升级影响已有推理多版本共存,会话锁定版本
源码knowledge-scaffold READMEagent-solution/common/knowledge-scaffold/README.md@bf702bc9

知识包长什么样

<知识包>/
├── 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 鉴权服务
数据 ProviderNL2SQL 服务、SQL 模板、图数据库等多种接法
协议HTTP、SDK、MCP,以及 A2A、ACP 适配

推理过程通过 SSE 输出回答、思考摘要、工具进度和最终状态,对话右侧能看到每次知识读取、数据查询和脚本执行。知识包的建模工具在另一个独立仓库,不在本模块里。

小结

  • 知识包 = 对象 + 操作 + 脚本 + 数据映射,把术语、字段、规则、计算从模型手里拿出来。
  • 数值计算交给确定性脚本,可放进 JiuwenBox 沙箱执行。
  • 会话锁定知识版本,数据连接按知识包共享。

源码出处

链接指向固定提交,仓库后续更新不影响这里的行号。

过关测验

  1. 1. 智能体需要计算一个多步骤的数值结果(比如交期),knowledge-scaffold 推荐怎么做?

  2. 2. 知识包从 1.0.0 升级到 1.1.0 并激活后,一个用 1.0.0 创建、还在进行中的会话会用哪个版本?

  3. 3. 多个版本的同一个知识包,业务数据连接是怎么配的?

通关条件

  • ○ 测验全部答对