前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

Langchain-ChatChat Windows部署踩坑及问题解决

qiguaw 2024-10-27 12:30:39 资源文章 12 ℃ 0 评论

Langchain-ChatChat是现在用的很广的一个大模型应用框架,基于 ChatGLM 等大语言模型与 Langchain 等应用框架实现,开源、可离线部署的检索增强生成(RAG)大模型知识库项目。前一段时间用过几次,哪个时候还叫Langchain-ChatGLM,感觉很不错。最近正好要做一个RAG系统,就又装了一次。这次因为是在Windows上装的,踩了点坑,记录了一下。

GitHub: https://github.com/chatchat-space/Langchain-Chatchat


添加图片注释,不超过 140 字(可选)

介绍

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

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


添加图片注释,不超过 140 字(可选)


从文档处理角度来看,实现流程如下:


添加图片注释,不超过 140 字(可选)


本项目未涉及微调、训练过程,但可利用微调或训练对本项目效果进行优化。

解决的痛点

该项目是一个可以实现 __完全本地化__推理的知识库增强方案, 重点解决数据安全保护,私域化部署的企业痛点。 本开源方案采用Apache License,可以免费商用,无需付费。

安装步骤

主要是按照文档进行的安装,针对环境和具体需求进行了一些调整。

1. 环境配置

  • 首先,确保你的机器安装了 Python 3.8 - 3.11 (我们强烈推荐使用 Python3.11)。

$ python --version Python 3.11.7

接着,创建一个虚拟环境,并在虚拟环境内安装项目的依赖

python >= 3.11 
conda create -n chatchat_env python=3.11 
conda activate chatchat_env  


# 后续如果要激活这个环境运行
#     $ conda activate chatchat_env
# 关闭运行
#     $ conda deactivate


# 拉取仓库
$ git clone https://github.com/chatchat-space/Langchain-Chatchat.git

# 进入目录
$ cd Langchain-Chatchat

# 安装全部依赖,为了提升速度修改为国内的源
$ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt  
$ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements_api.txt 
$ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements_webui.txt  

# 默认依赖包括基本运行环境(FAISS向量库)。如果要使用 milvus/pg_vector 等向量库,请将 requirements.txt 中相应依赖取消注释再安装。

请注意,LangChain-Chatchat 0.2.x 系列是针对 Langchain 0.0.x 系列版本的,如果你使用的是 Langchain 0.1.x 系列版本,需要降级您的Langchain版本。

2, 模型下载

如需在本地或离线环境下运行本项目,需要首先将项目所需的模型下载至本地,通常开源 LLM 与 Embedding 模型可以从 HuggingFace 下载。

官方给的是默认使用的 LLM 模型 THUDM/ChatGLM3-6B 与 Embedding 模型 BAAI/bge-large-zh 为例:

下载模型需要先安装 Git LFS ,然后运行

$ git lfs install
$ git clone https://huggingface.co/THUDM/chatglm3-6b
$ git clone https://huggingface.co/BAAI/bge-large-zh

# 我因为使用私有大模型,所以没有下载ChatGLM3-6b3.

3. 初始化知识库和配置文件

按照下列方式初始化自己的知识库和简单的复制配置文件

$ python copy_config_example.py
$ python init_database.py --recreate-vs

我因为用的大模型服务而不是本地运行大模型,所以需要修改\Langchain-Chatchat\configs\model_config.py

修改ONLINE_LLM_MODEL部分对应的内容,放入自己的API Key。

在运行到$python init_database.py --recreate-vs 的时候,我这报错。

添加图片注释,不超过 140 字(可选)

网上查找原因,主要是langchain在windows环境下的一个问题。具体讨论参考:

import pwd on windows · Issue #17514 · langchain-ai/langchain

看提示换个版本应该也能解决,不过为了不引起其他问题,我按照这个方法:

community[patch]: Fix pwd import that is not available on windows by vorel99 · Pull Request #17532 · langchain-ai/langchain

直接修改了对应的文件:

添加图片注释,不超过 140 字(可选)


4. 一键启动

按照以下命令启动项目

$ python startup.py -a

5. 启动界面示例

FastAPI Docs 界面

添加图片注释,不超过 140 字(可选)

Web UI 启动界面示例:

  • Web UI 对话界面:

添加图片注释,不超过 140 字(可选)


同时配置了智谱和千帆。

  • Web UI 知识库管理页面:

添加图片注释,不超过 140 字(可选)


调用langchain-chatchat API的例代码

以调用知识库API为例

import requests
import json

def chat_knowledge(message,kb_name):
    url = f"http://localhost:7861/chat/knowledge_base_chat"
    payload = {
        "query": message,
        "knowledge_base_name": kb_name,
        "model_name": "qianfan-api"
    }
    response = requests.post(url, json=payload)
    return response

def format_kb_answer(response):
    # 找到 JSON 数据的起始位置
    json_start_index = response.text.find('{')
    
    # 提取 JSON 数据部分
    json_data = response.text[json_start_index:]
    
    # 解析 JSON 格式的字符串
    data = json.loads(json_data)
    
    # 提取 answer 字段的值
    answer = data['answer']
    
    # 提取 docs 字段的值
    docs = data['docs']
    
    # 将 '\n' 替换为换行符
    docs_with_newlines = [doc.replace('\\n', '\n') for doc in docs]
    
    print("Answer:")
    print(answer)
    print("\nDocs:")
    for doc in docs_with_newlines:
        print(doc)

response=chat_knowledge("请介绍一下如何办理保险", "insurance")
format_kb_answer(response)


添加图片注释,不超过 140 字(可选)

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表