Web应用 活跃维护

local-deep-research

LearningCircuit/local-deep-research

~95% 在 SimpleQA(例如 Qwen3.6-27B 在 3090 上)。支持所有本地和云端 LLM(llama.cpp、Ollama、Google 等)。10 个搜索引擎——arXiv、PubMed、你的私人文档。一切本地处理并加密。

9393
Stars 标星
880
Forks 分支
44
Watchers 关注
1198
Open Issues
Python
主要语言
MIT
开源协议
114.6 MB
仓库大小
1 小时前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:LearningCircuit/local-deep-research
git clone https://github.com/LearningCircuit/local-deep-research.git
git clone git@github.com:LearningCircuit/local-deep-research.git
README.md main

英文原文正文为项目原始 README(英文),本站后续会翻译为中文,当前仅剔除图片与无关章节并统一排版。

本地深度研究

用于深入、主动研究的 AI 驱动研究助手

使用多个大型语言模型(LLM)和搜索引擎进行深入、主动的研究,并提供适当引用

🧪 第一个开源项目——在单张 RTX 3090(Qwen3.6-27B)上完全本地运行——在本地硬件上报告了约 95% 的 SimpleQA(n=500)和 77% 的 xbench-DeepSearch(n=100)性能。 请参阅 r/LocalLLaMA 公告 和 基准数据集。

▶️ 观看 The Art Of The Terminal 的评论

🚀 什么是本地深度研究?

由你控制的 AI 研究助手。本地运行以保障隐私,使用任何大型语言模型并构建你自己的可搜索知识库。你拥有自己的数据,并且可以完全了解它的工作方式。

⚡ 快速开始

选项 1:Docker 运行(Linux)

# Step 1: Pull and run Ollama
docker run -d -p 11434:11434 --name ollama ollama/ollama
docker exec ollama ollama pull gpt-oss:20b

# Step 2: Pull and run SearXNG for optimal search results
docker run -d -p 8080:8080 --name searxng searxng/searxng

# Step 3: Pull and run Local Deep Research
# (the URL line pins SearXNG's address AND marks it operator-approved —
#  private/localhost engine URLs are otherwise blocked by default since
#  v1.10.3. The URL becomes read-only in the web UI; docs/SearXNG-Setup.md
#  lists the alternatives, e.g. an origin allowlist.)
docker run -d --network host \
  --name local-deep-research \
  --volume "deep-research:/data" \
  -e LDR_DATA_DIR=/data \
  -e LDR_SEARCH_ENGINE_WEB_SEARXNG_DEFAULT_PARAMS_INSTANCE_URL=http://localhost:8080 \
  localdeepresearch/local-deep-research

Mac / Windows / WSL2 用户: --network host 仅在原生 Linux 上有效。在 Docker Desktop 上,它会悄无声息地无法发布端口 5000,并且会使 localhost 指向 LDR 容器本身(因此无法访问 Ollama/SearXNG)。请使用下面的 选项 2,或参阅 Windows/WSL2 常见问题条目 获取可用的 docker run 配方。

选项 2:Docker Compose

仅 CPU(适用于所有平台):

curl -O https://raw.githubusercontent.com/LearningCircuit/local-deep-research/main/docker-compose.yml && docker compose up -d

使用 NVIDIA GPU(Linux):

curl -O https://raw.githubusercontent.com/LearningCircuit/local-deep-research/main/docker-compose.yml && \
curl -O https://raw.githubusercontent.com/LearningCircuit/local-deep-research/main/docker-compose.gpu.override.yml && \
docker compose -f docker-compose.yml -f docker-compose.gpu.override.yml up -d

在大约30秒后打开 http://localhost:5000。有关GPU设置、环境变量等内容,请参阅 Docker Compose指南。

选项 3:pip 安装

pip install local-deep-research
python -m local_deep_research.web.app   # starts the web UI on http://localhost:5000

你还需要 Ollama(或任何兼容 OpenAI 的 LLM 端点)和 SearXNG 运行 —— 有关完整步骤,请参阅 pip 安装指南。
支持Windows、macOS和Linux。通过预构建的轮子支持SQLCipher加密——无需编译。
在 Windows 上导出 PDF 需要 Pango(安装指南)。
开发回退: LDR_BOOTSTRAP_ALLOW_UNENCRYPTED=true 仅在 SQLCipher 不可用或无法使用时允许使用明文 SQLite;可工作的 SQLCipher 仍然优先。该回退不验证账户密码,不适合共享部署。详见 回退限制。

详细安装指南: Docker · Docker Compose · pip · Unraid · 完整安装参考

较旧的 CPU (x86-64)? LDR 需要支持 AVX 的 CPU —— Intel Sandy Bridge / AMD Bulldozer(2011)或更新型号。几个科学 Python 依赖(pandas、scikit-learn)提供的 wheel 在较旧的 CPU 上会因 Illegal instruction 崩溃。ARM64 (aarch64) 完全支持。每个版本都会针对这一底线进行烟雾测试,包括仅支持 AVX 而不支持 AVX2 的 CPU(#4480)。

🏗️ 工作原理

研究

你提出了一个复杂的问题。本地深度研究(LDR):

  • 自动帮你做研究
  • 跨网络搜索、学术论文及您个人文档
  • 将所有内容综合成一份报告,并附上正确的引用

选择适合自己的研究策略:快速流程模式获取快速事实,或完全智能的深度研究,用于复杂分析和学术工作。

LangGraph 代理策略 — 一种自主智能研究模式,其中大型语言模型(LLM)决定要搜索的内容、使用哪些专业引擎(arXiv、PubMed、Semantic Scholar 等)以及何时进行综合。它会根据搜索结果自适应地在搜索引擎之间切换,并收集的来源远比基于流程的策略多 —— 这就是上述约 95% SimpleQA 结果背后的策略。在设置中选择 langgraph-agent。

建立你的知识库

flowchart LR
    R[Research] --> D[Download Sources]
    D --> L[(Library)]
    L --> I[Index & Embed]
    I --> S[Search Your Docs]
    S -.-> R

每一次研究会话都会找到有价值的资源。将它们直接下载到你的加密库中——来自 ArXiv 的学术论文、PubMed 文章、网页。LDR 提取文本、索引所有内容,并使其可搜索。下次研究时,可以在你自己的文档和实时网页中同时提问。你的知识会随着时间积累。

🛡️ 安全

flowchart LR
    U1[User A] --> D1[(Encrypted DB)]
    U2[User B] --> D2[(Encrypted DB)]

您的数据归您所有。每个用户都会得到自己隔离的 SQLCipher 数据库,该数据库使用 AES-256 加密,密钥由您的密码派生。您的密码从不存储——登录通过尝试解密您的数据库来实现,因此仅凭数据库文件,任何获得它们的人都无法使用。每个用户的 LLM API 密钥加密后存储在同一个个人数据库中,而不是共享的服务器级存储中。

Docker 设置 配备了 cap_drop: ALL、no-new-privileges 和非 root 运行时,随附的 Ollama 和 SearXNG 镜像通过摘要固定。使用随附 Ollama 运行模型时,推理在您自己的硬件上进行。LDR 主要通过提供者和端点地址来判断位置,而不是模型运行的位置,因此将本地端点中继到托管模型(Ollama 云模型,或在托管 API 前的本地 LiteLLM 或其他 OpenAI 兼容代理)仍然可能将您的提示发送出机器,而不会被检测到。自托管的 SearXNG 仍会将您的搜索查询转发到其互联网上游引擎。要在私有源上运行,只搜索以下所述的仅私有源(集合、您的库)下的 仅私有 出口范围。该范围是一种尽力而为的安全措施,而非空气隔离:请参阅下面的出口控制部分和 SECURITY.md。

内存中凭证:像任何在运行时使用机密的应用一样,凭证在活跃会话期间存储在进程内存中——通过会话范围的凭证生命周期和核心转储排除来缓解风险。完整的威胁模型请参见安全策略。

供应链安全:Docker 镜像使用 Cosign 按 GitHub 的无密钥 OIDC 流签名,包含 SLSA 来源证明,并附带经认证的 SPDX SBOM。有关逐步验证命令,请参见验证镜像和 SBOM。

安全透明度:扫描器抑制措施已在安全警报评估、评分合规、容器 CVE 抑制和SAST 规则理由中记录并附有理由。一些警报(Dependabot、代码扫描)只能在GitHub 安全选项卡中忽略,或在其它地方很难抑制,因此上述文件未覆盖每一个已忽略的发现。

详细架构 → | 安全策略 → | 安全审查流程 →

🌐 出口控制

每次研究运行都有一个出口范围,在尽力而为的基础上限制其流量去向:哪些搜索引擎运行,LLM 和 embeddings 是否可以使用云服务,以及可以获取哪些结果 URL。在设置 → 出口范围中或研究表单的隐私与出口面板中设置;在面板中选择范围也会保存为默认设置,因此后续运行也会使用它。

模式 搜索来源 推理
自适应 (默认) 遵循你的主引擎:公共引擎表现为仅公共,私人集合或你的库表现为仅私人;本地存储的你标记为公共的集合作为主引擎时允许任何分类引擎,包括私人集合 仅在运行为私人时强制本地
仅公共 公共网络和学术引擎;排除被分类为私人的私人集合和本地文档存储(一个其 URL 指向公共主机或解析失败的文档存储通常被视为公共) 你配置的提供者;带有云模型的文档存储作为主引擎时,通常在通过网络研究表单进行研究运行时被拒绝(直接调用研究功能的入口点如 /api/v1/quick_summary 或 MCP 不在此列)
仅私人 仅本地资源(集合、库、本地文档存储如 Paperless) 强制本地;云提供者通常被拒绝
严格 你单一的主引擎,不扩展 不强制本地,但严格模式下云模型通常无法工作(参见 外发模式 的严格部分)
无保护 任何资源;除非操作员设置了 LDR_POLICY_ALLOW_UNPROTECTED_EGRESS=true 否则不可用 通常可访问任何资源(操作员环境中的 require-local 设置仍然生效)

严格 和 仅私人(包括解析为它的自适应运行)还会在研究运行中启用尽力而为的套接字级防护,通常会拒绝连接到公共地址。这是一个有已知漏洞的最后防线,而非保证;外发模式 的严格部分列出了一些,例如私有地址上的前向代理或中继。在 严格 下,公共引擎、公共结果获取和云模型调用通常会失败,因此应配合本地引擎和本地模型使用。

本地托管的 SearXNG 被视为公共引擎——它将搜索请求代理到互联网——因此在 仅私人 下不可用。在 严格 模式下,它仍可作为你的主引擎运行,然后将查询转发到其上游互联网引擎。

LDR 的受保护 HTTP 层用于大多数搜索结果和文档获取,也会根据 SSRF 规则检查目标(包括已知的云元数据地址如 169.254.169.254)并重新检查重定向。启用 JavaScript 渲染(web.enable_javascript_rendering,默认关闭)时,需要的页面将在无头 Chromium 中加载,由其自行解析地址。详情参见 外发模块 README。

已登录用户是否可以将搜索引擎指向私人地址取决于引擎类型:

  • 具有可配置地址的公共引擎(目前是 SearXNG):通常情况下,私人或回环 URL 会被拒绝,除非操作员通过环境变量选择加入(LDR_SEARCH_ALLOW_PRIVATE_ENGINE_URLS=true,LDR_SEARCH_PRIVATE_ENGINE_URL_ALLOWLIST 中的精确来源,或者通过 LDR_SEARCH_ENGINE_WEB_SEARXNG_DEFAULT_PARAMS_INSTANCE_URL 固定 URL 本身)。因此,localhost 上的 SearXNG 通常需要其中之一。
  • 本地文档存储引擎(Paperless-ngx 和 Elasticsearch):它们的地址设置 search.engine.web.paperless.default_params.api_url 和 search.engine.web.elasticsearch.default_params.hosts 旨在指向私有主机,因此目前无需选择加入:任何已登录用户都可以将它们设置为内部地址,而服务器将连接到该地址。如果这是不可接受的,请使用环境变量固定这些设置(LDR_ 加上键的大写,并将点替换为下划线,例如 LDR_SEARCH_ENGINE_WEB_PAPERLESS_DEFAULT_PARAMS_API_URL),或使用 LDR_APP_LOCK_SETTINGS=true 锁定设置更改。

出口策略是对错误配置和提示注入获取请求的进程内防护措施,而不是空气隔离或硬安全边界:例如,在拒绝获取请求之前,主机名仍然会通过配置的 DNS 解析器进行解析,并且无法可靠地限制在 LDR 进程内部运行的代码。对于硬边界,还需在容器或防火墙级别添加出口过滤。

出口模式 → | 威胁模型及注意事项 → | 执行点 →

🔒 隐私与数据

Local Deep Research 不包含遥测、分析及追踪。我们不会收集、传输或存储任何有关您或您使用情况的数据。没有分析 SDK,没有回传调用,没有崩溃报告,没有外部脚本。使用指标保留在您本地的加密数据库中。

LDR 唯一的网络调用是由您发起的:搜索查询(向您配置的引擎),LLM API 调用(向您选择的提供商),及通知(仅在您设置 Apprise 时)。

由于我们不收集任何使用数据,我们依赖您告诉我们什么有效、哪些存在问题,以及您希望接下来看到的内容——错误报告、功能建议,甚至您喜欢或从未使用的功能都能帮助我们改进 LDR。

📊 基准测试

使用 Serper(云)搜索和在本地 Ollama 运行的模型,通过 langgraph-agent 策略的社区基准测试的主要结果:

模型 简单问答 xbench-DeepSearch
Qwen3.6-27B 95.7%(287/300) 77.0%(77/100)
Qwen3.5-9B 91.2%(182/200) 59.0%(59/100)
GPT-OSS-20B 85.4%(295/346) –

注意事项:样本较小,存在大型语言模型分级噪声,以及在较新基础模型上存在SimpleQA污染风险。

选择本地模型?同一个社区维护的数据集跟踪不同模型、搜索引擎和研究策略的准确性 —— 这是在下载多 GB 权重之前,最快查看哪些 Ollama / LM Studio / llama.cpp 模型在深度研究中表现良好的方法。在 Hugging Face 上浏览完整排行榜 →

提交您自己的结果 →(贡献者列在 CONTRIBUTORS.md 中),或 在本地运行基准测试 →。

✨ 主要特征

🔍 研究模式

  • 快速摘要 - 30秒到3分钟内获得答案,并附有引用
  • 详细研究——结构化发现的全面分析
  • 报告生成——专业报告,包含章节和目录
  • 文档分析 - 用AI搜索你的私人文档

🛠️ 高级能力

  • LangChain 集成 - 将任何向量存储用作搜索引擎
  • REST API - 通过每个用户的数据库进行认证的 HTTP 访问
  • 基准测试 - 测试并优化您的配置
  • 分析仪表板 - 跟踪成本、性能和使用指标
  • 期刊质量系统 - 使用212K索引资源进行自动期刊声誉评分、掠夺性检测和质量仪表板。由 OpenAlex (CC0)、DOAJ (CC0) 和 Stop Predatory Journals (MIT) 提供支持。参见 v1.6.0 公告。
  • 实时更新 - WebSocket支持实时研究进展
  • 聊天模式 - 多轮研究对话,支持流式进展和跨轮累积上下文
  • 导出选项 - 将结果下载为 PDF 或 Markdown
  • 研究历史 - 保存、搜索并回顾过去的研究
  • 自适应速率限制 - 智能重试系统,可学习最佳等待时间
  • 键盘快捷键 - 高效导航(ESC,Ctrl Shift 1-4)

📰 新闻与研究订阅

  • 自动研究摘要 - 订阅主题或特定查询;AI 仅筛选并总结最相关的发展
  • 可自定义的发送方式 - 每日、每周或自定义时间表,以 Markdown 报告或结构化摘要形式

🌐 搜索来源

免费搜索引擎

  • 学术:arXiv, PubMed, Semantic Scholar
  • 通用:维基百科, SearXNG
  • 技术:GitHub, Elasticsearch
  • 归档页面:Wayback Machine URL 获取
  • 新闻:卫报, 维基新闻

高级搜索引擎

  • Tavily - AI 驱动搜索
  • 谷歌 - 通过 SerpAPI 或可编程搜索引擎
  • Brave Search - 注重隐私的网络搜索

自定义来源

  • 本地文档 - 使用 AI 搜索您的文件
  • LangChain 检索器 - 任意向量存储或数据库
  • 元搜索 - 智能组合多个引擎

LDR 遵守 robots.txt 并在获取网页时诚实地标识自身——不使用隐身或反检测技术。在极少数情况下,这意味着阻止自动访问的页面将无法获取,我们认为这是正确的权衡。

完整搜索引擎指南 →

💻 使用示例

Python 应用程序接口

from local_deep_research.api import LDRClient, quick_query

# Option 1: Simplest - one line research
summary = quick_query("username", "password", "What is quantum computing?")
print(summary)

# Option 2: Client for multiple operations
client = LDRClient()
client.login("username", "password")
result = client.quick_research("What are the latest advances in quantum computing?")
print(result["summary"])

HTTP接口

下面的代码示例展示了基本的 API 结构 - 有关可使用的示例,请参阅下面的链接

import requests
from bs4 import BeautifulSoup

# Create session and authenticate
session = requests.Session()
login_page = session.get("http://localhost:5000/auth/login")
soup = BeautifulSoup(login_page.text, "html.parser")
login_csrf = soup.find("input", {"name": "csrf_token"}).get("value")

# Login and get API CSRF token
session.post("http://localhost:5000/auth/login",
            data={"username": "user", "password": "pass", "csrf_token": login_csrf})
csrf = session.get("http://localhost:5000/auth/csrf-token").json()["csrf_token"]

# Make API request
response = session.post("http://localhost:5000/api/start_research",
                       json={"query": "Your research question"},
                       headers={"X-CSRF-Token": csrf})

🚀 现成可用的 HTTP API 示例 → examples/api_usage/http/

  • ✅ 自动用户创建 - 开箱即用
  • ✅ 完整认证,包括 CSRF 处理
  • ✅ 结果重试逻辑 - 等待研究完成
  • ✅ 进度监控 和错误处理

命令行工具

# Run benchmarks from CLI
python -m local_deep_research.benchmarks.cli.benchmark_commands simpleqa --examples 50

请参阅命令行工具指南以获取完整参考。

🔗 自带知识库

将 LDR 连接到您现有的知识库。与上面的 HTTP 客户端不同,quick_summary() 在进程中运行 LDR — 无需服务器 — 因此您可以传入实时 Python 对象,例如 LangChain 检索器:

from local_deep_research.api import quick_summary

# Use your existing LangChain retriever
result = quick_summary(
    query="What are our deployment procedures?",
    retrievers={"company_kb": your_retriever},
    search_tool="company_kb"
)

兼容: FAISS, Chroma, Pinecone, Weaviate, Elasticsearch 以及任何 LangChain 兼容的检索器。

集成指南 →

🔌 MCP 服务器(Claude 集成)

LDR 提供一个 MCP(模型上下文协议)服务器,允许像 Claude Desktop 和 Claude Code 这样的 AI 助手进行深入研究。完整的设置详情请参阅 MCP 服务器指南。

⚠️ 安全提示:此 MCP 服务器设计为仅通过 STDIO 传输(例如 Claude Desktop)本地使用。它没有内置认证或速率限制。未经实施适当的安全控制,请勿通过网络公开。有关网络部署要求,请参阅 MCP 安全最佳实践。

安装

# Install with MCP extras
pip install "local-deep-research[mcp]"

Claude 桌面配置

添加到你的 claude_desktop_config.json:

{
  "mcpServers": {
    "local-deep-research": {
      "command": "ldr-mcp",
      "env": {
        "LDR_LLM_PROVIDER": "openai",
        "LDR_LLM_OPENAI_API_KEY": "sk-..."
      }
    }
  }
}

Claude 代码配置

添加到你的 .mcp.json(项目级)或 ~/.claude/mcp.json(全局):

{
  "mcpServers": {
    "local-deep-research": {
      "command": "ldr-mcp",
      "env": {
        "LDR_LLM_PROVIDER": "ollama",
        "LDR_LLM_OLLAMA_URL": "http://localhost:11434"
      }
    }
  }
}

任何 LDR 设置都可以作为 LDR_* 变量通过 env 传入——完整列表请参见自动生成的完整配置参考。

可用工具

工具 描述 时长 LLM 成本
search 来自特定引擎的原始结果(arxiv,pubmed,wikipedia,…) 5-30秒 无
quick_research 快速研究摘要 1-5分钟 有
detailed_research 综合分析 5-15分钟 有
generate_report 完整的Markdown报告 10-30分钟 有
analyze_documents 搜索本地文档集合 30秒-2分钟 有
list_search_engines 列出可用的搜索引擎 即时 无
list_strategies 列出研究策略 即时 无
get_configuration 获取当前配置 即时 无

独立搜索引擎

search 工具允许你直接查询特定的搜索引擎并获取原始结果(标题、链接、摘要)——不经过LLM处理,无费用,速度快。这对于监控和订阅尤其有用,因为你可以定期检查新内容而不消耗LLM令牌。

# Search arXiv for recent papers
search(query="transformer architecture improvements", engine="arxiv")

# Search PubMed for medical literature
search(query="CRISPR clinical trials 2024", engine="pubmed")

# Search Wikipedia for quick facts
search(query="quantum error correction", engine="wikipedia")

# Search GitHub for code and repositories
search(query="agentic research frameworks", engine="github")

# Use list_search_engines() to see all available engines

示例用法

"Use quick_research to find information about quantum computing applications"
"Search arxiv for recent papers on diffusion models"
"Generate a detailed research report on renewable energy trends"

🤖 支持的大型语言模型

本地模型

  • Ollama — 连接到其本地 API(默认 http://localhost:11434)
  • LM Studio — 连接到其兼容 OpenAI 的服务器(默认 http://localhost:1234/v1)
  • llama.cpp — 连接到 llama-server 的兼容 OpenAI 的端点(默认 http://localhost:8080/v1);使用 llama-server -m <model.gguf> 启动
  • 常用模型:Llama、Mistral、Gemma、DeepSeek、Qwen
  • 当模型本身在本地运行时,LLM 处理在您自己的硬件上执行(搜索查询仍然会访问网络)。将本地端点作为转发至托管模型的代理,如 Ollama 云模型或本地 LiteLLM 代理,不会被视为远程。本地运行的模型无需 API 成本。

💡 我应该选择哪个本地模型? 参见 社区基准 — 社区提交的本地和云模型的准确率数据,便于在下载前进行比较。

云模型

  • OpenAI
  • Anthropic Claude
  • 谷歌 Gemini
  • 通过 OpenRouter 提供的 100 个模型
  • 通过 Requesty 提供的 100 个模型

自定义端点

  • 兼容 OpenAI 的端点 — 任何支持 OpenAI 聊天完成 API 的服务(vLLM、llama.cpp、网关)
  • 兼容 Anthropic 的端点 — 自托管服务,支持 Anthropic 消息 API (/v1/messages);设置 llm.anthropic_endpoint.url

模型设置 →

🔄 从早期版本升级

对于首个基于 FastAPI 的主要版本发布,请在更新前阅读 升级和回滚指南。首先备份数据:该版本的新数据库修订不支持对升级后的数据库直接回滚至 v1.10.7。在新版本中每位用户的首次登录后,立即将其自动预迁移备份从 encrypted_databases/backups/ 复制到数据目录外的存储中,并确保在任何降级尝试前完成:在后续的 UTC 日期登录或密码更改会用升级后的数据库副本替换该备份。切勿在升级后的数据库上启动 v1.10.7:那里每次登录也会替换该备份。

  • llm.model 不再有默认值。 在1.6.3之前的安装中,如果未配置模型,会自动填充 gemma3:12b(Ollama),这会静默下载一个多GB的二进制文件。现在该字段默认为空 — 请在设置 → LLM 中选择一个模型,否则研究功能将因明确的错误而失败。
  • auto 和 parallel 元搜索引擎已被移除。 默认的 langgraph-agent 策略会根据每次查询动态选择引擎,从而替代它们。存储的设置会自动迁移(被移除的值变为 searxng);请将任何明确的 search_tool="auto" API 调用或 LDR_SEARCH_TOOL=auto 环境变量覆盖更新为一个具体的引擎,例如 searxng。
  • 通过反向代理:速率限制器读取客户端地址的方式不同。 在 v1.10.7 之前,登录和注册速率限制基于最左侧的 X-Forwarded-For 条目,或者如果没有则使用 X-Real-IP,该头由任何对端发送,因此任何客户端都可以选择自己的桶。现在的行为取决于您的配置:

    • TRUST_PROXY_HEADERS 未设置(默认值): 这些头只有在直接对端是私有地址、环回地址或链路本地地址(6to4、Teredo 和 NAT64 隧道地址不算)时才会被读取,或者一旦您将 LDR_SERVER_FORWARDED_ALLOW_IPS 设置为代理的地址,仅在其列出时才会读取。关键是 最右侧 的 X-Forwarded-For 条目,如果没有 X-Forwarded-For 则是 X-Real-IP。
    • TRUST_PROXY_HEADERS=true 并且 LDR_SERVER_FORWARDED_ALLOW_IPS 设置为代理的地址: 只有列出的对端的转发头才会被计入。uvicorn 会从列出的对端的 X-Forwarded-For 推导客户端地址,而 X-Real-IP(在没有 X-Forwarded-For 时使用)仅从列出的对端读取。其他对端使用自己的地址作为键。
    • TRUST_PROXY_HEADERS=true 但未设置 LDR_SERVER_FORWARDED_ALLOW_IPS: 键是 最右侧 的 X-Forwarded-For 条目,由任何对端发送,包括公共地址。这阻止了位于一个附加代理后的客户端通过伪造前缀来选择自己的桶,但直接连接到 LDR 的客户端仍可写入整个头并选择自己的键。X-Real-IP 仅从私有、环回或链路本地的对端读取。LDR 会为此配置记录启动警告:请设置 LDR_SERVER_FORWARDED_ALLOW_IPS。

    对于现有代理设置意味着:

    • 通过公共或运营商级 NAT 地址访问 LDR 的代理(如云负载均衡器、Tailscale 100.64.x.x 对端、公共 nginx 主机):如果没有 TRUST_PROXY_HEADERS,其转发头现在将被忽略;如果设置了 TRUST_PROXY_HEADERS=true 并且没有允许列表,其 X-Real-IP 会被忽略,同时其 X-Forwarded-For 仍然有效。当您代理发送的头被忽略时,每个客户端将共享代理的一个速率限制桶,并且少数失败的登录会锁定所有人。请将 LDR_SERVER_FORWARDED_ALLOW_IPS 设置为代理的 IP 地址。
    • 在私有或 Docker 网络上的代理:(如果你设置了受限的 LDR_SERVER_FORWARDED_ALLOW_IPS,只有列出的节点是可信的,所以也要列出这个私有代理。)使用单个代理时,客户端会保持独立的桶,前提是代理 覆盖 了它观察到的地址的 X-Forwarded-For(nginx: $remote_addr)并同样覆盖 X-Real-IP。一个仍然不改变客户端发送的 header 的代理,仍然允许该客户端选择它的密钥;一个只设置 X-Real-IP 的代理也必须清除 X-Forwarded-For,因为 LDR 优先使用它。追加 ($proxy_add_x_forwarded_for) 可以得到正确的速率限制键,但在 TRUST_PROXY_HEADERS=true 而未配置 LDR_SERVER_FORWARDED_ALLOW_IPS 的情况下,uvicorn 会将最左边、客户端写入的条目报告为客户端地址。
    • 链中的两个或更多代理(CDN → nginx):默认情况下,每个客户端都是以外层代理的地址为键,因此它们共享一个流量限制桶,几次登录失败会锁定所有人。可以让内层代理自己解析真实客户端(nginx realip)并用该地址覆盖,或者让每个内层代理追加并设置多跳配置:LDR_SERVER_TRUSTED_PROXY_COUNT,或者在 TRUST_PROXY_HEADERS=true 情况下,将每跳列在 LDR_SERVER_FORWARDED_ALLOW_IPS 中。详见 代理链。

    在设置了 TRUST_PROXY_HEADERS=true 但没有设置 LDR_SERVER_FORWARDED_ALLOW_IPS 的情况下,LDR 会在启动时记录一个警告,指出该变量名称(如果同时设置了 LDR_SERVER_TRUSTED_PROXY_COUNT 为正值,或者允许列表明确设置为 * 或其他信任所有对等方的值,LDR 将拒绝启动)。请参见 反向代理配置 。

  • llamacpp 提供程序现在使用 HTTP,而不是进程内加载。 如果你以前将 llm.llamacpp_model_path 设置为本地 .gguf 文件,该设置将不再被读取。相反,请运行 llama-server -m <your-model.gguf>(每个现代 llama.cpp 构建都附带该命令),默认的 llm.llamacpp.url 为 http://localhost:8080/v1 将会自动使用它。如果你将 llama-server 放在带有身份验证的代理后面,可以通过 llm.llamacpp.api_key 可选地支持 API 密钥。

📚 文献资料

入门指南

核心功能

高级功能

发展

示例与教程

📰 特色报道

"对于重视隐私的人来说,Local Deep Research 值得特别关注……调整为使用可以在消费者 GPU 或甚至 CPU 上运行的开源 LLM。记者、研究人员或处理敏感主题的公司可以在 查询从未发送到外部服务器 的情况下进行信息调查。"

— Medium: 开源深度研究 AI 助手

新闻与文章

社区讨论

国际报道

🇨🇳 中文

🇯🇵 日本

🇰🇷 朝鲜语

评论与分析

相关项目

  • SearXNG LDR-学术版 - 面向学术的 SearXNG 分支,包含 12 个研究引擎(arXiv、Google 学术、PubMed 等),专为 LDR 设计
  • DeepWiki 文档 - 第三方文档和指南

注: 第三方项目和文章由独立维护。我们链接它们作为有用资源,但无法保证代码质量或安全性。

🤝 社区与支持

🧑‍💻 贡献

我们欢迎各种规模的贡献——从拼写错误修正到新功能。关键规则:保持 PR 小而独立(每个 PR 仅包含一个更改)。你不需要被分配到某个 issue:只需评论你正在处理它,并开启一个早期(草稿)PR,以便让进展可见。对于复杂或架构性的更改,以及任何可能影响研究结果或基准测试(LLM 提示、高级搜索系统、搜索引擎)的内容,请先在 issue 中概述你的方案,这样你的努力才能导向成功合并,而不是错位的 PR。请参阅我们的 贡献指南 以开始。

致谢

Local Deep Research 建立在许多开放获取倡议、学术数据库和开源项目的工作基础上。我们感谢:

学术与研究数据

资源 提供内容 许可证
OpenAlex 约 28 万个来源和 12 万个机构的学术元数据,包括 DOAJ 状态 CC0
DOAJ 开放获取期刊目录 — 开放获取验证(通过 OpenAlex) CC0
arXiv 物理、数学、计算机科学及更多领域的预印本 各种(见 arXiv 许可)
PubMed / NCBI 生物医学和生命科学文献 公共领域(美国政府)
Semantic Scholar 跨学科学术搜索,含引用数据 条款
NASA ADS 天体物理学、物理学和天文学论文 条款
Zenodo 开放研究数据、数据集和软件 每条记录不同
PubChem 化学和生物化学数据库 公共领域(美国政府)
Stop Predatory Journals 掠夺性期刊/出版商黑名单 MIT
JabRef 期刊缩写数据库 CC0

知识与内容来源

维基百科 • 开放图书馆 • 古登堡计划 • GitHub • Stack Exchange • 卫报 • 网络档案馆

基础设施与框架

LangChain • Ollama • SearXNG • FAISS

支持开放获取

这些项目靠捐款和资助运行,而非付费墙。如果 Local Deep Research 对你有用,请考虑回馈使其成为可能的开放获取生态系统:

📄 许可

MIT 许可证 - 参见 LICENSE 文件。

依赖项: 所有第三方软件包均使用宽松许可(MIT、Apache-2.0、BSD 等)- 参见 允许列表

本站来源与版权声明
  • 本文标题:local-deep-research - ~95% 在 SimpleQA(例如 Qwen3.6
  • 本文链接:https://www.cn121.com/webapp/learningcircuit-local-deep-research.html
  • 原项目:LearningCircuit/local-deep-research 版权归原作者 LearningCircuit 及贡献者所有
  • 收录信息:本站于 2026-10-23 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
  • 开源协议:收录时本项目采用 MIT(查看 LICENSE 原文),本站转载其原始文档(未改动文字,仅剔除图片与无关章节);使用、修改、分发请以该仓库 LICENSE 原文为准。
  • 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 LearningCircuit/local-deep-research。
  • 内容说明:本页正文为原项目 README 原文(英文),本站后续会翻译为中文(当前尚未译出),仅剔除了图片与赞助等无关章节、并把相对链接改为绝对地址;页首简介为机器翻译自仓库描述。
  • 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
  • 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。