Expand description
§ai-profile
桌面应用的 AI 模型服务配置层:provider 预置清单、ai.profile 互通协议、
端点拼接与连通性验证。
§边界:什么进、什么不进
| 内容 | 归属 | |
|---|---|---|
| ✅ | 预置清单、协议、端点拼接、模型清洗、验证与结构化错误、token 限额、历史裁剪 | 本 crate |
| ❌ | 密钥存储与加密 | 留给应用(各家差异极大) |
| ❌ | 数据库 / CRUD / 激活态管理 | 同上 |
本 crate 不持久化任何密钥明文。验证/调用时接收调用方传入的 key,用完即弃。
§三条数据铁律(都是踩出来的)
base_url原样使用,绝不推断版本段 —— 各家不统一(多数/v1、智谱/v4、 Gemini/v1beta/openai)。推断错的代价是隐性的:用户照文档填对了, 库悄悄加一段,他只看到 404。详见endpoint。- 默认 model 选「够用档」而非「最强档」 —— 把旗舰塞进默认值, 等于替用户做了一个他没同意的花钱决定。
- 模型清单清洗用排除法,不用白名单 —— 厂商上新远快于特征词更新,
白名单必然把新模型误藏,而“藏起来“对用户不可见。详见
model_filter。
§feature
ai-profile = { version = "0.1", features = ["chat"] } # 仅对话
ai-profile = { version = "0.1", features = ["chat", "client"] } # + 真实调用不开 client 时零 HTTP 依赖,纯数据 + 纯函数,可编到 Android / iOS。
Re-exports§
pub use error::VerifyError;pub use kind::Kind;pub use kind::Protocol;pub use limits::LimitSource;pub use limits::TokenLimits;pub use preset::preset_by_key;pub use preset::presets;pub use preset::presets_for;pub use preset::vendors;pub use preset::ProviderPreset;pub use preset::Vendor;pub use protocol::parse_profile;pub use protocol::parse_profiles;pub use protocol::to_profile;pub use protocol::ParseError;pub use protocol::ParsedProfile;pub use protocol::ParsedProfiles;pub use client::verify;pub use client::ServiceConfig;pub use client::Verifier;pub use client::VerifyOk;pub use reqwest;
Modules§
- client
- 真实 HTTP 调用 ——
feature = "client"才编译。 - endpoint
- 端点拼接 —— base_url 原样使用,不做任何版本段推断。
- error
- 结构化错误 —— 调用方「一键修正」的唯一前提。
- history
- 对话历史裁剪 —— 发请求之前把超出上下文窗口的旧消息丢掉,以及超长报错后的被动重试依据。
- kind
- 能力类型(kind)—— 决定一条预置属于对话 / 生图 / 视频 / 配音。
- limits
- 模型的 token 限额 —— 上下文窗口与单次输出上限。
- media
- 生图 / 视频 / 配音的真实调用。要同时开
client与对应 kind 的 feature。 多模态调用:生图 / 视频 / 配音的各家协议实现。 - model_
filter - 端点
/models返回值的清洗:去重 + 滤掉不能对话的模型。 - preset
- Provider 预置清单 —— 本 crate 存在的首要理由。
- protocol
ai.profile—— 跨应用的模型服务配置交换格式。