1 Langchahin-chatchat的工程简介
本项目是利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。
本项目的最新版本中可使用 Xinference、Ollama 等框架接入 GLM-4-Chat、 Qwen2-Instruct、 Llama3 等模型,依托于 langchain 框架支持通过基于 FastAPI 提供的 API 调用服务,或使用基于 Streamlit 的 WebUI 进行操作。
工程已经更新到v0.3之上,相较于v0.2版本,有明显变化,具体如下:
v0.3之后更关注知识库和agent的实现,大模型的运行使用一些流行的大模型部署工具。包括xinference、llama等。
2 langchain-chatchat 环境安装与运行
所以我们需要在langchain-chatchat运行之前,先将大模型运行起来。 这里使用了xinference。具体安装和使用方式记录在 【大模型】Xinference的安装和部署
【虚拟环境创建与激活】
conda create --name chatchat-0.3.1 python=3.10 conda activate chatchat-0.3.1
【环境的配置】
pip install langchain-chatchat[xinference] -U -i https://pypi.tuna.tsinghua.edu.cn/simple3
【初始化项目配置与数据目录】
设置 Chatchat 存储配置文件和数据文件的根目录(可选)
# export CHATCHAT_ROOT=/path/to/chatchat_data export CHATCHAT_ROOT=~/workfile_2024/LLMs/Langchain-Chatchat-0.3.1 #(个人设置路径)
. 执行初始化
chatchat init
该命令会执行内容如下。正确执行终端界面如下图:
- 创建所有需要的数据目录
- 复制 samples 知识库内容
- 生成默认 yaml 配置文件
生成的5个配置文件,(其他的文件是我拉取的源码,方便查看阅读。该种方式运行是使用虚拟环境中的库,这里源码修改无影响)如下图
【配置文件的修改】
- 配置模型(model_settings.yaml)
需要根据步骤 2. 模型推理框架并加载模型 中选用的模型推理框架与加载的模型进行模型接入配置,具体参考 model_settings.yaml 中的注释。主要修改以下内容:
- 配置知识库路径(basic_settings.yaml)(可选)
默认知识库位于CHATCHAT_ROOT/data/knowledge_base
,如果你想把知识库放在不同的位置,或者想连接现有的知识库,可以在这里修改对应目录即可。- 配置知识库(kb_settings.yaml)(可选)
默认使用 FAISS 知识库,如果想连接其它类型的知识库,可以修改 DEFAULT_VS_TYPE 和 kbs_config。【初始化知识库】
进行知识库初始化前,请确保已经启动模型推理框架及对应 embedding 模型,且已按照上述步骤3完成模型接入配置。chatchat kb -r
【启动langchain-chatchat】
chatchat start -a
【web界面打开】
可能存在如下bug:
原因:httpx
库的版本不兼容。具体的可查看github上的issue:https://github.com/chatchat-space/Langchain-Chatchat/issues/5115
解决:pip install httpx==0.27.2
接下来记录 langchain-chatchat 的使用。
3 知langchain-chatchat 的识库的添加与问答
- 【知识库的添加】
- 【知识库的问答】
4 agent 的使用
可以自行测试测试。
5 Langchain-chatchat 的源码安装
- 源码下载,并进入工程目录
- 虚拟环境的安装和激活
conda create --name chatchat-code-0.3.1 python=3.10 conda activate chatchat-code-0.3.1
- 安装 poetry
pip install poetry
- 安装 Langchain-Chatchat 依赖
cd ./libs/chatchat-serverpoetry install --with lint,test -E xinference pip install -e .
- 设置项目数据目录、初始化项目配置文件和数据目录
export CHATCHAT_ROOT=~/workfile_2024/LLMs/Langchain-Chatchat-0.3.1/Langchain-Chatchat-master/chatchat_data python chatchat/cli.py init
- 初始化知识库
python chatchat/cli.py kb --recreate-vs
- 启动服务
python chatchat/cli.py start -a
Poetry 的介绍
【简单介绍poetry的使用】
Poetry 是一个用于管理 Python包 和项目 的工具,它简化了依赖管理和打包过程。例如我们安装langchain-chatchat0.3.1时,直接使用pip install langchain-chatchat
,这里安装的库就是使用Poetry完成打包的。
以下是 Poetry 的主要功能:
- 依赖管理:
- Poetry 可以用来声明、管理和锁定项目的依赖关系。你可以在 pyproject.toml 文件中指定项目所需的库及其版本要求。
- 使用 poetry add 和 poetry remove 命令可以添加或移除依赖。
- poetry lock 会生成或更新 poetry.lock 文件,该文件锁定了所有依赖的具体版本,确保在不同环境中安装相同的依赖集。
- 虚拟环境管理:
- 每个项目都可以有一个独立的虚拟环境,这有助于隔离不同项目的依赖关系。
- Poetry 自动创建和管理这些虚拟环境,并且可以通过简单的命令来激活它们。
- 构建和发布:
- Poetry 能够将你的项目打包成标准的 Python 分发格式(如 wheel 或 sdist),并且可以直接发布到包索引服务器,比如 PyPI。
- 使用 poetry build 来构建分发包,使用 poetry publish 发布到仓库。
- 开发工作流支持:
- 提供命令行工具来执行常见的开发任务,例如运行测试、检查代码质量等。
- 支持为项目定义可执行脚本,方便开发者快速运行自定义命令。
【Poetry 的虚拟环境和 Conda 的区别】
选择使用 Conda 还是 Poetry 取决于你的具体需求,最直接的就是看是否要与要进行python项目的打包。
- 如果你需要一个全面的环境管理系统,能够处理多语言和复杂依赖(包括非 Python 组件),那么 Conda 可能更适合你。
- 如果你只需要一个专注于 Python 项目的依赖管理和打包工具,希望获得更好的依赖解析能力和更简洁的工作流,那么 Poetry 是一个很好的选择。
【在实际使用中的理解 】
- virtualenvs.create:
如果这个设置被设为 true,poetry 会在项目目录下或全局位置创建自己的虚拟环境。如果设置了 virtualenvs.create 为 false,那么 Poetry 不会创建新的虚拟环境,并且会尝试直接安装依赖到当前激活的环境中。这通常不是推荐的做法,因为 Poetry 和 Conda 管理环境的方式不同,可能会导致冲突。- virtualenvs.in-project :
如果这个设置被设为 true,Poetry 创建的虚拟环境将放置在你的项目目录下的 .venv 文件夹中。否则,虚拟环境会被创建在 Poetry 的默认位置(通常是用户主目录中的隐藏文件夹)。- virtualenvs.path :
可以通过这个设置自定义虚拟环境存储的位置。- virtualenvs.prefer-active-python :
如果这个设置被设为 true。当conda 环境中运行 poetry 命令时,poetry 会自动检测到当前活跃的 conda 环境中的 Python 解释器。具体设置命令:`poetry config virtualenvs.prefer-active-python true更多的待需要时再补充
`