欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > LangChain-ChatChat+Ollama+DeepSeek 构建RAG本地知识库

LangChain-ChatChat+Ollama+DeepSeek 构建RAG本地知识库

2025/4/23 16:51:54 来源:https://blog.csdn.net/bigwhitetao9527/article/details/145316041  浏览:    关键词:LangChain-ChatChat+Ollama+DeepSeek 构建RAG本地知识库

前言

出于想对接口文档直接生成测试用例或者自动化的需求,且方便检索对接,对本地知识库进行的研究,搭建了一天才搞出来,踩了许多坑,于是分享下过程。当然用docker搭应该挺方便(也许?)

本人电脑配置,AMD u,仅核显,32GB内存,运行该项目时也没什么波动,占用不高,感觉16GB也能跑。

以下搭建过程都不需要梯子,这就是为什么选择deepseek的原因,而且deepseek还送免费额度。

一、搭建conda虚拟环境

1.1 说明

Anaconda可以方便隔离各种python项目之间的环境,指定各项目的python版本和包依赖,因为各种ai项目基本都是用python搭建,所以用Anaconda不用经历本地python版本不一致,依赖乱了又要重装一遍的烦恼。

Anaconda 包及其依赖项和环境的管理工具为 conda 命令

1.2 安装

下载 Anaconda:Download Anaconda Distribution | Anaconda

填入邮箱地址,点击Submit即可进入下载页

下载完成后执行安装(建议以管理员身份运行),然后一路next,安装目录选个大点的盘就行。

这里可以全勾选,第二个选项是支持将anaconda当python环境使用,第三个选项是安装完成后清理包缓存,可以释放一些磁盘空间,对后续使用没有影响。

1.3 配置本地环境变量PATH

右键我的电脑 -> 属性 -> 高级系统设置 -> 环境变量 -> Path -> 新建

我这里安装D盘目录下,所以配置 D:\ProgramData\anaconda3\Scripts ,你可以根据你安装的目录配置

1.4 测试Conda

按win键打开开始菜单,搜索命令提示符,以 管理员身份 运行,输入

conda --help

看到这个输出,说明路径配置正常

1.5 创建虚拟环境

接下来创建 langchain-chatchat 需要用到的虚拟环境,chatchat支持python版本3.8->3.11,我们这里使用3.10,用3.11运行也正常。

conda create -n chatchat python=3.10

输入y回车,继续执行,我们看到以下输出就可以执行 conda activate chatchat,来激活这个环境了

如果遇到,提示 conda init before conda activate,可以尝试执行下 conda init,执行完如果还提示这个,那就尝试直接执行 activate chatchat,如果还不行,就看下是不是以管理员身份运行的命令提示符(或者powershell)

还有其它问题本人就没遇到过了,可以自行搜索解决,conda其它命令也可以自行搜索。

二、搭建Ollama及下载相关Embedding模型

2.1 说明

 Ollama可以理解为一个llm框架,负责加载各类llm模型,使用起来十分方便。

 Embedding主要是用来做文本的向量化,后可存储到向量数据库,方便RAG检索。

2.2 安装

下载Ollama:Ollama

进页面就是一个大大的download,直接下载安装即可。

安装完成后,你右下角就会有只羊驼图标,同时ollama会占用你本地11434端口(确保端口可用),进行开放服务。

同样以 管理员身份 运行命令提示符。在Ollma页面有个大大的搜索框可以直接搜索你需要的模型。

这里我们下载 quentinz/bge-large-zh-v1.5 和 bge-m3

简单说明:

bge-large-zh-v1.5 主支持中文

bge-m3 支持百来种语言

关于这两个模型详细信息可以自行搜索,也可以使用其它embedding模型,主要这个两个是在langchain-chatchat的配置文件里就有。

直接在命令提示符,运行

ollama pull quentinz/bge-large-zh-v1.5ollama pull bge-m3

2.3 测试

不像llm模型需要run,到这里embedding模型已经可以使用了,你可以本地postman测试一下。

curl --request POST \--url http://127.0.0.1:11434/v1/embeddings \--header 'Accept: application/json' \--header 'Accept-Encoding: gzip, deflate, br' \--header 'Connection: keep-alive' \--header 'Content-Type: application/json' \--header 'User-Agent: PostmanRuntime-ApipostRuntime/1.1.0' \--data '{"model": "quentinz/bge-large-zh-v1.5","input": ["天很蓝", "海很深"]
}'

关于ollama相关配置项(鉴权、模型存储路径、端口等)可以自行搜索。

继续下一步

三、申请DeepSeek API Key

如果你有了或知道怎么申请,可以直接跳过到下一章。

3.1 申请api key

进入DeepSeek官网:DeepSeek

右上角进入API开放平台

登录后,默认送10块钱额度,进入API Keys

申请到Key后,我们找个地方保存下来。

3.2 测试

curl --request POST \--url https://api.deepseek.com/chat/completions \--header 'Accept: application/json' \--header 'Accept-Encoding: gzip, deflate, br' \--header 'Authorization: Bearer sk-你自己的apikey' \--header 'Connection: keep-alive' \--header 'Content-Type: application/json' \--header 'User-Agent: PostmanRuntime-ApipostRuntime/1.1.0' \--data '{"model": "deepseek-chat","messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello!"}]
}'

DeepSeek支持opanai的API调用格式,接口文档里也有,可以自行测试

四、搭建Langchain-ChatChat

至此,前期准备工作都已经做完O(∩_∩)O,接下来,正式开始搭建chatchat

github地址:GitHub - chatchat-space/Langchain-Chatchat: Langchain-Chatchat(原Langchain-ChatGLM)基于 Langchain 与 ChatGLM, Qwen 与 Llama 等语言模型的 RAG 与 Agent 应用 | Langchain-Chatchat (formerly langchain-ChatGLM), local knowledge based LLM (like ChatGLM, Qwen and Llama) RAG and Agent app with langchain

gitcode镜像站地址:GitCode - 全球开发者的开源社区,开源代码托管平台

本文使用 pip 安装部署 有源码部署需求可根据项目中readme自行部署,关键是配置,其它大差不差。

4.1 pip安装部署

首先,以管理员身份运行命令提示符,执行 conda activate chatchat,激活chatchat的python环境,如果在conda搭建那一步已激活,则忽略。

conda activate chatchat
设置清华源

这个地址建议收藏,经常要用,后续搭建其它python项目也可以用到。

pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
安装 Langchain-Chatchat

选一个目录,执行

pip install langchain-chatchat -U

 安装完成后,执行

chatchat init

到这里,上面WARNING我们都忽略,接下来打开chatchat的目录,我们开始配置 model_setting.yaml,确保Ollama及embedding已安装,DeepSeek已申请

4.2 配置 model_setting.yaml

修改 DEFAULT_LLM_MODEL,DEFAULT_EMBEDDING_MODEL
# 默认选用的 LLM 名称
DEFAULT_LLM_MODEL: deepseek-chat# 默认选用的 Embedding 名称
DEFAULT_EMBEDDING_MODEL: quentinz/bge-large-zh-v1.5

这里 DEFAULT_EMBEDDING_MODEL 你也可以使用 bge-m3,看个人需求,关于两者的区别我已在上文有说明。

修改 platform_type

记得把前面 # 号去掉(有点啰嗦哈哈)

platform_type: ['ollama', 'openai']

这样就可以做到 embedding 使用本地的模型,而 llm 使用deepseek的

修改 MODEL_PLATFORMS

把xinference的auto_detect_model改为false,不然后续一直会告警,并且卡住chatchat的执行

  - platform_name: xinferenceplatform_type: xinferenceapi_base_url: http://127.0.0.1:9997/v1api_key: EMPTYapi_proxy: ''api_concurrencies: 5auto_detect_model: false

ollama加上bge-m3,如果你的DEFAULT_EMBEDDING_MODEL用的bge-m3的话,llm_models不用管,这里配置只是说明可用的模型,你上面没用到就没影响了

  - platform_name: ollamaplatform_type: ollamaapi_base_url: http://127.0.0.1:11434/v1api_key: EMPTYapi_proxy: ''api_concurrencies: 5auto_detect_model: falsellm_models: []embed_models:- quentinz/bge-large-zh-v1.5- bge-m3

openapi地址改为deepseek的api地址,并修改llm_models

  - platform_name: openaiplatform_type: openaiapi_base_url: https://api.deepseek.comapi_key: sk-你自己的apikeyapi_proxy: ''api_concurrencies: 5auto_detect_model: falsellm_models:- deepseek-chatembed_models: []text2image_models: []image2text_models: []rerank_models: []speech2text_models: []text2speech_models: []

到这里配置完成,修改完记得保存,以确保生效接下来我们初始化知识库,

4.3 初始化测试知识库

执行

chatchat kb -r

需要等待一段时间

看到这里说明,测试知识库初始化完成

4.4 启动chatchat

执行

chatchat start -a

如果出现

这个报错,则说明httpx版本过高,不支持proxies,需要降低下httpx版本([BUG] httpx包版本错误 · Issue #5115 · chatchat-space/Langchain-Chatchat)

Ctrl + C 终止当前chatchat进程(一次不行就按多几次),然后执行

pip install httpx==0.27.2 -U

再次运行chatchat

chatchat start -a

 

测试一下chat功能和Rag对话功能,默认rag的知识库是取自github仓库的issue中。

在知识库管理中可以新建你自己的知识库,然后上传文件,就可以生成你自己的知识库问答系统了,比如上传swagger生成的json接口文档,或者各种专业领域的pdf、图片、ppt等。

至此整体部署完成。

结语

        本文主要是面向如何部署,避开了个人在部署过程中踩的各种坑,像我一开始embedding模型用的豆包,百度一直报错,后续是用oneapi去解决的,这些都卡了我半天,所以写这篇文章做个笔记,选择Langchain-chatchat是因为它star数高而且中文友好,prompt原生就是中文配置,还有个项目叫 kotaemon,结合了GraphRAG能生成知识图谱。

        大家如果隐私要求比较高也可以使用自己的llm模型,这里是为了方便,而且普通办公笔记本就能部署运行所以llm模型用的deepseek。

        chatchat中还有许多配置项,可以调整prompt,也可以更换向量数据库,也可以使用agent,还有很多其它配置可以实现一些,像是获取数据库链接并将你说的话转换为sql语句执行(理论上有风险,可以测试环境试着玩),这些在开源项目的文档中都有,大家可以自行探索。

        同时chatchat也暴露了http接口,start -a 本身是启动了api + web端,如果你有自己的web端,或者想通过接口来访问,然后开发自己的功能,也可以只启动api,api文档在开源文档也有。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词