简体中文 | English
基于LangChain和SearXNG打造的开源AI搜索引擎
🌟🌟🌟
重要更新: LangChain-SearXNG 支持 Docker 部署, 支持 docker-compose 一键部署体验🚀🔥💥
🌟🌟🌟
🛫 项目支持三种部署方式,可以按需选取
- docker-compose 部署
- 分开 SearXNG 和 LangChain-SearXNG Docker 部署
- 手动部署
由于 SearXNG 需要访问外网,建议部署准备好外网环境
- 拉取项目完整代码
git clone https://github.com/ptonlix/LangChain-SearXNG.git --recursive
cd LangChain-SearXNG/searxng-docker
# 录入邮箱,域名可不配置
vim .env
# 修改searxng配置文件
vim searxng/settings.yml
# 修改 secret_key
openssl rand -hex 32 # 生成密钥填入
# 修改 limiter 和search,其它参数保持原配置文件不变
# see https://docs.searxng.org/admin/settings/settings.html#settings-use-default-settings
use_default_settings: true
server:
limiter: false # can be disabled for a private instance
search:
formats:
- html
- json
- 新增配置文件 settings-pro.yaml
详情可以参考配置文件介绍
配置文件修改
- 启动 docker
cd LangChain-SearXNG
docker compose up
由于 SearXNG 需要访问外网,建议部署选择外网服务器 以下部署示例选择以腾讯云轻量服务器-Centos 系统为例
根据 searxng-docker教程,按照以下操作,容器化部署 SearXNG
# 拉取代码
git clone https://github.com/searxng/searxng-docker.git
cd searxng-docker
# 修改域名和录入邮箱
vim .env
# 其余配置同上docker-compose 部署
- 拉取镜像
docker pull ptonlix/langchain-searxng:v0.1.8
#通过外部配置文件挂载启动容器
docker run -p 8002:8002 -p 8501:8501 \
-v ./settings-pro.yaml:/app/config/settings.yaml \
--name langchain-searxng \
langchain-searxng:v0.1.8
- 配置文件 settings-pro.yaml
详情可以参考配置文件介绍
配置文件修改
- 访问 WebUI
- 安装 miniconda
mkdir ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm -rf ~/miniconda3/miniconda.sh
~/miniconda3/bin/conda init bash
- 创建虚拟环境
# 创建环境
conda create -n LangChain-SearXNG python==3.10.11
- 安装 poetry
# 安装
curl -sSL https://install.python-poetry.org | python3 -
- 安装依赖
# 克隆项目代码到本地
git clone https://github.com/ptonlix/LangChain-SearXNG.git
conda activate LangChain-SearXNG # 激活环境
cd LangChain-SearXNG # 进入项目
poetry install # 安装依赖
OpenAI 文档
ZhipuAI 文档
DeepSeek 文档
LangSmith API
# settings.yaml
配置文件录入或通过环境变量设置以下变量,建议配置三个大模型API,在体验时可以自由选择模型来体验
# 根据自身环境选择合适的 大模型API
# OPENAI 大模型API
OPENAI_API_BASE
OPENAI_API_KEY
# ZHIPUAI 智谱API
ZHIPUAI_API_KEY
ZHIPUAI_API_BASE
# DeepSeek 大模型API
DEEPSPEAK_API_KEY
DEEPSPEAK_API_BASE
# LangChain调试 API
LANGCHAIN_API_KEY
# SearXNG请求地址,docker-compose 部署无需修改该变量
SEARX_HOST
详情配置文件介绍见: LangChain-SearXNG 配置
# 启动项目
python -m langchain_searxng
# 查看API
访问: http://localhost:8002/docs 获取 API 信息
# 启动前端页面
cd webui
streamlit run webui.py
- 搜索问答模式
目前项目搜索 API 已升级到 v2 版本,下面例子请求使用 v2 版本进行体验
请求参数:
{
"question": "目前**新能源汽车厂商排行榜是什么", #提问问题
"chat_history": [], #历史聊天记录
"network": true, #是否开启联网
"conversation_id": "", #提问的UUID
"llm": "zhipuai", #采用的大模型
"retriever": "searx" # 采用的召回模式
}
目前支持两种搜索模式 Searxng
和 智谱WebSearch
,这两种模式启用主要根据输入的请求参数llm
h 和retriever
控制
I. 开启 智谱 WebSearch
对应 Webui 页面 ➡️ 智谱搜索
{
...
"llm": "zhipuwebsearch", #大模型必须选择zhipuwebsearch (智谱搜索定制模型)
"retriever": "zhipuwebsearch" #召回模式选择 zhipuwebsearch
}
Ⅱ. 开启 AI+SearXNG V2 版本
对应 Webui 页面 ➡️ SearXNG 搜索
{
...
"llm": "deepseek", #可选:默认openai,可选zhipuai,可选deepseek
"retriever": "searx" #可选:默认searx
}
🎨 能力 | AI+SearXNGv1 | AI+SearXNGv2 | 智谱 WebSearch | 360AI 搜索 |
---|---|---|---|---|
🚀 响应速度 | 🌟🌟🌟 | 🌟🌟🌟🌟 | 🌟🌟🌟🌟🌟 | 🌟🌟🌟🌟 |
📝 内容质量 | 🌟🌟🌟 | 🌟🌟🌟🌟 | 🌟🌟🌟 | 🌟🌟🌟🌟🌟 |
💦 流式响应 | 1. 搜索过程支持 2.搜索结果支持 |
1. 搜索过程支持 2.搜索结果支持 |
1. 搜索过程不支持 2.搜索结果支持 |
1. 搜索过程支持 2.搜索结果支持 |
AI+SearXNGv2
相较于上个版本从响应速度和内容质量均有明显提升,距离 360AI 搜索更进一步了 💪
详细评测分析: AI 搜索模式对比测试
本项目通过构建 SearXNG 搜索引擎 Tool + LangChain LCEL 调用方式构建-AI 搜索引擎 Agent,以 Fastapi 对外提供服务
-
通过用户输入的参数控制搜索工作流程,主流程分为
联网搜索问答
和模型内搜索问答
-
模型内搜索问答
: 通过获取用户输入chat_history
question
构建 Prompt 输入到 LLM 生成问答结果并返回 -
联网搜索问答
: 主要分为三个部分condense question chain
搜索召回
response synthesizer chain
- 如果输入的 chat_history 不为空,则进入
condense question chain
工作流,根据聊天上下文生成最合适的搜索 query - 通过 query 进入
搜索召回
工作流:分为searxng search
select search result
Data processing
三个部分
- 通过 LLM 根据搜索 query 选择最合适的 searxng 搜索参数,调用 searxng api 搜索结果(通常 20 ~ 30 个搜索结果)
- 再根据上一步搜索到的结果,通过 LLM 进一步筛选出最合适回答该 query 的搜索结果,通常 6 个
- 根据确定最合适的搜索结果,进行数据处理:检查可访问性->获取 html->生成 Documents ->format 格式化,最终输出问答上下文
context
- 通过
搜索召回
的上下文context
和用户输入的chat_history
question
一起进入response synthesizer chain
工作流,最终生成搜索响应
- 如果输入的 chat_history 不为空,则进入
v2 对比 v1 版本的差别
- v1 版本主要是搜索获取数据,再通过过滤筛选出最佳数据,但如果一开始源数据质量不佳,则后续工作效果就会大减,而且基础源数据数量不多,向量化过滤时间很长。
- v2 版本一个主要原则是确保源数据质量,搜索结果尽可能符合搜索关键字,所以精心构建了搜索召回工作流,让大模型参与获取最佳搜索结果。同时由于已经筛选出最佳搜索数据,不需要向量化过滤,可以直接 LLM 让生成结果。(Token 越来越便宜也是一大趋势)
- v2 版本还优化了搜索网页加载流程,尽可能快的获取到搜索数据
- v2 版本增加搜索过程可视化,在流式返回中,可以动态显示搜索进度,展示更丰富的内容
├── docs # 文档
├── langchain_searxng
│ ├── components #自定义组件
│ ├── server # API服务
│ ├── settings # 配置服务
│ ├── utils
│ ├── constants.py
│ ├── di.py
│ ├── launcher.py
│ ├── main.py
│ ├── paths.py
│ ├── __init__.py
│ ├── __main__.py #入口
│ └── __version__.py
├── log # 日志目录
├── wwebui # 前端展示页面
- 支持查询结果 http sse 流式和非流式(整体)返回
- 支持联网查询 QA 和直接 QA 切换
- 支持 Token 计算(含 embedding)
- 支持 openai、zhipuai、deepseek 三种大模型
- 支持 配置文件动态加载
- 支持 智谱 AI 新推出的 WebSearch 功能
- 搭建 LangChain-SearXNG 初步框架,完善基本功能
- 支持配置文件动态加载,方便更改相关参数
- 完善 网站页面内容爬取效果
- 支持网络访问异常处理,方便国内环境使用
- 支持智谱 WebSearch 功能
- 升级 SearXNG 搜索问题,支持更快更精准的回答
- 搭建前端 Web Demo
- Docker 化项目,便于部署传播
- 支持视频搜索
- 优化 Prompt,支持输出更丰富的内容
🎉 扫码联系作者,如果你也对本项目感兴趣
🎉 欢迎加入 LangChain-X (帝阅开发社区) 项目群参与讨论交流
欢迎大家贡献力量,一起共建 LangChain-SearXNG,您可以做任何有益事情
- 报告错误
- 建议改进
- 文档贡献
- 代码贡献
...
👏👏👏
「帝阅」
是一款个人专属知识管理与创造的 AI Native 产品
为用户打造一位专属的侍读助理,帮助提升用户获取知识效率和发挥创造力
让用户更好地去积累知识、管理知识、运用知识
LangChain-SearXNG 是帝阅项目一个子项目,我们决定开源出来,与大家交流学习
同时,欢迎大家前往体验帝阅 给我们提出宝贵的建议