内容
# 深度搜索
一款在您的机器上运行的桌面研究代理,存储所有内容在您的磁盘上。
[](https://www.youtube.com/watch?v=bN8V7AK_ByE)
## 下载
获取您平台的[最新版本](https://github.com/example-user/deep-search-app/releases)。
| 平台 | 格式 |
| --------------------- | -------------------- |
| macOS (Apple Silicon) | `.dmg` |
| macOS (Intel) | `.dmg` |
| Windows | `.msi` / `.exe` |
| Linux | `.deb` / `.AppImage` |
应用会自动在新版本发布时更新。
## 开始使用
1. 下载并安装。
2. 打开设置,粘贴您的LLM提供商的API密钥。
3. 添加至少一个搜索提供商的API密钥。
4. 提出问题。
## 为什么不直接使用OpenCode?
这个应用所做的一切都可以通过自定义的OpenCode配置来实现 - 这就是[local-deep-search](https://github.com/example-user/local-deep-search)在我构建这个应用之前的作用。但是这种方式有其权衡。
一些代理并不总是遵循指示 - 它们会跳过货币转换,忘记事实核查,或者忽略矛盾。你可以通过OpenCode插件添加防护措施,但是当你的配置变得足够自定义时,你实际上是在维护一个配置文件的应用。
深度搜索内置了这些防护措施。代理必须获取和读取来源 - 它不能跳过步骤。工具调用是强制的,而不是建议的。它还添加了具有嵌入的适当搜索:LLM可以搜索过去的研究,创建记忆,并在主题之间查找文件。而且,您可以通过界面配置所有内容 - API密钥,提供商,设置 - 而无需触摸配置文件。
如果您只想要一个可以浏览网页的聊天代理,OpenCode已经做得很好。这个应用适用于您想要强制研究步骤,持久记忆和精致的界面,而无需自己构建时。
## 您拥有所有内容
您选择LLM提供商。您选择搜索后端。您持有API密钥。应用直接与您选择的服务通信 - 没有中间人,没有云服务器通过别人的基础设施路由您的问题。
如果您想要完全的隐私,您可以运行本地LLM和自托管的搜索引擎,如SearXNG。所有内容都保留在您的机器上。除非您决定,否则数据不会离开您的网络。
您的研究保存在磁盘上的每个主题文件夹中,索引为矢量搜索,以便您可以在过去的项目中搜索并继续您未完成的工作。
由于应用从您的计算机运行,并使用真正的浏览器网页视图,因此网站会看到一个正常的浏览器会话。与基于云的研究工具相比,您不太可能被阻止为机器人。
## 工作原理
代理搜索网络,读取实际页面,跟踪线索,交叉引用来源,检查矛盾,并在写出带有引用的答案之前验证高风险声明。
每个步骤都是一个单独的工具调用,带有防护措施。代理必须实际获取和读取来源 - 它不能跳过步骤或编造它们。
## 从编码代理使用
深度搜索包含用于编码代理的stdio MCP代理。代理与正在运行的桌面应用通信,因此MCP研究使用与正常的应用内研究运行相同的设置,浏览器渲染,保存的历史记录,研究文件夹和防护措施。
1. 打开深度搜索桌面应用。
2. 在设置中配置聊天模型和至少一个搜索提供商。
3. 在设置中,复制深度搜索MCP下显示的路径。
4. 在您的编码代理的MCP配置中,使用该路径作为服务器命令:
```json
{
"mcpServers": {
"deep-search": {
"command": "/Users/you/Library/Application Support/com.deep-search-app.app/deep-search-mcp.mjs"
}
}
}
```
如果您的MCP客户端不直接执行shebang脚本,请使用Node和相同的路径:
```json
{
"mcpServers": {
"deep-search": {
"command": "node",
"args": ["/Users/you/Library/Application Support/com.deep-search-app.app/deep-search-mcp.mjs"]
}
}
}
```
您不需要手动运行`npm run mcp`。MCP客户端在需要服务器时会启动配置的命令。
MCP公开:
- `deep_search` - 启动,轮询,恢复或跟进研究会话。
- `deep_search_cancel` - 取消正在运行的研究会话。
使用`deep_search`并输入以下内容之一:
```json
{ "question": "研究React 19迁移风险以获取此仓库" }
```
```json
{ "session_id": "mcp-session-id" }
```
```json
{
"session_id": "mcp-session-id",
"answers": ["迁移计划"]
}
```
```json
{
"session_id": "mcp-session-id",
"question": "现在将其与Vue迁移风险进行比较。"
}
```
响应为:
```json
{ "session_id": "mcp-session-id", "status": "running" }
```
```json
{
"session_id": "mcp-session-id",
"status": "questions",
"questions": [
{
"text": "您想要迁移计划还是风险评估?",
"options": ["迁移计划", "风险评估"]
}
]
}
```
```json
{
"session_id": "mcp-session-id",
"status": "done",
"result": "最终引用的研究答案..."
}
```
当`status`为`running`时,研究仍在进行中。再次调用`deep_search`,仅使用`session_id`,直到返回`done`,`questions`,`failed`或`cancelled`。不要将`running`视为最终答案。
当`status`为`questions`时,请询问用户并再次调用`deep_search`,使用`session_id`和`answers`。
在`status`为`done`后,提出后续问题,调用`deep_search`,使用相同的`session_id`和新的`question`。深度搜索将该消息附加到同一个已保存的研究聊天中。
## 提供商
LLM(选择一个或多个):
- Anthropic(Claude)
- OpenRouter
- OpenCode Zen
- Zhipu
搜索(选择一个或多个):
- Brave Search
- Exa
- Serper
- Tavily
- SearXNG(自托管)
- YouTube Data API v3
API密钥通过Tauri的插件存储本地存储。
### YouTube搜索设置
YouTube搜索使用Google的官方YouTube Data API v3。字幕下载使用公共字幕轨道,当视频公开时;Google的官方字幕下载API需要OAuth访问您有权编辑的视频,因此API密钥不能解锁任意公共视频的字幕。
要启用YouTube搜索:
1. 打开[Google Cloud Console](https://console.cloud.google.com/)。
2. 创建或选择Google Cloud项目。
3. 打开[YouTube Data API v3](https://console.cloud.google.com/apis/library/youtube.googleapis.com)并点击**启用**。
4. 进入[APIs & Services -> Credentials](https://console.cloud.google.com/apis/credentials)。
5. 点击**创建凭证 -> API密钥**。
6. 在**API限制**下限制密钥,使其仅能调用**YouTube Data API v3**。
7. 在深度搜索中,打开设置并将密钥粘贴到**YouTube Data API密钥**中。
对于本地开发烟雾测试,您也可以将密钥放在`.env`中:
```sh
YOUTUBE_API_KEY=您的_google_api_key_在此
```
桌面应用在运行时从设置中读取密钥。`.env`被Git忽略,仅用于本地开发命令或测试。
### YouTube字幕回退
当应用内公共字幕提取失败YouTube视频时,深度搜索可以可选地要求您的本地`yt-dlp`二进制文件下载视频的字幕文件。这处理YouTube的公共定时文本响应被阻止或为空的情况,但`yt-dlp`仍然可以访问自动生成的字幕。
在设置中的提取服务下配置这些字段:
- **yt-dlp路径**:安装的`yt-dlp`可执行文件的绝对路径。应用运行的命令等效于:
```sh
yt-dlp --skip-download --write-auto-subs --sub-langs en --sub-format vtt <youtube-url>
```
仅在直接公共字幕提取失败后才使用备用方案。它下载一个临时的`.vtt`字幕文件,将其解析为正常的YouTube转录格式,并在之后删除临时的字幕文件。
## 开发
您需要Node.js LTS,Rust稳定版和适用于您平台的[Tauri先决条件](https://v2.tauri.app/start/prerequisites/)。
```sh
npm install
npm run tauri dev
```
| 命令 | 执行操作 |
| ------------------------------ | ------------------------------- |
| `npm run dev` | 前端仅限(Vite,端口1420) |
| `npm run mcp` | MCP代理的开发烟雾测试命令 |
| `npm run verify` | 完整的本地验证门控 |
| `npm run build` | TypeScript检查 + Vite构建 |
| `npm test` | 单元测试(Vitest) |
| `npm run test:e2e` | 端到端测试(Playwright /无头Chrome) |
| `cargo test` (在`src-tauri/`中) | Rust后端测试 |
## 架构
```
src/ # React前端(Vite + Tailwind CSS 4)
lib/
transport/ # 聊天传输,工具注册,防护措施
system-prompt.md # 代理系统提示
tools/ # AI工具定义(搜索,提取,研究...)
components/
assistant-ui/ # 聊天界面(@assistant-ui/react)
ui/ # shadcn/ui组件
src-tauri/ # Rust后端(Tauri v2)
src/
lib.rs # Tauri命令:选项卡,获取,内容提取
research_search/ # SQLite + sqlite-vec矢量搜索
```
## 许可证
MIT