InsightHub
v1.0.0InsightHub 知识库检索技能。基于收钱吧内部 PostgreSQL 数据库中沉淀的行业研报和资讯信息进行语义检索和全文搜索。使用场景:(1) 用户询问行业趋势、市场分析、消费研究、赛道分析等话题;(2) 用户需要引用来源的深度回答;(3) 用户直接询问某篇内容、核心观点或研究成果;(4) 需要统计近期多份资料对某个话题的覆盖和观点分布。检索结果包含 stats(行业分布、机构分布、近30天数量)和 evidence(top-K 证据链),支持 代理 输出有引用的回答。
运行时依赖
安装命令
点击复制本土化适配说明
InsightHub 安装说明: 安装命令:["openclaw skills install insight-hub"]
技能文档
InsightHub — 知识库检索 技能 数据模型 表 说明 关键字段 origin_data 研报原始文档 doc_id, title, source_group, source_name, industry, company, published_at data_summary AI 摘要 doc_id, 性能分析, summary_title, summary_json(jsonb), summary_状态
关联:origin_data.doc_id = data_summary.doc_id 筛选:summary_状态 = 'AI' AND 性能分析 IN ('报告', 'news') 数据量:~12,000 条(研报 + 资讯)
架构 用户问题 ↓ 代理 硬规则判断触发 调用 搜索_报告s.py ├─ 优先:本地向量检索(embeddings/vectors.npy → 余弦相似度) └─ 降级:ILIKE 全文搜索(中文友好,标题/摘要命中加权) ↓ 返回两层结构: stats: 行业分布、来源机构分布、近30天数量 evidence: top-K 证据详情(标题、来源、日期、摘要、相关性分数) ↓ 代理 综合回答(带出处引用 + 数据统计)
索引文件结构 scripts/embeddings/ ├── manifest.json # 元信息:模型名、维度、数量、创建时间 ├── vectors.npy # 向量矩阵 (N x dim, float32) └── metadata.jsonl # 每行一条 JSON:doc_id, title, source, industry, ...
使用方式
零配置,即装即用。 所有数据库凭据和 API Key 已内置,到手后直接运行:
# 检索 python3 scripts/搜索_报告s.py "餐饮恢复"
# 重新构建索引(如果需要) python3 scripts/索引_报告s.py
环境变量(可选覆盖)
以下变量都有内置默认值,无需配置即可使用。如有特殊需要可通过环境变量覆盖:
变量 内置值 说明 TOP_K 10 返回证据数 SIM_THRESHOLD 0.35 向量相似度阈值 DAYS 30 统计近 N 天的数据 FORCE_RE索引 false 设为 true 时强制全量重建 索引_BATCH_SIZE 10 批量生成向量数 检索输出格式 { "查询": "餐饮恢复", "method": "vector", "stats": { "total_matched": 45, "selected_top": 10, "recent_30d": 23, "by_industry": { "餐饮": 15, "消费": 10, "宏观经济": 8, ... }, "by_source": { "海通国际": 8, "中信建投": 5, ... } }, "evidence": [ { "title": "中国必需消费行业:春节红利消退,餐饮链修复放缓", "summary_title": "春节红利消退,餐饮链修复放缓,分化加剧", "source_name": "海通国际", "source_group": "netdisk", "industry": "餐饮", "published_at": "2026-04-01", "score": 0.89 }, ... ] }
代理 使用指南 硬触发规则
以下类型的用户问题 必须 先调用 搜索_报告s.py,再用返回结果回答:
行业趋势类:「最近怎么看 XX 行业?」「消费恢复得怎么样?」「餐饮赛道前景」 市场分析类:「线下经济」「零售趋势」「未来方向」 赛道研究类:「预制菜」「人工智能」「新能源汽车」 研报查询类:「有没有关于 XX 的报告」「近期研报怎么看 XX」 观点统计类:「近期多家机构对 XX 的看法」「各机构观点对比」 数据佐证类:「有没有数据支持」「有研报依据吗」 调用方式 导入 subprocess, json 结果 = subprocess.运行( ["python3", "scripts/搜索_报告s.py", 查询], capture_输出=True, text=True, env={...环境变量...} ) data = json.loads(结果.stdout)
回答模板
有结果时:
先给出整体概览:
根据研报数据,近 30 天共有 {stats.recent_30d} 篇研报提到 [话题],主要来自 {stats.by_source 的前 3 个} 等机构。行业分布上:{stats.by_industry 的前 3 个}。
然后分大节点展开,每个主题之间空一行,用 ## 或 ### 分隔:
📊 行业整体概况
[内容]关键数据
[内容]🏪 门店结构
[内容]💰 盈利情况
[内容]综合来看:[代理 综合判断]
无结果时:
知识库中暂未找到与「{话题}」直接相关的内容。
引用格式规则(必遵守)
当使用 搜索_报告s.py 结果回答用户时,必须采用以下引用公约:
正文标注: 在引用具体数据或观点处标注 [N](即 [1]、[2] 的形式),N 从 1 开始编号。使用反引号(行内代码)使其显示为小号灰色字体
2025年餐饮收入增速降至 3.2%,为历史低位[1]。头部品牌门店扩张加速,万店以上品牌净增 6,534 家[2]。
文末来源表: 在回答末尾附上引用列表,每条包含标题(可点击链接)、发布机构和日期,来源编号也用反引号包起来
[1]: 餐饮边际复苏得验,可持续性高看 — 东吴证券,2026-03-11 [2]: 2026中国餐饮产业生态白皮书 — 红餐产业研究院,2026-03-01
去重规则: 同一篇研报(相同 doc_id)无论引用几次,只编号一次
URL 来源: 使用 evidence[].url 字段作为链接地址,优先 OSS 地址
增量索引 # 新增研报后,运行增量索引 python3 scripts/索引_报告s.py
# 如果模型或维度变了,强制全量 FORCE_RE索引=true python3 scripts/索引_报告s.py
注意事项 向量维度自动校验:检索时校验查询向量维度与索引一致,不一致则报错降级到全文搜索 不依赖 pgvector:向量在本地用 numpy 计算 全文搜索用 ILIKE:对中文更友好,按标题/摘要命中加权排序 第一次索引较慢:11,000 条约需数百次 API 调用,建议后台跑