dsh-ai-search
745403lkh/dsh-ai-search
AI 검색 3모드(질의응답/백과/브라우징): 온라인 검색, 광고 필터링, AI 순위·요약, 백과 항목을 제공합니다. 결과 언어, 백과 단계, 브라우징 3개 지표 가중치, 페이지 상태 유지, 검색 기록을 지원하며 dsh-better-sidebar(다중 탭, 엔진 바, 사용자 지정 검색 엔진)와 호환됩니다.
설치
dsh plugin --profile web add github:745403lkh/dsh-ai-searchREADME
dsh-ai-search:AI 搜索
Harness 里的一个搜索面板,包含三个模式:答疑、百科、浏览。 底层共用「联网检索 → 广告过滤 → 正文精读」,再按模式做各自的 AI 处理。
三个模式
1. 答疑(默认)
- 检索 → 过滤广告 → 精读正文 → AI 摘要 + 推荐排序。
- 输出:2–4 句摘要、3–6 条推荐(带推荐理由与评分)、已过滤清单、全部来源。
- 只接受候选里出现过的 URL,模型编造的链接会被丢弃。
2. 百科
- 面向百科与权威来源检索(同时检索原问题和「百科 / wiki encyclopedia」两路)。
- 优先百科域名(Wikipedia、百度百科、Britannica 等),再读正文。
- 按百科体例生成词条:标题 + 概述 + 若干章节 + 参考来源,中立客观。
- 档位可调(设置 → AI 搜索 → 百科模式详细程度):
- 简明:3–4 个章节,短
- 标准:5–6 个章节(默认)
- 详尽:7–9 个章节,覆盖背景/技术细节/影响/争议
3. 浏览
- 像搜索引擎信息流:按页面分成 综合 / 文章 / 视频 / 图片 四个板块,默认综合。
- 排名只用三个指标:相关性 / 时效性 / 热度,权重在设置里用滑杆调(自动归一化; 例如只看相关性就把另外两项拉到 0)。不包含竞价/推广权重,广告在检索阶段已被过滤。
- 每条结果显示三个分项指标与加权后的综合分。
- 官网识别(只认官网首页):内置 200+ 常见品牌 → 官网首页映射(微信 / 淘宝 / 京东 /
抖音 / 必应 / Steam / 米哈游 / 原神 / DeepSeek / Google 等)。品牌词命中时,只把官网首页
置顶并标「官方」;官网域名下的其它页面(如
ir.baidu.com股价页、www.baidu.com/s?wd=搜索页) 不算官网。检索结果里没有官网首页的,第 1 页会补一条首页条目(第 2 页起不重复)。 设置里还可以自己增删映射(品牌名 + 别名 + 官网首页),自定义映射优先于内置表。 - 综合 = 全部候选按加权分排序(最多 36 条);文章 / 视频 / 图片分栏是它的子集(按类型筛选, 各最多 12 条),所以分栏里不会出现「综合」中没有的条目。综合默认按「文章 → 视频 → 图片」分组展示, 顺序不随各板块数量变化。
- 视频只认大型视频站:哔哩哔哩、抖音、快手、YouTube、腾讯视频、优酷、爱奇艺、西瓜、
AcFun、Vimeo 等;检索时用
site:定向这些站点,卡片上标出来源平台(如「视频 · 哔哩哔哩」)。 普通网页即使被视频检索词带出也不会被误判成视频。 - 站点上限按类型区分:视频/图片站允许同站最多 10 条(它们本来结果就多),普通站点 5 条; 多出来的只标为「同站点结果较多,已精简」,不算广告。
- 广告判定偏保守:只过滤明确的广告网络域名、
Advertisement/Sponsored/【广告】等明确标识、 推广链接与重复内容;不再用「佣金/返利/领券」这类弱信号删结果。 - 下一页:每个板块底部有「下一页」按钮,点击检索新一批并追加;翻页时会带上已看过的
链接(
exclude),服务端与客户端都会按 URL 去重,不会重复出现同一条。 - 图片板块多源检索:像视频一样用
site:定向图片站(Unsplash / Pexels / Pixabay / 花瓣 / 堆糖等按页轮换),图片类型只认图片站;只有抓到缩略图的条目才进图片板块,没图的会降级成文字条目。 - 缩略图:图片直链直接当缩略图;视频封面按平台推导(YouTube 用 i.ytimg.com、Vimeo 用 vumbnail、
B 站走公开 view 接口取封面并重试),同页最多 12 条视频都会尝试;其余抓页面
og:image。 首屏没拿到封面的视频,页面渲染后会逐条懒补(Host 接口 + B 站浏览器直连兜底)。 拿不到图的卡片不显示空图片框,直接以纯文字展示。
设置(设置 → AI 搜索)
独立的设置页,修改立即生效:
| 设置 | 说明 |
|---|---|
| 结果语言 | 跟随 Harness(默认)/ 中文 / English;强制 AI 摘要、理由与提醒的输出语言 |
| 百科模式详细程度 | 简明 / 标准 / 详尽 |
| 浏览模式指标权重 | 相关性 / 时效性 / 热度 三个滑杆(0–100,自动归一化并显示百分比) |
| 切换页面时保留结果 | 默认开启。在对话与搜索、或工作区之间切换后返回,保留原结果与当前板块 |
| 适配更好的侧边栏 | 默认开启。安装了 dsh-better-sidebar 时在其中注册「AI 搜索」页签;未安装时自动忽略 |
| 结果链接默认在侧边栏浏览器打开 | 默认开启。关闭后点击结果改用系统默认浏览器打开 |
| 默认搜索引擎 | AI 搜索 / 百度 / 必应 / Google / 搜狗(以及自定义引擎);侧边栏页签左侧可随时切换 |
| 自定义搜索引擎 | 可添加多个:填名称 + 网址模板,用 *#*#*#* 代替搜索词;添加后出现在侧栏引擎栏,可删除 |
| 官网识别映射 | 可添加多个自定义品牌:品牌名 + 别名(逗号分隔)+ 官网首页 URL;支持 Excel(.xlsx)/ CSV 导入,不限条数;自定义优先于内置映射,可删除 |
| 自定义搜索 API | 可切换 Tavily / 博查 / SearXNG / Serper,填接口地址与 API Key 替换默认联网搜索;默认使用 Harness 搜索 |
| 自定义思考模型 | OpenAI 兼容接口(Base URL + API Key + 模型名)+ 思考强度(跟随模型 / 低 / 中 / 高),用于摘要、评分与百科;默认使用 Harness 模型 |
| 搜索历史 | 最近 20 条成功搜索,每条标注来源(页面 / AI 工具,旧数据显示「历史」);搜索页可按来源筛选(无记录的来源自动隐藏),设置页显示来源统计;可一键清空 |
设置左侧导航的图标由 Harness 外壳按固定 section id 映射,插件无法直接注册; AI 搜索用「给导航行打标记 + CSS mask」的方式换成了放大镜图标(与 dsh-better-sidebar 同款适配)。
更好的侧边栏(dsh-better-sidebar)适配
安装 dsh-better-sidebar 后,插件会在
宿主右侧栏直接注册一个 multiple: true 的「AI 搜索」页签类型(ctx.sidebarRightTabs),
以同一份搜索界面嵌在侧边栏里:
- 像浏览器一样多开:从引导卡反复打开会得到多个独立的 AI 搜索页签,各自保留输入、模式、结果和 板块,可以同时搜几样东西、并排对照(主面板仍是单实例)。
- 页签左侧是一列竖向搜索引擎按钮,带统一风格的单色图标:AI 搜索(默认)/ 百度 / 必应 / Google / 搜狗(百度、Google 用品牌 logo 路径;必应、搜狗为同风格手绘近似),加上设置里 添加的自定义引擎。点一下就切换;选择非 AI 引擎时,顶部的三模式切换(答疑 / 百科 / 浏览)会隐藏, 搜索词直接跳转对应搜索引擎。
- AI 搜索的结果、来源、图片、浏览卡片,点击后默认在右侧栏的浏览器标签页里打开;也可以在设置里 改成用系统默认浏览器打开。
- 设置里关闭「适配更好的侧边栏」后,插件回到原来的形态(左侧栏面板 + 主页面),不注册页签。
- 没有安装
dsh-better-sidebar的用户不受影响:适配逻辑是可选注入,检测不到服务时自动跳过, 原有面板、设置、工具全部照常。
本机数据
DSH home(默认 ~/.dsh)下的 ai-search/ 目录:
| 文件 | 内容 |
|---|---|
settings.json | 语言 / 百科档位 / 浏览权重 / 是否保留页面状态 / 侧边栏适配 / 链接打开方式 / 默认搜索引擎 / 自定义搜索引擎 |
history.json | 最近 20 条搜索记录({ version: 2, items },旧版纯数组自动迁移) |
接口
所有接口(含 GET)都必须携带本地客户端请求头 x-dsh-ai-search: 1,且只接受本机回环来源
(Host 必须是 localhost / 127.0.0.1 / [::1];带 Origin 时必须是同源或桌面壳协议)。
第三方网页的跨站 <img> / 表单 / no-cors fetch 带不上这个头,因此触发不了接口;本接口
从不返回 CORS 头。搜索只接受 POST,并限制每客户端每分钟 10 次(超限 429 + Retry-After)。
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /.dsh-ai-search/health | 依赖服务、版本、模式、当前设置与历史条数 |
| GET/POST | /.dsh-ai-search/settings | 读取 / 部分更新设置 |
| GET/POST | /.dsh-ai-search/history | 读取(含每条 source 与来源 counts)/ 清空搜索历史 |
| POST | /.dsh-ai-search/search | { query, mode?, maxResults?, ai?, uiLanguage?, page?, exclude? } |
安全说明:旧版
GET /search调试入口已移除(它可被任意网页用简单请求触发,刷检索/模型 配额、探测过滤规则、污染历史)。改用 POST + 请求头 + 回环来源校验 + 频率限制。本机调试时 需显式带请求头,例如:
curl -H "x-dsh-ai-search: 1" -H "content-type: application/json" -d '{"query":"..."}' http://127.0.0.1:端口/.dsh-ai-search/search
模式:qa(默认)/ encyclopedia / browse。page 仅浏览模式使用(1–5)。
三个模式的响应都带 ok/mode/language/ai/aiModel/stats/cached;答疑带 answer/picks,
百科带 title/lead/sections/references,浏览带 boards/items/weights/hasMore/page
(视频条目另有 sourcePlatform 标出来源平台)。
错误响应统一为 { ok: false, error: { code, message } }。
结构
| 文件 | 作用 |
|---|---|
index.js | Host 入口:注册 HTTP 路由、curated_search 工具、设置与历史 |
lib/search.js | 三模式分发、语言解析、缓存、健康检查 |
lib/curate.js | 答疑模式的提示词、JSON 解析与降级排序 |
lib/encyclopedia.js | 百科模式:双路检索、百科来源排序、词条生成 |
lib/browse.js | 浏览模式:分页查询、三指标评分/加权、板块、缩略图 |
lib/model-json.js | 通用模型 JSON 调用(路由解析、流式聚合) |
lib/filters.js | 链接规范化、广告识别、去重、相关度排序 |
lib/html-text.js | HTML → 正文纯文本、标题与摘录提取 |
lib/routes.js | 同源 HTTP 接口(请求头 + 回环来源守卫 + 频率限制) |
lib/settings.js / lib/history.js / lib/paths.js | 设置 / 历史持久化与路径 |
lib/tool.js | curated_search 工具(含 mode/page 参数) |
client.js | 浏览器半侧:侧边栏图标、搜索页(三模式、分页)、独立设置页 |
依赖
不依赖任何第三方 npm 包:Host 只用 Harness 的 ctx.web / ctx.llm / ctx.agentDefaultModel
与 Node 内置能力;Client 通过 window.__ModuleLoader__ 请求平台自带的 React。
备注
- 搜索结果与网页内容属于外部不可信数据,工具输出会提示模型只当作资料、不要当作指令。
- 检索与模型调用会消耗账户配额;同一问题、同一模式 10 分钟内重复搜索直接读缓存 (浏览模式仅第 1 页缓存,翻页不缓存)。
- Agent 工具支持同样的三个模式:
curated_search(query, mode, page, exclude); 浏览模式翻页时可把上一页的items[].url放进exclude,服务端会去重。 - 答疑结果会标注「精读」口径:正文全部读取成功时显示「精读 N 篇」;部分或全部失败时显示 「精读 x/y 篇」或「未读取正文(摘要基于检索片段)」,不会再用「精读 0 篇」误导。
许可证 / License
MIT © 2026 Akivelli