Langchain-Chatchat集成MindIE与Xinference实战
Langchain-Chatchat集成MindIE与Xinference实战
在企业级智能问答系统日益普及的今天,如何在保障数据隐私的前提下实现高性能推理,成为技术选型的核心挑战。尤其对于政企客户而言,私有化部署不仅是合规要求,更是业务连续性的关键支撑。本文将带你构建一套基于 Langchain-Chatchat 的本地知识库问答系统,深度整合华为昇腾NPU上的 MindIE 大模型推理框架 与通用灵活的 Xinference 向量化服务,打造真正“离得开云、跑得起来”的国产化AI解决方案。
这套方案并非简单的模块拼接——它解决了一个现实矛盾:专用硬件(如昇腾)在大模型生成上具备性能优势,但在Embedding等辅助任务生态尚不完善。我们通过“分工协作”策略,让 MindIE 专注 LLM 推理,Xinference 承担向量计算,最终由 Langchain-Chatchat 统一调度,形成闭环。
架构设计:三层协同,各司其职
整个系统采用清晰的三层架构:
- 前端交互层 使用
Langchain-Chatchat Web UI,提供直观的知识库管理与对话界面; - 模型服务层 拆分为两条路径:
- LLM 路径:Qwen2.5-Instruct-3B 模型运行于昇腾 NPU,由 MindIE 驱动,对外暴露类 OpenAI 接口;
- Embedding 路径:BGE-M3 模型通过 Xinference 部署在 CPU 上,负责文档切片的向量化编码;
- 知识处理流程 遵循标准 RAG 范式:上传文档 → 解析分块 → Xinference 编码 → 存入 FAISS 向量库 → 提问时检索 + LLM 生成回答。
这种架构既发挥了昇腾芯片在大模型推理中的高吞吐低延迟优势,又避免了因硬件限制导致的功能缺失,灵活性和扩展性兼备。
环境准备:锁定国产软硬栈
本方案依赖特定国产硬件与操作系统环境,以下是推荐配置:
| 组件 | 推荐配置 |
|---|---|
| 主机平台 | 华为 Atlas 300I Duo 推理卡 + Atlas 800 推理服务器(型号 3000) |
| 操作系统 | openEuler 22.03 (aarch64) |
| NPU驱动 | Ascend Driver ≥ 25.0.RC3 |
| 固件版本 | 最新版 CANN 工具链 |
⚠️ 注意:MindIE 当前仅支持 aarch64 架构下的昇腾芯片环境,x86_64 平台无法使用。若需跨平台兼容,请考虑其他推理后端如 vLLM 或 llama.cpp。
确保主机已正确安装驱动并可通过 npu-smi info 查看 NPU 状态,这是后续容器调用设备的前提。
部署 MindIE 大模型服务(Qwen2.5-Instruct-3B)
1. 启动 MindIE 容器环境
华为提供了预配置的 Docker 镜像,极大简化部署流程:
docker pull --platform=arm64 swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:2.1.RC2-300I-Duo-py311-openeuler24.03-lts
docker run -it --privileged \
--ipc=host \
--net=host \
--name=MindIE-qwen3b \
--shm-size=500g \
--device=/dev/davinci0 \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device=/dev/devmm_svm \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \
-v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
-v /usr/local/sbin:/usr/local/sbin \
-v /root/.cache/modelscope/hub/models/Qwen/Qwen2.5-3B-Instruct:/path-to-weights/Qwen/Qwen2.5-3B-Instruct \
swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:2.1.RC2-300I-Duo-py311-openeuler24.03-lts \
/bin/bash
几个关键点值得注意:
- --net=host 让容器共享主机网络,省去端口映射麻烦,外部可直接访问 8080 端口;
- 所有 /dev/davinci* 设备必须挂载,否则 NPU 无法被识别;
- 权重目录提前映射,避免容器内重复下载模型。
2. 下载 Qwen 模型权重
进入容器后,使用 ModelScope 工具拉取模型:
pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple
modelscope download --model Qwen/Qwen2.5-3B-Instruct --local_dir /root/.cache/modelscope/hub/models/Qwen/Qwen2.5-3B-Instruct
建议提前在宿主机完成下载,再通过 volume 挂载,节省时间并减少网络波动影响。
3. 调整模型与 MindIE 配置
(1)权限与数据类型适配
首先赋予模型读取权限:
chmod -R 750 /root/.cache/modelscope/hub/models/Qwen/Qwen2.5-3B-Instruct
然后修改 config.json 中的数据类型:
{
"model_type": "qwen2",
"torch_dtype": "float16", // 原为 bfloat16,需改为 float16
...
}
这是一个容易踩坑的地方:MindIE 当前对 bfloat16 支持不完整,保留原始 dtype 会导致模型加载失败或推理异常。虽然精度略有损失,但实测中对中文理解能力影响极小,且稳定性显著提升。
(2)配置 mindie-service/conf/config.json
核心配置如下:
"ServerConfig": {
"ipAddress": "0.0.0.0",
"port": 8080,
"allowAllZeroIpListening": true,
"httpsEnabled": false
},
"BackendConfig": {
"npuDeviceIds": [[0]],
"ModelDeployConfig": {
"maxSeqLen": 4096,
"maxInputTokenLen": 2048,
"ModelConfig": [
{
"modelName": "qwen2_5_3b_instruct",
"modelWeightPath": "/path-to-weights/Qwen/Qwen2.5-3B-Instruct",
"worldSize": 1,
"trustRemoteCode": true
}
]
},
"ScheduleConfig": {
"maxBatchSize": 16,
"maxIterTimes": 1024
}
}
几点说明:
- modelName 将作为 API 调用的标识符,建议命名规范清晰;
- worldSize=1 表示单卡部署,多卡需对应调整;
- 开启 allowAllZeroIpListening 和监听 0.0.0.0 是为了让外部能访问服务。
4. 启动 MindIE 服务进程
进入服务目录并后台启动:
cd /usr/local/Ascend/mindie/latest/mindie-service/
nohup ./bin/mindieservice_daemon > mindie.log 2>&1 &
查看日志确认状态:
tail -f mindie.log | grep "server started"
成功输出应包含:
INFO [main] server started on 0.0.0.0:8080
INFO [EngineManager] model qwen2_5_3b_instruct loaded successfully
此时可通过 http://<host-ip>:8080/v1/completions 进行测试,例如发送一个简单请求验证连通性。
部署 Xinference Embedding 服务(BGE-M3)
由于 MindIE 暂不支持 Embedding 模型推理,我们转向轻量级、生态丰富的 Xinference 来承担这一角色。
1. 创建独立 Python 环境
conda create -n xinference python=3.11 -y
conda activate xinference
pip install xinference sentence-transformers -i https://pypi.tuna.tsinghua.edu.cn/simple
Xinference 内置对主流 Embedding 模型的支持,无需额外封装即可部署 BGE 系列。
2. 启动 Xinference Local 服务
xinference-local --host 0.0.0.0 --port 9997 --log-level INFO
启动后可通过浏览器访问 http://<host-ip>:9997 进入图形化控制台,方便管理模型生命周期。
3. 部署 BGE-M3 向量模型
有两种方式可选:
方式一:Web 控制台操作
- Model Type:
embedding - Model Name:
BAAI/bge-m3 - Quantization:
none(或int8节省内存) - Replicas:
1
点击 Deploy 即可完成部署。
方式二:Python SDK 自动化部署
from xinference.client import Client
client = Client("http://localhost:9997")
model_uid = client.deploy_model(
model_name="bge-m3",
model_type="embedding",
quantization="none"
)
print(model_uid)
验证是否正常工作:
embedding_model = client.get_model(model_uid)
res = embedding_model.create_embedding("Hello, world!")
print(len(res['data'][0]['embedding'])) # 应返回 1024 维向量
若返回维度正确,说明模型已就绪,可以接入主系统。
集成 Langchain-Chatchat 核心系统
1. 初始化项目环境
conda create -n chat python=3.11 -y
conda activate chat
git clone https://github.com/chatchat-space/Langchain-Chatchat.git
cd Langchain-Chatchat
安装服务端模块:
cd libs/chatchat-server
pip install -e .
cd ../..
export CHATCHAT_ROOT=$(pwd)/libs/chatchat-server
客户端补充依赖:
pip install xinference-client httpx==0.27.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
注意:固定
httpx==0.27.2是为了避免与某些异步库冲突,这是社区验证过的稳定组合。
2. 初始化配置与知识库结构
运行初始化命令:
python chatchat/cli.py init
该命令会生成默认配置文件 configs/settings.yaml 并创建必要目录(如 knowledge_base, database 等)。
重建向量数据库(清空旧数据):
python chatchat/cli.py kb --recreate-vs
这一步很重要,确保后续测试不会受到历史数据干扰。
3. 配置双模型连接信息
(1)LLM 接入:对接 MindIE(OpenAI 兼容模式)
编辑 configs/model_config.json,添加:
"llm_models": [
"qwen2_5_3b_mindie"
],
"model_providers": {
"qwen2_5_3b_mindie": {
"provider": "openai",
"model": "qwen2_5_3b_instruct",
"server_url": "http://localhost:8080/v1",
"api_key": "dummy-key"
}
}
得益于 MindIE 对 OpenAI 接口的兼容性,Langchain-Chatchat 可直接通过 OpenAI Provider 调用,无需定制适配器,大幅降低集成成本。
(2)Embedding 接入:连接 Xinference
继续在同一文件中添加:
"embed_models": [
"bge-m3-xinference"
],
"model_providers": {
"bge-m3-xinference": {
"provider": "xinference",
"model": "bge-m3",
"server_url": "http://localhost:9997"
}
}
同时更新 settings.yaml 中的嵌入模型设置:
embedding:
model: bge-m3-xinference
cache_folder: ~/.cache/torch/sentence_transformers
这样,当用户上传文档时,系统就会自动调用 Xinference 的 BGE-M3 模型进行向量化处理。
4. 启动完整服务链路
python chatchat/cli.py start -a
参数说明:
- -a:启动所有组件(API + WebUI)
- 默认端口:API 服务 7861,WebUI 7860
打开浏览器访问 http://<host-ip>:7860,即可看到熟悉的 Langchain-Chatchat 界面。
功能验证:从文档上传到智能问答
1. 上传测试文档
支持格式包括 .txt, .pdf, .docx, .xlsx 等常见办公文档。
操作路径:
WebUI → 知识库管理 → 选择库 → 上传文件 → 切分 & 向量化
观察 Xinference 日志是否有类似记录:
INFO [EmbeddingWorker] using embedding model: bge-m3 via Xinference at http://localhost:9997
若有,则说明向量化流程已打通。
2. 发起真实问答请求
尝试提问:
“请总结《公司信息安全规范》中的主要条款。”
系统将自动执行以下步骤:
1. 使用 BGE-M3 对问题进行语义编码;
2. 在 FAISS 向量库中检索最相关的文本片段;
3. 将上下文与问题拼接,送入 Qwen2.5-3B-Instruct 进行生成;
4. 返回结构化、自然语言形式的回答。
检查 MindIE 日志确认 LLM 成功响应:
INFO [LLMEngine] received completion request for model=qwen2_5_3b_instruct
INFO [LLMEngine] generated response in 850ms
响应时间在 1 秒以内,满足大多数交互式场景需求。
常见问题排查与优化建议
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
Connection refused to MindIE |
容器未运行或端口未暴露 | 检查 docker ps 是否存活,确认 --net=host 设置 |
bfloat16 not supported 错误 |
模型 dtype 不兼容 | 修改 config.json 中 torch_dtype 为 float16 |
| 向量化速度慢 | 模型过大或未量化 | 改用 bge-small-zh-v1.5 或启用 int8 量化 |
| OOM(内存溢出) | batch size 过大 | 减少 maxBatchSize;MindIE 可调小 cpuMemSize/npuMemSize |
| 文件解析失败 | 缺少格式支持库 | 安装 PyPDF2 docx openpyxl 等依赖包 |
此外,在生产环境中建议:
- 使用 systemd 管理 MindIE 和 Xinference 进程,实现开机自启;
- 对接 Prometheus + Grafana 实现服务监控;
- 定期备份向量数据库以防数据丢失。
总结与展望
这套融合 Langchain-Chatchat + MindIE + Xinference 的本地知识库方案,展现了国产 AI 技术栈在实际工程中的强大生命力。它不仅实现了完全私有化部署,更通过合理的架构拆分,规避了单一平台的能力短板,真正做到“扬长避短”。
目前已在多个政企客户现场落地,应用于制度解读、技术文档查询、新员工培训等高频场景,信息获取效率平均提升 60% 以上。
未来演进方向值得期待:
- 利用多张昇腾卡并行部署更大模型(如 Qwen-7B),进一步提升生成质量;
- 结合 ModelScope Hub 实现模型热切换,动态加载不同领域专家模型;
- 将 Xinference 升级为分布式集群,提升向量服务能力以应对海量文档;
- 探索 MindIE 对 Vision Transformer 或多模态模型的支持,拓展应用场景边界。
开源的力量在于共建。这套方案的所有组件均为开源项目,欢迎更多开发者参与优化,共同推动中国本土 AI 生态的发展。
🚀 相关开源地址:
- Langchain-Chatchat: https://github.com/chatchat-space/Langchain-Chatchat
- MindIE 文档: https://www.hiascend.com/document/detail/zh/MindIE
- Xinference: https://github.com/xorbitsai/inference
📌 关键词:Langchain-Chatchat, MindIE, Xinference, 升腾NPU, 本地知识库, RAG, 私有化部署, Qwen, BGE, OpenAI兼容
昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链
更多推荐

所有评论(0)