Skip to content

langchain-ai/local-deep-researcher

Repository files navigation

Local Deep Researcher

Local Deep Researcher is a fully local web research assistant that uses any LLM hosted by Ollama or LMStudio. Give it a topic and it will generate a web search query, gather web search results, summarize the results of web search, reflect on the summary to examine knowledge gaps, generate a new search query to address the gaps, and repeat for a user-defined number of cycles. It will provide the user a final markdown summary with all sources used to generate the summary.

ollama-deep-research

Short summary video:

Ollama.Deep.Researcher.Overview-enhanced-v2-90p.mp4

πŸ“Ί Video Tutorials

See it in action or build it yourself? Check out these helpful video tutorials:

πŸš€ Quickstart

Clone the repository:

git clone https://github.com/langchain-ai/local-deep-researcher.git
cd local-deep-researcher

Then edit the .env file to customize the environment variables according to your needs. These environment variables control the model selection, search tools, and other configuration settings. When you run the application, these values will be automatically loaded via python-dotenv (because langgraph.json point to the "env" file).

cp .env.example .env

Selecting local model with Ollama

  1. Download the Ollama app for Mac here.

  2. Pull a local LLM from Ollama. As an example:

ollama pull deepseek-r1:8b
  1. Optionally, update the .env file with the following Ollama configuration settings.
  • If set, these values will take precedence over the defaults set in the Configuration class in configuration.py.
OLLAMA_BASE_URL="url" # Ollama service endpoint, defaults to `http://localhost:11434` 
OLLAMA_MODEL=model # the model to use, defaults to `llama3.2` if not set

Selecting local model with LMStudio

  1. Download and install LMStudio from here.

  2. In LMStudio:

    • Download and load your preferred model (e.g., qwen_qwq-32b)
    • Go to the "Local Server" tab
    • Start the server with the OpenAI-compatible API
    • Note the server URL (default: http://localhost:1234/v1)
  3. Optionally, update the .env file with the following LMStudio configuration settings.

  • If set, these values will take precedence over the defaults set in the Configuration class in configuration.py.
LLM_PROVIDER=lmstudio
LOCAL_LLM=qwen_qwq-32b  # Use the exact model name as shown in LMStudio
LMSTUDIO_BASE_URL=http://localhost:1234/v1

Selecting search tool

By default, it will use DuckDuckGo for web search, which does not require an API key. But you can also use SearXNG, Tavily or Perplexity by adding their API keys to the environment file. Optionally, update the .env file with the following search tool configuration and API keys. If set, these values will take precedence over the defaults set in the Configuration class in configuration.py.

SEARCH_API=xxx # the search API to use, such as `duckduckgo` (default)
TAVILY_API_KEY=xxx # the tavily API key to use
PERPLEXITY_API_KEY=xxx # the perplexity API key to use
MAX_WEB_RESEARCH_LOOPS=xxx # the maximum number of research loop steps, defaults to `3`
FETCH_FULL_PAGE=xxx # fetch the full page content (with `duckduckgo`), defaults to `false`

Running with LangGraph Studio

Mac

  1. (Recommended) Create a virtual environment:
python -m venv .venv
source .venv/bin/activate
  1. Launch LangGraph server:
# 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

Windows

  1. (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
  1. Launch LangGraph server:
# Install dependencies
pip install -e .
pip install -U "langgraph-cli[inmem]"            

# Start the LangGraph server
langgraph dev

Using the LangGraph Studio UI

When you launch LangGraph server, you should see the following output and Studio will open in your browser:

Ready!

API: http://127.0.0.1:2024

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 above. In the configuration tab, you can directly set various assistant configurations. Keep in mind that the priority order for configuration values is:

1. Environment variables (highest priority)
2. LangGraph UI configuration
3. Default values in the Configuration class (lowest priority)
Screenshot 2025-01-24 at 10 08 31 PM

Give the assistant a topic for research, and you can visualize its process!

Screenshot 2025-01-24 at 10 08 22 PM

Model Compatibility Note

When selecting a local LLM, set steps use structured JSON output. Some models may have difficulty with this requirement, and the assistant has fallback mechanisms to handle this. As an example, the DeepSeek R1 (7B) and DeepSeek R1 (1.5B) models have difficulty producing required JSON output, and the assistant will use a fallback mechanism to handle this.

Browser Compatibility Note

When accessing the LangGraph Studio UI:

  • Firefox is recommended for the best experience
  • Safari users may encounter security warnings due to mixed content (HTTPS/HTTP)
  • If you encounter issues, try:
    1. Using Firefox or another browser
    2. Disabling ad-blocking extensions
    3. Checking browser console for specific error messages

How it works

Local 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:

  • Given a user-provided topic, use a local LLM (via Ollama or LMStudio) to generate a web search query
  • Uses a search engine / tool to find relevant sources
  • Uses LLM to summarize the findings from web search related to the user-provided research topic
  • Then, it uses the LLM to reflect on the summary, identifying knowledge gaps
  • It generates a new search query to address the knowledge gaps
  • The process repeats, with the summary being iteratively updated with new information from web search
  • Runs for a configurable number of iterations (see configuration tab)

Outputs

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:

Screenshot 2024-12-05 at 4 08 59 PM

The final summary is saved to the graph state as well:

Screenshot 2024-12-05 at 4 10 11 PM

Deployment Options

There are various ways to deploy this graph. See Module 6 of LangChain Academy for a detailed walkthrough of deployment options with LangGraph.

TypeScript Implementation

A TypeScript port of this project (without Perplexity search) is available at: https://github.com/PacoVK/ollama-deep-researcher-ts

Running as a Docker container

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

About

Fully local web research and report writing assistant

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published