Knowledge Recipe
KnowledgeRecipe 是 Heta 的静态构建方案。它声明一个知识库要使用哪些 components,以及这些 components 会按什么 steps 顺序工作。
Recipe 本身不执行构建,也不访问数据库、对象存储或模型 API。它的职责是把构建方案表达清楚,让 KnowledgeBaseBuilder 可以按这个方案运行。
from heta_framework.kb import KnowledgeModels, KnowledgeRecipe, KnowledgeStores
recipe = KnowledgeRecipe(
models=KnowledgeModels(
language=llm,
embedding=embedding,
),
stores=KnowledgeStores(
objects=object_store,
vector=vector_store,
sql=sql_store,
),
steps=(
ParseDocuments(...),
SplitDocuments(...),
EmbedChunks(...),
IndexVectors(...),
*HetaGraphProcedure.build().steps(),
),
)
Responsibilities
KnowledgeRecipe 负责保存构建方案,并在构建前做静态检查。
它会处理:
| 能力 | 说明 |
|---|---|
| Components | 保存 parser、model、store 等 runtime components。 |
| Steps | 保存有序 build steps。 |
| Procedures | 展开可复用的 step composition。 |
| Component refs | 根据 ComponentRef 找到 recipe 中声明的 runtime component。 |
| Static validation | 检查 step 顺序、依赖和产出是否自洽。 |
| Manifest | 导出 recipe 的静态描述。 |
它不会处理:
| 不负责的内容 | 原因 |
|---|---|
| 执行 steps | 执行由 KnowledgeBaseBuilder 负责。 |
| 记录运行状态 | 运行状态属于 builder / KB runtime metadata。 |
| 连接存储后端 | Recipe 只持有 runtime object,不主动访问后端。 |
| 调用模型 | 模型调用发生在具体 step 或 query engine 中。 |
Components
Recipe 持有 Heta 构建过程中会用到的 components:
recipe = KnowledgeRecipe(
parsers=KnowledgeParsers(documents=parser_registry),
models=KnowledgeModels(language=llm, embedding=embedding),
stores=KnowledgeStores(objects=object_store, vector=vector_store, sql=sql_store),
steps=(...),
)
Steps 不直接按变量名查找对象,而是通过 ComponentRef 声明依赖:
这样 step 只关心自己需要什么能力,recipe 负责把引用解析到真实 runtime object。
Steps And Procedures
steps 是构建顺序。Heta 不会自动重排 steps,因此顺序本身就是 recipe 的一部分。
steps=(
ParseDocuments(),
SplitDocuments(),
EmbedChunks(),
IndexVectors(),
*HetaGraphProcedure.build().steps(),
)
每个 step 会声明:
| 声明 | 用途 |
|---|---|
requirements |
这个 step 运行前需要哪些 artifacts、queries 或 components。 |
capabilities |
这个 step 运行后会产出哪些 artifacts、search assets 或 query modes。 |
Procedure 是一组可复用 steps。Recipe 在校验和执行前都会展开 procedure,最终仍然按真实 step 列表运行。
Static Validation
Recipe 层只做静态逻辑检查:
当前检查包括:
- procedure 是否能展开。
- step 需要的 component refs 是否已经在 recipe 中声明。
- step 需要的 artifacts 是否由前序 steps 或
initial_artifacts提供。 - step 需要的 query modes 是否由前序 steps 或
initial_queries提供。 - 多个 steps 输出同名 artifact 时是否可疑。
Recipe 不检查运行时状态:
ObjectStorekey 是否真实存在。- SQL / Vector / Text index 后端是否可连接。
- 模型 API key 是否有效。
- LLM 输出是否符合预期。
这类问题只能在运行时由 builder、step 或 query engine 处理。
Manifest
KnowledgeRecipe.manifest() 会导出 recipe 的静态结构:
Manifest 适合用于审计、展示和恢复构建说明。它不会完整序列化模型 client、SQL engine、Milvus client 等 runtime objects,也不会保存 API key 或数据库连接。