Search + Chat = SearChat(AI Chat with Search), Support OpenAI/Anthropic/VertexAI/Gemini, DeepResearch, SearXNG, Docker. AI对话式搜索引擎,支持DeepResearch, 支持OpenAI/Anthropic/VertexAI/Gemini接口、聚合搜索引擎SearXNG,支持Docker一键部署。
See the codeAI-powered conversational search engine
Multi-model integration | Real-time conversational search | Deep Research support
SearChat is a modern AI-powered conversational search engine built with Turborepo monorepo architecture, integrating Node.js + Koa backend and Vue 3 + TypeScript frontend.
🎯 Key Features:
[!IMPORTANT] To achieve the best results, the model must support Tool Call (Function Calling).
Deep Research mode uses AI-driven iterative search and analysis to generate comprehensive and in-depth research reports on any topic.
Key Features:
[[citation:1]] or clickable URLs)If you want to integrate Deep Research capabilities into your own Node.js project:
npm install deepsearcher
Quick Example:
import { DeepResearch } from 'deepsearcher';
const deepResearch = new DeepResearch({
searcher: async ({ query }) => {
// Your search implementation
return searchResults;
},
options: {
type: 'openai',
apiKey: 'your-api-key',
enableCitationUrl: false, // Use [[citation:1]] format
},
});
const agent = await deepResearch.compile();
const result = await agent.invoke({
messages: [{ role: 'user', content: 'Your research question' }],
});
Citation Format Options:
enableCitationUrl: true (default) - Outputs <sup>[[1](url)]</sup> format with clickable linksenableCitationUrl: false - Outputs [[citation:1]] simple formatDocumentation: DeepResearch NPM Package
model.json)docker-compose.yaml)Please refer to the deploy/docker-compose.yaml file.
Edit the docker-compose.yaml file and modify the corresponding environment variables in the search_chat service:
services:
search_chat:
container_name: search_chat
image: docker.cnb.cool/aigc/aisearch:v1.2.0-alpha
environment:
# Server Configuration
- PORT=3000
# Search Engine API Keys (configure as needed)
- BING_SEARCH_KEY=your_bing_key
- GOOGLE_SEARCH_KEY=your_google_key
- GOOGLE_SEARCH_ID=your_google_cse_id
- TAVILY_KEY=your_tavily_key
- ZHIPU_KEY=your_zhipu_key
- EXA_KEY=your_exa_key
- BOCHA_KEY=your_bocha_key
# Web Content Extraction (optional)
- JINA_KEY=your_jina_key
# SearXNG Configuration (included by default, ready to use)
- SEARXNG_HOSTNAME=http://searxng:8080
- SEARXNG_SAFE=0
- SEARXNG_LANGUAGE=en
- SEARXNG_ENGINES=bing,google
- SEARXNG_IMAGES_ENGINES=bing,google
# DeepResearch Configuration
- DEEP_MAX_RESEARCH_LOOPS=3
- DEEP_NUMBER_OF_INITIAL_QUERIES=3
# Domain Whitelist (optional)
- WHITELIST_DOMAINS=
volumes:
- ./model.json:/app/apps/server/dist/model.json
ports:
- "3000:3000"
restart: always
Create and edit the model.json file in the same directory as docker-compose.yaml to configure AI models and API keys:
[
{
"provider": "openai",
"type": "openai",
"baseURL": "https://api.openai.com/v1",
"apiKey": "sk-your-openai-api-key",
"apiMode": "openai-responses",
"models": [
{
"name": "gpt-4o-mini",
"alias": "GPT-4o Mini",
"description": "OpenAI GPT-4o Mini model",
"maxTokens": 262144,
"intentAnalysis": true
},
{
"name": "gpt-4o",
"alias": "GPT-4o",
"description": "OpenAI GPT-4o model",
"maxTokens": 262144
}
]
},
{
"provider": "anthropic",
"type": "anthropic",
"baseURL": "https://api.anthropic.com/v1",
"apiKey": "sk-your-anthropic-api-key",
"models": [
{
"name": "claude-sonnet-4-5",
"alias": "Claude Sonnet 4.5",
"description": "Anthropic Claude Sonnet 4.5",
"maxTokens": 131072
}
]
}
]
Models 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.
Configuration Description:
provider: Model provider nametype: API type (openai/anthropic/google etc.)baseURL: API base URLapiKey: Your API keyapiMode: Optional for OpenAI-compatible providers. Use openai-completions (default) for Chat Completions, or openai-responses for the OpenAI Responses API. Leave it unset for OpenAI-compatible endpoints that do not support the Responses API.models: Model list with name, alias, description and max tokensWhen apiMode is set on an OpenAI provider, the main chat response, search intent analysis, and DeepResearch flows use the same mode.
docker compose up -d
Open your browser and visit: http://localhost:3000
# Stop services
docker compose down
# Pull latest image
docker pull docker.cnb.cool/aigc/searchchat:latest
# Restart
docker compose up -d
The project supports multiple search engines. Choose the appropriate search source based on your needs. SearXNG is recommended.
Advantages: Completely free, no API key required, aggregates multiple search sources, protects privacy
SearXNG 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.
Configuration Options:
SEARXNG_ENGINES: Set search engines (default: bing,google)SEARXNG_LANGUAGE: Search language (zh=Chinese, en-US=English, all=all)SEARXNG_SAFE: Safe search level (0=off, 1=moderate, 2=strict)[!IMPORTANT]
Make 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:
search:
formats:
- html
- json
search_with_ai/
├── apps/
│ ├── server/ # Backend service (Koa + TypeScript)
│ │ ├── src/
│ │ │ ├── app.ts # Application entry
│ │ │ ├── controller.ts # Route controllers
│ │ │ ├── interface.ts # Type definitions
│ │ │ └── model.json # Model configuration
│ │ └── package.json
│ └── web/ # Frontend application (Vue 3 + TypeScript)
│ ├── src/
│ │ ├── pages/ # Page components
│ │ ├── stores/ # Pinia state management
│ │ └── components/ # Common components
│ └── package.json
├── deploy/ # Deployment configuration
│ ├── docker-compose.yaml
│ ├── .env.docker
│ └── model.json
└── package.json # Root configuration
# Clone project
git clone https://github.com/yokingma/SearChat.git
cd SearChat
# Install dependencies (run in root, will install all sub-project dependencies)
yarn install
Copy and edit server environment configuration:
# Copy environment configuration template
cp apps/server/.env apps/server/.env.local
# Edit configuration file
vim apps/server/.env.local
# Start both frontend and backend development servers
yarn dev
# Or use Turborepo command
turbo dev
Access URLs:
# Build all applications
yarn build
# Or
turbo build
Welcome to contribute to the project! Please follow these steps:
git checkout -b feature/amazing-featuregit commit -m 'Add amazing feature'git push origin feature/amazing-featureThis project is licensed under the MIT License.
⭐ If this project helps you, please give it a Star!
Search + Chat = SearChat(AI Chat with Search), Support OpenAI/Anthropic/VertexAI/Gemini, DeepResearch, SearXNG, Docker. AI对话式搜索引擎,支持DeepResearch, 支持OpenAI/Anthropic/VertexAI/Gemini接口、聚合搜索引擎SearXNG,支持Docker一键部署。
See the codeAI-powered conversational search engine
Multi-model integration | Real-time conversational search | Deep Research support
SearChat is a modern AI-powered conversational search engine built with Turborepo monorepo architecture, integrating Node.js + Koa backend and Vue 3 + TypeScript frontend.
🎯 Key Features:
[!IMPORTANT] To achieve the best results, the model must support Tool Call (Function Calling).
Deep Research mode uses AI-driven iterative search and analysis to generate comprehensive and in-depth research reports on any topic.
Key Features:
[[citation:1]] or clickable URLs)If you want to integrate Deep Research capabilities into your own Node.js project:
npm install deepsearcher
Quick Example:
import { DeepResearch } from 'deepsearcher';
const deepResearch = new DeepResearch({
searcher: async ({ query }) => {
// Your search implementation
return searchResults;
},
options: {
type: 'openai',
apiKey: 'your-api-key',
enableCitationUrl: false, // Use [[citation:1]] format
},
});
const agent = await deepResearch.compile();
const result = await agent.invoke({
messages: [{ role: 'user', content: 'Your research question' }],
});
Citation Format Options:
enableCitationUrl: true (default) - Outputs <sup>[[1](url)]</sup> format with clickable linksenableCitationUrl: false - Outputs [[citation:1]] simple formatDocumentation: DeepResearch NPM Package
model.json)docker-compose.yaml)Please refer to the deploy/docker-compose.yaml file.
Edit the docker-compose.yaml file and modify the corresponding environment variables in the search_chat service:
services:
search_chat:
container_name: search_chat
image: docker.cnb.cool/aigc/aisearch:v1.2.0-alpha
environment:
# Server Configuration
- PORT=3000
# Search Engine API Keys (configure as needed)
- BING_SEARCH_KEY=your_bing_key
- GOOGLE_SEARCH_KEY=your_google_key
- GOOGLE_SEARCH_ID=your_google_cse_id
- TAVILY_KEY=your_tavily_key
- ZHIPU_KEY=your_zhipu_key
- EXA_KEY=your_exa_key
- BOCHA_KEY=your_bocha_key
# Web Content Extraction (optional)
- JINA_KEY=your_jina_key
# SearXNG Configuration (included by default, ready to use)
- SEARXNG_HOSTNAME=http://searxng:8080
- SEARXNG_SAFE=0
- SEARXNG_LANGUAGE=en
- SEARXNG_ENGINES=bing,google
- SEARXNG_IMAGES_ENGINES=bing,google
# DeepResearch Configuration
- DEEP_MAX_RESEARCH_LOOPS=3
- DEEP_NUMBER_OF_INITIAL_QUERIES=3
# Domain Whitelist (optional)
- WHITELIST_DOMAINS=
volumes:
- ./model.json:/app/apps/server/dist/model.json
ports:
- "3000:3000"
restart: always
Create and edit the model.json file in the same directory as docker-compose.yaml to configure AI models and API keys:
[
{
"provider": "openai",
"type": "openai",
"baseURL": "https://api.openai.com/v1",
"apiKey": "sk-your-openai-api-key",
"apiMode": "openai-responses",
"models": [
{
"name": "gpt-4o-mini",
"alias": "GPT-4o Mini",
"description": "OpenAI GPT-4o Mini model",
"maxTokens": 262144,
"intentAnalysis": true
},
{
"name": "gpt-4o",
"alias": "GPT-4o",
"description": "OpenAI GPT-4o model",
"maxTokens": 262144
}
]
},
{
"provider": "anthropic",
"type": "anthropic",
"baseURL": "https://api.anthropic.com/v1",
"apiKey": "sk-your-anthropic-api-key",
"models": [
{
"name": "claude-sonnet-4-5",
"alias": "Claude Sonnet 4.5",
"description": "Anthropic Claude Sonnet 4.5",
"maxTokens": 131072
}
]
}
]
Models 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.
Configuration Description:
provider: Model provider nametype: API type (openai/anthropic/google etc.)baseURL: API base URLapiKey: Your API keyapiMode: Optional for OpenAI-compatible providers. Use openai-completions (default) for Chat Completions, or openai-responses for the OpenAI Responses API. Leave it unset for OpenAI-compatible endpoints that do not support the Responses API.models: Model list with name, alias, description and max tokensWhen apiMode is set on an OpenAI provider, the main chat response, search intent analysis, and DeepResearch flows use the same mode.
docker compose up -d
Open your browser and visit: http://localhost:3000
# Stop services
docker compose down
# Pull latest image
docker pull docker.cnb.cool/aigc/searchchat:latest
# Restart
docker compose up -d
The project supports multiple search engines. Choose the appropriate search source based on your needs. SearXNG is recommended.
Advantages: Completely free, no API key required, aggregates multiple search sources, protects privacy
SearXNG 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.
Configuration Options:
SEARXNG_ENGINES: Set search engines (default: bing,google)SEARXNG_LANGUAGE: Search language (zh=Chinese, en-US=English, all=all)SEARXNG_SAFE: Safe search level (0=off, 1=moderate, 2=strict)[!IMPORTANT]
Make 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:
search:
formats:
- html
- json
search_with_ai/
├── apps/
│ ├── server/ # Backend service (Koa + TypeScript)
│ │ ├── src/
│ │ │ ├── app.ts # Application entry
│ │ │ ├── controller.ts # Route controllers
│ │ │ ├── interface.ts # Type definitions
│ │ │ └── model.json # Model configuration
│ │ └── package.json
│ └── web/ # Frontend application (Vue 3 + TypeScript)
│ ├── src/
│ │ ├── pages/ # Page components
│ │ ├── stores/ # Pinia state management
│ │ └── components/ # Common components
│ └── package.json
├── deploy/ # Deployment configuration
│ ├── docker-compose.yaml
│ ├── .env.docker
│ └── model.json
└── package.json # Root configuration
# Clone project
git clone https://github.com/yokingma/SearChat.git
cd SearChat
# Install dependencies (run in root, will install all sub-project dependencies)
yarn install
Copy and edit server environment configuration:
# Copy environment configuration template
cp apps/server/.env apps/server/.env.local
# Edit configuration file
vim apps/server/.env.local
# Start both frontend and backend development servers
yarn dev
# Or use Turborepo command
turbo dev
Access URLs:
# Build all applications
yarn build
# Or
turbo build
Welcome to contribute to the project! Please follow these steps:
git checkout -b feature/amazing-featuregit commit -m 'Add amazing feature'git push origin feature/amazing-featureThis project is licensed under the MIT License.
⭐ If this project helps you, please give it a Star!