langchain-ai / ollama-deep-researcher
- воскресенье, 16 марта 2025 г. в 00:00:03
Fully local web research and report writing assistant
Ollama Deep Researcher is a fully local web research assistant that uses any LLM hosted by Ollama. Give it a topic and it will generate a web search query, gather web search results (via Tavily by default), summarize the results of web search, reflect on the summary to examine knowledge gaps, generate a new search query to address the gaps, search, and improve the summary for a user-defined number of cycles. It will provide the user a final markdown summary with all sources used.
Short summary:
See it in action or build it yourself? Check out these helpful video tutorials:
ollama pull deepseek-r1:8b
git clone https://github.com/langchain-ai/ollama-deep-researcher.git
cd ollama-deep-researcher
By default, it will use DuckDuckGo for web search, which does not require an API key. But you can also use Tavily or Perplexity by adding their API keys to the environment file:
cp .env.example .env
The following environment variables are supported:
OLLAMA_BASE_URL
- the endpoint of the Ollama service, defaults to http://localhost:11434
if not setOLLAMA_MODEL
- the model to use, defaults to llama3.2
if not setSEARCH_API
- the search API to use, either duckduckgo
(default) or tavily
or perplexity
. You need to set the corresponding API key if tavily or perplexity is used.TAVILY_API_KEY
- the tavily API key to usePERPLEXITY_API_KEY
- the perplexity API key to useMAX_WEB_RESEARCH_LOOPS
- the maximum number of research loop steps, defaults to 3
FETCH_FULL_PAGE
- fetch the full page content if using duckduckgo
for the search API, defaults to false
python -m venv .venv
source .venv/bin/activate
# Install uv package manager
curl -LsSf https://astral.sh/uv/install.sh | sh
uvx --refresh --from "langgraph-cli[inmem]" --with-editable . --python 3.11 langgraph dev
ollama pull deepseek-r1:8b
git clone https://github.com/langchain-ai/ollama-deep-researcher.git
cd ollama-deep-researcher
Select a web search tool, as above.
(Recommended) Create a virtual environment: Install Python 3.11
(and add to PATH during installation). Restart your terminal to ensure Python is available, then create and activate a virtual environment:
python -m venv .venv
.venv\Scripts\Activate.ps1
# Install dependencies
pip install -e .
pip install -U "langgraph-cli[inmem]"
# Start the LangGraph server
langgraph dev
When you launch LangGraph server, you should see the following output and Studio will open in your browser:
Ready!
Docs: http://127.0.0.1:2024/docs
LangGraph Studio Web UI: https://smith.langchain.com/studio/?baseUrl=http://127.0.0.1:2024
Open LangGraph Studio Web UI
via the URL in the output above.
In the configuration
tab:
DuckDuckGo
)llama3.2
)3
)Give the assistant a topic for research, and you can visualize its process!
When selecting a local LLM, note that this application relies on the model's ability to produce structured JSON output. Some models may have difficulty with this requirement:
Working well:
Known issues:
If you encounter JSON-related errors (e.g., KeyError: 'query'
), try switching to one of the confirmed working models.
When accessing the LangGraph Studio UI:
Ollama Deep Researcher is inspired by IterDRAG. This approach will decompose a query into sub-queries, retrieve documents for each one, answer the sub-query, and then build on the answer by retrieving docs for the second sub-query. Here, we do similar:
configuration
tab)The output of the graph is a markdown file containing the research summary, with citations to the sources used.
All sources gathered during research are saved to the graph state.
You can visualize them in the graph state, which is visible in LangGraph Studio:
The final summary is saved to the graph state as well:
There are various ways to deploy this graph.
See Module 6 of LangChain Academy for a detailed walkthrough of deployment options with LangGraph.
A TypeScript port of this project (without Perplexity search) is available at: https://github.com/PacoVK/ollama-deep-researcher-ts
The included Dockerfile
only runs LangChain Studio with ollama-deep-researcher as a service, but does not include Ollama as a dependant service. You must run Ollama separately and configure the OLLAMA_BASE_URL
environment variable. Optionally you can also specify the Ollama model to use by providing the OLLAMA_MODEL
environment variable.
Clone the repo and build an image:
$ docker build -t ollama-deep-researcher .
Run the container:
$ docker run --rm -it -p 2024:2024 \
-e SEARCH_API="tavily" \
-e TAVILY_API_KEY="tvly-***YOUR_KEY_HERE***" \
-e OLLAMA_BASE_URL="http://host.docker.internal:11434/" \
-e OLLAMA_MODEL="llama3.2" \
ollama-deep-researcher
NOTE: You will see log message:
2025-02-10T13:45:04.784915Z [info ] 🎨 Opening Studio in your browser... [browser_opener] api_variant=local_dev message=🎨 Opening Studio in your browser...
URL: https://smith.langchain.com/studio/?baseUrl=http://0.0.0.0:2024
...but the browser will not launch from the container.
Instead, visit this link with the correct baseUrl IP address: https://smith.langchain.com/studio/thread?baseUrl=http://127.0.0.1:2024