KnowHub 是一个 FastAPI 服务,提供知识图谱的存储、检索和管理能力。
基础地址由环境变量 KNOWHUB_API 控制,默认 http://localhost:8000。
FastAPI 自动生成的交互式文档:{KNOWHUB_API}/docs
| 字段 | 类型 | 说明 |
|---|---|---|
id |
string | 格式 knowledge-{date}-{hash},自动生成 |
task |
string | 任务描述(在什么情景下要完成什么目标) |
content |
string | 核心内容 |
types |
string[] | 类型标签:tool / strategy / case / experience |
tags |
object | 业务标签,如 {"project": "foo", "domain": "ai"} |
scopes |
string[] | 可见范围,默认 ["org:cybertogether"] |
owner |
string | 所有者,默认 agent:{agent_id} |
source |
object | {name, category, urls, agent_id, submitted_by, timestamp} |
eval |
object | {score(1-5), helpful, harmful, confidence} |
capability_ids |
string[] | 关联的能力 ID |
tool_ids |
string[] | 关联的工具 ID |
resource_ids |
string[] | 关联的资源 ID |
status |
string | pending / processing / dedup_passed / analyzing / approved / checked / rejected |
| 字段 | 类型 | 说明 |
|---|---|---|
id |
string | 格式 tools/{category}/{name},调用方指定 |
name |
string | 工具名称 |
version |
string | 版本号(可选) |
introduction |
string | 简介 |
tutorial |
string | 使用教程 |
input |
object/string | 输入格式描述 |
output |
object/string | 输出格式描述 |
status |
string | 默认 未接入 |
capability_ids |
string[] | 关联的能力 ID |
knowledge_ids |
string[] | 关联的知识 ID |
provider_ids |
string[] | 关联的提供方 ID |
| 字段 | 类型 | 说明 |
|---|---|---|
id |
string | 格式 CAP-XXX,调用方指定 |
name |
string | 能力名称 |
criterion |
string | 判断标准(何时认为该能力被满足) |
description |
string | 详细描述 |
requirement_ids |
string[] | 关联的需求 ID |
tool_ids |
string[] | 实现该能力的工具 ID |
implements |
object | {tool_id: description} 工具实现描述 |
knowledge_ids |
string[] | 关联的知识 ID |
| 字段 | 类型 | 说明 |
|---|---|---|
id |
string | 格式 REQ_XXX,调用方指定 |
description |
string | 需求描述 |
capability_ids |
string[] | 满足该需求的能力 ID |
knowledge_ids |
string[] | 关联的知识 ID |
source_nodes |
object[] | 分类树节点 [{id, score}] |
status |
string | 默认 未满足 |
match_result |
string | 匹配结果说明 |
| 字段 | 类型 | 说明 |
|---|---|---|
id |
string | 路径格式,如 docs/foo/bar |
title |
string | 标题 |
body |
string | 正文内容 |
secure_body |
string | 加密内容(AES256-GCM) |
content_type |
string | 默认 text |
metadata |
object | 自定义元数据 |
POST /api/knowledge/ask同步阻塞。触发 Librarian Agent 跨表检索 + LLM 整合,返回带引用的回答。
同一 trace_id 的多次调用复用同一个 Librarian trace,积累上下文。
// 请求
{
"query": "有没有工具能做角色一致性生成?",
"trace_id": "trace-abc123"
}
// 响应
{
"response": "根据知识库,ControlNet 可以...",
"source_ids": ["knowledge-20260101-abcd"],
"sources": []
}
POST /api/knowledge/upload → 202异步。校验后立即返回,后台 Librarian Agent 处理去重、关联、写草稿池。
// 请求
{
"data": {
"knowledge": [...],
"tools": [...],
"resources": [...]
},
"trace_id": "trace-abc123",
"finalize": false
}
// 响应 202
{
"message": "已接收 知识: 2 个,Librarian Agent 后台处理中",
"buffer_file": ".cache/.knowledge/buffer/upload_20260101_120000.json"
}
GET /api/knowledge/upload/pending列出所有未处理或失败的 upload 任务。
POST /api/knowledge/upload/retry重跑所有 status=failed 的 upload 任务。
GET /api/knowledge/search向量召回 + LLM 精排。
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
q |
string | 必填 | 查询文本 |
top_k |
int | 5 | 返回条数(1-20) |
min_score |
int | 3 | 最低评分过滤(1-5) |
types |
string | - | 逗号分隔,如 tool,case |
owner |
string | - | 逗号分隔,过滤 owner |
// 响应
{
"results": [{"id": "...", "task": "...", "content": "...", "score": 0.92, ...}],
"count": 3
}
POST /api/knowledge → 201创建知识,进入 pending 状态,自动触发去重流水线。
{
"task": "使用 ControlNet 进行姿态控制",
"content": "...",
"types": ["tool"],
"tags": {"project": "image_gen"},
"source": {"agent_id": "research_agent", "category": "research"},
"eval": {"score": 4}
}
// 响应: {"status": "pending", "knowledge_id": "knowledge-20260101-abcd"}
GET /api/knowledge列出知识,支持分页和过滤。
| 参数 | 说明 |
|---|---|
page / page_size |
分页,默认 1/20 |
types |
逗号分隔类型过滤 |
scopes |
逗号分隔范围过滤 |
owner |
owner 过滤 |
tags |
JSON 字符串,如 {"project":"foo"} |
status |
状态过滤 |
GET /api/knowledge/{knowledge_id}获取单条知识详情。
GET /api/knowledge/status/{knowledge_id}查询知识处理状态(pending / approved 等)。
PUT /api/knowledge/{knowledge_id}更新知识评估,支持知识进化(LLM 重写 content)。
{
"update_score": 5,
"add_helpful_case": {"context": "...", "result": "success"},
"add_harmful_case": null,
"evolve_feedback": "内容需要补充 batch 处理的情况"
}
PATCH /api/knowledge/{knowledge_id}直接编辑字段(task、content、types、tags、scopes、owner、capability_ids、tool_ids)。
DELETE /api/knowledge/{knowledge_id}删除单条知识(级联清理关联表)。
POST /api/knowledge/batch_delete批量删除。请求体为 ["knowledge-xxx", "knowledge-yyy"]。
POST /api/knowledge/{knowledge_id}/verify// approve:approved ↔ checked 切换;reject:→ rejected
{"action": "approve", "verified_by": "howard"}
POST /api/knowledge/batch_verify{"knowledge_ids": ["knowledge-xxx"], "action": "approve", "verified_by": "howard"}
GET /api/knowledge/pending查询处理队列(pending / processing / dedup_passed / analyzing)。
POST /api/knowledge/process手动触发去重处理。force=true 时先回滚所有超时锁。
GET /api/knowledge/meta/tags获取所有已使用的 tag keys。
POST /api/knowledge/slim知识库瘦身:LLM 分析全库,合并语义相似条目。
可选参数 model,默认 google/gemini-2.5-flash-lite。
POST /api/knowledge/batch_update批量反馈知识有效性。
POST /api/extract从消息历史中 LLM 提取知识并入库。
{
"messages": [{"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}],
"agent_id": "research_agent",
"submitted_by": "howard@example.com",
"session_key": ""
}
POST /api/tool → 201创建或更新工具(id 相同则覆盖,同时全量替换关联表)。
{
"id": "tools/image/controlnet",
"name": "ControlNet",
"introduction": "基于条件控制的图像生成工具",
"tutorial": "...",
"status": "已接入",
"capability_ids": ["CAP-001"],
"knowledge_ids": ["knowledge-20260101-abcd"]
}
GET /api/tool列出工具。参数:status、limit(默认100)、offset。
GET /api/tool/search?q=...&top_k=5向量检索工具。
GET /api/tool/{tool_id}获取单个工具详情(含关联的 capability_ids、knowledge_ids)。
PATCH /api/tool/{tool_id}部分更新工具字段。
DELETE /api/tool/{tool_id}删除工具(级联清理关联表)。
POST /api/capability → 201创建或更新原子能力。
{
"id": "CAP-001",
"name": "人物姿态控制生成",
"criterion": "能根据骨骼图生成指定姿态的人物图像",
"description": "...",
"tool_ids": ["tools/image/controlnet"],
"implements": {"tools/image/controlnet": "使用 openpose 模型控制姿态"}
}
GET /api/capability列出所有能力。参数:limit、offset。
GET /api/capability/search?q=...&top_k=5向量检索能力。
GET /api/capability/{cap_id}获取单个能力详情。
PATCH /api/capability/{cap_id}部分更新能力字段。
DELETE /api/capability/{cap_id}删除能力(级联清理关联表)。
POST /api/requirement → 201创建或更新需求。
{
"id": "REQ_001",
"description": "需要能生成角色一致的多视角图像",
"capability_ids": ["CAP-001"],
"source_nodes": [{"id": "image_generation", "score": 0.9}],
"status": "已满足"
}
GET /api/requirement列出需求。参数:status、limit、offset。
GET /api/requirement/search?q=...&top_k=5向量检索需求。
GET /api/requirement/{req_id}获取单个需求详情。
PATCH /api/requirement/{req_id}部分更新需求字段。
DELETE /api/requirement/{req_id}删除需求(级联清理关联表)。
Resource 存储原始资料文档,通过 knowledge_resource 关联表与 Knowledge 关联。
POST /api/resource → 201创建或更新资源。
GET /api/resource列出资源(树形结构)。
GET /api/resource/{resource_id}获取单个资源(含 toc、children、prev/next 导航)。
PATCH /api/resource/{resource_id}部分更新资源字段。
DELETE /api/resource/{resource_id}删除资源。
所有实体间的关系通过 junction table 维护,写入时全量替换(DELETE + INSERT):
| 关联表 | 连接 |
|---|---|
capability_tool |
Capability ↔ Tool |
capability_knowledge |
Capability ↔ Knowledge |
requirement_capability |
Requirement ↔ Capability |
requirement_knowledge |
Requirement ↔ Knowledge |
tool_knowledge |
Tool ↔ Knowledge |
tool_provider |
Tool ↔ Provider |
knowledge_resource |
Knowledge ↔ Resource |
knowledge_relation |
Knowledge → Knowledge(supplement/duplicate) |
查询任意实体时,关联 ID 通过子查询自动聚合返回(capability_ids、tool_ids 等字段)。