构建大模型知识库(一)
直接把链接复制到迅雷中下载中即可
langchain api
https://smith.langchain.com/onboarding?organizationId=02938e5e-4a76-4d2d-b5f0-24da73525ba9&step=1https://anaconda.org/conda-forge/langchain-openai工程化的开发环境
git clone https://github.com/chachat-space/Langchain-Chatchat.git模型库
https://devpress.csdn.net/v1/user/newLogin?callback=https%3A%2F%2Fcommunity.modelscope.cn%2F%3FisAutoFollow%3D1
1.1 Conda 与 Anaconda 的区别
诸如 Anaconda、Miniconda、Bioconda(用于计算生物学)等都是基于 conda 的工具软件,这些软件均包含 conda 包和环境管理器,但两者的概念仍要进行一定的区分。
Anaconda 是一个大而全的软件发行版,是一个预先建立和配置好的模块集,能够安装在操作系统上使用。它包含了Python本身和数百个第三方开源项目的二进制文件,如 numpy、scipy、ipython、matplotlib等,这些库基本是为了方便处理数据科学相关的问题。
Miniconda 也是一个软件发行版,但它仅包含python、conda 和 conda 的依赖项,本质上就是一个空的用来安装 conda 环境的安装器,它没有 Anaconda 中那么多的包,可以理解为 Anaconda 的精简版,能够方便用户按照自己的需求,从零开始构建任意的环境。
尽管可以独立地下载安装 conda 而不用 Anaconda 和 Miniconda,但后两者为提供了 conda 安装环境,使用起来会更方便。
1.2 Conda 与 pip 的区别
Conda 作为软件包管理器,可以帮助用户查找和安装软件包,这与另一个常见的基于Python的跨平台包管理器 pip 类似。那既然 Python 自带了 pip 包管理工具,为什么还会需要使用 conda 呢?
先来介绍 pip,它是 Python 包的通用管理器,全称是 Pip Install Packages,它是一个Python官方认证的包管理工具,只能管理python包而无法安装非Python依赖项,例如HDF5、MKL、LLVM等,通常用于在相互独立的环境中安装发布在 Python Package Index(PyPI)上面的包。Pip和 PyPI 均由Python Packaging Authority(PyPA)管理和支持。
而 conda 既具有 pip 的包管理能力,同时也具有 vitualenv 的环境管理功能,因此在相互独立的环境中,可以简单认为 conda 就是 pip 和 vitualenv 的组合,在包管理这方面,conda 不仅能管理 python 包,还可以管理任何类型的、用任何语言写的包和依赖,包来源是 Anaconda repo(默认)和 Cloud。
简单而言,pip 与 conda 最关键的区别在于,在使用 pip 之前,必须通过系统软件包管理器下载和安装python解释器,而 conda 可以直接安装 python 软件包以及解释器,但 conda 只能在 conda 环境下安装各类的包,因此需要先创建 conda 环境。
conda update conda
2. 创建新的 Conda 环境
有时候,现有的环境可能因为各种原因(如包冲突)而出现问题。你可以尝试在一个新的环境中安装 langchain-openai
:
conda create -n new_env python=3.8
conda activate new_env
然后尝试安装:
conda install langchain-openai
conda activate your_env # 如果还没有激活环境
pip install langchain-openai
conda config --set show_channel_urls yes
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
conda install langchain-openai
conda create --name myenv python=3.8 numpy matplotlib
# windows
conda activate myenv
# Linux/Unix
source activate myenv
conda install scipy # 卸载 conda remove scipy
conda env create -f environment.yml
conda deactivate
conda remove -n myenv
.condarc 配置文件
channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/- https://repo.anaconda.com/pkgs/main- https://repo.anaconda.com/pkgs/r- https://repo.anaconda.com/pkgs/msys2
show_channel_urls: true
report_errors: true
envs_dirs:- D:\ProgramData\conda_envs
pkgs_dirs:- D:\ProgramData\conda_pkgs
5. 检查包名和版本兼容性
### **1. 确保 Ollama 已正确部署**
#### **步骤**:
1. **安装 Ollama**:
```bash
# 根据官方文档安装 Ollama(以 macOS 为例)
brew install ollama
```
2. **部署本地模型**(例如 `llama3.1`):
```bash
ollama run llama3.1
```
- 模型会下载并启动,Ollama 默认监听端口 `11434`,HTTP API 地址为 `http://localhost:11434`。
3. **验证 Ollama 服务**:
```bash
curl http://localhost:11434/health
# 应返回 {"status":"healthy"}
```
2. 配置 LangChain 调用 Ollama**
from langchain_community.llms import Ollama
# 初始化 Ollama 客户端,指定模型名称和 API 地址
ollama = Ollama(
model="llama3.1", # Ollama 中部署的模型名称
base_url="http://localhost:11434" # Ollama 的 HTTP API 地址
)
# 发送查询
response = ollama.invoke("你好,今天过得怎么样?")
print(response)
```
#### **关键参数说明**:
- **`model`**:Ollama 中部署的模型名称(如 `llama3.1`、`deepseek-r1` 等)。
- **`base_url`**:Ollama 的 HTTP 端点,默认为 `http://localhost:11434`。
- **其他参数**:可以通过 `temperature`、`max_tokens` 等控制生成行为:
```python
response = ollama.invoke(
"解释量子力学",
temperature=0.7,
max_tokens=200
)
```
---
### **3. 在 LangChain 应用中集成(如 Langchain-Chatchat)**
#### **步骤**:
1. **配置模型**:
- 在 `model_settings.yaml` 中添加 Ollama 模型配置:
```yaml
# model_settings.yaml
OLLAMA_MODELS:
- name: "llama3.1" # 模型别名(在 Chatchat 中显示的名称)
model_name: "llama3.1" # Ollama 中的实际模型名称
base_url: "http://localhost:11434"
```
2. **启动服务**:
chatchat start -a # 启动 Chatchat 服务
```
- 访问 Web 界面(默认 `http://localhost:8501`),在模型选择中选择 `llama3.1`。
---
### **4. 常见问题排查**
#### **问题 1:Ollama 未响应**
- **原因**:Ollama 服务未启动或端口被占用。
- **解决**:
```bash
# 检查 Ollama 进程
ollama list
# 重启服务
ollama run llama3.1 --force
```
#### **问题 2:模型名称不匹配**
- **原因**:`model` 参数与 Ollama 中部署的模型名称不一致。
- **解决**:
```bash
# 查看已部署的模型列表
ollama list
# 确保代码中的 model 参数与列表中的名称完全一致
```
#### **问题 3:路径或权限错误**
- **原因**:Ollama 的模型文件路径权限不足(常见于 Linux 系统)。
- **解决**:
```bash
# 赋予模型目录读写权限
chmod -R 755 /path/to/ollama/models
### **5. 完整配置示例(Langchain-Chatchat)**
#### **步骤**:
1. **修改配置文件**:
- 在 `model_settings.yaml` 中添加 Ollama 配置:
```yaml
DEFAULT_LLM_MODEL: "ollama_llama3.1" # 设置默认模型
OLLAMA_MODELS:
- name: "ollama_llama3.1"
model_name: "llama3.1"
base_url: "http://localhost:11434"
```
2. **初始化知识库**:
chatchat kb -r # 重建向量数据库(可选)
```
3. **启动服务并测试**:
chatchat start -a
```
- 打开浏览器访问 `http://localhost:8501`,选择模型 `ollama_llama3.1` 进行对话。
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import OllamaEmbeddings
from langchain_community.chains import RetrievalQAWithSourcesChain
# 初始化 Ollama 的嵌入模型(如果支持)
embeddings = OllamaEmbeddings(
model="llama3.1",
base_url="http://localhost:11434"
)
# 加载 ChromaDB 向量库
vectordb = Chroma(
persist_directory="path/to/chroma/db",
embedding_function=embeddings
)
# 创建 RAG 链
retriever = vectordb.as_retriever()
qa_chain = RetrievalQAWithSourcesChain.from_chain_type(
llm=ollama,
retriever=retriever
)
# 执行查询
result = qa_chain({"question": "你的知识库中有哪些关于量子力学的内容?"})
print(result["answer"])
conda search langchain-openai --channel conda-forge