Install
openclaw skills install @myd2002/kb-web-queryAnswer Research KB dialogue questions with team-overview-guided web search, external citations, optional reference attachments, and no QA persistence.
openclaw skills install @myd2002/kb-web-querykb_web_query 用于“对话”页面中用户主动开启“联网搜索”的问答模式。它不是普通网页搜索聊天,也不是严格知识库问答;它必须先读取团队知识库 overview/ 下六个团队级页面,理解团队当前研究方向、项目状态、资料覆盖、开放问题和整理路线,再根据用户问题进行更定向的联网搜索,最后把外部资料转化成贴合团队实际情况的回答。
本 skill 不写入知识库正文,不创建或更新 qa/,不做资料源入库,也不把外部网页内容沉淀为长期团队结论。Java 后端负责登录、会话、附件上传和调度;OpenClaw 负责理解团队上下文、规划搜索、调用可用的 web/search/browser 工具、阅读外部资料、综合回答并列清来源;Python 脚本只负责读取 overview 上下文、读取可选 KB 补充页、校验答案来源、补齐参考来源格式并写出后端 result JSON。
后端 payload 通常包含:
skill: kb_web_query。question: 用户问题。webSearch: true。conversationId、messageId、conversationHistory。attachments[]: 本轮临时参考附件。answerPolicy.allowExternalWebSources: true。answerPolicy.teamOverviewGuidedSearch: true。answerPolicy.writeHighValueAnswerToQa: false。payloadFile、resultFile、sharedDir。运行环境沿用 Research KB 配置:GITEA_URL、GITEA_BOT_TOKEN、GITEA_BOT_USERNAME、GITEA_ORG、TEAM_KB_REPO、OPENCLAW_SHARED_DIR。联网搜索优先使用 OpenClaw 原生 web_search、web_fetch、browser;如果 web_search 未配置,可用 web_fetch、browser 或小型 HTTP/API fallback。若配置 Tavily,可使用 TAVILY_API_KEY 或 OpenClaw 的 Tavily plugin。
python3 scripts/run_task.py prepare --input <payload.json> --context-output <context.json>
prepare 会读取 overview/team-overview.md、overview/research-map.md、overview/recent-updates.md、overview/source-summary.md、overview/open-questions.md、overview/roadmap.md,并输出 teamContext.overviewPages。OpenClaw 必须先阅读这些内容,形成团队画像:团队在做什么、已有资料覆盖什么、当前缺口和开放问题是什么、路线图倾向是什么。
OpenClaw 根据用户问题和团队画像构造搜索策略。搜索应优先使用权威来源:论文、官方文档、标准、厂商技术文档、可信报告、项目官网或重要开源仓库。不要只搜索泛泛关键词;应把团队关注方向、技术栈、开放问题或项目阶段转化为限定词。
可用工具示例:
web_search("...")
web_fetch("https://...")
browser 打开并阅读动态页面
如果 web_search 不可用,可以用 web_fetch 访问公开搜索/API 页面、arXiv API、官方站点搜索页,或用 Python/Node HTTP 请求做最小 fallback。不要编造搜索结果或引用。
如果 overview 不足以理解团队问题,或回答中需要把其他 KB 页面列入 teamSources,必须写一个紧凑的 <page-selection.json>,再读取少量补充 KB 页面:
python3 scripts/run_task.py fetch --input <payload.json> --context <context.json> --selection <page-selection.json> --evidence-output <evidence.json>
如果不需要补充页面,也要用空选择运行 fetch:
{"selectedPages":[],"rationale":"overview pages are sufficient for team context","unresolvedQuestions":[]}
<answer.json>。answer.json 必须是严格合法 JSON,长 Markdown 答案建议用 json.dump/json.dumps 写出。必须包含外部来源,不得伪造引用。
{
"answer": "完整中文回答。必须说明外部信息如何贴合团队当前状况,结尾可以已有参考来源。",
"teamSources": [
{"path": "overview/research-map.md", "title": "研究方向地图", "role": "用于判断团队关注方向"}
],
"webSources": [
{
"sourceType": "paper",
"title": "Paper or Page Title",
"url": "https://example.com/item",
"publisher": "arXiv / official docs / vendor / report publisher",
"authors": ["optional"],
"publishedAt": "2026 or exact date if available",
"accessedAt": "2026-07-09T00:00:00Z",
"snippet": "可选,说明该来源支撑了什么"
}
],
"usedSearchQueries": ["query 1", "query 2"],
"usedAttachments": [],
"highValue": false,
"qa": {"write": false},
"errors": []
}
python3 scripts/run_task.py apply --input <payload.json> --context <context.json> --evidence <evidence.json> --answer <answer.json>
apply 会补齐 ## 参考来源,分为“团队上下文”和“外部资料”,然后写出后端 result JSON。它只把六个 overview 页面或本轮 fetch 实际读取的补充 KB 页面作为可展示 teamSources,不合规的团队来源会被过滤并记录到 errors/skippedSources,不应导致已生成答案丢失;它只接受 http/https 外部链接作为 webSources,不会写入 qa/,也不会改动 Gitea 页面。
{"success": true, "resultFile": "<result.json>"}
回答必须以用户问题为中心,但要体现团队上下文的定向作用。例如不要只说“业界常见做法是……”,而应说明“结合团队当前 KB 中体现出的研究方向/资料缺口/工程阶段,外部资料更支持优先关注……”。
必须区分两类依据:
overview/ 或少量补充 KB 页面,用来判断用户所在团队的实际情况和搜索方向。如果搜索不到可核验外部来源,应明确说明本轮没有找到可靠外部来源,不要编造网站、论文、发布时间或链接。
答案末尾必须包含:
## 参考来源
### 团队上下文
- 团队总览 (`overview/team-overview.md`)
### 外部资料
- [paper] [Paper Title](https://...) — publisher; date; accessedAt
qa/ 或任何 KB 页面;后端也会防御性忽略联网模式返回的 QA 路径和页面写回字段。