LangChain-Chatchat 开发与应用(二) 模型接入不再头疼-Xinference-Chatchat即插即用方案 模型接入不再头疼Xinference Chatchat 的即插即用方案系列LangChain-Chatchat 开发与应用 · 第 2 篇标签模型部署 | Xinference | LLM | Embedding | 模型选型一、上篇回顾 新问题上一篇咱们把 Chatchat 跑起来了但估计你心里还有不少问号“我用的这个模型效果一般有没有更好的”“Embedding 模型是啥为啥还要单独配一个”“公司已经有 OpenAI 的 API key 了能一起用吗”“我想试试不同的模型每次都要改一堆配置”这些问题本质上都是模型接入的问题。Chatchat 0.3.x 把模型接入解耦出来之后灵活性是上去了但配置复杂度也上来了。今天这篇咱们就把模型接入这件事彻底讲清楚让你以后换模型就像换手机壳一样简单。二、先搞清楚Chatchat 需要哪几类模型Chatchat 不是只接一个大模型就完事了它需要三类模型协同工作┌─────────────────────────────────────────┐ │ LangChain-Chatchat │ ├─────────────────────────────────────────┤ │ LLM大语言模型 │ │ └── 负责理解问题、生成回答 │ │ │ │ Embedding 模型 │ │ └── 负责把文本变成向量语义编码 │ │ │ │ Rerank 模型可选 │ │ └── 负责对检索结果重新排序提升精度 │ └─────────────────────────────────────────┘2.1 LLM大脑的思考能力LLM 是系统的大脑负责理解用户问题和生成回答。选型要考虑维度说明模型大小7B、13B、70B…越大越聪明但也越吃资源上下文长度4K、8K、32K、128K…决定一次能读多少内容中文能力国产模型ChatGLM、Qwen通常比 Llama 系中文好工具调用是否支持 Function Call影响 Agent 能力推理速度量化、vLLM 加速等手段可以提升2.2 Embedding文本的指纹Embedding 模型负责把文字变成向量一堆数字。它的质量直接决定检索准不准。打个比方LLM 是阅读理解高手Embedding 是图书管理员。图书管理员找错书阅读高手也白搭。2.3 Rerank精排裁判Rerank 模型是可选的精排裁判用户提问 → Embedding 粗排召回 Top 100 → Rerank 精排选出 Top 5 → 给 LLM有了 Rerank检索精度能提升一大截但会多一层调用开销。三、模型部署框架选型选哪个Chatchat 支持接入多种模型部署框架怎么选3.1 四大框架对比框架上手难度功能丰富度性能推荐场景Xinference中等⭐⭐⭐⭐⭐高生产环境、需要全功能Ollama极低⭐⭐⭐中快速体验、个人使用LocalAI低⭐⭐⭐⭐中高需要多格式兼容FastChat中等⭐⭐⭐高已有部署经验3.2 我的建议想快速体验→ Ollama一条命令跑起来要正式用→ Xinference功能最全、生态最好有特殊情况→ LocalAI兼容各种奇奇怪怪的模型格式这篇重点讲Xinference它是目前和 Chatchat 配合最好的框架。四、Xinference 深度实战4.1 安装再复习一遍# 新环境别跟 Chatchat 混一起conda create-nxinferencepython3.10-yconda activate xinference# 全量安装包含所有依赖pipinstallxinference[all]-ihttps://pypi.tuna.tsinghua.edu.cn/simple# 如果只需要基础功能省空间pipinstallxinference4.2 启动服务# 基础启动xinference-local--host0.0.0.0--port9997# 后台启动Linuxnohupxinference-local--host0.0.0.0--port9997xinference.log21# 指定日志目录和模型缓存目录xinference-local--host0.0.0.0--port9997\--log-level INFO\--model-dir /path/to/model/cache4.3 加载 LLM 模型方式一Web UI推荐新手打开http://localhost:9997点击 “Launch Model”Model Type 选“LLM”Model Name 选你想要的比如qwen2-instructModel Format 选“ggufv2”通用格式或“pytorch”Model Size 选“7”70 亿参数Quantization 选“q4_K_M”4bit 量化省显存点击 “Launch”方式二命令行适合自动化# 加载 Qwen2 7B 量化版xinference launch\--model-name qwen2-instruct\--model-format ggufv2\--size-in-billions7\--quantizationq4_K_M\--model-engine llama.cpp# 加载 ChatGLM4PyTorch 格式需要 transformersxinference launch\--model-name glm-4-chat\--model-format pytorch\--size-in-billions9\--model-engine transformers方式三Python API程序化控制fromxinference.clientimportClient clientClient(http://localhost:9997)# 加载模型model_uidclient.launch_model(model_nameqwen2-instruct,model_formatggufv2,model_size_in_billions7,quantizationq4_K_M,model_enginellama.cpp)print(f模型已加载UID:{model_uid})# 获取模型实例直接调用modelclient.get_model(model_uid)responsemodel.chat(messages[{role:user,content:你好}],temperature0.7)print(response[choices][0][message][content])4.4 加载 Embedding 模型Embedding 模型的加载方式类似Web UILaunch Model → Model Type 选“embedding”Model Name 选bge-large-zh-v1.5或bge-m3不需要量化直接 Launch命令行xinference launch\--model-name bge-large-zh-v1.5\--model-type embedding4.5 加载 Rerank 模型可选xinference launch\--model-name bge-reranker-large\--model-type rerank五、Chatchat 配置把模型连起来5.1 配置文件结构Chatchat 的配置都在CHATCHAT_ROOT目录下的 yaml 文件里chatchat-data/ ├── basic_settings.yaml # 基础设置端口、路径等 ├── model_settings.yaml # ⭐ 模型配置重点 ├── kb_settings.yaml # 知识库设置 ├── prompt_settings.yaml # Prompt 模板 └── tool_settings.yaml # Agent 工具配置5.2 model_settings.yaml 详解这是最关键的配置文件咱们逐段拆解# 默认模型设置 # 默认 LLM 模型名称# 这个名称要跟 Xinference 里加载的模型名一致DEFAULT_LLM_MODEL:qwen2-instruct# 默认 Embedding 模型DEFAULT_EMBEDDING_MODEL:bge-large-zh-v1.5# 默认 Rerank 模型不配置则不使用DEFAULT_RERANK_MODEL:bge-reranker-large# 模型平台配置 # 这里配置各种模型推理框架的接入信息MODEL_PLATFORMS:# 平台 1Xinference本地-platform_name:xinferenceplatform_type:xinferenceapi_base_url:http://localhost:9997/v1api_key:EMPTYapi_proxy:api_concurrencies:5# 并发数# 平台 2OneAPI聚合多个在线 API-platform_name:oneapiplatform_type:openaiapi_base_url:http://oneapi-server:3000/v1api_key:sk-your-api-keyapi_proxy:api_concurrencies:10# 平台 3直接调用 OpenAI-platform_name:openaiplatform_type:openaiapi_base_url:https://api.openai.com/v1api_key:sk-your-openai-keyapi_proxy:http://127.0.0.1:7890# 如果需要代理api_concurrencies:5# LLM 模型详细配置 LLM_MODEL_CONFIG:# 每个模型可以单独配置参数qwen2-instruct:model:qwen2-instructtemperature:0.7# 创造性 vs 确定性max_tokens:4096# 最大输出长度platform:xinference# 指定使用哪个平台glm-4-chat:model:glm-4-chattemperature:0.8max_tokens:8192platform:xinference# 在线模型通过 OneAPI 或直连gpt-4:model:gpt-4temperature:0.7max_tokens:4096platform:openai# Embedding 模型配置 EMBEDDING_MODEL_CONFIG:bge-large-zh-v1.5:model:bge-large-zh-v1.5dimensions:1024# 向量维度platform:xinferencebge-m3:model:bge-m3dimensions:1024platform:xinference# Rerank 模型配置 RERANK_MODEL_CONFIG:bge-reranker-large:model:bge-reranker-largeplatform:xinference5.3 多模型切换的两种方式方式一改配置文件永久生效修改DEFAULT_LLM_MODEL重启 Chatchat 即可。方式二API 调用时动态指定临时切换importopenai clientopenai.OpenAI(api_keyEMPTY,base_urlhttp://localhost:7861/v1)# 通过 model 参数指定使用哪个模型responseclient.chat.completions.create(modelglm-4-chat,# 临时切换模型messages[{role:user,content:你好}])5.4 在线 API 接入实战很多公司已经有 OpenAI、智谱、通义千问的 API key想一起用怎么办方案OneAPI 做统一网关OneAPI 是一个开源的 API 聚合和分发平台可以把各种渠道的 API 统一成 OpenAI 格式。# model_settings.yaml 配置示例MODEL_PLATFORMS:-platform_name:oneapiplatform_type:openaiapi_base_url:http://your-oneapi:3000/v1api_key:sk-oneapi-keyLLM_MODEL_CONFIG:# 通过 OneAPI 调用 GPT-4gpt-4:model:gpt-4platform:oneapi# 通过 OneAPI 调用智谱 GLM-4glm-4:model:glm-4platform:oneapi# 通过 OneAPI 调用通义千问qwen-max:model:qwen-maxplatform:oneapi这样配置后你可以在 Chatchat 里自由切换 GPT-4、GLM-4、Qwen甚至做 A/B 测试。六、模型选型指南怎么选才不踩坑6.1 LLM 选型建议中文场景优先选国产模型模型大小特点推荐场景Qwen2-Instruct7B/72B阿里出品中文强工具调用好通用场景首选ChatGLM49B智谱出品长文本支持好需要读长文档Baichuan27B/13B百川出品中文理解细腻客服、对话场景Llama38B/70BMeta 出品英文强生态好英文场景、研究我的推荐组合个人学习/低配机器→ Qwen2-7B-Q4 量化中小团队正式使用→ Qwen2-72B 或 ChatGLM4需 24G 显存高并发服务→ vLLM 加速部署 多实例负载均衡6.2 Embedding 选型建议模型维度特点推荐场景bge-large-zh-v1.51024BAAI 出品中文语义强中文知识库首选bge-m31024多语言、多粒度、三种检索模式多语言混合场景m3e-base768轻量速度快资源有限、追求速度bge-small-zh512更轻量演示、测试经验法则纯中文知识库 →bge-large-zh-v1.5中英文混合 →bge-m3资源紧张 →m3e-base6.3 Rerank 选型模型特点bge-reranker-large精度高稍慢bge-reranker-base速度更快精度略低**建议**知识库精度要求高时开启 Rerank一般场景可以不加。七、验证你的模型接对了吗7.1 快速验证脚本importopenai clientopenai.OpenAI(api_keyEMPTY,base_urlhttp://localhost:7861/v1)# 测试 1LLM 对话print( 测试 LLM 对话 )responseclient.chat.completions.create(modelqwen2-instruct,messages[{role:user,content:用一句话介绍你自己}])print(response.choices[0].message.content)# 测试 2知识库问答print(\n 测试知识库问答 )responseclient.chat.completions.create(modelqwen2-instruct,messages[{role:user,content:什么是 RAG}],extra_body{knowledge_base_name:samples})print(response.choices[0].message.content)# 测试 3查看可用模型列表print(\n 可用模型 )modelsclient.models.list()formodelinmodels.data:print(f -{model.id})7.2 常见问题排查现象可能原因解决方案Connection refusedXinference 没启动检查服务状态Model not found模型名不一致核对model_settings.yaml和 Xinference 里的名称回答质量差Embedding 模型没配好确认 Embedding 模型已加载且配置正确特别慢用 CPU 跑大模型加显卡或换更小的量化模型显存溢出模型太大换量化版本或调小max_tokens八、小结这篇咱们把模型接入的方方面面都过了一遍✅ 搞清楚 Chatchat 需要哪三类模型✅ 对比了四大模型部署框架推荐 Xinference✅ Xinference 安装、启动、加载模型的三种方式✅ Chatchat 配置文件的详细解读✅ 在线 API 接入方案OneAPI✅ LLM/Embedding/Rerank 的选型建议✅ 验证脚本和常见问题排查核心要点记住三点模型名要对齐Xinference 里的模型名 Chatchat 配置文件里的模型名三类模型缺一不可LLM Embedding 是必配Rerank 是选配多平台可以共存本地模型 在线 API 可以同时配置灵活切换你目前在用什么模型Qwen、ChatGLM 还是其他的体验如何欢迎在评论区分享