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.5

ollama 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: xinference
    platform_type: xinference
    api_base_url: http://127.0.0.1:9997/v1
    api_key: EMPTY
    api_proxy: ''
    api_concurrencies: 5
    auto_detect_model: false

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

  - platform_name: ollama
    platform_type: ollama
    api_base_url: http://127.0.0.1:11434/v1
    api_key: EMPTY
    api_proxy: ''
    api_concurrencies: 5
    auto_detect_model: false
    llm_models: []
    embed_models:
      - quentinz/bge-large-zh-v1.5
      - bge-m3

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

  - platform_name: openai
    platform_type: openai
    api_base_url: https://api.deepseek.com
    api_key: sk-你自己的apikey
    api_proxy: ''
    api_concurrencies: 5
    auto_detect_model: false
    llm_models:
      - deepseek-chat
    embed_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文档在开源文档也有。

### LangChain-ChatchatOllamaDeepSeek 的对比分析 #### 功能定位 LangChain-Chatchat 是一个基于 LangChain 构建的应用框架,专注于实现本地化的检索增强生成(RAG)和代理功能[^1]。它支持多种语言模型,例如 ChatGLM、Qwen 和 Llama 等,并允许用户通过集成这些模型来构建自己的知识库应用。 Ollama 则是一个轻量级工具,旨在简化大型语言模型的部署过程[^4]。它的主要特点是提供了一个易于使用的命令行界面以及高效的模型管理机制,使得开发者可以轻松加载并运行各种预训练模型。 DeepSeek 提供了一系列高质量的大规模语言模型,专为高性能计算环境设计[^3]。其核心优势在于强大的推理能力和广泛的适用场景,适合需要高精度输出的任务。 #### 技术架构 从技术角度来看,LangChain-Chatchat 基于 Python 编写,依赖 pip 工具完成安装流程。该框架利用了向量化数据库存储文档片段及其对应的嵌入表示形式,从而实现了快速的信息检索能力。 相比之下,Ollama 更加注重硬件资源利用率优化方面的工作[^2]。为了克服某些特定条件下无法正常调用文本嵌入模型的问题,可能需要调整相应的配置文件参数设置。 至于 DeepSeek,则采用了先进的神经网络结构来进行自然语言处理任务中的序列预测操作。这种设计策略有助于提升整体系统的响应速度和服务质量水平。 #### 使用体验 对于 Window 用户而言,在实际操作过程中可能会遇到一些路径相关的小挑战;不过只要按照官方指南正确指定根目录位置即可顺利解决问题。 而在 Mac M1 Pro 设备上部署时,除了常规软件包更新外并无太多额外复杂度引入步骤说明。这表明无论是在哪种主流操作系统平台上执行初始化准备工作都不会显得特别困难耗时。 ```python import os # Example of setting CHATCHAT_ROOT environment variable on Windows os.environ['CHATCHAT_ROOT'] = r'D:\ProgramData\langchain-chatchat' ``` #### 性能表现 由于三者各自侧重点不同因此很难单纯依据某单一维度去评判谁优谁劣。但从综合考量角度出发的话我们可以得出如下结论: - 如果目标主要是创建具备较强交互性的应用程序那么选用 LangChain-Chatchat 将会是个不错的选择因为它提供了丰富的插件扩展选项便于定制化开发; - 对追求极致简便性和灵活性的需求方来说 Ollama 显然是更为理想的候选方案之一因为凭借简单直观的操作方式能够迅速满足基本需求而无需过多关注底层细节部分; - 而当面临对算力要求极高或者希望获得最精确结果的情况下则应优先考虑采用 DeepSeek 家族成员作为主力引擎驱动整个业务逻辑运转起来。 ---
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值