AI Agent大模型交互助手后端【免费下载链接】ollama-deep-researcherFully local web research and report writing assistant项目地址https://gitcode.com/GitHub_Trending/ol/ollama-deep-researcher点击查看免费下载本指南围绕 README.md 展开系统讲解ollama-deep-researcher这一「完全本地化」的网络研究助手的完整落地方法它如何借助 Ollama 或 LMStudio 托管的任意本地大模型在没有 API Key 的情况下完成生成搜索词 → 网络检索 → 摘要 → 反思知识缺口 → 新一轮检索的迭代研究并最终产出一份带来源引用的 Markdown 研究报告。读完本文你将掌握从.env配置、模型与搜索工具选型、LangGraph Studio 可视化运行到 Docker 容器化部署的完整实战链路并能基于源码理解其循环研究机制与结构化输出JSON mode / Tool Calling的实现原理。一、项目定位与核心能力ollama-deep-researcher是一个完全本地的 Web 研究助手LLM 推理与网络检索均不依赖云服务。用户只需给出一个研究主题topic它会自动生成一条针对性 Web 搜索查询采集搜索结果对搜索结果进行摘要反思摘要、识别知识缺口knowledge gaps针对缺口生成新的搜索查询按用户设定的循环次数重复上述过程最终输出一份包含全部引用来源的 Markdown 总结。这一设计来源于论文 IterDRAG 的思路——将查询拆分为子查询、逐个检索并回答、在已有答案基础上继续检索下一子查询从而实现渐进式的知识构建详见下文工作原理。在本仓库中LLM 侧支持Ollama与LMStudio两种本地托管方式检索侧默认使用无需 API Key 的DuckDuckGo同时可切换SearXNG / Tavily / Perplexity。从工程实现看该助手是一个基于 LangGraph 下入口由 langgraph.json 声明为./src/ollama_deep_researcher/graph.py:graph。二、快速开始1. 克隆仓库并准备环境文件git clone https://gitcode.com/GitHub_Trending/ol/ollama-deep-researcher.git cd ollama-deep-researcher复制环境变量模板cp .env.example .env随后按需编辑.env。这些环境变量控制模型选择、搜索工具及其他配置项应用启动时会通过python-dotenv自动加载——langgraph.json 中的env: ./.env字段即指向该文件。2. 依赖与运行环境项目基于 Pythonrequires-python 3.10LangGraph 开发服务器推荐 3.11核心依赖声明于 pyproject.toml包括langgraph1.1.0、langchain-ollama1.0.0、langchain-openai1.1.14、duckduckgo-search7.3.0、tavily-python0.7.23、markdownify0.11.0等。三、选择本地模型Ollama 配置1. 安装并拉取模型下载安装 Ollama 桌面应用拉取一个本地 LLM例如 DeepSeek R1 的 8B 蒸馏版ollama pull deepseek-r1:8b2. 在.env中配置 OllamaLLM_PROVIDERollama OLLAMA_BASE_URLhttp://localhost:11434 # Ollama 服务端点默认 http://localhost:11434 LOCAL_LLMmodel # 要使用的模型名不设置时默认 llama3.2若设置了这些环境变量它们将优先于configuration.py 中Configuration类的默认值。从源码看Configuration对 Ollama 的默认值如下configuration.pyllm_provider默认ollamalocal_llm默认llama3.2ollama_base_url默认http://localhost:11434/。在 graph.py 的get_llm()中Ollama 通过langchain_ollama.ChatOllama实例化非工具调用模式下传入formatjson以启用 JSON 结构化输出工具调用模式下则不传该参数见下文结构化输出。四、选择本地模型LMStudio 配置1. 在 LMStudio 中准备模型下载安装 LMStudio下载并加载目标模型例如qwen_qwq-32b打开Local Server标签页启动 OpenAI 兼容 API 服务器记下服务器地址默认http://localhost:1234/v1。2. 在.env中配置 LMStudioLLM_PROVIDERlmstudio LOCAL_LLMqwen_qwq-32b # 使用 LMStudio 中显示的精确模型名 LMSTUDIO_BASE_URLhttp://localhost:1234/v1源码中对应的默认值configuration.pylmstudio_base_url默认http://localhost:1234/v1。LMStudio 接入由 lmstudio.py 中的ChatLMStudio类实现——它继承langchain_openai.ChatOpenAI通过 LMStudio 的 OpenAI 兼容接口通信。两个值得注意的实现细节api_key参数被硬编码为not-needed-for-local-models本地模型无需真实密钥但 OpenAI 客户端要求该字段当formatjson时_generate()会设置response_format{type: json_object}并在返回前对原始文本做 JSON 清洗定位首个{与最后一个}截取并校验 JSON 片段从而容忍部分模型输出中的多余前后缀lmstudio.py。五、选择搜索工具项目默认使用DuckDuckGo进行网络搜索无需任何 API Key也可切换为SearXNG、Tavily或Perplexity。在.env中追加SEARCH_APIxxx # 搜索 API如 duckduckgo默认 TAVILY_API_KEYxxx # Tavily API Key PERPLEXITY_API_KEYxxx # Perplexity API Key MAX_WEB_RESEARCH_LOOPSxxx # 最大研究循环步数默认 3 FETCH_FULL_PAGExxx # 是否抓取完整页面内容duckduckgo默认 falseConfiguration中的对应字段与默认值configuration.py配置字段允许取值默认值search_apiperplexity/tavily/duckduckgo/searxngduckduckgofetch_full_pagetrue/falsetrueREADME 提示默认 false以源码Field(defaultTrue)为准max_web_research_loops正整数3注意README 与.env.example均标注FETCH_FULL_PAGE默认false而 configuration.py 中fetch_full_page的 Pydantic 默认值为True。由于配置读取顺序是环境变量 UI 配置 类默认值显式在.env中设置该变量才是行为可控的做法。各搜索实现位于 utils.pyDuckDuckGoduckduckgo_search通过DDGS.text()检索默认取max_results3启用fetch_full_page时会用httpx10 秒超时抓取原始页面并经markdownify转为 Markdownutils.py。SearXNGsearxng_search读取环境变量SEARXNG_URL默认http://localhost:8888通过SearxSearchWrapper检索utils.py。该变量可追加到.envSEARXNG_URLhttp://localhost:8888。Tavilytavily_search使用TavilyClientinclude_raw_content由fetch_full_page控制utils.py。Perplexityperplexity_search调用sonar-pro模型接口将首个引文作为主来源、其余引文作为纯引用raw_contentNone加入结果列表utils.py。另外多来源结果会经deduplicate_and_format_sources按 URL 去重并限制每源最多MAX_TOKENS_PER_SOURCE 1000tokens按CHARS_PER_TOKEN 4估算截断graph.py、utils.py。六、运行方式与配置优先级1. 通过 LangGraph Studio 运行Mac推荐方式# 创建虚拟环境 python -m venv .venv source .venv/bin/activate # 安装 uv 包管理器 curl -LsSf https://astral.sh/uv/install.sh | sh # 启动 LangGraph 开发服务器 uvx --refresh --from langgraph-cli[inmem] --with-editable . --python 3.11 langgraph devWindows# 安装 Python 3.11并加入 PATH重启终端后创建虚拟环境 python -m venv .venv .venv\Scripts\Activate.ps1 # 安装依赖 pip install -e . pip install -U langgraph-cli[inmem] # 启动 LangGraph 服务器 langgraph dev启动成功后终端会出现类似输出浏览器将打开 Studio Web UIReady! API: http://127.0.0.1:2024 Docs: http://127.0.0.1:2024/docs LangGraph Studio Web UI: https://smith.langchain.com/studio/?baseUrlhttp://127.0.0.1:2024在 Studio 的configuration标签页中可直接设置各项助手配置如Research Depth、LLM Model Name、LLM Provider、Search API、Fetch Full Page、Strip Thinking Tokens、Use Tool Calling等字段定义见 configuration.py。然后输入研究主题即可在界面中实时可视化整个研究过程。2. 配置优先级重要1. 环境变量最高优先级 2. LangGraph UI 配置 3. Configuration 类的默认值最低优先级该优先级由 configuration.py 的Configuration.from_runnable_config()保证代码先取os.environ.get(name.upper(), configurable.get(name))——即环境变量优先于RunnableConfig中的 UI 配置最后再用 Pydantic 默认值兜底。3. 浏览器兼容性提示访问 LangGraph Studio UI 时推荐使用Firefox获得最佳体验Safari可能因混合内容HTTPS/HTTP出现安全警告如遇问题依次尝试改用 Firefox 或其他浏览器、关闭广告拦截扩展、查看浏览器控制台中的具体错误信息。七、工作原理从 IterDRAG 到 LangGraph 状态机1. 方法论来源项目受IterDRAGIterative Retrieval-Augmented Generation论文启发该方法把查询分解为子查询为每个子查询检索文档并作答再基于已有答案继续检索下一子查询。ollama-deep-researcher的迭代循环与之类似但加入了反思reflection环节给定用户研究主题用本地 LLMOllama / LMStudio生成一条 Web 搜索查询用搜索引擎/工具查找相关来源用 LLM 对检索到的内容做摘要用 LLM反思摘要、识别知识缺口针对缺口生成新的搜索查询循环重复摘要随每次新检索不断迭代更新运行次数由max_web_research_loopsResearch Depth默认 3控制。2. 图结构与执行流程图的编排在 graph.py包含 5 个节点START → generate_query → web_research → summarize_sources → reflect_on_summary │ research_loop_count 未超上限◄──────────┘ │ ▼ finalize_summary → END各节点职责graph.py节点职责关键实现generate_query根据研究主题生成搜索查询结合query_writer_instructions与结构化输出JSON mode 或 Query 工具调用失败时回退到Tell me more about {topic}L138-L189web_research调用所选搜索 API 采集结果按search_api分发到 Tavily / Perplexity / DuckDuckGo / SearXNGresearch_loop_count 1L192-L262summarize_sources新建或增量更新摘要有旧摘要时用Existing SummaryNew Context合并更新注意该节点始终使用普通模式不强制 JSON并可按配置剥离think思考标记L265-L328reflect_on_summary反思知识缺口并生成追问结合reflection_instructions结构化输出follow_up_query与knowledge_gapL331-L384finalize_summary去重来源、拼接最终报告按行去重所有sources_gathered产出## Summary ... ### Sources:结构L387-L418循环控制由条件边route_research完成graph.py当research_loop_count max_web_research_loops时回到web_research否则进入finalize_summary。3. 图状态State状态定义于 state.pySummaryStateresearch_topic、search_query、web_research_resultsoperator.add累加、sources_gatheredoperator.add累加、research_loop_count、running_summarySummaryStateInput仅接收research_topic用户输入SummaryStateOutput仅暴露running_summary最终报告。所有检索来源都会被累积保存在图状态中因此可直接在 LangGraph Studio 里查看每轮收集到的全部来源最终 Markdown 总结也会写入图状态。4. 结构化输出的两种模式与回退机制为保证循环各环节可靠地提取查询字符串项目提供了两种结构化输出路径graph.pyJSON mode默认ChatOllama/ChatLMStudio以formatjson调用提示词prompts.py 中的json_mode_query_instructions、json_mode_reflection_instructions要求输出含指定键的 JSON 对象解析失败则使用回退查询Tool Callinguse_tool_callingtrueLLM 通过bind_tools调用Query/FollowUpQuery工具Pydantic 模型定义了query/rationale或follow_up_query/knowledge_gap字段从tool_calls[0][args]中提取字段失败同样回退。该机制由generate_search_query_with_structured_output()统一封装。注意以下几点模型兼容性使用结构化 JSON 输出时部分小模型难以稳定产出合法 JSON。例如 DeepSeek R1 7B / 1.5B 蒸馏版就存在此问题此时助手会走回退机制用主题构造兜底查询保证流程不断。strip_thinking_tokens默认true推理型模型如 DeepSeek R1会在回复中包裹think.../thinkutils.py 的strip_thinking_tokens()会迭代式剥离这些标记避免污染摘要与 JSON 解析。gpt-oss 与 Tool Calling2025-08-06 更新项目新增了对工具调用与gpt-oss模型的支持。⚠️ 由于Ollama 中的gpt-oss模型不支持 JSON mode使用该系列模型时必须在配置中开启use_tool_calling改用工具调用方式获取结构化输出。八、输出结果图的输出是一份Markdown 文件包含研究总结及其引用来源。最终报告格式由finalize_summary节点拼接为## Summary 研究总结正文 ### Sources: * 标题1 : URL1 * 标题2 : URL2 ...其中来源列表来自format_sources()* title : url格式并在拼接前按行去重utils.py、graph.py。所有检索到的来源与最终总结都会保存在图状态中可在 LangGraph Studio 的状态面板中随时查看。九、Docker 容器化部署仓库自带的 Dockerfile仅以 LangGraph Studio 服务形式运行本项目并不包含 Ollama 依赖服务——Ollama 需要单独运行并通过OLLAMA_BASE_URL环境变量接入。构建镜像docker build -t local-deep-researcher .运行容器示例使用 Tavily 搜索 Ollama 模型docker run --rm -it -p 2024:2024 \ -e SEARCH_APItavily \ -e TAVILY_API_KEYtvly-***YOUR_KEY_HERE*** \ -e LLM_PROVIDERollama \ -e OLLAMA_BASE_URLhttp://host.docker.internal:11434/ \ -e LOCAL_LLMllama3.2 \ local-deep-researcher说明OLLAMA_BASE_URL指向宿主机上的 Ollama 服务Docker Desktop 场景下为http://host.docker.internal:11434/容器内会打印 Opening Studio in your browser...日志但浏览器不会在容器中自动打开Dockerfile 的 CMD 使用了--host 0.0.0.0Dockerfile请在宿主机浏览器中访问 LangGraph Studio Web UI并将baseUrl指向http://127.0.0.1:2024日志中出现的 URL 默认使用0.0.0.0:2024直接访问时需替换为127.0.0.1:2024。十、部署选项与衍生实现本项目本质上是一个 LangGraph 图应用graph.py 中graph builder.compile()因此可复用 LangGraph 生态的各类部署方式LangGraph Platform 等将图发布为服务。官方还提供了对应的 TypeScript 移植版本不含 Perplexity 搜索便于在 Node.js / TS 技术栈中复用同样的研究流程。附录配置速查表以下环境变量均写入.env参考 .env.example环境变量含义默认值LLM_PROVIDERLLM 提供方ollama/lmstudioollamaLOCAL_LLM模型名llama3.2OLLAMA_BASE_URLOllama 服务端点http://localhost:11434LMSTUDIO_BASE_URLLMStudio OpenAI 兼容 API 地址http://localhost:1234/v1SEARCH_API搜索 APIduckduckgo/tavily/perplexity/searxngduckduckgoSEARXNG_URLSearXNG 实例地址http://localhost:8888TAVILY_API_KEYTavily API Key无PERPLEXITY_API_KEYPerplexity API Key无MAX_WEB_RESEARCH_LOOPS最大研究循环步数3FETCH_FULL_PAGE是否抓取完整页面True源码默认对应地LangGraph Studio 的 configuration 面板中还提供Strip Thinking Tokens剥离think标记与Use Tool Calling以工具调用替代 JSON mode两个开关分别对应Configuration.strip_thinking_tokens与Configuration.use_tool_calling字段。合理组合这些配置即可让ollama-deep-researcher在低配本地模型与推理型模型上都稳定产出带引用的深度研究报告。赞分享AI Agent大模型交互助手后端【免费下载链接】ollama-deep-researcherFully local web research and report writing assistant项目地址https://gitcode.com/GitHub_Trending/ol/ollama-deep-researcher点击查看免费下载相关推荐SummarySummary Transformer架构已成为自然语言处理的主流模型... Sources: 1. Attention Is All You Need aAI Agent大模型交互助手后端本地研究终极方案ollama-deep-researcher全攻略本地研究终极方案ollama deep researcher全攻略 ollama deep researcher是一款完全本地化的网络研究助手它利用OllaAI Agent大模型交互助手后端从新手到专家cann-bench算子评测平台的进阶使用技巧与最佳实践从新手到专家cann bench算子评测平台的进阶使用技巧与最佳实践 在AI算子开发领域cann bench算子评测平台已经成为评测AI生成Ascend C人工智能模型评测AI 评测Agent 评测CANNAscend上一篇Langchain-Chatchat终极容器化部署指南从Docker到Kubernetes完整实践下一篇Spacedrive 2024路线图探索分布式文件管理的终极未来创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考