问题域/PD-489

本地模型推理

Local Model Inference

支持多后端本地模型加载与推理,统一 chat 接口

子问题

1.多后端抽象(llama.cpp/MLX)

2.模型生命周期管理

3.单例模式资源复用

4.流式输出支持

5.模型热切换

6.同步推理库到异步框架的流式桥接

7.本地模型非结构化输出的标签降级解析

8.多下载源(HuggingFace/ModelScope)模型获取与注册

9.消息格式规范化(block-list 到纯字符串)

各项目的解法1 solutions

Signals

横向对比

维度CoPaw
后端抽象LocalBackend ABC 四方法协议,返回 OpenAI 兼容 dict
资源管理模块级单例工厂 + threading.Lock,同时只加载一个模型
流式支持asyncio.Queue + 后台线程桥接同步迭代器为 async generator
模型格式GGUF(llama.cpp)+ safetensors 目录(MLX)双格式
降级策略tag_parser 从文本解析 <think>/<tool_call> 标签作为结构化输出 fallback
模型下载HuggingFace + ModelScope 双源,manifest.json 注册表,自动选择 Q4_K_M 量化

最佳实践

1.单例工厂模式管理模型加载,避免重复加载同一模型

2.用 asyncio.Queue + 后台线程将同步流式迭代器包装为 async generator

3.延迟导入可选后端依赖,未安装时不影响其他功能

4.消息规范化作为后端前置处理,防止 Jinja 模板崩溃

5.优先使用后端原生结构化输出,标签解析仅作 fallback