LangChain-Chatchat: 30分钟搭建属于你的本地知识库问答系统
别再用 OpenAI API 了30 分钟搭建属于你的本地知识库问答系统标签RAG | 本地部署 | 知识库 | 开源大模型一、开头的吐槽最近跟几个朋友聊天发现大家对大模型的使用还停留在调 OpenAI API这个阶段。“我这数据挺敏感的能传上去吗”“一个月调用费又花了好几千心疼…”“我想让 AI 读我们公司的内部文档咋搞”这些问题其实用一个项目就能解决——LangChain-Chatchat。说白了它就是一个完全本地化部署的 RAG检索增强生成知识库问答系统。你的数据不出本机模型用开源的问答效果还挺能打。GitHub 上快 30k star 了社区活跃度很高。今天这篇咱们就花 30 分钟从 0 到 1 把它跑起来。二、先搞清楚LangChain-Chatchat 到底能干啥在动手之前先快速过一遍它的能力清单心里有个谱功能说明LLM 对话直接跟大模型聊天支持多种开源模型知识库问答上传文档AI 基于文档内容回答核心功能文件对话临时上传单个文件直接对话Agent 工具调用让模型调用搜索引擎、数据库等外部工具多模态对话支持图片理解需多模态模型如 qwen-vl数据库对话直接跟数据库聊天用自然语言查数据兼容 OpenAI API提供标准接口方便接入其他应用核心流程长这样上传文档 → 解析文本 → 切分成块 → 向量化 → 存入向量库 ↓ 用户提问 → 问题向量化 → 向量库检索 Top-K → 拼接 Prompt → LLM 生成回答看不懂没关系后面实操的时候你就明白了。三、环境准备别在这一步翻车3.1 硬件要求Chatchat 本身不吃配置但模型吃。给你个参考场景最低配置推荐配置纯 CPU 跑小模型8G 内存16G 内存GPU 跑 7B 模型8G 显存12G 显存生产环境16G 内存 8G 显存32G 内存 24G 显存没有显卡也能玩就是慢点。后面可以用 Xinference 做量化加载6B 模型 4G 显存都能跑。3.2 软件环境# Python 版本3.8 ~ 3.11推荐 3.10python3--version# 确认一下如果没装 bash# 更新包列表sudoaptupdate# 安装 Python 及基础工具sudoaptinstallpython3 python3-pip python3-venv创建虚拟环境强烈建议避免依赖地狱conda create -n chatchat python3.10 -yconda activate chatchat### 3.3 安装 Chatchat 从 0.3.0 版本开始Chatchat 支持 pip 直接安装方便多了 bash # 基础安装 pip install langchain-chatchat -U -i https://pypi.tuna.tsinghua.edu.cn/simple # 如果搭配 Xinference 使用推荐 pip install langchain-chatchat[xinference] -U⚠️坑点预警Windows 下如果遇到python-magic-bin相关的问题可能会导致后续文档解析卡住。解决方案后面会提到。四、模型部署Chatchat 的发动机Chatchat 0.3.x 版本的一个重要变化是不再直接加载模型而是通过外部模型推理框架接入。支持的框架有框架特点推荐度Xinference功能最全支持多种模型类型⭐⭐⭐⭐⭐Ollama极简一行命令跑模型⭐⭐⭐⭐LocalAI兼容性好支持多种格式⭐⭐⭐⭐FastChat老牌框架稳定可靠⭐⭐⭐这里用Xinference演示功能最完整。4.1 安装 Xinference注意要和 Chatchat 放在不同的虚拟环境里避免依赖冲突# 新建一个环境给 Xinferenceconda create-nxinferencepython3.10-yconda activate xinference# 安装pipinstallxinference[all]-ihttps://pypi.tuna.tsinghua.edu.cn/simple4.2 启动 Xinference 并加载模型# 启动服务默认端口 9997xinference-local--host0.0.0.0--port9997然后打开浏览器访问http://localhost:9997你会看到一个模型管理界面点击“Launch Model”选择模型类型LLM大语言模型选择模型比如qwen2-instruct或chatglm3选择量化版本q4_K_M4bit 量化省显存或none不量化效果好点击Launch等模型加载完成记住模型的 UID比如qwen2-instruct。同样的方式再加载一个Embedding 模型比如bge-large-zh-v1.5用于文本向量化。# 加载完成后你的模型服务地址大概是 LLM: http://localhost:9997/v1/chat/completions Embedding: http://localhost:9997/v1/embeddings五、初始化 Chatchat配置走起来5.1 设置数据目录# 切换到 chatchat 环境conda activate chatchat# 设置数据根目录可选不设置就用当前目录# Linux/Mac:exportCHATCHAT_ROOT/path/to/chatchat_data# Windows:setCHATCHAT_ROOTD:\chatchat-data5.2 初始化项目chatchat init执行后会在数据目录下生成chatchat-data/ ├── basic_settings.yaml # 基础配置 ├── model_settings.yaml # 模型配置 ⭐关键 ├── kb_settings.yaml # 知识库配置 ├── prompt_settings.yaml # Prompt 模板 ├── tool_settings.yaml # 工具配置 └── data/ ├── knowledge_base/ # 知识库存放目录 └── logs/ # 日志目录5.3 修改模型配置打开model_settings.yaml配置刚才 Xinference 加载的模型# 默认 LLM 模型名称要跟 Xinference 里的一致DEFAULT_LLM_MODEL:qwen2-instruct# 默认 Embedding 模型DEFAULT_EMBEDDING_MODEL:bge-large-zh-v1.5# 模型平台配置MODEL_PLATFORMS:-platform_name:xinferenceplatform_type:xinferenceapi_base_url:http://localhost:9997/v1# Xinference 地址api_key:EMPTY# 本地部署不用填api_proxy:api_concurrencies:5# LLM 模型配置LLM_MODEL_CONFIG:qwen2-instruct:model:qwen2-instructtemperature:0.7max_tokens:4096# Embedding 模型配置EMBEDDING_MODEL_CONFIG:bge-large-zh-v1.5:model:bge-large-zh-v1.5dimensions:1024关键点api_base_url一定要指向 Xinference 的地址后面的/v1不能丢这是 OpenAI 兼容接口的标准路径。六、初始化知识库让 AI 有书可读6.1 执行知识库初始化chatchat kb-r这个命令会创建默认的samples知识库把示例文档切分、向量化、存入向量库看到类似下面的输出就是成功了---------------------------------------------------------------------------------------------------- 知识库名称 samples 知识库类型 faiss 向量模型 bge-large-zh-v1.5 知识库路径 /path/to/chatchat_data/data/knowledge_base/samples 文件总数量 47 入库文件数 42 知识条目数 740 用时 0:02:29 ----------------------------------------------------------------------------------------------------6.2 可能遇到的坑坑 1Windows 下卡住不动如果在文档解析阶段卡住大概率是python-magic-bin的问题# 先卸载pip uninstall python-magic-bin-y# 再装指定版本pipinstallpython-magic-bin0.4.14坑 2显存不足如果 Xinference 加载模型时报 OOM换量化版本# 在 Xinference UI 里选择量化版本比如 q4_K_M# 或者在命令行启动时指定xinference launch --model-name qwen2-instruct --model-format ggufv2 --size-in-billions7--quantizationq4_K_M坑 3Embedding 模型没启动知识库初始化需要 Embedding 模型在线确认 Xinference 里已经加载了bge-large-zh-v1.5。七、启动见证奇迹的时刻7.1 启动服务chatchat start-a参数说明-a同时启动 API 服务和 WebUI-p只启动 API-w只启动 WebUI看到下面这样的日志就说明启动成功了INFO: Uvicorn running on http://0.0.0.0:7861 (API 服务) INFO: Streamlit running on http://0.0.0.0:8501 (WebUI)7.2 打开 WebUI 体验浏览器访问http://localhost:8501你会看到![Chatchat WebUI 界面示意图]界面分几个主要区域对话模式选择LLM 对话 / 知识库问答 / 文件对话 / Agent 对话知识库选择切换不同的知识库模型设置调整 temperature、max_tokens 等参数对话区域输入问题查看回答和引用来源7.3 第一个知识库问答左侧选择“知识库问答”选择知识库“samples”输入问题“LangChain 是什么”看 AI 怎么回答注意看回答下方会标注引用来源用户LangChain 是什么 AILangChain 是一个用于开发大语言模型LLM应用的框架... [来源 1] samples/xxx.md [来源 2] samples/yyy.md这个标注来源的功能很贴心让你知道 AI 的回答是从哪段文档里找到的。八、上传自己的文档这才是重头戏示例知识库只是让你验证环境真正有用的是上传自己的文档。8.1 支持的格式.txt- 纯文本.pdf- PDF 文档.docx- Word 文档.md- Markdown.csv/.xlsx- 表格有限支持8.2 WebUI 上传方式左侧菜单进入“知识库管理”点击“新建知识库”起个名字比如company-docs进入知识库点击“添加文件”选择文件上传等待处理完成回到对话页面选择这个知识库开始问答8.3 命令行方式适合批量# 把文档放到知识库目录cpyour-document.pdf$CHATCHAT_ROOT/data/knowledge_base/company-docs/content/# 重建知识库chatchat kb--update-icompany-docs九、API 调用集成到你的应用Chatchat 提供了兼容 OpenAI 的 API方便接入其他系统importopenai# 配置指向本地 Chatchatclientopenai.OpenAI(api_keyEMPTY,# 本地部署随便填base_urlhttp://localhost:7861/v1)# 知识库问答responseclient.chat.completions.create(modelqwen2-instruct,# 你的模型名messages[{role:user,content:公司年假政策是什么}],extra_body{knowledge_base_name:company-docs# 指定知识库})print(response.choices[0].message.content)十、小结与预告好了到这一步你应该已经✅ 成功安装了 LangChain-Chatchat✅ 通过 Xinference 接入了 LLM 和 Embedding 模型✅ 初始化并体验了知识库问答✅ 知道怎么上传自己的文档✅ 了解如何通过 API 接入其他系统但这只是开始。现在的系统只能说能跑起来距离好用还有一段距离模型怎么选Embedding 模型对效果影响有多大文档切分参数怎么调为什么有时候回答不准怎么让系统支持更多文档格式怎么集成到自己的业务系统里这些问题咱们后面的文章逐一解决。附录常见问题速查问题解决方案ModuleNotFoundError确认在正确的 conda 环境里Xinference 连接失败检查api_base_url和端口确认 Xinference 已启动知识库初始化卡住Windows 重装python-magic-bin0.4.14回答质量差检查 Embedding 模型是否加载文档是否成功入库显存不足使用量化模型q4/q5或改用 CPU 运行端口被占用修改配置文件中的端口或杀掉占用进程你在部署过程中遇到什么问题或者有更好的模型接入方案欢迎在评论区交流

相关新闻

最新新闻

日新闻

周新闻

月新闻