本地模型推理
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