Local Deep Research - AI驱动的深度研究助手

0 阅读2分钟

项目概述

Local Deep Research (LDR) 是一个AI研究助手,专注于执行深度、迭代的研究任务。核心功能包括:

  • 复杂问题分解:将复杂查询拆分为聚焦的子查询
  • 多源并行搜索:同时搜索网络、学术论文和本地文档
  • 信息验证:跨来源验证信息准确性
  • 综合报告生成:创建带有规范引用的全面报告

系统架构图转存失败,建议直接上传图片文件

核心特性

智能搜索策略

  • 15+种搜索策略(包括并行搜索、自适应分解、约束引导等)
  • 支持BrowseComp优化模式
  • 动态约束满足跟踪

高级分析能力

  • 双置信度评估(正/负证据分析)
  • 多阶段候选发现
  • 智能约束放松机制

知识管理

  • 持久化研究成果存储
  • 知识图谱构建
  • 渐进式知识压缩

开发者友好

  • 模块化架构设计
  • 完整类型提示
  • 可扩展的插件系统

安装指南

基础安装

git clone https://github.com/LearningCircuit/local-deep-research.git
cd local-deep-research
pdm install

依赖项

  • Python 3.10+
  • PDM 2.0+
  • Ollama (可选,用于本地模型运行)

Docker部署

docker-compose -f docker-compose.ldr.yml up -d

使用示例

基础研究任务

from local_deep_research import get_advanced_search_system

search_system = get_advanced_search_system(strategy_name="iterdrag")
results = search_system.analyze_topic("量子计算在密码学中的应用现状")

基准测试

from local_deep_research.web.benchmark import run_benchmark

benchmark_results = run_benchmark(
    model="gpt-4.1-mini",
    strategy="focused-iteration",
    questions=50
)

核心代码解析

自适应搜索策略

class AdaptiveDecompositionStrategy(BaseSearchStrategy):
    """
    自适应分解策略,根据中间发现动态调整搜索方法
    
    关键特性:
    1. 动态步骤选择(约束提取→初始搜索→验证→优化)
    2. 基于置信度的早期终止
    3. 智能查询重构
    """
    
    def __init__(self, model, search, max_steps=15):
        self.model = model
        self.search = search
        self.max_steps = max_steps
        self.current_step = 0
        
    def execute_step(self, step_type, context):
        """执行单个自适应步骤"""
        if step_type == StepType.CONSTRAINT_EXTRACTION:
            return self._extract_constraints(context)
        elif step_type == StepType.INITIAL_SEARCH:
            return self._initial_search(context)
        # ...其他步骤处理

双置信度检查器

class DualConfidenceChecker(BaseConstraintChecker):
    """
    使用正/负/不确定三分数评估约束满足情况
    
    评估逻辑:
    - 正置信度 > 40% → 接受
    - 负置信度 > 25% → 拒绝
    - 不确定度 > 60% → 需要重新评估
    """
    
    def check_candidate(self, candidate, constraints):
        results = []
        for constraint in constraints:
            evidence = self._gather_evidence(candidate, constraint)
            analysis = self._analyze_evidence(evidence)
            
            score = (analysis.positive - 
                    analysis.negative * self.negative_weight -
                    analysis.uncertainty * self.uncertainty_penalty)
                    
            results.append(ConstraintCheckResult(
                constraint=constraint,
                score=score,
                evidence=evidence
            ))
        return results

贡献指南

我们欢迎各种形式的贡献!请参阅贡献指南了解:

  • 开发环境设置
  • 代码风格要求
  • PR提交流程
  • 安全准则

许可证

本项目采用 Apache License 2.0 开源协议。 更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手) 公众号二维码