将任何 LLM 连接到您的内部知识源,并与团队成员实时聊天。NotebookLM、Perplexity 和 Glean 的开源替代方案。
SurfSense 是一个高度可定制的 AI 研究助手,可以连接外部数据源,如搜索引擎(SearxNG、Tavily、LinkUp)、Google Drive、Slack、Microsoft Teams、Linear、Jira、ClickUp、Confluence、BookStack、Gmail、Notion、YouTube、GitHub、Discord、Airtable、Google Calendar、Luma、Circleback、Elasticsearch 等,未来还会支持更多。
https://github.com/user-attachments/assets/42a29ea1-d4d8-4213-9c69-972b5b806d58
https://github.com/user-attachments/assets/a0a16566-6967-4374-ac51-9b3e07fbecd7
| 工具 | 描述 |
|---|---|
| search_knowledge_base | 使用语义+全文混合搜索、日期过滤和连接器特定查询搜索您的个人知识库 |
| generate_podcast | 从聊天对话或知识库内容生成音频播客 |
| link_preview | 获取 URL 的 Open Graph 元数据以显示预览卡片 |
| display_image | 在聊天中显示带有元数据和来源归属的图像 |
| scrape_webpage | 从网页中提取完整内容用于分析和总结(支持 Firecrawl 或本地 Chromium/Trafilatura) |
贡献者可以通过注册表模式轻松添加新工具:
1. 在 surfsense_backend/app/agents/new_chat/tools/ 中创建工具工厂函数
2. 在 registry.py 的 BUILTIN_TOOLS 列表中注册
| ETL 服务 | 格式 | 说明 |
|---|---|---|
| LlamaCloud | 50+ 种格式 | 文档、演示文稿、电子表格、图像 |
| Unstructured | 34+ 种格式 | 核心格式 + 电子邮件支持 |
| Docling | 核心格式 | 本地处理,无需 API 密钥 |
音频/视频(通过 STT 服务):.mp3、.wav、.mp4、.webm 等
SurfSense 正在积极开发中。 虽然它还未达到生产就绪状态,但您可以帮助我们加快进度。
加入 SurfSense Discord 一起塑造 SurfSense 的未来!
随时了解我们的开发进度和即将推出的功能!
查看我们的公开路线图并贡献您的想法或反馈:
📋 路线图讨论: SurfSense 2025-2026 路线图:深度代理、实时协作与 MCP 服务器
📊 看板: SurfSense 项目看板
[!TIP] 对于生产部署,请使用完整的 Docker Compose 设置,它提供更多控制和可扩展性。
Linux/macOS:
docker run -d -p 3000:3000 -p 8000:8000 \
-v surfsense-data:/data \
--name surfsense \
--restart unless-stopped \
ghcr.io/modsetter/surfsense:latest
Windows (PowerShell):
docker run -d -p 3000:3000 -p 8000:8000 `
-v surfsense-data:/data `
--name surfsense `
--restart unless-stopped `
ghcr.io/modsetter/surfsense:latest
使用自定义配置:
您可以使用 -e 标志传递任何环境变量:
docker run -d -p 3000:3000 -p 8000:8000 \
-v surfsense-data:/data \
-e EMBEDDING_MODEL=openai://text-embedding-ada-002 \
-e OPENAI_API_KEY=your_openai_api_key \
-e AUTH_TYPE=GOOGLE \
-e GOOGLE_OAUTH_CLIENT_ID=your_google_client_id \
-e GOOGLE_OAUTH_CLIENT_SECRET=your_google_client_secret \
-e ETL_SERVICE=LLAMACLOUD \
-e LLAMA_CLOUD_API_KEY=your_llama_cloud_key \
--name surfsense \
--restart unless-stopped \
ghcr.io/modsetter/surfsense:latest
[!NOTE] - 如果部署在带有 HTTPS 的反向代理后面,请添加
-e BACKEND_URL=https://api.yourdomain.com
启动后,访问 SurfSense: - 前端: http://localhost:3000 - 后端 API: http://localhost:8000 - API 文档: http://localhost:8000/docs
常用命令:
docker logs -f surfsense # 查看日志
docker stop surfsense # 停止
docker start surfsense # 启动
docker rm surfsense # 删除(数据保留在卷中)
SurfSense 提供多种入门方式:
非常适合快速上手
快速启动 Docker(上述方法) - 一条命令即可在本地运行 SurfSense。
数据通过 Docker 卷持久化
Docker Compose(生产环境) - 使用独立服务进行完整堆栈部署。
.env 文件自定义环境变量更适合生产环境,支持独立扩展服务
手动安装 - 适合希望对设置有更多控制或需要自定义部署的用户。
Docker 和手动安装指南都包含适用于 Windows、macOS 和 Linux 的详细操作系统特定说明。
在自托管安装之前,请确保完成先决条件设置步骤,包括: - 身份验证设置(可选 - 默认为 LOCAL 身份验证) - 文件处理 ETL 服务(可选 - 默认为 Docling): - Docling(默认,本地处理,无需 API 密钥,支持 PDF、Office 文档、图像、HTML、CSV) - Unstructured.io API 密钥(支持 34+ 种格式) - LlamaIndex API 密钥(增强解析,支持 50+ 种格式) - 其他根据用例需要的 API 密钥
### 后端
FastAPI:现代、快速的 Python Web 框架,用于构建 API
PostgreSQL with pgvector:具有向量搜索功能的数据库,用于相似性搜索
SQLAlchemy:SQL 工具包和 ORM(对象关系映射),用于数据库交互
Alembic:SQLAlchemy 的数据库迁移工具
FastAPI Users:使用 JWT 和 OAuth 支持的身份验证和用户管理
深度代理:基于 LangGraph 构建的自定义代理框架,用于推理和行动的 AI 代理,支持可配置工具
LangGraph:用于开发具有对话持久性的有状态 AI 代理的框架
LangChain:用于开发 AI 驱动应用程序的框架
LiteLLM:通用 LLM 集成,支持 100+ 种模型(OpenAI、Anthropic、Ollama 等)
Rerankers:先进的结果排序,提高搜索相关性
混合搜索:结合向量相似性和全文搜索,使用倒数排名融合 (RRF) 获得最佳结果
向量嵌入:文档和文本嵌入,用于语义搜索
pgvector:PostgreSQL 扩展,用于高效的向量相似性操作
Redis:内存数据结构存储,用作 Celery 的消息代理和结果后端
Celery:分布式任务队列,用于处理异步后台任务(文档处理、播客生成等)
Flower:Celery 任务队列的实时监控和管理工具
Chonkie:先进的文档分块和嵌入库
### 前端
Next.js:React 框架,具有应用路由器、服务器组件、自动代码拆分和优化渲染功能
React:用于构建用户界面的 JavaScript 库
TypeScript:JavaScript 的静态类型检查,提升代码质量和开发体验
Vercel AI SDK Kit UI Stream Protocol:创建可扩展的聊天 UI
Tailwind CSS:实用优先的 CSS 框架,用于构建自定义 UI 设计
Shadcn:无头组件库
Motion(Framer Motion):React 动画库
### DevOps
Docker:容器平台,用于跨环境的一致部署
Docker Compose:用于定义和运行多容器 Docker 应用程序的工具
pgAdmin:Docker 设置中包含的基于 Web 的 PostgreSQL 管理工具
基于 Plasmo 的 Manifest v3
非常欢迎贡献!贡献可以小到一个 ⭐,甚至是发现和创建问题。 后端的微调总是受欢迎的。
想要为 SurfSense 代理添加新工具?非常简单:
surfsense_backend/app/agents/new_chat/tools/my_tool.py 中创建您的工具文件registry.py 中注册:ToolDefinition(
name="my_tool",
description="What my tool does",
factory=lambda deps: create_my_tool(
search_space_id=deps["search_space_id"],
db_session=deps["db_session"],
),
requires=["search_space_id", "db_session"],
),
有关详细的贡献指南,请参阅我们的 CONTRIBUTING.md 文件。
<img
src="https://github.com/user-attachments/assets/329c9bc2-6005-4aed-a629-700b5ae296b4"
alt="Catalyst Project"
width="200"
/>
$ claude mcp add SurfSense \
-- python -m otcore.mcp_server <graph>