LangChain-SearXNG

LangChain-SearXNG

AI Q&A Search Engine ➡️ 基于LangChain和SearXNG打造的开源AI搜索引擎

Stars: 83

Visit
 screenshot

LangChain-SearXNG is an open-source AI search engine built on LangChain and SearXNG. It supports faster and more accurate search and question-answering functionalities. Users can deploy SearXNG and set up Python environment to run LangChain-SearXNG. The tool integrates AI models like OpenAI and ZhipuAI for search queries. It offers two search modes: Searxng and ZhipuWebSearch, allowing users to control the search workflow based on input parameters. LangChain-SearXNG v2 version enhances response speed and content quality compared to the previous version, providing a detailed configuration guide and showcasing the effectiveness of different search modes through comparisons.

README:

🔍 LangChain-SearXNG

简体中文 | English


基于LangChain和SearXNG打造的开源AI搜索引擎

 Python LangChain SearXNG license

🌟🌟🌟
重要更新: LangChain-SearXNG 支持 Docker 部署, 支持 docker-compose 一键部署体验🚀🔥💥
🌟🌟🌟

🚀 Quick Install

🛫 项目支持三种部署方式,可以按需选取

  • docker-compose 部署
  • 分开 SearXNG 和 LangChain-SearXNG Docker 部署
  • 手动部署

1.docker-compose 部署

由于 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

2.分开部署 SearXNG 和 LangChain-SearXNG

1.单独部署 SearXNG

由于 SearXNG 需要访问外网,建议部署选择外网服务器 以下部署示例选择以腾讯云轻量服务器-Centos 系统为例

根据 searxng-docker教程,按照以下操作,容器化部署 SearXNG

# 拉取代码
git clone https://github.com/searxng/searxng-docker.git
cd searxng-docker

# 修改域名和录入邮箱
vim .env

# 其余配置同上docker-compose 部署

2.LangChain-SearXNG Docker 部署

  • 拉取镜像
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

http://localhost:8501

3.手动部署

1.部署 Python 环境

  • 安装 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 -

2. 运行 LangChain-SearXNG

  • 安装依赖
# 克隆项目代码到本地
git clone https://github.com/ptonlix/LangChain-SearXNG.git
conda activate LangChain-SearXNG # 激活环境
cd LangChain-SearXNG # 进入项目
poetry install # 安装依赖

3.修改配置文件

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 配置

4.启动项目

# 启动项目
python -m langchain_searxng

# 查看API
访问: http://localhost:8002/docs 获取 API 信息

# 启动前端页面
cd webui
streamlit run webui.py


WebUI展示

  • 搜索问答模式

目前项目搜索 API 已升级到 v2 版本,下面例子请求使用 v2 版本进行体验

请求参数:

{
    "question": "目前中国新能源汽车厂商排行榜是什么", #提问问题
    "chat_history": [], #历史聊天记录
    "network": true, #是否开启联网
    "conversation_id": "", #提问的UUID
    "llm": "zhipuai", #采用的大模型
    "retriever": "searx" # 采用的召回模式

}

目前支持两种搜索模式 Searxng智谱WebSearch,这两种模式启用主要根据输入的请求参数llmh 和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 对外提供服务

1.AI+SearXNGv2 工作流介绍

v1 版本介绍


AI+SearXNG v2版本工作流

  • 通过用户输入的参数控制搜索工作流程,主流程分为联网搜索问答模型内搜索问答

  • 模型内搜索问答: 通过获取用户输入chat_history question 构建 Prompt 输入到 LLM 生成问答结果并返回

  • 联网搜索问答: 主要分为三个部分 condense question chain 搜索召回 response synthesizer chain

    1. 如果输入的 chat_history 不为空,则进入condense question chain 工作流,根据聊天上下文生成最合适的搜索 query
    2. 通过 query 进入搜索召回 工作流:分为 searxng search select search result Data processing三个部分
    • 通过 LLM 根据搜索 query 选择最合适的 searxng 搜索参数,调用 searxng api 搜索结果(通常 20 ~ 30 个搜索结果)
    • 再根据上一步搜索到的结果,通过 LLM 进一步筛选出最合适回答该 query 的搜索结果,通常 6 个
    • 根据确定最合适的搜索结果,进行数据处理:检查可访问性->获取 html->生成 Documents ->format 格式化,最终输出问答上下文context
    1. 通过搜索召回的上下文 context和用户输入的chat_history question一起进入response synthesizer chain工作流,最终生成搜索响应

v2 对比 v1 版本的差别

  1. v1 版本主要是搜索获取数据,再通过过滤筛选出最佳数据,但如果一开始源数据质量不佳,则后续工作效果就会大减,而且基础源数据数量不多,向量化过滤时间很长。
  2. v2 版本一个主要原则是确保源数据质量,搜索结果尽可能符合搜索关键字,所以精心构建了搜索召回工作流,让大模型参与获取最佳搜索结果。同时由于已经筛选出最佳搜索数据,不需要向量化过滤,可以直接 LLM 让生成结果。(Token 越来越便宜也是一大趋势)
  3. v2 版本还优化了搜索网页加载流程,尽可能快的获取到搜索数据
  4. v2 版本增加搜索过程可视化,在流式返回中,可以动态显示搜索进度,展示更丰富的内容

2. 目录结构

├── 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 # 前端展示页面

3. 功能介绍

  • 支持查询结果 http sse 流式和非流式(整体)返回
  • 支持联网查询 QA 和直接 QA 切换
  • 支持 Token 计算(含 embedding)
  • 支持 openai、zhipuai、deepseek 三种大模型
  • 支持 配置文件动态加载
  • 支持 智谱 AI 新推出的 WebSearch 功能

🚩 Roadmap

  • [x] 搭建 LangChain-SearXNG 初步框架,完善基本功能
  • [x] 支持配置文件动态加载,方便更改相关参数
  • [x] 完善 网站页面内容爬取效果
  • [x] 支持网络访问异常处理,方便国内环境使用
  • [x] 支持智谱 WebSearch 功能
  • [x] 升级 SearXNG 搜索问题,支持更快更精准的回答
  • [x] 搭建前端 Web Demo
  • [ ] Docker 化项目,便于部署传播
  • [x] 支持视频搜索
  • [ ] 优化 Prompt,支持输出更丰富的内容

🌏 项目交流讨论

🎉 扫码联系作者,如果你也对本项目感兴趣
🎉 欢迎加入 LangChain-X (帝阅开发社区) 项目群参与讨论交流

💥 贡献

欢迎大家贡献力量,一起共建 LangChain-SearXNG,您可以做任何有益事情

  • 报告错误
  • 建议改进
  • 文档贡献
  • 代码贡献
    ...
    👏👏👏

「帝阅」
是一款个人专属知识管理与创造的 AI Native 产品
为用户打造一位专属的侍读助理,帮助提升用户获取知识效率和发挥创造力
让用户更好地去积累知识、管理知识、运用知识

LangChain-SearXNG 是帝阅项目一个子项目,我们决定开源出来,与大家交流学习

同时,欢迎大家前往体验帝阅 给我们提出宝贵的建议



帝阅DeepRead

For Tasks:

Click tags to check more tools for each tasks

For Jobs:

Alternative AI tools for LangChain-SearXNG

Similar Open Source Tools

For similar tasks

For similar jobs