{"id":30812697,"url":"https://github.com/hiddenpath/ai-lib","last_synced_at":"2025-09-06T07:05:06.563Z","repository":{"id":311369922,"uuid":"1043395137","full_name":"hiddenpath/ai-lib","owner":"hiddenpath","description":"A unified AI SDK for Rust","archived":false,"fork":false,"pushed_at":"2025-08-31T23:51:01.000Z","size":288,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-01T00:55:01.561Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hiddenpath.png","metadata":{"files":{"readme":"README_CN.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-23T19:00:50.000Z","updated_at":"2025-08-31T23:51:04.000Z","dependencies_parsed_at":"2025-08-24T11:54:10.056Z","dependency_job_id":"23e1a2ff-121d-4aee-9980-56cacecdab1e","html_url":"https://github.com/hiddenpath/ai-lib","commit_stats":null,"previous_names":["hiddenpath/ai-lib"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/hiddenpath/ai-lib","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hiddenpath%2Fai-lib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hiddenpath%2Fai-lib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hiddenpath%2Fai-lib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hiddenpath%2Fai-lib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hiddenpath","download_url":"https://codeload.github.com/hiddenpath/ai-lib/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hiddenpath%2Fai-lib/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273728149,"owners_count":25157136,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-05T02:00:09.113Z","response_time":402,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-06T07:03:11.413Z","updated_at":"2025-09-06T07:05:06.541Z","avatar_url":"https://github.com/hiddenpath.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ai-lib 🦀✨  \n\u003e 统一、可靠、高性能的多厂商AI SDK for Rust\n\n一个生产级、厂商无关的SDK，为17+个AI平台（OpenAI、Groq、Anthropic、Gemini、Mistral、Cohere、Azure OpenAI、Ollama、DeepSeek、Qwen、文心一言、混元、讯飞星火、Kimi、HuggingFace、TogetherAI、xAI Grok等）提供统一的Rust API。  \n消除分散的认证流程、流式格式、错误语义、模型命名差异和不一致的函数调用。从一行脚本扩展到多区域、多厂商系统，无需重写集成代码。\n\n---\n\n## 🚀 核心价值（TL;DR）\n\nai-lib统一了：\n- 跨异构模型厂商的聊天和多模态请求\n- 流式传输（SSE + 模拟）与一致的增量\n- 函数调用语义\n- 批处理工作流\n- 可靠性原语（重试、退避、超时、代理、健康检查、负载策略）\n- 模型选择（成本/性能/健康/加权）\n- 可观测性钩子\n- 渐进式配置（环境变量 → 构建器 → 显式注入 → 自定义传输）\n\n您专注于产品逻辑；ai-lib处理基础设施摩擦。\n\n---\n\n## 📚 目录\n1. 适用场景/不适用场景\n2. 架构概述\n3. 渐进式复杂度阶梯\n4. 快速开始\n5. 核心概念\n6. 关键功能集群\n7. 代码示例（要点）\n8. 配置与诊断\n9. 可靠性与弹性\n10. 模型管理与负载均衡\n11. 可观测性与指标\n12. 安全与隐私\n13. 支持的厂商\n14. 示例目录\n15. 性能特征\n16. 路线图\n17. 常见问题\n18. 贡献指南\n19. 许可证与引用\n20. 为什么选择ai-lib？\n\n---\n\n## 🎯 适用场景/不适用场景\n\n| 场景 | ✅ 使用ai-lib | ⚠️ 可能不适合 |\n|------|--------------|-----------------|\n| 快速切换AI厂商 | ✅ | |\n| 统一流式输出 | ✅ | |\n| 生产可靠性（重试、代理、超时） | ✅ | |\n| 负载均衡/成本/性能策略 | ✅ | |\n| 混合本地（Ollama）+ 云厂商 | ✅ | |\n| 一次性脚本仅调用OpenAI | | ⚠️ 使用官方SDK |\n| 深度厂商专属测试版API | | ⚠️ 直接使用厂商SDK |\n\n---\n\n## 🏗️ 架构概述\n\n```\n┌───────────────────────────────────────────────────────────┐\n│                        您的应用程序                        │\n└───────────────▲─────────────────────────▲─────────────────┘\n                │                         │\n        高级API                    高级控制\n                │                         │\n        AiClient / Builder   ←  模型管理/指标/批处理/工具\n                │\n        ┌────────── 统一抽象层 ────────────┐\n        │  厂商适配器（混合：配置+独立）    │\n        └──────┬────────────┬────────────┬────────────────┘\n               │            │            │\n        OpenAI / Groq   Gemini / Mistral  Ollama / 区域/其他\n               │\n        传输层（HTTP + 流式 + 重试 + 代理 + 超时）\n               │\n        通用类型（请求/消息/内容/工具/错误）\n```\n\n设计原则：\n- 混合适配器模型（尽可能配置驱动，必要时自定义）\n- 严格的核心类型 = 一致的人机工程学\n- 可扩展：插入自定义传输和指标而无需分叉\n- 渐进式分层：从简单开始，安全扩展\n\n---\n\n## 🪜 渐进式复杂度阶梯\n\n| 级别 | 意图 | API表面 |\n|------|------|---------|\n| L1 | 一次性/脚本 | `AiClient::quick_chat_text()` |\n| L2 | 基本集成 | `AiClient::new(provider)` |\n| L3 | 受控运行时 | `AiClientBuilder`（超时、代理、基础URL） |\n| L4 | 可靠性和规模 | 连接池、批处理、流式、重试 |\n| L5 | 优化 | 模型数组、选择策略、指标 |\n| L6 | 扩展 | 自定义传输、自定义指标、仪表化 |\n\n---\n\n## ⚙️ 快速开始\n\n### 安装\n```toml\n[dependencies]\nai-lib = \"0.2.20\"\ntokio = { version = \"1\", features = [\"full\"] }\nfutures = \"0.3\"\n```\n\n### 最快方式\n```rust\nuse ai_lib::Provider;\n\n#[tokio::main]\nasync fn main() -\u003e anyhow::Result\u003c()\u003e {\n    let reply = ai_lib::AiClient::quick_chat_text(Provider::Groq, \"Ping?\").await?;\n    println!(\"Reply: {reply}\");\n    Ok(())\n}\n```\n\n### 标准聊天\n```rust\nuse ai_lib::{AiClient, Provider, Message, Role, Content, ChatCompletionRequest};\n\n#[tokio::main]\nasync fn main() -\u003e anyhow::Result\u003c()\u003e {\n    let client = AiClient::new(Provider::OpenAI)?;\n    let req = ChatCompletionRequest::new(\n        client.default_chat_model(),\n        vec![Message::user(Content::new_text(\"用一句话解释Rust所有权。\"))]\n    );\n    let resp = client.chat_completion(req).await?;\n    println!(\"Answer: {}\", resp.first_text()?);\n    Ok(())\n}\n```\n\n### 流式传输\n```rust\nuse futures::StreamExt;\nlet mut stream = client.chat_completion_stream(req).await?;\nwhile let Some(chunk) = stream.next().await {\n    let c = chunk?;\n    if let Some(delta) = c.choices[0].delta.content.clone() {\n        print!(\"{delta}\");\n    }\n}\n```\n\n---\n\n## 🧠 核心概念\n\n| 概念 | 目的 |\n|------|------|\n| Provider | 枚举所有支持的厂商 |\n| AiClient / Builder | 主入口点；配置封装 |\n| ChatCompletionRequest | 统一请求负载 |\n| Message / Content | 文本/图像/音频/（未来结构化） |\n| Function / Tool | 统一函数调用语义 |\n| Streaming Event | 厂商标准化增量流 |\n| ModelManager / ModelArray | 策略驱动的模型编排 |\n| ConnectionOptions | 显式运行时覆盖 |\n| Metrics Trait | 自定义可观测性集成 |\n| Transport | 可注入的HTTP + 流式实现 |\n\n---\n\n## 💡 关键功能集群\n\n1. 统一厂商抽象（无每厂商分支）\n2. 通用流式传输（SSE + 回退模拟）\n3. 多模态原语（文本/图像/音频）\n4. 函数调用（一致的工具模式）\n5. 批处理（顺序/有界并发/智能策略）\n6. 可靠性：重试、错误分类、超时、代理、池\n7. 模型管理：性能/成本/健康/轮询/加权\n8. 可观测性：可插拔指标和计时\n9. 安全性：隔离、无默认内容日志\n10. 可扩展性：自定义传输、指标、策略注入\n\n---\n\n## 🧪 要点示例（精简）\n\n### 厂商切换\n```rust\nlet groq = AiClient::new(Provider::Groq)?;\nlet gemini = AiClient::new(Provider::Gemini)?;\nlet claude = AiClient::new(Provider::Anthropic)?;\n```\n\n### 函数调用\n```rust\nuse ai_lib::{Tool, FunctionCallPolicy};\nlet tool = Tool::new_json(\n    \"get_weather\",\n    Some(\"获取天气信息\"),\n    serde_json::json!({\"type\":\"object\",\"properties\":{\"location\":{\"type\":\"string\"}},\"required\":[\"location\"]})\n);\nlet req = ChatCompletionRequest::new(model, messages)\n    .with_functions(vec![tool])\n    .with_function_call(FunctionCallPolicy::Auto);\n```\n\n### 批处理\n```rust\nlet responses = client.chat_completion_batch(requests.clone(), Some(8)).await?;\nlet smart = client.chat_completion_batch_smart(requests).await?;\n```\n\n### 多模态（图像）\n```rust\nlet msg = Message::user(ai_lib::types::common::Content::Image {\n    url: Some(\"https://example.com/image.jpg\".into()),\n    mime: Some(\"image/jpeg\".into()),\n    name: None,\n});\n```\n\n### 重试感知\n```rust\nmatch client.chat_completion(req).await {\n    Ok(r) =\u003e println!(\"{}\", r.first_text()?),\n    Err(e) if e.is_retryable() =\u003e { /* 安排重试 */ }\n    Err(e) =\u003e eprintln!(\"永久失败: {e}\")\n}\n```\n\n---\n\n## 🔑 配置与诊断\n\n### 环境变量（基于约定）\n```bash\n# API密钥\nexport OPENAI_API_KEY=...\nexport GROQ_API_KEY=...\nexport DEEPSEEK_API_KEY=...\n\n# 可选基础URL\nexport GROQ_BASE_URL=https://custom.groq.com\n\n# 代理\nexport AI_PROXY_URL=http://proxy.internal:8080\n\n# 全局超时（秒）\nexport AI_TIMEOUT_SECS=30\n```\n\n### 显式覆盖\n```rust\nuse ai_lib::{AiClient, Provider, ConnectionOptions};\nlet client = AiClient::with_options(\n    Provider::Groq,\n    ConnectionOptions {\n        base_url: Some(\"https://custom.groq.com\".into()),\n        proxy: Some(\"http://proxy.internal:8080\".into()),\n        api_key: Some(\"override-key\".into()),\n        timeout: Some(Duration::from_secs(45)),\n        disable_proxy: false,\n    }\n)?;\n```\n\n### 配置验证\n```bash\ncargo run --example check_config\ncargo run --example network_diagnosis\ncargo run --example proxy_example\n```\n\n---\n\n## 🛡️ 可靠性与弹性\n\n| 方面 | 能力 |\n|------|------|\n| 重试 | 指数退避 + 分类 |\n| 错误 | 区分瞬态与永久 |\n| 超时 | 每请求可配置 |\n| 代理 | 全局/每连接/禁用 |\n| 连接池 | 可调大小 + 生命周期 |\n| 健康检查 | 端点状态 + 基于策略的避免 |\n| 负载策略 | 轮询/加权/健康/性能/成本 |\n| 回退 | 多厂商数组/手动分层 |\n\n---\n\n## 🧭 模型管理与负载均衡\n\n```rust\nuse ai_lib::{CustomModelManager, ModelSelectionStrategy, ModelArray, LoadBalancingStrategy, ModelEndpoint};\n\nlet mut manager = CustomModelManager::new(\"groq\")\n    .with_strategy(ModelSelectionStrategy::PerformanceBased);\n\nlet mut array = ModelArray::new(\"prod\")\n    .with_strategy(LoadBalancingStrategy::HealthBased);\n\narray.add_endpoint(ModelEndpoint {\n    name: \"us-east-1\".into(),\n    url: \"https://api-east.groq.com\".into(),\n    weight: 1.0,\n    healthy: true,\n});\n```\n\n支持：\n- 性能层级\n- 成本比较\n- 基于健康的过滤\n- 加权分布\n- 为自适应策略做好准备\n\n---\n\n## 📊 可观测性与指标\n\n实现`Metrics`特征以桥接Prometheus、OpenTelemetry、StatsD等。\n\n```rust\nstruct CustomMetrics;\n#[async_trait::async_trait]\nimpl ai_lib::metrics::Metrics for CustomMetrics {\n    async fn incr_counter(\u0026self, name: \u0026str, value: u64) { /* ... */ }\n    async fn start_timer(\u0026self, name: \u0026str) -\u003e Option\u003cBox\u003cdyn ai_lib::metrics::Timer + Send\u003e\u003e { /* ... */ }\n}\nlet client = AiClient::new_with_metrics(Provider::Groq, Arc::new(CustomMetrics))?;\n```\n\n---\n\n## 🔒 安全与隐私\n\n| 功能 | 描述 |\n|------|------|\n| 无隐式日志 | 默认不记录请求/响应 |\n| 密钥隔离 | API密钥来自环境或显式结构 |\n| 代理控制 | 允许/禁用/覆盖 |\n| TLS | 标准HTTPS与验证 |\n| 审计钩子 | 使用指标层进行合规审计计数器 |\n| 本地优先 | Ollama集成用于敏感上下文 |\n\n---\n\n## 🌍 支持的厂商（快照）\n\n| 厂商 | 适配器类型 | 流式 | 备注 |\n|------|------------|------|------|\n| Groq | 配置驱动 | ✅ | 超低延迟 |\n| OpenAI | 独立 | ✅ | 函数调用 |\n| Anthropic (Claude) | 配置驱动 | ✅ | 高质量 |\n| Google Gemini | 独立 | 🔄 (统一) | 多模态焦点 |\n| Mistral | 独立 | ✅ | 欧洲模型 |\n| Cohere | 独立 | ✅ | RAG优化 |\n| HuggingFace | 配置驱动 | ✅ | 开放模型 |\n| TogetherAI | 配置驱动 | ✅ | 成本效益 |\n| DeepSeek | 配置驱动 | ✅ | 推理模型 |\n| Qwen | 配置驱动 | ✅ | 中文生态 |\n| 百度文心一言 | 配置驱动 | ✅ | 企业CN |\n| 腾讯混元 | 配置驱动 | ✅ | 云集成 |\n| 讯飞星火 | 配置驱动 | ✅ | 语音+多模态 |\n| Moonshot Kimi | 配置驱动 | ✅ | 长上下文 |\n| Azure OpenAI | 配置驱动 | ✅ | 企业合规 |\n| Ollama | 配置驱动 | ✅ | 本地/气隙 |\n| xAI Grok | 配置驱动 | ✅ | 实时导向 |\n\n（流式列：🔄 = 统一适配/回退）\n\n---\n\n## 🗂️ 示例目录（在/examples中）\n\n| 类别 | 示例 |\n|------|------|\n| 入门 | quickstart / basic_usage / builder_pattern |\n| 配置 | explicit_config / proxy_example / custom_transport_config |\n| 流式 | test_streaming / cohere_stream |\n| 可靠性 | custom_transport |\n| 多厂商 | config_driven_example / model_override_demo |\n| 模型管理 | model_management |\n| 批处理 | batch_processing |\n| 函数调用 | function_call_openai / function_call_exec |\n| 多模态 | multimodal_example |\n| 架构演示 | architecture_progress |\n| 专业 | ascii_horse / hello_groq |\n\n---\n\n## 📊 性能（指示性和方法论基础）\n\n下面的数字描述了ai-lib本身的SDK层开销，而不是模型推理时间。  \n它们是代表性的（不是保证），来自使用模拟传输的受控基准测试，除非另有说明。\n\n| 指标 | 观察范围（典型） | 精确定义 | 测量上下文 |\n|------|------------------|----------|------------|\n| 每请求SDK开销 | ~0.6–0.9 ms | 从构建ChatCompletionRequest到移交HTTP请求的时间 | 发布构建，模拟传输，256B提示，单线程预热 |\n| 流式传输增加延迟 | \u003c2 ms | ai-lib的流式解析与直接reqwest SSE相比引入的额外延迟 | 500次运行，Groq llama3-8b，平均 |\n| 基线内存占用 | ~1.7 MB | 初始化一个AiClient + 连接池后的常驻集 | Linux (x86_64)，池=16，无批处理 |\n| 可持续模拟吞吐量 | 11K–13K req/s | 每秒完成的请求期货（短提示） | 模拟传输，并发=512，池=32 |\n| 真实厂商短提示吞吐量 | 厂商限制 | 端到端包括网络+厂商限制 | 严重依赖供应商限制 |\n| 流式块解析成本 | ~8–15 µs / 块 | 解析+分发一个SSE增量 | 合成30–50令牌流 |\n| 批处理并发扩展 | 近线性到~512任务 | 调度争用前的降级点 | Tokio多线程运行时 |\n\n### 🔬 方法论\n\n1. 硬件：AMD 7950X（32线程），64GB RAM，NVMe SSD，Linux 6.x  \n2. 工具链：Rust 1.79（稳定），`--release`，LTO=thin，默认分配器  \n3. 隔离：使用模拟传输排除网络+厂商推理方差  \n4. 预热：丢弃前200次迭代（JIT、缓存、分配器稳定）  \n5. 计时：`std::time::Instant`用于宏吞吐量；Criterion用于微开销  \n6. 流式：具有真实令牌节奏的合成SSE帧（8–25 ms）  \n7. 厂商测试：仅作为说明性（受速率限制和区域延迟影响）  \n\n### 🧪 重现（一旦添加基准套件）\n\n```bash\n# 微开销（请求构建+序列化）\ncargo bench --bench micro_overhead\n\n# 模拟高并发吞吐量\ncargo run --example bench_mock_throughput -- --concurrency 512 --duration 15s\n\n# 流式解析成本\ncargo bench --bench stream_parse\n```\n\n计划的基准布局（即将推出）：\n```\n/bench\n  micro/\n    bench_overhead.rs\n    bench_stream_parse.rs\n  macro/\n    mock_throughput.rs\n    streaming_latency.rs\n  provider/ (可选门控)\n    groq_latency.rs\n```\n\n### 📌 解释指南\n\n- \"SDK开销\" = ai-lib内部处理（类型构造、序列化、分发准备）— 排除远程模型延迟。\n- \"吞吐量\"数字假设快速返回的模拟响应；真实世界云吞吐量通常受厂商速率限制约束。\n- 内存数字是常驻集快照；具有日志/指标的生产系统可能增加开销。\n- 结果将在不同硬件、OS调度器、分配器策略和运行时调优上变化。\n\n### ⚠️ 免责声明\n\n\u003e 这些指标是指示性的，不是合同保证。始终使用您的工作负载、提示大小、模型组合和部署环境进行基准测试。  \n\u003e 可重现的基准测试工具和JSON快照基线将在存储库中版本化以跟踪回归。\n\n### 💡 优化技巧\n\n- 在高吞吐量场景中使用`.with_pool_config(size, idle_timeout)`\n- 为低延迟UX优先使用流式传输\n- 使用并发限制批处理相关短提示\n- 避免冗余客户端实例化（重用客户端）\n- 考虑厂商特定速率限制和区域延迟\n\n---\n\n## 🗺️ 路线图（计划序列）\n\n| 阶段 | 计划功能 |\n|------|----------|\n| 1 | 高级背压和自适应速率协调 |\n| 2 | 内置缓存层（请求/结果分层） |\n| 3 | 实时配置热重载 |\n| 4 | 插件/拦截器系统 |\n| 5 | GraphQL表面 |\n| 6 | WebSocket原生流式传输 |\n| 7 | 增强安全性（密钥轮换、KMS集成） |\n| 8 | 公共基准测试工具+夜间回归检查 |\n\n### 🧪 性能监控路线图\n\n计划公共基准测试工具+夜间（仅模拟）回归检查以：\n- 早期检测性能回归\n- 提供历史趋势数据\n- 允许贡献者验证PR的影响\n\n---\n\n## ❓ 常见问题\n\n| 问题 | 答案 |\n|------|------|\n| 如何A/B测试厂商？ | 使用带有负载策略的`ModelArray` |\n| 重试是内置的吗？ | 自动分类+退避；您可以分层自定义循环 |\n| 我可以禁用代理吗？ | `.without_proxy()`或选项中的`disable_proxy = true` |\n| 我可以为测试模拟吗？ | 注入自定义传输 |\n| 您记录PII吗？ | 默认不记录内容 |\n| 函数调用差异？ | 通过`Tool` + `FunctionCallPolicy`标准化 |\n| 支持本地推理吗？ | 是的，通过Ollama（自托管） |\n| 如何知道错误是否可重试？ | `error.is_retryable()`助手 |\n\n---\n\n## 🤝 贡献指南\n\n1. Fork \u0026 克隆仓库  \n2. 创建功能分支：`git checkout -b feature/your-feature`  \n3. 运行测试：`cargo test`  \n4. 如果引入新功能则添加示例  \n5. 遵循适配器分层（在自定义之前优先配置驱动）  \n6. 打开PR并说明理由+基准测试（如果影响性能）  \n\n我们重视：清晰度、测试覆盖率、最小表面区域蔓延、增量可组合性。\n\n---\n\n## 📄 许可证\n\n双重许可：\n- MIT\n- Apache许可证（版本2.0）\n\n您可以选择最适合您项目的许可证。\n\n---\n\n## 📚 引用\n\n```bibtex\n@software{ai-lib,\n    title = {ai-lib: A Unified AI SDK for Rust},\n    author = {ai-lib Contributors},\n    url = {https://github.com/hiddenpath/ai-lib},\n    year = {2024}\n}\n```\n\n---\n\n## 🏆 为什么选择ai-lib？\n\n| 维度 | 价值 |\n|------|------|\n| 工程速度 | 一个抽象=更少的定制适配器 |\n| 风险缓解 | 多厂商回退和健康路由 |\n| 运营稳健性 | 重试、池化、诊断、指标 |\n| 成本控制 | 成本/性能策略旋钮 |\n| 可扩展性 | 可插拔传输和指标 |\n| 面向未来 | 清晰的路线图+混合适配器模式 |\n| 人机工程学 | 渐进式API—无过早复杂性 |\n| 性能 | 最小延迟和内存开销 |\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  \u003cstrong\u003eai-lib：在Rust中构建弹性、快速、多厂商AI系统—无胶水代码疲劳。\u003c/strong\u003e\u003cbr/\u003e\u003cbr/\u003e\n  ⭐ 如果这为您节省了时间，请给它一个星标并在Issues/Discussions中分享反馈！\n\u003c/div\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhiddenpath%2Fai-lib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhiddenpath%2Fai-lib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhiddenpath%2Fai-lib/lists"}