项目概述本文记录我在本地部署GitHub LangChain-Chatchat项目的完整流程。该项目是一个基于 LangChain 的知识库问答系统支持本地文档上传、向量检索、RAG检索增强生成等功能。我使用Xinference部署本地大模型实现了完全离线的智能问答服务。整体架构如下用户提问 → Chatchat 前端 → Chatchat 后端 → 意图识别 → 工具调用/RAG 检索 ↓ Xinference 本地 AIQwen1.5-Chat / Qwen3-Embedding项目目录结构python-ai/ ├── chatchat-app/ # Chatchat 主应用 │ ├── data/ │ │ ├── knowledge_base/ # 知识库文件存放目录 │ │ ├── logs/ # 日志目录 │ │ ├── media/ # 多媒体文件 │ │ ├── ntlk_data/ # NLTK 数据 │ │ └── temp/ # 临时文件 │ ├── venv/ # Chatchat 虚拟环境 │ ├── basic_settings.yaml # 基础配置文件 │ ├── kb_settings.yaml # 知识库配置 │ ├── model_settings.yaml # 模型配置 │ ├── prompt_settings.yaml # Prompt 模板配置 │ └── tool_settings.yaml # 工具配置 │ ├── xinference-server/ # Xinference 服务端 │ └── venv/ # Xinference 虚拟环境 │ └── .venv/ # 全局虚拟环境可选环境准备1. Python 版本要求推荐使用Python 3.10为 Chatchat 和 Xinference 分别创建独立的虚拟环境避免依赖冲突# 创建 Chatchat 虚拟环境cdchatchat-app python-mvenv venv venv\Scripts\activate# 创建 Xinference 虚拟环境cd../xinference-server python-mvenv venv venv\Scripts\activateXinference 本地 AI 部署1. 安装 Xinference# 激活 Xinference 虚拟环境xinference-server\venv\Scripts\activate# 安装 Xinferencepipinstallxinference[all]2. 启动 Xinference 服务# 启动本地服务默认端口 9997xinference-local--host127.0.0.1--port9997启动后访问http://127.0.0.1:9997打开 Web 界面。3. 下载并加载模型在 Xinference Web 界面中搜索并启动以下模型LLM 模型qwen1.5-chat通义千问对话模型Embedding 模型Qwen3-Embedding-0.6B文本向量化模型或者使用命令行# 启动 LLM 模型xinference launch --model-name qwen1.5-chat --model-size7# 启动 Embedding 模型xinference launch --model-name Qwen3-Embedding-0.6BLangChain-Chatchat 配置1. 模型配置model_settings.yaml关键配置项如下# 默认 LLM 模型DEFAULT_LLM_MODEL:qwen1.5-chat# 默认 Embedding 模型DEFAULT_EMBEDDING_MODEL:Qwen3-Embedding-0.6B# 历史对话轮数HISTORY_LEN:3# 温度参数控制回复随机性TEMPERATURE:0.7# 模型平台配置MODEL_PLATFORMS:-platform_name:xinferenceplatform_type:xinferenceapi_base_url:http://127.0.0.1:9997/v1api_key:EMPTYapi_concurrencies:5auto_detect_model:falsellm_models:-qwen1.5-chatembed_models:-Qwen3-Embedding-0.6B2. Prompt 模板配置prompt_settings.yaml意图识别模板preprocess_model:default:|你只要回复 0 和 1代表不需要使用工具。以下几种问题不需要使用工具: 1. 需要联网查询的内容 2. 需要计算的内容 3. 需要查询实时性的内容 如果我的输入满足这几种情况返回 1。其他输入请你回复 0你只要返回一个数字 这是我的问题:该模板用于判断用户问题是否需要调用外部工具或知识库。RAG 问答模板rag:default:|【指令】根据已知信息简洁和专业的来回答问题。 如果无法从中得到答案请说根据已知信息无法回答该问题 不允许在答案中添加编造成分答案请使用中文。【已知信息】context 【问题】question该模板确保 AI 基于检索到的知识库内容作答避免胡编乱造。对话历史模板llm_model:with_history:|The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.Current conversation:historyHuman:inputAI:启动 Chatchat 服务1. 安装依赖# 激活 Chatchat 虚拟环境chatchat-app\venv\Scripts\activate# 安装依赖pipinstall-rrequirements.txt2. 初始化知识库# 创建知识库目录mkdir-pdata/knowledge_base# 上传文档到知识库# 将 PDF、TXT、MD 等格式文件放入 knowledge_base 目录3. 启动服务# 启动 Chatchat 后端python server.py# 启动 Chatchat 前端新窗口python webui.py启动后访问http://localhost:8501打开 Web 界面。功能测试1. 知识库问答在 Web 界面上传本地文档支持 TXT、PDF、Word、Markdown 等格式点击向量化按钮将文档转换为向量存储在对话框提问系统自动检索相关知识并作答示例问题“项目部署流程是什么”“如何配置 API Key”“支持哪些文件格式”2. 普通对话直接提问无需检索的问题AI 会基于自身知识回答“你好介绍一下你自己”“今天天气怎么样”3. 多轮对话系统自动保留最近3 轮对话历史支持上下文连贯交流。配置优化建议1. 性能调优并发数api_concurrencies: 5可根据硬件调整CPU 较弱时降低此值最大长度MAX_TOKENS设为 4096避免显存溢出流式输出streaming: false改为true可实现打字机效果2. 模型选择对话质量优先使用qwen1.5-chat或chatglm3-6b响应速度优先使用更小参数量的模型如 1.8B、3B多模态需求配置image_model支持文生图功能3. 知识库管理定期清理无用文档减少向量库体积对大型 PDF 进行拆分提高检索精度使用标签分类管理不同主题的知识库常见问题1. 模型加载失败检查 Xinference 服务是否正常运行确认api_base_url配置正确http://127.0.0.1:9997/v1查看日志文件logs/chatchat.log排查错误2. 向量化速度慢Embedding 模型对 CPU 要求较高建议使用 GPU 加速批量处理文档时降低并发数考虑使用更小的 Embedding 模型3. 回答质量不佳调整temperature参数0.05~0.9值越低越保守增加history_len提升上下文理解能力优化 Prompt 模板添加更多约束条件总结通过以上步骤我成功部署了本地的 LangChain-Chatchat 知识库问答系统结合 Xinference 提供的本地 AI 服务实现了完全离线、安全可控的智能问答功能。该系统适用于企业内部知识库、个人文档管理等场景无需依赖外部 API保护数据隐私。