正在统计访客…
浏览全部文档
开始 · 9找到适合你的 Runifold 学习路径45 分钟掌握 Runifold理解完整的 Runifold 平台第一次可信运行选择正确的执行 API选择 Crate 与 Cargo Feature构建常见 Runifold 应用Runifold 常见问题排查 Runifold 应用故障
执行内核 · 7理解 RunContext安全协调外部副作用使用预算与取消限制工作安全地处理错误与重试事件、Journal 与执行证据设计 Capability 安全执行从 Checkpoint 安全恢复
模型与服务商 · 7在避免重复输出的前提下路由模型选择并配置模型服务商使用服务商中立的模型协议基于 Provider Runtime 契约构建使用 OpenAI 控制面与 Realtime API测试与 Benchmark Provider Adapter配置 OpenAI、Anthropic、Gemini 与 Ollama
Agent · 7构建并配置 Agent为 Agent 添加类型化工具加入会话与语义记忆安全地委派给子 Agent返回结构化 Rust 值在不丢失语义的前提下流式输出使用检索为 Agent 提供事实依据
持久工作流 · 7组合确定性工作流让工作流持久化运行持久工作流 Worker协调 Timer、Signal 与持久等待运行多租户工作流基础设施运行并行 Branch 与安全 Race对持久 Workflow 进行版本管理
集成 · 7通过 MCP 连接外部能力选择存储与持久化边界通过 MCP Tasks 暴露持久工作构建并评估检索流水线使用 MCP Resources、Prompts 与 Sampling在不跨越权限的前提下缓存 MCP 响应在 Rust Web Service 中部署 Runifold
质量与运维 · 10在没有网络的情况下测试评估质量并阻止回归观测完整运行树在浏览器与边缘环境安全运行准确理解可靠性声明在 CI 中运行可复现评测使用 SLO 运维 Runifold治理 Task 保留与删除把审计证据归档到 S3-Compatible WORM 存储管理兼容性与可信发布
文档/模型与服务商
第一次使用?通过 45 分钟核心课程建立完整心智模型
模型与服务商

配置 OpenAI、Anthropic、Gemini 与 Ollama

安装单一 Provider Feature,配置原生或兼容 Client,把凭证留在服务端,并验证准确模型能力。

实践指南·10 min

只安装一个 Provider

Runifold 0.9 把具体 Adapter 放在 runifold-providers。添加运行时门面,并只打开 应用真正部署的 Adapter:

cargo add runifold@0.9.0
cargo add runifold-providers@0.9.0 --features openai
cargo add tokio --features macros,rt-multi-thread

可以把 openai 替换为 anthropicgeminiollamabedrock。DeepSeek、 Ark、Groq、OpenRouter 等具名兼容模块共用一个 openai 协议 Feature,不再拥有 独立的门面 Feature。

ProviderFeature凭证或端点
OpenAIopenaiOPENAI_API_KEY
AnthropicanthropicANTHROPIC_API_KEY
GeminigeminiGEMINI_API_KEY
Ollamaollama本地或托管 Base URL
Bedrockbedrock应用提供的 AWS SDK 配置

创建原生 Provider Client

每个原生 Client 都实现同一套 Provider Model 契约:

use runifold::ProviderModelExt;
use runifold_providers::{
    anthropic::AnthropicClient,
    gemini::GeminiClient,
    ollama::OllamaClient,
    openai::OpenAiClient,
};
 
let openai = OpenAiClient::from_api_key(
    std::env::var("OPENAI_API_KEY")?
)?.runtime("gpt-5")?;
 
let anthropic = AnthropicClient::from_api_key(
    std::env::var("ANTHROPIC_API_KEY")?
)?.runtime("claude-sonnet-4-5")?;
 
let gemini = GeminiClient::from_api_key(
    std::env::var("GEMINI_API_KEY")?
)?.runtime("gemini-2.5-flash")?;
 
let ollama = OllamaClient::local()?.runtime("llama3.2")?;

模型名称由 Provider 控制。使用账号实际可访问的模型,并把准确模型 ID 写入部署配置和 测试证据。

配置兼容端点

如果使用应用自有网关或已经验证的兼容服务,显式声明 Provider 身份、端点和 Wire Protocol:

use runifold::ProviderModelExt;
use runifold_providers::{
    openai::{OpenAiClient, OpenAiConfig, OpenAiWireProtocol},
};
 
let config = OpenAiConfig::compatible(
    "private-gateway",
    std::env::var("MODEL_GATEWAY_KEY")?,
    "https://models.example.com/v1/",
    OpenAiWireProtocol::ChatCompletions,
)?;
 
let runtime = OpenAiClient::new(config)
    .runtime("organization/model-name")?;

不要接受最终用户传入的任意 Base URL。必须使用 Allowlist,并把 “OpenAI-compatible”理解为协议声明,而不是 Tool、流式、Reasoning、Usage 和错误语义 完全一致的保证。

把凭证留在服务端边界

长期凭证应由部署 Secret Store 注入。不要把 Provider Key 放进源码、浏览器 Bundle、 移动应用或 WASM。浏览器和边缘客户端应调用应用自有网关,由网关验证用户身份并在服务端 添加上游凭证。

日志可以记录 Provider、模型、请求关联、Capability 证据与脱敏错误分类,但不能记录 Secret 或原始敏感内容。

验证准确组合

上线前依次证明:

  1. 所选 Feature 与示例可以编译;
  2. 离线协议和错误分类测试通过;
  3. 使用真实端点的 Live Smoke Test 通过;
  4. 准确的模型与 Feature 组合已经在生产环境观察。

结构化输出、Tool、图像、Reasoning 与 Usage 可能在同一 Provider 内也因模型而异。 请依据 Provider 测试可靠性证据,不要凭名称推断。