使用Langchain-chatchat搭建RAG应用,并使用postman进行测试验证

Github地址:https://github.com/chatchat-space/Langchain-Chatchat

一、概述
LangChain-Chatchat (原 Langchain-ChatGLM),一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。

本项目的最新版本中可使用 Xinference、Ollama 等框架接入 GLM-4-Chat、 Qwen2-Instruct、 Llama3 等模型,依托于 langchain 框架支持通过基于 FastAPI 提供的 API 调用服务,或使用基于 Streamlit 的 WebUI 进行操作。

本项目支持市面上主流的开源 LLM、 Embedding 模型与向量数据库,可实现全部使用开源模型离线私有部署。与此同时,本项目也支持 OpenAI GPT API 的调用,并将在后续持续扩充对各类模型及模型 API 的接入。

本项目实现原理如下图所示,过程包括加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的 top k个 -> 匹配出的文本作为上下文和问题一起添加到 prompt中 -> 提交给 LLM生成回答。

|原理介绍:https://www.bilibili.com/video/BV13M4y1e7cN/?share_source=copy_web&vd_source=e6c5aafe684f30fbe41925d61ca6d514

0.3.x 版本功能一览

功能0.2.x0.3.x
模型接入本地:fastchat
在线:XXXModelWorker本地:model_provider,支持大部分主流模型加载框架
在线:oneapi
所有模型接入均兼容openai sdk
Agent❌不稳定✅针对ChatGLM3和Qwen进行优化,Agent能力显著提升
LLM对话
知识库对话
搜索引擎对话
文件对话✅仅向量检索✅统一为File RAG功能,支持BM25+KNN等多种检索方式
数据库对话
多模态图片对话✅ 推荐使用 qwen-vl-chat
ARXIV文献对话
Wolfram对话
文生图
本地知识库管理
WEBUI✅更好的多会话支持,自定义系统提示词…

0.3.x 版本的核心功能由 Agent 实现,但用户也可以手动实现工具调用:

操作方式实现的功能适用场景
选中"启用Agent",选择多个工具由LLM自动进行工具调用使用ChatGLM3/Qwen或在线API等具备Agent能力的模型
选中"启用Agent",选择单个工具LLM仅解析工具参数使用的模型Agent能力一般,不能很好的选择工具
想手动选择功能
不选中"启用Agent",选择单个工具不使用Agent功能的情况下,手动填入参数进行工具调用使用的模型不具备Agent能力
不选中任何工具,上传一个图片图片对话使用 qwen-vl-chat 等多模态模型

已支持的模型部署框架与模型

本项目中已经支持市面上主流的如 GLM-4-Chat 与 Qwen2-Instruct 等新近开源大语言模型和 Embedding 模型,这些模型需要用户自行启动模型部署框架后,通过修改配置信息接入项目,本项目已支持的本地模型部署框架如下:

模型部署框架XinferenceLocalAIOllamaFastChat
OpenAI API 接口对齐
加速推理引擎GPTQ, GGML, vLLM, TensorRT, mlxGPTQ, GGML, vLLM, TensorRTGGUF, GGMLvLLM
接入模型类型LLM, Embedding, Rerank, Text-to-Image, Vision, AudioLLM, Embedding, Rerank, Text-to-Image, Vision, AudioLLM, Text-to-Image, VisionLLM, Vision
Function Call/
更多平台支持(CPU, Metal)
异构//
集群//
操作文档链接Xinference 文档LocalAI 文档Ollama 文档FastChat 文档
可用模型Xinference 已支持模型LocalAI 已支持模型Ollama 已支持模型FastChat 已支持模型

除上述本地模型加载框架外,项目中也为可接入在线 API 的 One API 框架接入提供了支持,支持包括 OpenAI ChatGPT、Azure OpenAI API、Anthropic Claude、智谱清言、百川 等常用在线 API 的接入使用。

二、安装使用

2.1 软硬件要求

💡 软件方面,本项目已支持在 Python 3.8-3.11 环境中进行使用,并已在 Windows、macOS、Linux 操作系统中进行测试。

💻 硬件方面,因 0.3.0 版本已修改为支持不同模型部署框架接入,因此可在 CPU、GPU、NPU、MPS 等不同硬件条件下使用。

2.2 安装 Langchain-Chatchat

   从 0.3.0 版本起,Langchain-Chatchat 提供以 Python 库形式的安装方式,具体安装请执行:
pip install langchain-chatchat -U
    执行上述命令之前,最好先安装一个python虚拟机,具体安装方式如下:  
conda create -n chatchat python=3.11

因模型部署框架 Xinference 接入 Langchain-Chatchat 时需要额外安装对应的 Python 依赖库,因此如需搭配 Xinference 框架使用时,建议使用如下安装方式:

pip install "langchain-chatchat[xinference]" -U

安装好python环境后,正式进入Langchain-chatchat环境配置。

2.3 初始化项目配置与数据目录

1. 设置 Chatchat 存储配置文件和数据文件的根目录(可选)

在这里插入图片描述

|若不设置该环境变量,则自动使用当前目录。

2. 执行初始化

chatchat init

该命令会执行以下操作:

  • 创建所有需要的数据目录

  • 复制 samples 知识库内容

  • 生成默认 yaml 配置文件

3. 修改配置文件

a)配置模型(model_settings.yaml)

需要根据步骤 2. 模型推理框架并加载模型 中选用的模型推理框架与加载的模型进行模型接入配置,具体参考 model_settings.yaml 中的注释。主要修改以下内容:
在这里插入图片描述

b)配置知识库路径(basic_settings.yaml)(可选)

默认知识库位于 CHATCHAT_ROOT/data/knowledge_base,如果你想把知识库放在不同的位置,或者想连接现有的知识库,可以在这里修改对应目录即可。

# 知识库默认存储路径
KB_ROOT_PATH: D:\chatchat-test\data\knowledge_base

# 数据库默认存储路径。如果使用sqlite,可以直接修改DB_ROOT_PATH;如果使用其它数据库,请直接修改SQLALCHEMY_DATABASE_URI。
DB_ROOT_PATH: D:\chatchat-test\data\knowledge_base\info.db

# 知识库信息数据库连接URI
SQLALCHEMY_DATABASE_URI: sqlite:///D:\chatchat-test\data\knowledge_base\info.db

c)配置知识库(kb_settings.yaml)(可选)

默认使用 FAISS 知识库,如果想连接其它类型的知识库,可以修改 DEFAULT_VS_TYPE 和 kbs_config。

2.4 初始化知识库

进行知识库初始化前,请确保已经启动模型推理框架及对应 embedding 模型,且已按照上述步骤3完成模型接入配置。

chatchat kb -r

|会预加载Langchain-chatchat自带的文档,包括txt,excel,csv等格式文件

2.5 启动项目

chatchat start -a

出现以下界面即为启动成功:

可以在Langchain-chatchatWEBUI界面中选择《多功能对话》、《RAG对话》、《知识库管理》等功能,其中,《多功能对话》中也可以选择“本地知识库”实现RAG对话功能。

其他功能,自行开发。

三、项目部署调用

3.1 API调用方式

可以参考官方链接:

https://github.com/chatchat-space/Langchain-Chatchat/blob/master/docs/contributing/api.md

把如下文件内容写入infer_test.py即可进行测试验证。

在这里插入图片描述

3.2 flask调用方式

把如下文件内容写入infer_flask.py即可进行测试验证。

在这里插入图片描述
在这里插入图片描述

运行上述文件

python infer_flask.py

可以在浏览器输入对应的url进行GET请求访问(下面内容仅用作测试)

由于浏览器无法验证POST请求,因此需要下载postman软件进行验证,下载地址:https://www.postman.com/downloads/

下载好postman软件,然后新建Collections,输入测试的url,并选择请求类型(比如GET、POST),如果有参数,可以输入参数名称和参数内容,最后执行“send”即可。案例如下图所示:

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。

### Langchain-ChatchatRAG 功能概述 Langchain-Chatchat 是一款专注于本地知识库的问答应用程序,旨在提供对中文场景的支持以及开源模型的良好兼容性[^1]。该平台实现了检索增强生成 (RAG, Retrieval-Augmented Generation) 技术来提升对话系统的性能。 #### RAG 工作原理 在传统的基于预训练的语言模型中,当接收到一个问题时,这些模型会尝试仅依赖于内部参数直接生成答案。然而,在某些情况下,特别是对于特定领域的问题,这样的方法可能无法给出最精确的回答。为了克服这一局限性,RAG 方法引入了一个额外的数据检索阶段: - **数据检索**:首先从外部存储(如数据库或文档集合)中查找与当前查询相关的上下文信息。 - **融合生成**:接着将找到的相关片段作为附加输入传递给语言模型,帮助其构建更准确、更有针对性的答案。 这种机制使得即使是在缺乏广泛背景的情况下也能有效地处理复杂问题提高响应质量。 #### 实现细节和技术栈 针对 Langchain-Chatchat 中具体如何实现上述过程,以下是几个关键技术组件及其作用说明: ##### Milvus 向量搜索引擎集成 通过整合高效的相似度匹配工具——Milvus 来加速近似最近邻搜索任务。这允许快速定位到那些能够最好地补充提问意图的知识条目[^2]。 ```python from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection connections.connect() fields = [ FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=DIMENSION) ] schema = CollectionSchema(fields) collection_name = "knowledge_base" milvus_collection = Collection(name=collection_name, schema=schema) ``` ##### 自定义 Embedding 模型优化 除了依靠现有的词嵌入方案外,还提供了接口让用户可以根据自己的需求微调 embedding 表达形式。这样可以更好地捕捉不同应用场景下的语义特征差异,从而进一步改善检索效果。 ```bash pip install sentence-transformers ``` ```python from sentence_transformers import SentenceTransformer model = SentenceTransformer('paraphrase-MiniLM-L6-v2') def encode_texts(texts): embeddings = model.encode(texts) return embeddings.tolist() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值