{"id":49130527,"url":"https://github.com/sear-chat/searchat","last_synced_at":"2026-05-08T00:02:05.079Z","repository":{"id":226921118,"uuid":"769134044","full_name":"sear-chat/SearChat","owner":"sear-chat","description":"Search + Chat = SearChat(AI Chat with Search), Support OpenAI/Anthropic/VertexAI/Gemini, DeepResearch, SearXNG, Docker.  AI对话式搜索引擎，支持DeepResearch, 支持OpenAI/Anthropic/VertexAI/Gemini接口、聚合搜索引擎SearXNG，支持Docker一键部署。","archived":false,"fork":false,"pushed_at":"2025-12-24T06:59:12.000Z","size":12137,"stargazers_count":1033,"open_issues_count":2,"forks_count":176,"subscribers_count":14,"default_branch":"main","last_synced_at":"2025-12-25T19:40:46.825Z","etag":null,"topics":["ai","anthropic","deepresearch","gemini","llm","mcp","openai","rag","search","searxng","vertexai"],"latest_commit_sha":null,"homepage":"https://isou.chat","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sear-chat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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}},"created_at":"2024-03-08T12:15:29.000Z","updated_at":"2025-12-25T13:34:33.000Z","dependencies_parsed_at":"2024-05-16T01:31:54.455Z","dependency_job_id":null,"html_url":"https://github.com/sear-chat/SearChat","commit_stats":null,"previous_names":["yokingma/search_with_ai"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/sear-chat/SearChat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sear-chat%2FSearChat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sear-chat%2FSearChat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sear-chat%2FSearChat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sear-chat%2FSearChat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sear-chat","download_url":"https://codeload.github.com/sear-chat/SearChat/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sear-chat%2FSearChat/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32760962,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-07T02:14:30.463Z","status":"ssl_error","status_checked_at":"2026-05-07T02:14:29.405Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["ai","anthropic","deepresearch","gemini","llm","mcp","openai","rag","search","searxng","vertexai"],"created_at":"2026-04-21T18:00:42.283Z","updated_at":"2026-05-08T00:02:05.069Z","avatar_url":"https://github.com/sear-chat.png","language":"TypeScript","funding_links":[],"categories":["The latest additions 🎉"],"sub_categories":[],"readme":"\u003ca name=\"top\"\u003e\u003c/a\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n# 🔍 SearChat\n\n**AI-powered conversational search engine**\n\n*Multi-model integration | Real-time conversational search | Deep Research support*\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/sear-chat/SearChat/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/sear-chat/SearChat\" alt=\"Github Stars\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/sear-chat/SearChat/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-purple\" alt=\"License\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/sear-chat/SearChat/issues/new\"\u003e\u003cimg src=\"https://img.shields.io/badge/Report a bug-Github-%231F80C0\" alt=\"Report a bug\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/sear-chat/SearChat/discussions/new?category=q-a\"\u003e\u003cimg src=\"https://img.shields.io/badge/Ask a question-Github-%231F80C0\" alt=\"Ask a question\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n**English** | [中文](./README_ZH_CN.md) | [日本語](./README_JP.md)\n\n\u003c/div\u003e\n\n---\n\n\u003cdiv align=\"center\"\u003e\n \u003cimg src=\"./assets/screenshot.png\" alt=\"AI Search Chat Interface\" style=\"border-radius: 10px; box-shadow: 0 4px 20px rgba(0,0,0,0.1);\"\u003e\u003c/img\u003e\n\u003c/div\u003e\n\n## 🌟 Project Overview\n\nSearChat is a modern AI-powered conversational search engine built with **Turborepo monorepo architecture**, integrating **Node.js + Koa** backend and **Vue 3 + TypeScript** frontend.\n\n🎯 **Key Features**:\n- [x] 🤖 **Multi-model Support** - Compatible with OpenAI, Anthropic, Gemini APIs\n- [x] 🔍 **Multiple Search Engines** - Support for Bing, Google, SearXNG and more\n- [x] 💬 **Conversational Search** - Multi-turn chat-based search experience\n- [x] ⏰ **Chat History** - Conversation history cached in browser (IndexedDB/LocalStorage)\n- [x] 🧠 **Deep Research Mode** - Refactoring deep research functionality\n- [ ] 🔌 **MCP Support** - (TODO) Support for external MCP services\n- [ ] 🖼️ **Image Search** - (TODO) Support for image and video search\n- [ ] 📂 **File Parsing** - (TODO) Support for document upload and content extraction\n\n## ✨ Core Features\n\n### 🧠 Deep Research\n- **Intelligent Research Mode** - Deep research functionality\n- **Iterative Exploration** - Workflow orchestration based on LangChain + LangGraph\n- **Comprehensive Report Generation** - Automatically generate structured research reports\n\n### 🤖 AI Model Support\n\n\u003e [!IMPORTANT]\n\u003e To achieve the best results, the model **must support Tool Call (Function Calling)**.\n\n- OpenAI API compatible\n- Google Gemini API compatible\n- Anthropic API compatible\n- Google Vertex AI compatible\n\n### 🔍 Multi-Search Engine Integration\n\n- **SearXNG** - Open source aggregated search, no API key required\n- **Bing Search** - Microsoft Bing web search API\n- **Google Search** - Google web search API\n- **Tavily** - Tavily web search API\n- **Exa** - Exa.ai web search API\n- **Bocha** - BochaAI web search API\n- **ChatGLM Web Search** - Zhipu AI free search plugin\n\n### 🎨 Modern Interface Experience\n\n- **Responsive Design** - Perfect adaptation for desktop and mobile\n- **Dark/Light Theme** - Support for automatic system theme switching\n- **Internationalization** - Multi-language interface (i18n)\n- **Real-time Streaming** - Typewriter effect answer display\n- **Contextual Conversation** - Support for multi-turn dialogue and history\n\n## 🔬 Deep Research Mode\n\nDeep Research mode uses AI-driven iterative search and analysis to generate comprehensive and in-depth research reports on any topic.\n\n**Key Features**:\n\n- 🔄 **Iterative Research** - Automatically identifies knowledge gaps and performs follow-up searches\n- 📊 **Structured Reports** - Generates well-organized research reports with citations\n- 🔗 **Citation Support** - Includes source references with configurable formats (`[[citation:1]]` or clickable URLs)\n- 🎯 **Multi-Engine Search** - Leverages multiple search engines for comprehensive results\n\n### 📹 Feature Demo\n\n[Demo](https://youtu.be/W_455aI14hI)\n\n### 📦 Standalone Usage\n\nIf you want to integrate Deep Research capabilities into your own Node.js project:\n\n```bash\nnpm install deepsearcher\n```\n\n[![npm version](https://img.shields.io/npm/v/deepsearcher.svg)](https://www.npmjs.com/package/deepsearcher)\n[![npm downloads](https://img.shields.io/npm/dm/deepsearcher.svg)](https://www.npmjs.com/package/deepsearcher)\n\n**Quick Example**:\n\n```typescript\nimport { DeepResearch } from 'deepsearcher';\n\nconst deepResearch = new DeepResearch({\n  searcher: async ({ query }) =\u003e {\n    // Your search implementation\n    return searchResults;\n  },\n  options: {\n    type: 'openai',\n    apiKey: 'your-api-key',\n    enableCitationUrl: false, // Use [[citation:1]] format\n  },\n});\n\nconst agent = await deepResearch.compile();\nconst result = await agent.invoke({\n  messages: [{ role: 'user', content: 'Your research question' }],\n});\n```\n\n**Citation Format Options**:\n\n- `enableCitationUrl: true` (default) - Outputs `\u003csup\u003e[[1](url)]\u003c/sup\u003e` format with clickable links\n- `enableCitationUrl: false` - Outputs `[[citation:1]]` simple format\n\nDocumentation: [DeepResearch NPM Package](https://www.npmjs.com/package/deepsearcher)\n\n## 🐳 Quick Deployment (Recommended Docker)\n\n### 📋 Prerequisites\n\n- [Install Docker](https://docs.docker.com/install/) and Docker Compose\n- Prepare AI model API keys (configure in `model.json`)\n- Optional: Configure search engine API keys (in `docker-compose.yaml`)\n- Ensure network access to required services (SearXNG needs Google access)\n\n### 🚀 One-Click Deployment\n\n#### 1. Create [docker-compose.yaml](./deploy/docker-compose.yaml) file\nPlease refer to the [deploy/docker-compose.yaml](./deploy/docker-compose.yaml) file.\n\n#### 2. Configure Environment Variables\n\nEdit the `docker-compose.yaml` file and modify the corresponding environment variables in the `search_chat` service:\n\n```yaml\nservices:\n  search_chat:\n    container_name: search_chat\n    image: docker.cnb.cool/aigc/aisearch:v1.2.0-alpha\n    environment:\n      # Server Configuration\n      - PORT=3000\n\n      # Search Engine API Keys (configure as needed)\n      - BING_SEARCH_KEY=your_bing_key\n      - GOOGLE_SEARCH_KEY=your_google_key\n      - GOOGLE_SEARCH_ID=your_google_cse_id\n      - TAVILY_KEY=your_tavily_key\n      - ZHIPU_KEY=your_zhipu_key\n      - EXA_KEY=your_exa_key\n      - BOCHA_KEY=your_bocha_key\n\n      # Web Content Extraction (optional)\n      - JINA_KEY=your_jina_key\n\n      # SearXNG Configuration (included by default, ready to use)\n      - SEARXNG_HOSTNAME=http://searxng:8080\n      - SEARXNG_SAFE=0\n      - SEARXNG_LANGUAGE=en\n      - SEARXNG_ENGINES=bing,google\n      - SEARXNG_IMAGES_ENGINES=bing,google\n\n      # DeepResearch Configuration\n      - DEEP_MAX_RESEARCH_LOOPS=3\n      - DEEP_NUMBER_OF_INITIAL_QUERIES=3\n\n      # Domain Whitelist (optional)\n      - WHITELIST_DOMAINS=\n    volumes:\n      - ./model.json:/app/apps/server/dist/model.json\n    ports:\n      - \"3000:3000\"\n    restart: always\n```\n\n#### 3. Configure AI Models (Required)\n\nCreate and edit the [model.json](./deploy/model.json) file in the same directory as docker-compose.yaml to configure AI models and API keys:\n\n```json\n[\n  {\n    \"provider\": \"openai\",\n    \"type\": \"openai\",\n    \"baseURL\": \"https://api.openai.com/v1\",\n    \"apiKey\": \"sk-your-openai-api-key\",\n    \"models\": [\n      {\n        \"name\": \"gpt-4o-mini\",\n        \"alias\": \"GPT-4o Mini\",\n        \"description\": \"OpenAI GPT-4o Mini model\",\n        \"maxTokens\": 262144,\n        \"intentAnalysis\": true\n      },\n      {\n        \"name\": \"gpt-4o\",\n        \"alias\": \"GPT-4o\",\n        \"description\": \"OpenAI GPT-4o model\",\n        \"maxTokens\": 262144\n      }\n    ]\n  },\n  {\n    \"provider\": \"anthropic\",\n    \"type\": \"anthropic\",\n    \"baseURL\": \"https://api.anthropic.com/v1\",\n    \"apiKey\": \"sk-your-anthropic-api-key\",\n    \"models\": [\n      {\n        \"name\": \"claude-sonnet-4-5\",\n        \"alias\": \"Claude Sonnet 4.5\",\n        \"description\": \"Anthropic Claude Sonnet 4.5\",\n        \"maxTokens\": 131072\n      }\n    ]\n  }\n]\n```\n\nModels with `intentAnalysis: true` will be used for search intent analysis and query rewriting. It's recommended to set smaller models here to improve response speed.\n\n**Configuration Description**:\n- `provider`: Model provider name\n- `type`: API type (openai/anthropic/google etc.)\n- `baseURL`: API base URL\n- `apiKey`: Your API key\n- `models`: Model list with name, alias, description and max tokens\n\n#### 4. Start Services\n\n```bash\ndocker compose up -d\n```\n\n#### 5. Access Application\n\nOpen your browser and visit: [http://localhost:3000](http://localhost:3000)\n\n### 🔄 Update Deployment\n\n```bash\n# Stop services\ndocker compose down\n\n# Pull latest image\ndocker pull docker.cnb.cool/aigc/searchchat:latest\n\n# Restart\ndocker compose up -d\n```\n\n## 🔍 Search Engine Configuration\n\nThe project supports multiple search engines. Choose the appropriate search source based on your needs. SearXNG is recommended.\n\n### 🆓 SearXNG (Recommended - Free \u0026 Open Source)\n\n**Advantages**: Completely free, no API key required, aggregates multiple search sources, protects privacy\n\nSearXNG is an open-source metasearch engine that aggregates results from multiple search services without tracking users. Built into Docker deployment, ready to use out of the box.\n\n**Configuration Options**:\n- `SEARXNG_ENGINES`: Set search engines (default: bing,google)\n- `SEARXNG_LANGUAGE`: Search language (zh=Chinese, en-US=English, all=all)\n- `SEARXNG_SAFE`: Safe search level (0=off, 1=moderate, 2=strict)\n\n**[!IMPORTANT]**\n\nMake sure to activate the json format to use the API. This can be done by adding the following line to the `searxng/settings.yml` file:\n```yaml\nsearch:\n    formats:\n        - html\n        - json\n```\n\n## 💻 Local Development\n\n### 📋 Requirements\n\n- **Node.js** \u003e= 20\n- **Package Manager** yarn@3.5.1\n- **Build Tool** Turborepo\n\n### 🏗️ Project Architecture\n\n```text\nsearch_with_ai/\n├── apps/\n│   ├── server/          # Backend service (Koa + TypeScript)\n│   │   ├── src/\n│   │   │   ├── app.ts           # Application entry\n│   │   │   ├── controller.ts    # Route controllers\n│   │   │   ├── interface.ts     # Type definitions\n│   │   │   └── model.json       # Model configuration\n│   │   └── package.json\n│   └── web/             # Frontend application (Vue 3 + TypeScript)\n│       ├── src/\n│       │   ├── pages/           # Page components\n│       │   ├── stores/          # Pinia state management\n│       │   └── components/      # Common components\n│       └── package.json\n├── deploy/              # Deployment configuration\n│   ├── docker-compose.yaml\n│   ├── .env.docker\n│   └── model.json\n└── package.json         # Root configuration\n```\n\n### 🚀 Development Workflow\n\n#### 1. Install Dependencies\n\n```bash\n# Clone project\ngit clone https://github.com/sear-chat/SearChat.git\ncd SearChat\n\n# Install dependencies (run in root, will install all sub-project dependencies)\nyarn install\n```\n\n#### 2. Configure Environment\n\nCopy and edit server environment configuration:\n\n```bash\n# Copy environment configuration template\ncp apps/server/.env apps/server/.env.local\n\n# Edit configuration file\nvim apps/server/.env.local\n```\n\n#### 3. Start Development Services\n\n```bash\n# Start both frontend and backend development servers\nyarn dev\n\n# Or use Turborepo command\nturbo dev\n```\n\nAccess URLs:\n\n- Frontend: [http://localhost:5173](http://localhost:5173)\n- Backend: [http://localhost:3000](http://localhost:3000)\n\n#### 4. Build Production Version\n\n```bash\n# Build all applications\nyarn build\n\n# Or\nturbo build\n```\n\n### 🔧 Development Tools\n\n#### Backend Tech Stack\n\n- **Framework**: Koa.js + TypeScript\n- **AI Integration**: LangChain + LangGraph\n- **Search Engines**: Multi-engine adapter pattern\n\n#### Frontend Tech Stack\n\n- **Framework**: Vue 3 + Composition API\n- **Build**: Vite + TypeScript\n- **UI Library**: TDesign Vue Next\n- **State Management**: Pinia + persistence\n- **Styling**: Tailwind CSS + Less\n\n## 🤝 Contributing\n\nWelcome to contribute to the project! Please follow these steps:\n\n1. **Fork the project** to your GitHub account\n2. **Create a feature branch** `git checkout -b feature/amazing-feature`\n3. **Commit your changes** `git commit -m 'Add amazing feature'`\n4. **Push the branch** `git push origin feature/amazing-feature`\n5. **Create a Pull Request**\n\n### 🐛 Issue Reporting\n\n- [GitHub Issues](https://github.com/sear-chat/SearChat/issues) - Report bugs or feature requests\n- [GitHub Discussions](https://github.com/sear-chat/SearChat/discussions) - Technical discussions and Q\u0026A\n\n## 📄 License\n\nThis project is licensed under the [MIT License](LICENSE).\n\n## 🙏 Acknowledgments\n\n- [SearXNG](https://github.com/searxng/searxng) - Open source search engine\n- [LangChain](https://github.com/langchain-ai/langchain) - AI application development framework\n- [Tencent EdgeOne](https://edgeone.ai/?from=github) - CDN acceleration support\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**⭐ If this project helps you, please give it a Star!**\n\n[🚀 Back to top](#top)\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsear-chat%2Fsearchat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsear-chat%2Fsearchat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsear-chat%2Fsearchat/lists"}