← Back to results

HTTP/1

.1 200 OK Date: Thu, 02 Jul 2026 16:54:10 GMT Content-Type: text/html; charset=utf-8 Vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With, Sec-Fetch-Site,Accept-Encoding, Accept, X-Requested-With ETag: W/"554c4addd0da505c1c2f60255b83a6e8" Cache-Control: max-age=0, private, must-revalidate Strict-Transport-Security: max-age=31536000; includeSubdomains; preload X-Frame-Options: deny X-Content-Type-Options: nosniff X-XSS-Protection: 0 Referrer-Policy: no-referrer-when-downgrade Content-Security-Policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com github.githubassets.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net productionresultssa1.blob.core.windows.net productionresultssa2.blob.core.windows.net productionresultssa3.blob.core.windows.net productionresultssa4.blob.core.windows.net productionresultssa5.blob.core.windows.net productionresultssa6.blob.core.windows.net productionresultssa7.blob.core.windows.net productionresultssa8.blob.core.windows.net productionresultssa9.blob.core.windows.net productionresultssa10.blob.core.windows.net productionresultssa11.blob.core.windows.net productionresultssa12.blob.core.windows.net productionresultssa13.blob.core.windows.net productionresultssa14.blob.core.windows.net productionresultssa15.blob.core.windows.net productionresultssa16.blob.core.windows.net productionresultssa17.blob.core.windows.net productionresultssa18.blob.core.windows.net productionresultssa19.blob.core.windows.net github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com wss://alive-staging.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com wss://production-copilot-host.webpubsub.azure.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com user-images.githubusercontent.com private-user-images.githubusercontent.com opengraph.githubassets.com marketplace-screenshots.githubusercontent.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com explore-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com secured-user-images.githubusercontent.com private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com github.githubassets.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/ Server: github.com Accept-Ranges: bytes Set-Cookie: _gh_sess=gZmRSU3ZQ%2BjupDMpS1Ji2QtmtdofWsJefUTR6NNrxrFBUchhiMdmnvjZ2yJq8JnXcYucoPjbgtrAvXccuGYxBGmI8HV671zkWaX6HIDGcDi2f%2FIFIFyWWuXMwNme0g5RAEXii9Mm%2B2sIvt2U5JFoF9d%2BvNF9uTIS5lO0IygKFoGaMAsDrxqhGpf%2BgB0K7aU0q1%2BYubNG07o7VTmxNYqNaYGco8OwnKrwlDw0NUwKTt5tzT8ghACXPcK8L1F5zemFUNfOW9c2sr8QZDcK0OP8VQ%3D%3D--oUXbDVgQU1F6RFeh--nN5%2FcHOY2ruxoKuL8A%2FVFQ%3D%3D; path=/; HttpOnly; secure; SameSite=Lax Set-Cookie: _octo=GH1.1.2139216860.1783011249; expires=Fri, 02 Jul 2027 16:54:09 GMT; domain=.github.com; path=/; secure; SameSite=Lax Set-Cookie: logged_in=no; expires=Fri, 02 Jul 2027 16:54:09 GMT; domain=.github.com; path=/; HttpOnly; secure; SameSite=Lax X-GitHub-Request-Id: CBBA:23ED7E:490094:648031:6A4697A7 Transfer-Encoding: chunked 8000 GitHub - zilliztech/deep-searcher: Open Source Deep Research Alternative to Reason and Search on Private Data. Written in Python. · GitHub Skip to content Navigation Menu Toggle navigation Sign in Appearance settings Platform AI CODE CREATION GitHub Copilot Write better code with AI GitHub Copilot app Direct agents from issue to merge MCP Registry New Integrate external tools DEVELOPER WORKFLOWS Actions Automate any workflow Codespaces Instant dev environments Issues Plan and track work Code Review Manage code changes APPLICATION SECURITY GitHub Advanced Security Find and fix vulnerabilities Code security Secure your code as you build Secret protection Stop leaks before they start EXPLORE Why GitHub Documentation Blog Changelog Marketplace View all features Solutions BY COMPANY SIZE Enterprises Small and medium teams Startups Nonprofits BY USE CASE App Modernization DevSecOps DevOps CI/CD View all use cases BY INDUSTRY Healthcare Financial services Manufacturing Government View all industries View all solutions Resources EXPLORE BY TOPIC AI Software Development DevOps Security View all topics EXPLORE BY TYPE Customer stories Events & webinars Ebooks & reports Business insights GitHub Skills SUPPORT & SERVICES Documentation Customer support Community forum Trust center Partners View all resources Open Source COMMUNITY GitHub Sponsors Fund open source developers PROGRAMS Security Lab Maintainer Community Accelerator GitHub Stars Archive Program REPOSITORIES Topics Trending Collections Enterprise ENTERPRISE SOLUTIONS Enterprise platform AI-powered developer platform AVAILABLE ADD-ONS GitHub Advanced Security Enterprise-grade security features Copilot for Business Enterprise-grade AI features Premium Support Enterprise-grade 24/7 support Pricing Search or jump to... Search code, repositories, users, issues, pull requests... --> Search Clear Search syntax tips Provide feedback --> We read every piece of feedback, and take your input very seriously. Include my email address so I can be contacted Cancel Submit feedback Saved searches Use saved searches to filter your results more quickly --> Name Query To see all available qualifiers, see our documentation . Cancel Create saved search Sign in Sign up Appearance settings Resetting focus You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert {{ message }} Uh oh! There was an error while loading. Please reload this page . zilliztech / deep-searcher Public Notifications You must be signed in to change notification settings Fork 764 Star 7.9k Code Issues 42 Pull requests 11 Actions Projects Security and quality 0 Insights Additional navigation options Code Issues Pull requests Actions Projects Security and quality Insights zilliztech/deep-searcher   master Branches Tags Go to file Code Open more actions menu Folders and files Name Name Last commit message Last commit date Latest commit   History 212 Commits 212 Commits .github .github     .vscode .vscode     assets/ pic assets/ pic     deepsearcher deepsearcher     docs docs     evaluation evaluation     examples examples     tests tests     .gitignore .gitignore     .python-version .python-version     CONTRIBUTING.md CONTRIBUTING.md     Dockerfile Dockerfile     LICENSE LICENSE     MAINTAINERS MAINTAINERS     Makefile Makefile     OWNERS OWNERS     OWNERS_ALIASES OWNERS_ALIASES     README.md README.md     env.example env.example     main.py main.py     mkdocs.yml mkdocs.yml     pyproject.toml pyproject.toml     uv.lock uv.lock     View all files Repository files navigation README Contributing Apache-2.0 license More items DeepSearcher combines cutting-edge LLMs (OpenAI o3, Qwen3, DeepSeek, Grok 4, Claude 4 Sonnet, Llama 4, QwQ, etc.) and Vector Databases (Milvus, Zilliz Cloud etc.) to perform search, evaluation, and reasoning based on private data, providing highly accurate answer and comprehensive report. This project is suitable for enterprise knowledge management, intelligent Q&A systems, and information retrieval scenarios. 🚀 Features Private Data Search : Maximizes the utilization of enterprise internal data while ensuring data security. When necessary, it can integrate online content for more accurate answers. Vector Database Management : Supports Milvus and other vector databases, allowing data partitioning for efficient retrieval. Flexible Embedding Options : Compatible with multiple embedding models for optimal selection. Multiple LLM Support : Supports DeepSeek, OpenAI, and other large models for intelligent Q&A and content generation. Document Loader : Supports local file loading, with web crawling capabilities under development. 🎉 Demo 📖 Quick Start Installation Install DeepSearcher using one of the following methods: Option 1: Using pip Create and activate a virtual environment(Python 3.10 version is recommended). python -m venv .venv source .venv/bin/activate Install DeepSearcher pip install deepsearcher For optional dependencies, e.g., ollama: pip install " deepsearcher[ollama] " Option 2: Install in Development Mode We recommend using uv for faster and more reliable installation. Follow the offical installation instructions to install it. Clone the repository and navigate to the project directory: git clone https://github.com/zilliztech/deep-searcher.git && cd deep-searcher Synchronize and install dependencies: uv sync source .venv/bin/activate For more detailed development setup and optional dependency installation options, see CONTRIBUTING.md . Quick start demo To run this quick start demo, please prepare your OPENAI_API_KEY in your environment variables. If you change the LLM in the configuration, make sure to prepare the corresponding API key. from deepsearcher . configuration import Configuration , init_config from deepsearcher . online_query import query config = Configuration () # Customize your config here, # more configuration see the Configuration Details section below. config . set_provider_config ( "llm" , "OpenAI" , { "model" : "o1-mini" }) config . set_provider_config ( "embedding" , "OpenAIEmbedding" , { "model" : "text-embedding-ada-002" }) init_config ( config = config ) # Load your local data from deepsearcher . offline_loading import load_from_local_files load_from_local_files ( paths_or_directory = your_local_path ) # (Optional) Load from web crawling (`FIRECRAWL_API_KEY` env variable required) from deepsearcher . offline_loading import load_from_website load_from_website ( urls = website_url ) # Query result = query ( "Write a report about xxx." ) # Your question here Configuration Details: LLM Configuration config.set_provider_config("llm", "(LLMName)", "(Arguments dict)") The "LLMName" can be one of the following: ["DeepSeek", "OpenAI", "XAI", "SiliconFlow", "Aliyun", "PPIO", "TogetherAI", "Gemini", "Ollama", "Novita", "Jiekou.AI"] The "Arguments dict" is a dictionary that contains the necessary arguments for the LLM class. Example (OpenAI) Make sure you have prepared your OPENAI API KEY as an env variable OPENAI_API_KEY . config.set_provider_config("llm", "OpenAI", {"model": "o1-mini"}) More details about OpenAI models: https://platform.openai.com/docs/models Example (Qwen3 from Aliyun Bailian) Make sure you have prepared your Bailian API KEY as an env variable DASHSCOPE_API_KEY . config.set_provider_config("llm", "Aliyun", {"model": "qwen-plus-latest"}) More details about Aliyun Bailian models: https://bailian.console.aliyun.com Example (Qwen3 from OpenRouter) config.set_provider_config("llm", "OpenAI", {"model": "qwen/qwen3-235b-a22b:free", "base_url": "https://openrouter.ai/api/v1", "api_key": "OPENROUTER_API_KEY"}) More details about OpenRouter models: https://openrouter.ai/qwen/qwen3-235b-a22b:free Example (DeepSeek from official) Make sure you have prepared your DEEPSEEK API KEY as an env variable DEEPSEEK_API_KEY . config.set_provider_config("llm", "DeepSeek", {"model": "deepseek-reasoner"}) More details about DeepSeek: https://api-docs.deepseek.com/ Example (DeepSeek from SiliconFlow) Make sure you have prepared your SILICONFLOW API KEY as an env variable SILICONFLOW_API_KEY . config.set_provider_config("llm", "SiliconFlow", {"model": "deepseek-ai/DeepSeek-R1"}) More details about SiliconFlow: https://docs.siliconflow.cn/quickstart Example (DeepSeek from TogetherAI) Make sure you have prepared your TOGETHER API KEY as an env variable TOGETHER_API_KEY . For deepseek R1: config.set_provider_config("llm", "TogetherAI", {"model": "deepseek-ai/DeepSeek-R1"}) For Llama 4: config.set_provider_config("llm", "TogetherAI", {"model": "meta-llama/Llama-4-Scout-17B-16E-Instruct"}) You need to install together before running, execute: pip install together . More details about TogetherAI: https://www.together.ai/ Example (XAI Grok) Make sure you have prepared your XAI API KEY as an env variable XAI_API_KEY . config.set_provider_config("llm", "XAI", {"model": "grok-4-0709"}) More details about XAI Grok: https://docs.x.ai/docs/overview#featured-models Example (Claude) Make sure you have prepared your ANTHROPIC API KEY as an env variable ANTHROPIC_API_KEY . config.set_provider_config("llm", "Anthropic", {"model": "claude-sonnet-4-0"}) More details about Anthropic Claude: https://docs.anthropic.com/en/home Example (Google Gemini) Make sure you have prepared your GEMINI API KEY as an env variable GEMINI_API_KEY . config.set_provider_config('llm', 'Gemini', { 'model': 'gemini-2.0-flash' }) You need to install gemini before running, execute: pip install google-genai . More details about Gemini: https://ai.google.dev/gemini-api/docs Example (DeepSeek from PPIO) Make sure you have prepared your PPIO API KEY as an env variable PPIO_API_KEY . You can create an API Key here . config.set_provider_config("llm", "PPIO", {"model": "deepseek/deepseek-r1-turbo"}) More details about PPIO: https://ppinfra.com/docs/get-started/quickstart.html?utm_source=github_deep-searcher Example (Claude Sonnet 4.5 from Jiekou.AI) Make sure you have prepared your Jiekou.AI API KEY as an env variable JIEKOU_API_KEY . You can create an API Key here . config.set_provider_config("llm", "JiekouAI", {"model": "claude-sonnet-4-5-20250929"}) More details about Jiekou.AI: https://docs.jiekou.ai/docs/support/quickstart?utm_source=github_deep-searcher Example (Ollama) Follow these instructions to set up and run a local Ollama instance: Download and install Ollama onto the available supported platforms (including Windows Subsystem for Linux). View a list of available models via the model library . Fetch available LLM models via ollama pull <name-of-model> Example: ollama pull qwen3 To chat directly with a model from the command line, use ollama run <name-of-model> . By default, Ollama has a REST API for running and managing models on http://localhost:11434 . config.set_provider_config("llm", "Ollama", {"model": "qwen3"}) Example (Volcengine) Make sure you have prepared your Volcengine API KEY as an env variable VOLCENGINE_API_KEY . You can create an API Key here . config.set_provider_config("llm", "Volcengine", {"model": "deepseek-r1-250120"}) More details about Volcengine: https://www.volcengine.com/docs/82379/1099455?utm_source=github_deep-searcher Example (GLM) Make sure you have prepared your GLM API KEY as an env variable GLM_API_KEY . config.set_provider_config("llm", "GLM", {"model": "glm-4-plus"}) You need to install zhipuai before running, execute: pip install zhipuai . More details about GLM: https://bigmodel.cn/dev/welcome Example (Amazon Bedrock) Make sure you have prepared your Amazon Bedrock API KEY as an env variable AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY . config.set_provider_config("llm", "Bedrock", {"model": "us.deepseek.r1-v1:0"}) You need to install boto3 before running, execute: pip install boto3 . More details about Amazon Bedrock: https://docs.aws.amazon.com/bedrock/ Example (IBM watsonx.ai) Make sure you have prepared your watsonx.ai credentials as env variables WATSONX_APIKEY , WATSONX_URL , and WATSONX_PROJECT_ID . config.set_provider_config("llm", "watsonx", {"model": "us.deepseek.r1-v1:0"}) You need to install ibm-watsonx-ai before running, execute: pip install ibm-watsonx-ai . More details about IBM watsonx.ai: https://www.ibm.com/products/watsonx-ai/foundation-models Embedding Model Configuration config.set_provider_config("embedding", "(EmbeddingModelName)", "(Arguments dict)") The "EmbeddingModelName" can be one of the following: ["MilvusEmbedding", "OpenAIEmbedding", "VoyageEmbedding", "SiliconflowEmbedding", "PPIOEmbedding", "NovitaEmbedding", "JiekouAIEmbedding"] The "Arguments dict" is a dictionary that contains the necessary arguments for the embedding model class. Example (OpenAI embedding) Make sure you have prepared your OpenAI API KEY as an env variable OPENAI_API_KEY . config.set_provider_config("embedding", "OpenAIEmbedding", {"model": "text-embedding-3-small"}) More details about OpenAI models: https://platform.openai.com/docs/guides/embeddings/use-cases Example (OpenAI embedding Azure) Make sure you have prepared your OpenAI API KEY as an env variable OPENAI_API_KEY . config.set_provider_config("embedding", "OpenAIEmbedding", { "model": "text-embedding-ada-002", "azure_endpoint": "https://.openai.azure.com/", "api_version": "2023-05-15" }) Example (Pymilvus built-in embedding model) Use the built-in embedding model in Pymilvus, you can set the model name as "default" , "BAAI/bge-base-en-v1.5" , "BAAI/bge-large-en-v1.5" , "jina-embeddings-v3" , etc. See [milvus_embedding.py](deepsearcher/embedding/milvus_embedding.py) for more details. config.set_provider_config("embedding", "MilvusEmbedding", {"model": "BAAI/bge-base-en-v1.5"}) config.set_provider_config("embedding", "MilvusEmbedding", {"model": "jina-embeddings-v3"}) For Jina's embedding model, you need JINAAI_API_KEY . You need to install pymilvus model before running, execute: pip install pymilvus.model . More details about Pymilvus: https://milvus.io/docs/embeddings.md Example (VoyageAI embedding) Make sure you have prepared your VOYAGE API KEY as an env variable VOYAGE_API_KEY . config.set_provider_config("embedding", "VoyageEmbedding", {"model": "voyage-3"}) You need to install voyageai before running, execute: pip install voyageai . More details about VoyageAI: https://docs.voyageai.com/embeddings/ Example (Amazon Bedrock embedding) config.set_provider_config("embedding", "BedrockEmbedding", {"model": "amazon.titan-embed-text-v2:0"}) You need to install boto3 before running, execute: pip install boto3 . More details about Amazon Bedrock: https://docs.aws.amazon.com/bedrock/ Example (Novita AI embedding) Make sure you have prepared your Novita AI API KEY as an env variable NOVITA_API_KEY . config.set_provider_config("embedding", "NovitaEmbedding", {"model": "baai/bge-m3"}) More details about Novita AI: https://novita.ai/docs/api-reference/model-apis-llm-create-embeddings?utm_source=github_deep-searcher&utm_medium=github_readme&utm_campaign=link Example (Siliconflow embedding) Make sure you have prepared your Siliconflow API KEY as an env variable SILICONFLOW_API_KEY . config.set_provider_config("embedding", "SiliconflowEmbedding", {"model": "BAAI/bge-m3"}) More details about Siliconflow: https://docs.siliconflow.cn/en/api-reference/embeddings/create-embeddings Example (Volcengine embedding) Make sure you have prepared your Volcengine API KEY as an env variable VOLCENGINE_API_KEY . config.set_provider_config("embedding", "VolcengineEmbedding", {"model": "doubao-embedding-text-240515"}) More details about Volcengine: https://www.volcengine.com/docs/82379/1302003 Example (GLM embedding) Make sure you have prepared your GLM API KEY as an env variable GLM_API_KEY . config.set_provider_config("embedding", "GLMEmbedding", {"model": "embedding-3"}) You need to install zhipuai before running, execute: pip install zhipuai . More details about GLM: https://bigmodel.cn/dev/welcome Example (Google Gemini embedding) Make sure you have prepared your Gemini API KEY as an env variable GEMINI_API_KEY . config.set_provider_config("embedding", "GeminiEmbedding", {"model": "text-embedding-004"}) You need to install gemini before running, execute: pip install google-genai . More details about Gemini: https://ai.google.dev/gemini-api/docs Example (Ollama embedding) config.set_provider_config("embedding", "OllamaEmbedding", {"model": "bge-m3"}) You need to install ollama before running, execute: pip install ollama . More details about Ollama Python SDK: https://github.com/ollama/ollama-python Example (PPIO embedding) Make sure you have prepared your PPIO API KEY as an env variable PPIO_API_KEY . config.set_provider_config("embedding", "PPIOEmbedding", {"model": "baai/bge-m3"}) More details about PPIO: https://ppinfra.com/docs/get-started/quickstart.html?utm_source=github_deep-searcher Example (Jiekou.AI embedding) Make sure you have prepared your Jiekou.AI API KEY as an env variable JIEKOU_API_KEY . config.set_provider_config("embedding", "JiekouAIEmbedding", {"model": "qwen/qwen3-embedding-8b"}) More details about Jiekou.AI: https://docs.jiekou.ai/docs/support/quickstart?utm_source=github_deep-searcher Example (FastEmbed embedding) config.set_provider_config("embedding", "FastEmbedEmbedding", {"model": "intfloat/multilingual-e5-large"}) You need to install fastembed before running, execute: pip install fastembed . More details about fastembed: https://github.com/qdrant/fastembed Example (IBM watsonx.ai embedding) Make sure you have prepared your WatsonX credentials as env variables WATSONX_APIKEY , WATSONX_URL , and WATSONX_PROJECT_ID . config.set_provider_config("embedding", "WatsonXEmbedding", {"model": "ibm/slate-125m-english-rtrvr-v2"}) config.set_provider_config("embedding", "WatsonXEmbedding", {"model": "sentence-transformers/all-minilm-l6-v2"}) You need to install ibm-watsonx-ai before running, execute: pip install ibm-watsonx-ai . More details about IBM watsonx.ai: https://www.ibm.com/products/watsonx-ai/foundation-models Vector Database Configuration config.set_provider_config("vector_db", "(VectorDBName)", "(Arguments dict)") The "VectorDBName" can be one of the following: ["Milvus"] (Under development) The "Arguments dict" is a dictionary that contains the necessary arguments for the 1798 Vector Database class. Example (Milvus) config.set_provider_config("vector_db", "Milvus", {"uri": "./milvus.db", "token": ""}) More details about Milvus Config: Setting the uri as a local file, e.g. ./milvus.db , is the most convenient method, as it automatically utilizes Milvus Lite to store all data in this file. If you have a large-scale dataset, you can set up a more performant Milvus server using Docker or Kubernetes . In this setup, use the server URI, e.g., http://localhost:19530 , as your uri . You can also use any other connection parameters supported by Milvus such as host , user , password , or secure . If you want to use Zilliz Cloud , the fully managed cloud service for Milvus, adjust the uri and token according to the Public Endpoint and API Key in Zilliz Cloud. Example (AZURE AI Search) config.set_provider_config("vector_db", "AzureSearch", { "endpoint": "https://.search.windows.net", "index_name": "", "api_key": "", "vector_field": "" }) More details about Milvus Config: File Loader Configuration config.set_provider_config("file_loader", "(FileLoaderName)", "(Arguments dict)") The "FileLoaderName" can be one of the following: ["PDFLoader", "TextLoader", "UnstructuredLoader"] The "Arguments dict" is a dictionary that contains the necessary arguments for the File Loader class. Example (Unstructured) You can use Unstructured in two ways: With API: Set environment variables UNSTRUCTURED_API_KEY and UNSTRUCTURED_API_URL Without API: Use the local processing mode by simply not setting these environment variables config.set_provider_config("file_loader", "UnstructuredLoader", {}) Currently supported file types: ["pdf"] (Under development) Installation requirements: Install ingest pipeline: pip install unstructured-ingest For all document formats: pip install "unstructured[all-docs]" For specific formats (e.g., PDF only): pip install "unstructured[pdf]" More information: Unstructured documentation: https://docs.unstructured.io/ingestion/overview Installation guide: https://docs.unstructured.io/open-source/installation/full-installation Example (Docling) config.set_provider_config("file_loader", "DoclingLoader", {}) Currently supported file types: please refer to the Docling documentation: https://docling-project.github.io/docling/usage/supported_formats/#supported-output-formats You need to install docling before running, execute: pip install docling . More details about Docling: https://docling-project.github.io/docling/ Web Crawler Configuration config.set_provider_config("web_crawler", "(WebCrawlerName)", "(Arguments dict)") The "WebCrawlerName" can be one of the following: ["FireCrawlCrawler", "Crawl4AICrawler", "JinaCrawler"] The "Arguments dict" is a dictionary that contains the necessary arguments for the Web Crawler class. Example (FireCrawl) Make sure you have prepared your FireCrawl API KEY as an env variable FIRECRAWL_API_KEY . config.set_provider_config("web_crawler", "FireCrawlCrawler", {}) More details about FireCrawl: https://docs.firecrawl.dev/introduction Example (Crawl4AI) Make sure you have run crawl4ai-setup in your environment. config.set_provider_config("web_crawler", "Crawl4AICrawler", {"browser_config": {"headless": True, "verbose": True}}) You need to install crawl4ai before running, execute: pip install crawl4ai . More details about Crawl4AI: https://docs.crawl4ai.com/ Example (Jina Reader) Make sure you have prepared your Jina Reader API KEY as an env variable JINA_API_TOKEN or JINAAI_API_KEY . config.set_provider_config("web_crawler", "JinaCrawler", {}) More details about Jina Reader: https://jina.ai/reader/ Example (Docling) config.set_provider_config("web_crawler", "DoclingCrawler", {}) Currently supported file types: please refer to the Docling documentation: https://docling-project.github.io/docling/usage/supported_formats/#supported-output-formats You need to install docling before running, execute: pip install docling . More details about Docling: https://docling-project.github.io/docling/ Python CLI Mode Load deepsearcher load " your_local_path_or_url " # load into a specific collection deepsearcher load " your_local_path_or_url " --collection_name " your_collection_name " --collection_desc " your_collection_description " Example loading from local file: deepsearcher load " /path/to/your/local/file.pdf " # or more files at once deepsearcher load " /path/to/your/local/file1.pdf " " /path/to/your/local/file2.md " Example loading from url ( Set FIRECRAWL_API_KEY in your environment variables, see FireCrawl for more details ): deepsearcher load " https://www.wikiwand.com/en/articles/DeepSeek " Query deepsearcher query " Write a report about xxx. " More help information deepsearcher --help For more help information about a specific subcommand, you can use deepsearcher [subcommand] --help . deepsearcher load --help deepsearcher query --help Deployment Configure modules You can configure all arguments by modifying config.yaml to set up your system with default modules. For example, set your OPENAI_API_KEY in the llm section of the YAML file. Start service The main script will run a FastAPI service with default address localhost:8000 . $ python main.py Access via browser You can open url http://localhost:8000/docs in browser to access the web service. Click on the button "Try it out", it allows you to fill the parameters and directly interact with the API. ❓ Q&A Q1 : Why I failed to parse LLM output format / How to select the LLM? A1 : Small LLMs struggle to follow the prompt to generate a desired response, which usually cause the format parsing problem. A better practice is to use large reasoning models e.g. deepseek-r1 671b, OpenAI o-series, Claude 4 sonnet, etc. as your LLM. Q2 : OSError: We couldn't connect to ' https://huggingface.co ' to load this file, couldn't find it in the cached files and it looks like GPTCache/paraphrase-albert-small-v2 is not the path to a directory containing a file named config.json. Checkout your internet connection or see how to run the library in offline mode at ' https://huggingface.co/docs/transformers/installation#offline-mode '. A2 : This is mainly due to abnormal access to huggingface, which may be a network or permission problem. You can try the following two methods: If there is a network problem, set up a proxy, try adding the following environment variable. export HF_ENDPOINT=https://hf-mirror.com If there is a permission problem, set up a personal token, try adding the following environment variable. export HUGGING_FACE_HUB_TOKEN=xxxx Q3 : DeepSearcher doesn't run in Jupyter notebook. A3 : Install nest_asyncio and then put this code block in front of your jupyter notebook. pip install nest_asyncio import nest_asyncio nest_asyncio.apply() 🔧 Module Support 🔹 Embedding Models Open-source embedding models OpenAI ( OPENAI_API_KEY env variable required) VoyageAI ( VOYAGE_API_KEY env variable required) Amazon Bedrock ( AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY env variable required) FastEmbed PPIO ( PPIO_API_KEY env variable required) Novita AI ( NOVITA_API_KEY env variable required) IBM watsonx.ai ( WATSONX_APIKEY , WATSONX_URL , WATSONX_PROJECT_ID env variables required) Jiekou.AI ( JIEKOU_API_KEY env variable required) 🔹 LLM Support OpenAI ( OPENAI_API_KEY env variable required) DeepSeek ( DEEPSEEK_API_KEY env variable required) XAI Grok ( XAI_API_KEY env variable required) Anthropic Claude ( ANTHROPIC_API_KEY env variable required) SiliconFlow Inference Service ( SILICONFLOW_API_KEY env variable required) PPIO ( PPIO_API_KEY env variable required) TogetherAI Inference Service ( TOGETHER_API_KEY env variable required) Google Gemini ( GEMINI_API_KEY env variable required) SambaNova Cloud Inference Service ( SAMBANOVA_API_KEY env variable required) Ollama Novita AI ( NOVITA_API_KEY env variable required) IBM watsonx.ai ( WATSONX_APIKEY , WATSONX_URL , WATSONX_PROJECT_ID env variable required) Jiekou.AI ( JIEKOU_API_KEY env variable required) 🔹 Document Loader Local File PDF(with txt/md) loader Unstructured (under development) ( UNSTRUCTURED_API_KEY and UNSTRUCTURED_URL env variables required) Web Crawler FireCrawl ( FIRECRAWL_API_KEY env variable required) Jina Reader ( JINA_API_TOKEN env variable required) Crawl4AI (You should run command crawl4ai-setup for the first time) 🔹 Vector Database Support Milvus and Zilliz Cloud (fully managed Milvus) Qdrant 📊 Evaluation See the Evaluation directory for more details. 📌 Future Plans Enhance web crawling functionality Support more vector databases (e.g., FAISS...) Add support for additional large models Provide RESTful API interface ( DONE ) We welcome contributions! Star & Fork the project and help us build a more powerful DeepSearcher! 🎯 About Open Source Deep Research Alternative to Reason and Search on Private Data. Written in Python. zilliztech.github.io/deep-searcher/ Topics agent openai grok claude rag milvus vector-database llm zilliz deepseek agentic-rag grok3 reasoning-models deepseek-r1 deep-research qwen3 llama4 Resources Readme License Apache-2.0 license Contributing Contributing Uh oh! There was an error while loading. Please reload this page . Activity Custom properties Stars 7.9k stars Watchers 59 watching Forks 764 forks Report repository Releases 5 tags Packages 0       Uh oh! There was an error while loading. Please reload this page . Uh oh! There was an error while loading. Please reload this page . Contributors Uh oh! There was an error while loading. Please reload this page . Languages Python 99.9% Other 0.1% Footer © 2026 GitHub, Inc. Footer navigation Terms Privacy Security Status Community Docs Contact Manage cookies Do not share my personal information You can’t perform that action at this time. 0