Langchain-Chatchat 如何借助 xinference_manager 让 Xinference 加载本机已下载的模型
【免费下载链接】Langchain-ChatchatLangchain-Chatchat(原Langchain-ChatGLM)基于 Langchain 与 ChatGLM, Qwen 与 Llama 等语言模型的 RAG 与 Agent 应用 | Langchain-Chatchat (formerly langchain-ChatGLM), local knowledge based LLM (like ChatGLM, Qwen and Llama) RAG and Agent app with langchain项目地址: https://gitcode.com/GitHub_Trending/la/Langchain-Chatchat
Xinference 的内置模型默认会自动下载。如果你已经把模型文件下载到了本机磁盘,希望 Xinference 启动该模型时直接读取本地目录、不再重复下载,可以用 Langchain-Chatchat 仓库中提供的 xinference_manager.py:这是一个 Streamlit 页面,在启动 Xinference 服务后运行它,按页面提示为指定模型设置本地路径即可(README.md 中的说明)。
本文面向的场景是:模型文件已在本机,需要让 XF 内置的模型注册指向该本地路径,并确认设置生效。适用前提:Xinference 服务已安装并可启动,Langchain-Chatchat 项目代码在本地可访问(tools/model_loaders目录所在的项目仓库)。
准备条件
README.md 明确要求:为避免依赖冲突,将 Langchain-Chatchat 与模型部署框架(Xinference 等)放在不同的 Python 虚拟环境中,比如 conda、venv、virtualenv。libs/chatchat-server/README.md 还补充了一个已知问题:chatchat 不能与 xinference 装在同一个环境里,否则会让一些插件出 bug,例如文件无法上传。
环境要求与依赖安装,以 Xinference 环境配置手册 为准(手册示例使用 Python 3.8,项目本身支持 Python 3.8–3.11):
chatchat 环境(如果尚未安装):
conda create -p ~/miniconda3/envs/chatchat python=3.8 conda activate ~/miniconda3/envs/chatchat pip install "langchain-chatchat[xinference]" -U搭配 Xinference 框架使用时,README 建议使用带
[xinference]的安装方式,因为接入 Xinference 时需要额外安装对应的 Python 依赖库。手册中另有pip install xinference_client faiss-gpu "unstructured[pdf]",可按需执行。
xinference 环境(手册中的写法):
conda create -p ~/miniconda3/envs/xinference python=3.8 conda activate ~/miniconda3/envs/xinference pip install xinference --force pip install tiktoken sentence-transformers注意:xinference_manager.py的代码中直接import xinference.client、xinference.model.llm等模块,所以运行该页面要在安装了 xinference 框架的环境里(即上面创建的 xinference 环境),而不是 chatchat 环境。
启动 XF 服务(手册中的写法):
conda activate ~/miniconda3/envs/xinference xinference-localxinference-local服务起来后,页面与手册中使用的默认地址是http://127.0.0.1:9997。
启动 xinference_manager 页面
进入项目的tools/model_loaders目录,按 README.md 给出的命令执行:
streamlit run xinference_manager.py页面打开后,侧边栏会提示:"请先执行 xinference 或 xinference-local 命令启动 XF 服务。然后将 XF 服务地址配置在下方。" 在 "Xinference endpoint" 输入框中填入服务地址(默认值http://127.0.0.1:9997,如果你的 XF 服务在别的地址就改成实际地址)。如果 XF 服务没启动,页面无法列出运行中的模型和注册信息。
页面主体包含:
- 当前运行的模型:一张表格(UID、type、name、ability、size、quant、max_tokens),来自 XF 服务的
list_models接口,用于确认哪些模型已在运行; - 配置模型路径:模型类别、模型名称、模型格式、模型大小、模型量化等下拉框,以及本地路径输入框与三个操作按钮。
为内置模型设置本机路径(主路径)
页面自带的"使用方法"里把本场景称为场景1:"我已经下载过模型,不想 XF 内置模型重复下载",操作是"选择对应的模型后,填写好本地模型路径,点'设置模型缓存'即可"。具体步骤:
- 在 "模型类别:" 中选择类型。页面支持的类别为
LLM、embedding、image、rerank、audio。 - 在 "模型名称:" 中选择 XF 的模型注册列表中的名字(列表来自 XF 服务,包含内置模型与已注册的自定义模型)。
- 如果类别是 LLM,页面会再要求选择 "模型格式"(如
pytorch)、"模型大小"(如 9B)、"模型量化"(none表示不量化),这些选项的候选值都来自该模型在 XF 中的注册信息(model_specs)。 - 查看页面中部的状态文本:
- 未缓存时显示 "模型尚未缓存";
- 已缓存时显示 "模型已缓存。",并给出缓存路径、原始路径和版本号。
- 在 "本地模型绝对路径:" 输入框中填入本机模型目录的绝对路径(必须是存在的目录)。
- 点击 "设置模型缓存"。
"设置模型缓存" 的实际行为(来自 xinference_manager.py 源码),操作前需要知道:
- 它会先校验路径是绝对路径且目录存在,否则页面报错 "必须输入存在的绝对路径",不执行任何修改;
- 如果该模型已有缓存目录,会先删除已有的缓存目录,再建立指向你填写的本地路径的缓存;
- 对 LLM,还会重新生成对应的 meta 文件,并在 huggingface 与 modelscope 两个 hub 的 meta 位置写入
{"revision": ...}信息。
从源码看,缓存目录是一个指向本地模型目录的链接(页面展示 "原始路径" 时读取的是链接目标),所以 "设置模型缓存" 不会复制、移动或删除你本地的模型文件。
如何确认设置已生效
点击 "设置模型缓存" 后页面会重新加载,判断依据仍是状态文本:
- 显示 "模型已缓存。" 且带出缓存路径、原始路径(即你的本地路径)、版本号,说明本地路径已生效;
- 版本号一栏会标注 "(符合要求)" 或 "(与 XF 内置版本号不一致)"。这是页面把本地模型目录中 meta 文件的 revision 与 XF 内置注册要求的
model_revision做比对的结果,可用它判断本地模型版本是否与 XF 内置规格一致; - 页面顶部的 "当前运行的模型" 表格可随时查看 XF 服务当前实际运行的模型(模型需要另行启动,设置缓存本身不会启动模型)。
LLM 的缓存目录命名规则(源码中的get_cache_dir):在 XF 缓存目录XINFERENCE_CACHE_DIR下为{model_name}-{model_format}-{model_size}b,其他模型类别为{model_name}。如果你要手动核对缓存,可以按这个规则定位目录。
设置错路径后如何修正
页面说明的场景3:"我不小心设置了错误的模型路径",给出两条修正路径:
- 点击 "删除模型缓存":删除该模型现有的缓存目录(源码中使用
os.rmdir,只移除链接目录本身,不触碰你的本地模型文件); - 或者在输入框中填入正确路径后,再次点击 "设置模型缓存",由脚本先删旧缓存再建新缓存。
可选分支:注册为自定义模型
如果你不只是想让 XF 使用本地文件,而是想对 XF 内置模型的注册信息做一些修改(页面说明的场景2:"我想对 XF 内置模型做一些修改,又不想从头写模型注册文件"),选择对应模型、填好本地路径后点 "注册为自定义模型"。
副作用需要明确:该操作会向 XF 服务写入一条新的模型注册(persist=True持久化保存),模型名会在原名后追加-custom,模型来源(model_uri)指向你填写的本地路径、版本要求被清空。之后启动模型要用这个新注册的名字。如果只想要场景1的效果,不要点这个按钮。
下一步
缓存设置生效后,回到 Xinference 服务启动该模型,再把模型配置进 Langchain-Chatchat。Xinference 环境配置手册 给出了完整的后续流程:通过 XF 的/v1/models接口启动模型,然后用如下命令把平台写入 chatchat 配置(手册中的示例值,llm_models、embed_models里的模型名需替换为你自己启动的模型名):
chatchat-config model --set_model_platforms "[{ \"platform_name\": \"xinference\", \"platform_type\": \"xinference\", \"api_base_url\": \"http://127.0.0.1:9997/v1\", \"api_key\": \"EMPT\", \"api_concurrencies\": 5, \"llm_models\": [ \"autodl-tmp-glm-4-9b-chat\" ], \"embed_models\": [ \"bge-large-zh-v1.5\" ], \"image_models\": [], \"reranking_models\": [], \"speech2text_models\": [], \"tts_models\": [] }]"启动 chatchat 前手册中还有初始化配置(chatchat-config basic)与知识库初始化(chatchat-kb -r)等步骤,详见 docs/install/README_xinference.md。
限制与注意
- 本地路径必须是存在的绝对路径,页面不会接受相对路径,也不会替你创建目录;
- "设置模型缓存" 会删除该模型已有的缓存目录再重建,若已有同名缓存且其中包含 XF 先前下载的内容,会以你填写的本地路径为准;
- 该页面依赖 xinference 框架本身(直接导入
xinference.model.*),不要在只装了xinference_client的环境里运行; - 版本号比对显示 "(与 XF 内置版本号不一致)" 时,说明本地模型 meta 中的 revision 与 XF 内置规格不同,启动前需要自行确认本地文件与所选规格的对应关系。
【免费下载链接】Langchain-ChatchatLangchain-Chatchat(原Langchain-ChatGLM)基于 Langchain 与 ChatGLM, Qwen 与 Llama 等语言模型的 RAG 与 Agent 应用 | Langchain-Chatchat (formerly langchain-ChatGLM), local knowledge based LLM (like ChatGLM, Qwen and Llama) RAG and Agent app with langchain项目地址: https://gitcode.com/GitHub_Trending/la/Langchain-Chatchat
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考