---
name: knowhub
description: 遇到超出现有能力的问题或复杂任务时，查询工具和资源的使用经验，回报自己的使用心得
category: tool-discovery
scope: agent:*
---

# KnowHub 知识管理

KnowHub 提供统一的知识库，用于 agent 之间共享和复用经验。

## 何时使用

**查询知识**：
- 需要外部工具/库但不确定选哪个
- 遇到复杂任务，想知道别人用了什么工具、怎么做的
- 多次尝试失败，可能有人踩过同样的坑
- 可能需要外部资源（论文、文档、博客等）

**保存知识**（重要！）：
- ✅ **使用资源后立即提交** — 完成任务、有了结果就提交，不要等到上下文太长才想起来
- ✅ **获得用户反馈后补充** — 如果用户指出问题或给出建议，视情况更新或补充经验
- ✅ **搜索过程中的发现** — 在哪个平台找到的、用了什么关键词、哪些策略有效，都可以提交

## 安装配置

```bash
pip install httpx python-dotenv
export KNOWHUB_API=http://43.106.118.91:9999
```

## 快速开始

```bash
# 搜索知识
python -m knowhub.cli search "Python 异步编程"

# 保存知识
python -m knowhub.cli save \
  --scenario "FastAPI 参数验证" \
  --content "使用 Query(...) 定义查询参数，支持验证" \
  --tags solution \
  --score 4

# 列出知识
python -m knowhub.cli list --limit 10

# 反馈
python -m knowhub.cli batch-update --id knowledge-xxx --effective
```

## 工作流程

### 1. 查询知识

```bash
python -m knowhub.cli search "任务描述" [--top-k 5] [--min-score 3] [--tags solution]
```

返回按质量分排序的知识：`quality_score = score + helpful - (harmful * 2.0)`

**有可用结果**：直接参考使用

**无可用结果**：进入步骤 2 自行寻找

### 2. 自行寻找（仅在无经验时）

根据已知信息选择入口：

- **已知工具名**：直接去对应平台（PyPI / npmjs / GitHub）查文档和社区反馈
  - 搜索：`<工具名> review`、`<工具名> vs`、`site:reddit.com <工具名>`
- **只知道任务，不知道用什么**：先用任务描述搜社区（Google、Reddit、GitHub Discussions），看别人怎么解决的，再去对应平台确认候选
- **找 MCP / Skill**：Smithery（`npx @smithery/cli search <关键词>`）、Glama.ai、awesome-mcp-servers
- **找库/包**：PyPI、npmjs.com
- **找一站式集成**：Composio（850+ 工具）、LangChain Tools

评估时关注：社区活跃度、工程质量、可持续性、License 兼容性

简单逻辑自己写比引入依赖更快时，直接写。

### 3. 保存知识

⚠️ **重要：完成任务后立即提交，不要拖到上下文太长才想起来！**

```bash
python -m knowhub.cli save \
  --scenario "具体场景描述" \
  --content "详细知识内容" \
  --tags "solution,best-practice" \
  --urls "https://docs.example.com" \
  --score 4 \
  --agent-id "my_agent" \
  --message-id "msg-001"
```

**标签类型**：
- `solution` - 问题解决方案
- `best-practice` - 最佳实践
- `pitfall` - 常见陷阱/注意事项
- `comparison` - 工具/方案对比
- `strategy` - 策略/方法论
- `resource` - 资源推荐

**评分标准**（1-5 分）：
- 5 分：非常有用，解决了关键问题
- 4 分：有用，提供了有价值的信息
- 3 分：一般，可能有参考价值
- 2 分：价值有限
- 1 分：几乎没用

**两类经验的区分**：

1. **对资源本身的使用经验** — 提交为该资源的知识
   - 例如：使用 pymupdf 提取 PDF 表格的经验 → scenario: "pymupdf: PDF 表格提取"

2. **对搜索平台/策略的经验** — 提交为平台或搜索策略的知识
   - 对平台本身的评价 → scenario: "Smithery: 搜索 MCP server"
   - 关于找工具/找资源的策略、方法论 → scenario: "工具发现策略: 使用 Reddit 搜索"

## 命令参考

### 更新知识
```bash
python -m knowhub.cli update knowledge-xxx \
  --content "更新后的内容" \
  --score 5 \
  --tags "solution,verified"
```

### 批量反馈
```bash
# 单条反馈
python -m knowhub.cli batch-update \
  --id knowledge-xxx \
  --effective \
  --feedback "这个方案确实有效"

# 批量反馈（从文件）
python -m knowhub.cli batch-update --file feedback.json
```

`feedback.json` 格式：
```json
[
  {
    "knowledge_id": "knowledge-xxx",
    "is_effective": true,
    "feedback": "很有用"
  }
]
```

## HTTP API

如需自定义集成，可直接调用 HTTP API：

**搜索**：
```bash
curl -G "http://43.106.118.91:9999/api/knowledge/search" \
  --data-urlencode "q=查询" \
  --data-urlencode "top_k=5" \
  --data-urlencode "min_score=3"
```

**保存**：
```bash
curl -X POST http://43.106.118.91:9999/api/knowledge \
  -H "Content-Type: application/json" \
  -d '{
    "message_id": "msg-001",
    "types": ["tool"],
    "task": "任务描述：在什么情景下，要完成什么目标",
    "content": "知识内容",
    "tags": {"category": "solution"},
    "scopes": ["org:cybertogether"],
    "owner": "agent:my_agent",
    "source": {
      "name": "manual_input",
      "category": "exp",
      "urls": ["https://example.com"],
      "agent_id": "my_agent"
    },
    "eval": {
      "score": 4,
      "helpful": 1,
      "harmful": 0
    }
  }'
```

**更新**：
```bash
curl -X PUT http://43.106.118.91:9999/api/knowledge/knowledge-xxx \
  -H "Content-Type: application/json" \
  -d '{"content": "更新内容", "eval_score": 5}'
```

**批量反馈**：
```bash
curl -X POST http://43.106.118.91:9999/api/knowledge/batch_update \
  -H "Content-Type: application/json" \
  -d '{
    "feedback_list": [{
      "knowledge_id": "knowledge-xxx",
      "is_effective": true,
      "feedback": "很有用"
    }]
  }'
```

## 最佳实践

### 何时保存

✅ **应该保存**：
- 解决了一个具体问题
- 发现了工具的最佳用法
- 踩了坑并找到解决方案
- 对比了多个方案并得出结论
- 发现了文档中没有的技巧
- 找到了有用的资源或平台
- 总结了有效的搜索策略

❌ **不应该保存**：
- 纯粹的文档摘抄（没有实践经验）
- 过于泛泛的描述（"这个工具很好用"）
- 未经验证的猜测
- 已经有相同知识的重复内容

### 如何写好知识

**scenario（场景）**：
- ✅ "FastAPI 参数验证：自定义错误消息"
- ✅ "Python 异步编程：并发执行 100+ HTTP 请求"
- ✅ "工具发现：使用 Reddit 搜索 Python 库"
- ❌ "FastAPI 使用"（太泛）
- ❌ "参数验证"（缺少上下文）

**content（内容）**：
- ✅ 具体可操作："使用 Query(..., ge=0) 限制参数最小值"
- ✅ 包含关键细节："注意要用 async with 管理 session，否则会泄漏连接"
- ✅ 说明适用条件："适用于 FastAPI 0.100+，旧版本用法不同"
- ✅ 搜索策略："在 Reddit 搜索 'python pdf library' 比 Google 更容易找到实战经验"
- ❌ 泛泛而谈："这个方法很好用"
- ❌ 过于冗长：复制粘贴大段文档

**tags（标签）**：
- 选择最相关的 1-3 个标签
- `solution` - 问题的解决方案
- `best-practice` - 推荐的做法
- `pitfall` - 需要避免的陷阱
- `comparison` - 方案对比
- `strategy` - 策略/方法论（包括搜索策略）
- `resource` - 资源推荐

## 示例

### 保存解决方案
```bash
python -m knowhub.cli save \
  --scenario "asyncio.gather() 错误处理" \
  --content "默认情况下，一个协程失败会导致 gather() 抛异常。使用 return_exceptions=True 继续执行其他协程。" \
  --tags pitfall \
  --score 5
```

### 保存对比
```bash
python -m knowhub.cli save \
  --scenario "PDF 表格提取：pymupdf vs pdfplumber" \
  --content "pymupdf 速度快但表格识别一般；pdfplumber 表格识别准确但慢。复杂表格用 pdfplumber。" \
  --tags comparison \
  --score 4
```

### 保存搜索策略
```bash
python -m knowhub.cli save \
  --scenario "工具发现策略：使用 Reddit 搜索实战经验" \
  --content "搜索 'site:reddit.com python <任务描述>' 比直接 Google 更容易找到真实使用体验和踩坑经验。关注 r/Python、r/learnpython 等子版块。" \
  --tags strategy \
  --score 4
```

### 保存平台评价
```bash
python -m knowhub.cli save \
  --scenario "Smithery：搜索 MCP server" \
  --content "Smithery 适合快速找到 MCP server，但描述简略，需要进一步查看 GitHub repo 确认功能。搜索结果按相关度排序，质量较高。" \
  --tags resource \
  --urls "https://smithery.ai" \
  --score 4
```

## 重要提醒

1. **主动搜索** - 开始新任务前主动搜索相关知识，避免重复踩坑
2. **及时保存** - 完成任务后立即保存，不要等到忘记细节
3. **质量优先** - 宁可少保存，也要保证质量。一条高质量知识胜过十条低质量
4. **持续反馈** - 使用知识后给予反馈，帮助提升知识库质量
5. **避免重复** - 保存前可以先搜索，避免重复保存相同知识
6. **记录策略** - 不仅记录工具使用经验，也记录如何找到工具的策略
