{"id":29646122,"url":"https://zilliztech.github.io/deep-searcher/","last_synced_at":"2025-07-22T02:05:01.260Z","repository":{"id":276628025,"uuid":"929200745","full_name":"zilliztech/deep-searcher","owner":"zilliztech","description":"Open Source Deep Research Alternative to Reason and Search on Private Data. Written in Python.","archived":false,"fork":false,"pushed_at":"2025-07-10T12:40:41.000Z","size":17593,"stargazers_count":6546,"open_issues_count":39,"forks_count":644,"subscribers_count":53,"default_branch":"master","last_synced_at":"2025-07-19T10:19:01.623Z","etag":null,"topics":["agent","agentic-rag","claude","deep-research","deepseek","deepseek-r1","grok","grok3","llama4","llm","milvus","openai","qwen3","rag","reasoning-models","vector-database","zilliz"],"latest_commit_sha":null,"homepage":"https://zilliztech.github.io/deep-searcher/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zilliztech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-02-08T02:07:05.000Z","updated_at":"2025-07-19T03:32:20.000Z","dependencies_parsed_at":"2025-02-09T14:30:10.995Z","dependency_job_id":"c74efd76-fcbb-4d4b-b842-48f3874e68a8","html_url":"https://github.com/zilliztech/deep-searcher","commit_stats":null,"previous_names":["zilliztech/deep-searcher"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/zilliztech/deep-searcher","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zilliztech%2Fdeep-searcher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zilliztech%2Fdeep-searcher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zilliztech%2Fdeep-searcher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zilliztech%2Fdeep-searcher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zilliztech","download_url":"https://codeload.github.com/zilliztech/deep-searcher/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zilliztech%2Fdeep-searcher/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266411508,"owners_count":23924336,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent","agentic-rag","claude","deep-research","deepseek","deepseek-r1","grok","grok3","llama4","llm","milvus","openai","qwen3","rag","reasoning-models","vector-database","zilliz"],"created_at":"2025-07-22T02:02:06.630Z","updated_at":"2025-07-22T02:05:01.253Z","avatar_url":"https://github.com/zilliztech.png","language":"Python","funding_links":[],"categories":["Agentic AI"],"sub_categories":[],"readme":"![DeepSearcher](./assets/pic/logo.png)\n\n\u003cdiv align=\"center\"\u003e\n  \n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![DeepWiki](https://img.shields.io/badge/DeepWiki-AI%20Docs-orange.svg)](https://deepwiki.com/zilliztech/deep-searcher)\n[![Twitter](https://img.shields.io/twitter/url/https/twitter.com/zilliz_universe.svg?style=social\u0026label=Follow%20%40Zilliz)](https://twitter.com/zilliz_universe)\n\u003ca href=\"https://discord.gg/mKc3R95yE5\"\u003e\u003cimg height=\"20\" src=\"https://img.shields.io/badge/Discord-%235865F2.svg?style=for-the-badge\u0026logo=discord\u0026logoColor=white\" alt=\"discord\"/\u003e\u003c/a\u003e\n\n\u003c/div\u003e\n\n---\n\nDeepSearcher 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\u0026A systems, and information retrieval scenarios.\n\n![Architecture](./assets/pic/deep-searcher-arch.png)\n\n## 🚀 Features\n\n- **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.\n- **Vector Database Management**: Supports Milvus and other vector databases, allowing data partitioning for efficient retrieval.\n- **Flexible Embedding Options**: Compatible with multiple embedding models for optimal selection.\n- **Multiple LLM Support**: Supports DeepSeek, OpenAI, and other large models for intelligent Q\u0026A and content generation.\n- **Document Loader**: Supports local file loading, with web crawling capabilities under development.\n\n---\n\n## 🎉 Demo\n![demo](./assets/pic/demo.gif)\n\n\n## 📖 Quick Start\n\n### Installation\nInstall DeepSearcher using one of the following methods:\n\n#### Option 1: Using pip\nCreate and activate a virtual environment(Python 3.10 version is recommended).\n```bash\npython -m venv .venv\nsource .venv/bin/activate\n```\nInstall DeepSearcher\n```bash\npip install deepsearcher\n```\n\nFor optional dependencies, e.g., ollama:\n```bash\npip install \"deepsearcher[ollama]\"\n```\n\n#### Option 2: Install in Development Mode\nWe recommend using [uv](https://github.com/astral-sh/uv) for faster and more reliable installation. Follow the [offical installation instructions](https://docs.astral.sh/uv/getting-started/installation/) to install it.\n\nClone the repository and navigate to the project directory:\n```shell\ngit clone https://github.com/zilliztech/deep-searcher.git \u0026\u0026 cd deep-searcher\n```\nSynchronize and install dependencies:\n```shell\nuv sync\nsource .venv/bin/activate\n```\n\nFor more detailed development setup and optional dependency installation options, see [CONTRIBUTING.md](CONTRIBUTING.md#development-environment-setup-with-uv).\n\n### Quick start demo\n\nTo 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.\n\n```python\nfrom deepsearcher.configuration import Configuration, init_config\nfrom deepsearcher.online_query import query\n\nconfig = Configuration()\n\n# Customize your config here,\n# more configuration see the Configuration Details section below.\nconfig.set_provider_config(\"llm\", \"OpenAI\", {\"model\": \"o1-mini\"})\nconfig.set_provider_config(\"embedding\", \"OpenAIEmbedding\", {\"model\": \"text-embedding-ada-002\"})\ninit_config(config = config)\n\n# Load your local data\nfrom deepsearcher.offline_loading import load_from_local_files\nload_from_local_files(paths_or_directory=your_local_path)\n\n# (Optional) Load from web crawling (`FIRECRAWL_API_KEY` env variable required)\nfrom deepsearcher.offline_loading import load_from_website\nload_from_website(urls=website_url)\n\n# Query\nresult = query(\"Write a report about xxx.\") # Your question here\n```\n### Configuration Details:\n#### LLM Configuration\n\n\u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"llm\", \"(LLMName)\", \"(Arguments dict)\")\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThe \"LLMName\" can be one of the following: [\"DeepSeek\", \"OpenAI\", \"XAI\", \"SiliconFlow\", \"Aliyun\", \"PPIO\", \"TogetherAI\", \"Gemini\", \"Ollama\", \"Novita\"]\u003c/p\u003e\n\u003cp\u003e The \"Arguments dict\" is a dictionary that contains the necessary arguments for the LLM class.\u003c/p\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (OpenAI)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your OPENAI API KEY as an env variable \u003ccode\u003eOPENAI_API_KEY\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"llm\", \"OpenAI\", {\"model\": \"o1-mini\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e More details about OpenAI models: https://platform.openai.com/docs/models \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (Qwen3 from Aliyun Bailian)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your Bailian API KEY as an env variable \u003ccode\u003eDASHSCOPE_API_KEY\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"llm\", \"Aliyun\", {\"model\": \"qwen-plus-latest\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e More details about Aliyun Bailian models: https://bailian.console.aliyun.com \u003c/p\u003e\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (Qwen3 from OpenRouter)\u003c/summary\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"llm\", \"OpenAI\", {\"model\": \"qwen/qwen3-235b-a22b:free\", \"base_url\": \"https://openrouter.ai/api/v1\", \"api_key\": \"OPENROUTER_API_KEY\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e More details about OpenRouter models: https://openrouter.ai/qwen/qwen3-235b-a22b:free \u003c/p\u003e\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (DeepSeek from official)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your DEEPSEEK API KEY as an env variable \u003ccode\u003eDEEPSEEK_API_KEY\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"llm\", \"DeepSeek\", {\"model\": \"deepseek-reasoner\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e More details about DeepSeek: https://api-docs.deepseek.com/ \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (DeepSeek from SiliconFlow)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your SILICONFLOW API KEY as an env variable \u003ccode\u003eSILICONFLOW_API_KEY\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"llm\", \"SiliconFlow\", {\"model\": \"deepseek-ai/DeepSeek-R1\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e More details about SiliconFlow: https://docs.siliconflow.cn/quickstart \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (DeepSeek from TogetherAI)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your TOGETHER API KEY as an env variable \u003ccode\u003eTOGETHER_API_KEY\u003c/code\u003e.\u003c/p\u003e\n    For deepseek R1:\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"llm\", \"TogetherAI\", {\"model\": \"deepseek-ai/DeepSeek-R1\"})\u003c/code\u003e\u003c/pre\u003e\n    For Llama 4:\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"llm\", \"TogetherAI\", {\"model\": \"meta-llama/Llama-4-Scout-17B-16E-Instruct\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e You need to install together before running, execute: \u003ccode\u003epip install together\u003c/code\u003e. More details about TogetherAI: https://www.together.ai/ \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (XAI Grok)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your XAI API KEY as an env variable \u003ccode\u003eXAI_API_KEY\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"llm\", \"XAI\", {\"model\": \"grok-4-0709\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e More details about XAI Grok: https://docs.x.ai/docs/overview#featured-models \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (Claude)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your ANTHROPIC API KEY as an env variable \u003ccode\u003eANTHROPIC_API_KEY\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"llm\", \"Anthropic\", {\"model\": \"claude-sonnet-4-0\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e More details about Anthropic Claude: https://docs.anthropic.com/en/home \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (Google Gemini)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your GEMINI API KEY as an env variable \u003ccode\u003eGEMINI_API_KEY\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config('llm', 'Gemini', { 'model': 'gemini-2.0-flash' })\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e You need to install gemini before running, execute: \u003ccode\u003epip install google-genai\u003c/code\u003e. More details about Gemini: https://ai.google.dev/gemini-api/docs \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (DeepSeek from PPIO)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your PPIO API KEY as an env variable \u003ccode\u003ePPIO_API_KEY\u003c/code\u003e. You can create an API Key \u003ca href=\"https://ppinfra.com/settings/key-management?utm_source=github_deep-searcher\"\u003ehere\u003c/a\u003e. \u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"llm\", \"PPIO\", {\"model\": \"deepseek/deepseek-r1-turbo\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e More details about PPIO: https://ppinfra.com/docs/get-started/quickstart.html?utm_source=github_deep-searcher \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (Ollama)\u003c/summary\u003e\n  \u003cp\u003e Follow \u003ca href=\"https://github.com/jmorganca/ollama\"\u003ethese instructions\u003c/a\u003e to set up and run a local Ollama instance:\u003c/p\u003e\n  \u003cp\u003e \u003ca href=\"https://ollama.ai/download\"\u003eDownload\u003c/a\u003e and install Ollama onto the available supported platforms (including Windows Subsystem for Linux).\u003c/p\u003e\n  \u003cp\u003e View a list of available models via the \u003ca href=\"https://ollama.ai/library\"\u003emodel library\u003c/a\u003e.\u003c/p\u003e\n  \u003cp\u003e Fetch available LLM models via \u003ccode\u003eollama pull \u0026lt;name-of-model\u0026gt;\u003c/code\u003e\u003c/p\u003e\n  \u003cp\u003e Example: \u003ccode\u003eollama pull qwen3\u003c/code\u003e\u003c/p\u003e\n  \u003cp\u003e To chat directly with a model from the command line, use \u003ccode\u003eollama run \u0026lt;name-of-model\u0026gt;\u003c/code\u003e.\u003c/p\u003e\n  \u003cp\u003e By default, Ollama has a REST API for running and managing models on \u003ca href=\"http://localhost:11434\"\u003ehttp://localhost:11434\u003c/a\u003e.\u003c/p\u003e\n  \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"llm\", \"Ollama\", {\"model\": \"qwen3\"})\u003c/code\u003e\u003c/pre\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (Volcengine)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your Volcengine API KEY as an env variable \u003ccode\u003eVOLCENGINE_API_KEY\u003c/code\u003e. You can create an API Key \u003ca href=\"https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey\"\u003ehere\u003c/a\u003e. \u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"llm\", \"Volcengine\", {\"model\": \"deepseek-r1-250120\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e More details about Volcengine: https://www.volcengine.com/docs/82379/1099455?utm_source=github_deep-searcher \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (GLM)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your GLM API KEY as an env variable \u003ccode\u003eGLM_API_KEY\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"llm\", \"GLM\", {\"model\": \"glm-4-plus\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e You need to install zhipuai before running, execute: \u003ccode\u003epip install zhipuai\u003c/code\u003e. More details about GLM: https://bigmodel.cn/dev/welcome \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (Amazon Bedrock)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your Amazon Bedrock API KEY as an env variable \u003ccode\u003eAWS_ACCESS_KEY_ID\u003c/code\u003e and \u003ccode\u003eAWS_SECRET_ACCESS_KEY\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"llm\", \"Bedrock\", {\"model\": \"us.deepseek.r1-v1:0\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e You need to install boto3 before running, execute: \u003ccode\u003epip install boto3\u003c/code\u003e. More details about Amazon Bedrock: https://docs.aws.amazon.com/bedrock/ \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (IBM watsonx.ai)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your watsonx.ai credentials as env variables \u003ccode\u003eWATSONX_APIKEY\u003c/code\u003e, \u003ccode\u003eWATSONX_URL\u003c/code\u003e, and \u003ccode\u003eWATSONX_PROJECT_ID\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"llm\", \"watsonx\", {\"model\": \"us.deepseek.r1-v1:0\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e You need to install ibm-watsonx-ai before running, execute: \u003ccode\u003epip install ibm-watsonx-ai\u003c/code\u003e. More details about IBM watsonx.ai: https://www.ibm.com/products/watsonx-ai/foundation-models \u003c/p\u003e\n\u003c/details\u003e\n\n\n#### Embedding Model Configuration\n\u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"embedding\", \"(EmbeddingModelName)\", \"(Arguments dict)\")\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThe \"EmbeddingModelName\" can be one of the following: [\"MilvusEmbedding\", \"OpenAIEmbedding\", \"VoyageEmbedding\", \"SiliconflowEmbedding\", \"PPIOEmbedding\", \"NovitaEmbedding\"]\u003c/p\u003e\n\u003cp\u003e The \"Arguments dict\" is a dictionary that contains the necessary arguments for the embedding model class.\u003c/p\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (OpenAI embedding)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your OpenAI API KEY as an env variable \u003ccode\u003eOPENAI_API_KEY\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"embedding\", \"OpenAIEmbedding\", {\"model\": \"text-embedding-3-small\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e More details about OpenAI models: https://platform.openai.com/docs/guides/embeddings/use-cases \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (OpenAI embedding Azure)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your OpenAI API KEY as an env variable \u003ccode\u003eOPENAI_API_KEY\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"embedding\", \"OpenAIEmbedding\", {\n    \"model\": \"text-embedding-ada-002\",\n    \"azure_endpoint\": \"https://\u003cyouraifoundry\u003e.openai.azure.com/\",\n    \"api_version\": \"2023-05-15\"\n})\u003c/code\u003e\u003c/pre\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (Pymilvus built-in embedding model)\u003c/summary\u003e\n    \u003cp\u003e Use the built-in embedding model in Pymilvus, you can set the model name as \u003ccode\u003e\"default\"\u003c/code\u003e, \u003ccode\u003e\"BAAI/bge-base-en-v1.5\"\u003c/code\u003e, \u003ccode\u003e\"BAAI/bge-large-en-v1.5\"\u003c/code\u003e, \u003ccode\u003e\"jina-embeddings-v3\"\u003c/code\u003e, etc. \u003cbr/\u003e\n    See [milvus_embedding.py](deepsearcher/embedding/milvus_embedding.py) for more details.  \u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"embedding\", \"MilvusEmbedding\", {\"model\": \"BAAI/bge-base-en-v1.5\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"embedding\", \"MilvusEmbedding\", {\"model\": \"jina-embeddings-v3\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e For Jina's embedding model, you need\u003ccode\u003eJINAAI_API_KEY\u003c/code\u003e.\u003c/p\u003e\n    \u003cp\u003e You need to install pymilvus model before running, execute: \u003ccode\u003epip install pymilvus.model\u003c/code\u003e. More details about Pymilvus: https://milvus.io/docs/embeddings.md \u003c/p\u003e\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (VoyageAI embedding)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your VOYAGE API KEY as an env variable \u003ccode\u003eVOYAGE_API_KEY\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"embedding\", \"VoyageEmbedding\", {\"model\": \"voyage-3\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e You need to install voyageai before running, execute: \u003ccode\u003epip install voyageai\u003c/code\u003e. More details about VoyageAI: https://docs.voyageai.com/embeddings/ \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (Amazon Bedrock embedding)\u003c/summary\u003e\n  \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"embedding\", \"BedrockEmbedding\", {\"model\": \"amazon.titan-embed-text-v2:0\"})\u003c/code\u003e\u003c/pre\u003e\n  \u003cp\u003e You need to install boto3 before running, execute: \u003ccode\u003epip install boto3\u003c/code\u003e. More details about Amazon Bedrock: https://docs.aws.amazon.com/bedrock/ \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (Novita AI embedding)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your Novita AI API KEY as an env variable \u003ccode\u003eNOVITA_API_KEY\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"embedding\", \"NovitaEmbedding\", {\"model\": \"baai/bge-m3\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e More details about Novita AI: https://novita.ai/docs/api-reference/model-apis-llm-create-embeddings?utm_source=github_deep-searcher\u0026utm_medium=github_readme\u0026utm_campaign=link \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (Siliconflow embedding)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your Siliconflow API KEY as an env variable \u003ccode\u003eSILICONFLOW_API_KEY\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"embedding\", \"SiliconflowEmbedding\", {\"model\": \"BAAI/bge-m3\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e More details about Siliconflow: https://docs.siliconflow.cn/en/api-reference/embeddings/create-embeddings \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (Volcengine embedding)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your Volcengine API KEY as an env variable \u003ccode\u003eVOLCENGINE_API_KEY\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"embedding\", \"VolcengineEmbedding\", {\"model\": \"doubao-embedding-text-240515\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e More details about Volcengine: https://www.volcengine.com/docs/82379/1302003 \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (GLM embedding)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your GLM API KEY as an env variable \u003ccode\u003eGLM_API_KEY\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"embedding\", \"GLMEmbedding\", {\"model\": \"embedding-3\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e You need to install zhipuai before running, execute: \u003ccode\u003epip install zhipuai\u003c/code\u003e. More details about GLM: https://bigmodel.cn/dev/welcome \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (Google Gemini embedding)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your Gemini API KEY as an env variable \u003ccode\u003eGEMINI_API_KEY\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"embedding\", \"GeminiEmbedding\", {\"model\": \"text-embedding-004\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e You need to install gemini before running, execute: \u003ccode\u003epip install google-genai\u003c/code\u003e. More details about Gemini: https://ai.google.dev/gemini-api/docs \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (Ollama embedding)\u003c/summary\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"embedding\", \"OllamaEmbedding\", {\"model\": \"bge-m3\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e You need to install ollama before running, execute: \u003ccode\u003epip install ollama\u003c/code\u003e. More details about Ollama Python SDK: https://github.com/ollama/ollama-python \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (PPIO embedding)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your PPIO API KEY as an env variable \u003ccode\u003ePPIO_API_KEY\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"embedding\", \"PPIOEmbedding\", {\"model\": \"baai/bge-m3\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e More details about PPIO: https://ppinfra.com/docs/get-started/quickstart.html?utm_source=github_deep-searcher \u003c/p\u003e\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (FastEmbed embedding)\u003c/summary\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"embedding\", \"FastEmbedEmbedding\", {\"model\": \"intfloat/multilingual-e5-large\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e You need to install fastembed before running, execute: \u003ccode\u003epip install fastembed\u003c/code\u003e. More details about fastembed: https://github.com/qdrant/fastembed \u003c/p\u003e\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (IBM watsonx.ai embedding)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your WatsonX credentials as env variables \u003ccode\u003eWATSONX_APIKEY\u003c/code\u003e, \u003ccode\u003eWATSONX_URL\u003c/code\u003e, and \u003ccode\u003eWATSONX_PROJECT_ID\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"embedding\", \"WatsonXEmbedding\", {\"model\": \"ibm/slate-125m-english-rtrvr-v2\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"embedding\", \"WatsonXEmbedding\", {\"model\": \"sentence-transformers/all-minilm-l6-v2\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e You need to install ibm-watsonx-ai before running, execute: \u003ccode\u003epip install ibm-watsonx-ai\u003c/code\u003e. More details about IBM watsonx.ai: https://www.ibm.com/products/watsonx-ai/foundation-models \u003c/p\u003e\n\u003c/details\u003e\n\n#### Vector Database Configuration\n\u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"vector_db\", \"(VectorDBName)\", \"(Arguments dict)\")\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThe \"VectorDBName\" can be one of the following: [\"Milvus\"] (Under development)\u003c/p\u003e\n\u003cp\u003e The \"Arguments dict\" is a dictionary that contains the necessary arguments for the Vector Database class.\u003c/p\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (Milvus)\u003c/summary\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"vector_db\", \"Milvus\", {\"uri\": \"./milvus.db\", \"token\": \"\"})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e More details about Milvus Config:\u003c/p\u003e\n    \u003cul\u003e\n        \u003cli\u003e\n            Setting the \u003ccode\u003euri\u003c/code\u003e as a local file, e.g. \u003ccode\u003e./milvus.db\u003c/code\u003e, is the most convenient method, as it automatically utilizes \u003ca href=\"https://milvus.io/docs/milvus_lite.md\" target=\"_blank\"\u003eMilvus Lite\u003c/a\u003e to store all data in this file.\n        \u003c/li\u003e\n    \u003c/ul\u003e\n    \u003cul\u003e\n      \u003cli\u003e\n          If you have a large-scale dataset, you can set up a more performant Milvus server using \n          \u003ca href=\"https://milvus.io/docs/quickstart.md\" target=\"_blank\"\u003eDocker or Kubernetes\u003c/a\u003e. \n          In this setup, use the server URI, e.g., \u003ccode\u003ehttp://localhost:19530\u003c/code\u003e, as your \u003ccode\u003euri\u003c/code\u003e. \n          You can also use any other connection parameters supported by Milvus such as \u003ccode\u003ehost\u003c/code\u003e, \u003ccode\u003euser\u003c/code\u003e, \u003ccode\u003epassword\u003c/code\u003e, or \u003ccode\u003esecure\u003c/code\u003e.\n        \u003c/li\u003e\n    \u003c/ul\u003e\n    \u003cul\u003e\n        \u003cli\u003e\n            If you want to use \u003ca href=\"https://zilliz.com/cloud\" target=\"_blank\"\u003eZilliz Cloud\u003c/a\u003e, \n            the fully managed cloud service for Milvus, adjust the \u003ccode\u003euri\u003c/code\u003e and \u003ccode\u003etoken\u003c/code\u003e \n            according to the \u003ca href=\"https://docs.zilliz.com/docs/on-zilliz-cloud-console#free-cluster-details\" \n            target=\"_blank\"\u003ePublic Endpoint and API Key\u003c/a\u003e in Zilliz Cloud.\n        \u003c/li\u003e\n    \u003c/ul\u003e\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (AZURE AI Search)\u003c/summary\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"vector_db\", \"AzureSearch\", {\n    \"endpoint\": \"https://\u003cyourazureaisearch\u003e.search.windows.net\",\n    \"index_name\": \"\u003cyourindex\u003e\",\n    \"api_key\": \"\u003cyourkey\u003e\",\n    \"vector_field\": \"\"\n})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e More details about Milvus Config:\u003c/p\u003e\n\n\u003c/details\u003e\n\n#### File Loader Configuration\n\u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"file_loader\", \"(FileLoaderName)\", \"(Arguments dict)\")\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThe \"FileLoaderName\" can be one of the following: [\"PDFLoader\", \"TextLoader\", \"UnstructuredLoader\"]\u003c/p\u003e\n\u003cp\u003e The \"Arguments dict\" is a dictionary that contains the necessary arguments for the File Loader class.\u003c/p\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (Unstructured)\u003c/summary\u003e\n    \u003cp\u003eYou can use Unstructured in two ways:\u003c/p\u003e\n    \u003cul\u003e\n      \u003cli\u003eWith API: Set environment variables \u003ccode\u003eUNSTRUCTURED_API_KEY\u003c/code\u003e and \u003ccode\u003eUNSTRUCTURED_API_URL\u003c/code\u003e\u003c/li\u003e\n      \u003cli\u003eWithout API: Use the local processing mode by simply not setting these environment variables\u003c/li\u003e\n    \u003c/ul\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"file_loader\", \"UnstructuredLoader\", {})\u003c/code\u003e\u003c/pre\u003e\n    \u003cul\u003e\n      \u003cli\u003eCurrently supported file types: [\"pdf\"] (Under development)\u003c/li\u003e\n      \u003cli\u003eInstallation requirements:\n        \u003cul\u003e\n          \u003cli\u003eInstall ingest pipeline: \u003ccode\u003epip install unstructured-ingest\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003eFor all document formats: \u003ccode\u003epip install \"unstructured[all-docs]\"\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003eFor specific formats (e.g., PDF only): \u003ccode\u003epip install \"unstructured[pdf]\"\u003c/code\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n      \u003c/li\u003e\n      \u003cli\u003eMore information:\n        \u003cul\u003e\n          \u003cli\u003eUnstructured documentation: \u003ca href=\"https://docs.unstructured.io/ingestion/overview\"\u003ehttps://docs.unstructured.io/ingestion/overview\u003c/a\u003e\u003c/li\u003e\n          \u003cli\u003eInstallation guide: \u003ca href=\"https://docs.unstructured.io/open-source/installation/full-installation\"\u003ehttps://docs.unstructured.io/open-source/installation/full-installation\u003c/a\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n      \u003c/li\u003e\n    \u003c/ul\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (Docling)\u003c/summary\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"file_loader\", \"DoclingLoader\", {})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e Currently supported file types: please refer to the Docling documentation: https://docling-project.github.io/docling/usage/supported_formats/#supported-output-formats \u003c/p\u003e\n    \u003cp\u003e You need to install docling before running, execute: \u003ccode\u003epip install docling\u003c/code\u003e. More details about Docling: https://docling-project.github.io/docling/ \u003c/p\u003e\n\u003c/details\u003e\n\n#### Web Crawler Configuration\n\u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"web_crawler\", \"(WebCrawlerName)\", \"(Arguments dict)\")\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThe \"WebCrawlerName\" can be one of the following: [\"FireCrawlCrawler\", \"Crawl4AICrawler\", \"JinaCrawler\"]\u003c/p\u003e\n\u003cp\u003e The \"Arguments dict\" is a dictionary that contains the necessary arguments for the Web Crawler class.\u003c/p\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (FireCrawl)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your FireCrawl API KEY as an env variable \u003ccode\u003eFIRECRAWL_API_KEY\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"web_crawler\", \"FireCrawlCrawler\", {})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e More details about FireCrawl: https://docs.firecrawl.dev/introduction \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (Crawl4AI)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have run \u003ccode\u003ecrawl4ai-setup\u003c/code\u003e in your environment.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"web_crawler\", \"Crawl4AICrawler\", {\"browser_config\": {\"headless\": True, \"verbose\": True}})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e You need to install crawl4ai before running, execute: \u003ccode\u003epip install crawl4ai\u003c/code\u003e. More details about Crawl4AI: https://docs.crawl4ai.com/ \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (Jina Reader)\u003c/summary\u003e\n    \u003cp\u003e Make sure you have prepared your Jina Reader API KEY as an env variable \u003ccode\u003eJINA_API_TOKEN\u003c/code\u003e or \u003ccode\u003eJINAAI_API_KEY\u003c/code\u003e.\u003c/p\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"web_crawler\", \"JinaCrawler\", {})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e More details about Jina Reader: https://jina.ai/reader/ \u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eExample (Docling)\u003c/summary\u003e\n    \u003cpre\u003e\u003ccode\u003econfig.set_provider_config(\"web_crawler\", \"DoclingCrawler\", {})\u003c/code\u003e\u003c/pre\u003e\n    \u003cp\u003e Currently supported file types: please refer to the Docling documentation: https://docling-project.github.io/docling/usage/supported_formats/#supported-output-formats \u003c/p\u003e\n    \u003cp\u003e You need to install docling before running, execute: \u003ccode\u003epip install docling\u003c/code\u003e. More details about Docling: https://docling-project.github.io/docling/ \u003c/p\u003e\n\u003c/details\u003e\n\n\n### Python CLI Mode\n#### Load\n```shell\ndeepsearcher load \"your_local_path_or_url\"\n# load into a specific collection\ndeepsearcher load \"your_local_path_or_url\" --collection_name \"your_collection_name\" --collection_desc \"your_collection_description\"\n```\nExample loading from local file:\n```shell\ndeepsearcher load \"/path/to/your/local/file.pdf\"\n# or more files at once\ndeepsearcher load \"/path/to/your/local/file1.pdf\" \"/path/to/your/local/file2.md\"\n```\nExample loading from url (*Set `FIRECRAWL_API_KEY` in your environment variables, see [FireCrawl](https://docs.firecrawl.dev/introduction) for more details*):\n\n```shell\ndeepsearcher load \"https://www.wikiwand.com/en/articles/DeepSeek\"\n```\n\n#### Query\n```shell\ndeepsearcher query \"Write a report about xxx.\"\n```\n\nMore help information\n```shell\ndeepsearcher --help\n```\nFor more help information about a specific subcommand, you can use `deepsearcher [subcommand] --help`.\n```shell\ndeepsearcher load --help\ndeepsearcher query --help\n```\n\n### Deployment\n\n#### Configure modules\n\nYou can configure all arguments by modifying [config.yaml](./config.yaml) to set up your system with default modules.\nFor example, set your `OPENAI_API_KEY` in the `llm` section of the YAML file.\n\n#### Start service\nThe main script will run a FastAPI service with default address `localhost:8000`.\n\n```shell\n$ python main.py\n```\n\n#### Access via browser\n\nYou can open url http://localhost:8000/docs in browser to access the web service.\nClick on the button \"Try it out\", it allows you to fill the parameters and directly interact with the API.\n\n\n---\n\n## ❓ Q\u0026A\n\n**Q1**: Why I failed to parse LLM output format / How to select the LLM?\n\n\n**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. \n\n---\n\n**Q2**: \nOSError: 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.\nCheckout your internet connection or see how to run the library in offline mode at 'https://huggingface.co/docs/transformers/installation#offline-mode'.\n\n**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:\n1. If there is a network problem, set up a proxy, try adding the following environment variable.\n```bash\nexport HF_ENDPOINT=https://hf-mirror.com\n```\n2. If there is a permission problem, set up a personal token, try adding the following environment variable.\n```bash\nexport HUGGING_FACE_HUB_TOKEN=xxxx\n```\n\n---\n\n**Q3**: DeepSearcher doesn't run in Jupyter notebook.\n\n**A3**: Install `nest_asyncio` and then put this code block in front of your jupyter notebook.\n\n```\npip install nest_asyncio\n```\n\n```\nimport nest_asyncio\nnest_asyncio.apply()\n```\n\n---\n\n## 🔧 Module Support\n\n### 🔹 Embedding Models\n- [Open-source embedding models](https://milvus.io/docs/embeddings.md)\n- [OpenAI](https://platform.openai.com/docs/guides/embeddings/use-cases) (`OPENAI_API_KEY` env variable required)\n- [VoyageAI](https://docs.voyageai.com/embeddings/) (`VOYAGE_API_KEY` env variable required)\n- [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/) (`AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` env variable required)\n- [FastEmbed](https://qdrant.github.io/fastembed/)\n- [PPIO](https://ppinfra.com/model-api/product/llm-api?utm_source=github_deep-searcher) (`PPIO_API_KEY` env variable required)\n- [Novita AI](https://novita.ai/docs/api-reference/model-apis-llm-create-embeddings?utm_source=github_deep-searcher\u0026utm_medium=github_readme\u0026utm_campaign=link) (`NOVITA_API_KEY` env variable required)\n- [IBM watsonx.ai](https://www.ibm.com/products/watsonx-ai/foundation-models#ibmembedding) (`WATSONX_APIKEY`, `WATSONX_URL`, `WATSONX_PROJECT_ID` env variables required)\n\n### 🔹 LLM Support\n- [OpenAI](https://platform.openai.com/docs/models) (`OPENAI_API_KEY` env variable required)\n- [DeepSeek](https://api-docs.deepseek.com/) (`DEEPSEEK_API_KEY` env variable required)\n- [XAI Grok](https://x.ai/api) (`XAI_API_KEY` env variable required)\n- [Anthropic Claude](https://docs.anthropic.com/en/home) (`ANTHROPIC_API_KEY` env variable required)\n- [SiliconFlow Inference Service](https://docs.siliconflow.cn/en/userguide/introduction) (`SILICONFLOW_API_KEY` env variable required)\n- [PPIO](https://ppinfra.com/model-api/product/llm-api?utm_source=github_deep-searcher) (`PPIO_API_KEY` env variable required)\n- [TogetherAI Inference Service](https://docs.together.ai/docs/introduction) (`TOGETHER_API_KEY` env variable required)\n- [Google Gemini](https://ai.google.dev/gemini-api/docs) (`GEMINI_API_KEY` env variable required)\n- [SambaNova Cloud Inference Service](https://docs.together.ai/docs/introduction) (`SAMBANOVA_API_KEY` env variable required)\n- [Ollama](https://ollama.com/)\n- [Novita AI](https://novita.ai/docs/guides/introduction?utm_source=github_deep-searcher\u0026utm_medium=github_readme\u0026utm_campaign=link) (`NOVITA_API_KEY` env variable required)\n- [IBM watsonx.ai](https://www.ibm.com/products/watsonx-ai/foundation-models#ibmfm) (`WATSONX_APIKEY`, `WATSONX_URL`, `WATSONX_PROJECT_ID` env variable required)\n\n### 🔹 Document Loader\n- Local File\n  - PDF(with txt/md) loader\n  - [Unstructured](https://unstructured.io/) (under development) (`UNSTRUCTURED_API_KEY` and `UNSTRUCTURED_URL` env variables required)\n- Web Crawler\n  - [FireCrawl](https://docs.firecrawl.dev/introduction) (`FIRECRAWL_API_KEY` env variable required)\n  - [Jina Reader](https://jina.ai/reader/) (`JINA_API_TOKEN` env variable required)\n  - [Crawl4AI](https://docs.crawl4ai.com/) (You should run command `crawl4ai-setup` for the first time)\n\n### 🔹 Vector Database Support\n- [Milvus](https://milvus.io/) and [Zilliz Cloud](https://www.zilliz.com/) (fully managed Milvus)\n- [Qdrant](https://qdrant.tech/)\n\n---\n## 📊 Evaluation \nSee the [Evaluation](./evaluation) directory for more details.\n\n---\n## 📌 Future Plans\n- Enhance web crawling functionality\n- Support more vector databases (e.g., FAISS...)\n- Add support for additional large models\n- Provide RESTful API interface (**DONE**)\n\nWe welcome contributions! Star \u0026 Fork the project and help us build a more powerful DeepSearcher! 🎯\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/zilliztech.github.io%2Fdeep-searcher%2F","html_url":"https://awesome.ecosyste.ms/projects/zilliztech.github.io%2Fdeep-searcher%2F","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/zilliztech.github.io%2Fdeep-searcher%2F/lists"}