System One
System One
开发文档API 参考SDK 文档SDK 源代码System One

SDK

API

积分与计费

共享指南

决策原语接入智能体数据处理部署到 Cloudflare Workers

接入智能体

选择边界明确的决策任务、在服务端认证,并在保留动作与计费控制权的前提下恢复请求。

本文将 SDK 与 System One 托管 API 配合使用,为 Agent 添加一个决策步骤。SDK 直连其他服务的方式见 SDK 文档,这些连接使用所选服务的凭据与计费方式。

何时使用 System One

当应用能够定义问题及可能结果时,可以使用决策接口:分流消息、从允许的工作流步骤中选择下一步、按有序标准评分,或估计某个条件成立的概率。一份共享状态配合多个命名问题,可以让应用一起检查相关判断。

开放式规划、收集新信息或难以明确候选项时,可以转交独立推理模型或人工处理。适合的任务可以显式提供 review 或 think 选项。概率是模型估计,不是工具执行授权;动作白名单、权限与动作要求的确认仍由应用负责。

托管 API 当前提供 Jev 兼容决策。请用自己的任务评估准确性和延迟;本指南不承诺通用质量或响应时间。SDK 为其他模型提供的独立适配器,不是本站的托管模型目录。

在模型上下文之外认证

登录控制台创建平台 API 密钥,将其保存到服务端秘密配置或环境变量。通过 Authorization: Bearer 调用托管 https://system-one.dev/v1 API,文档站不提供推理。密钥不要进入提示词、工具描述、浏览器构建产物、URL 或日志。运营者的上游密钥不是调用者的平台密钥。

GET /v1/models 同样需要平台密钥。浏览器管理端点与 Playground 使用 Better Auth 会话,Bearer 密钥不能替代该会话。API 密钥归属于账户,共享账户余额、限流与幂等命名空间。

添加一个决策步骤

在服务端安装独立包:

npm install @system-one-ai/core@0.6.0 @system-one-ai/transport-fetch@0.6.0 @system-one-ai/adapter-system-one@0.6.0

以下 TypeScript 示例只选择建议的下一步,不执行工具:

import { createSystemOne, choice } from '@system-one-ai/core';
import { createFetchTransport } from '@system-one-ai/transport-fetch';
import { systemOneAdapter } from '@system-one-ai/adapter-system-one';

const apiKey = process.env.SYSTEM_ONE_API_KEY;
if (!apiKey) throw new Error('请在服务端设置 SYSTEM_ONE_API_KEY。');
const client = createSystemOne({
  apiKey,
  baseURL: 'https://system-one.dev/v1',
  adapter: systemOneAdapter,
  transport: createFetchTransport(),
  model: 'jev-latest',
  timeoutMs: 30_000,
  maxRetries: 0,
});

const operation = {
  idempotencyKey: crypto.randomUUID(),
  request: {
    state: { message: '能说明一下积分如何计算吗?' },
    questions: {
      next: choice('选择下一步处理方式。', {
        answer: '可根据已有文档回答',
        think: '需要更多推理或信息',
        review: '需要人工审核',
      }),
    },
  },
};
// 发送前持久保存操作;结果未知时复用同一操作恢复。
const result = await client.evaluate(operation.request, {
  headers: { 'Idempotency-Key': operation.idempotencyKey },
});
console.log({ proposedStep: result.answers.next.choice });

运行示例会产生计费请求。发送前,请在应用自己的持久任务状态中保存操作;重新创建 UUID 会成为新操作。客户端超时或取消,不能证明服务端没有完成。总期限与重试预算由应用自行决定。

状态只包含判断所需的信息,不放入 API 密钥或无关私人历史。状态数组是一份共享输入,不是独立评估批次。SDK 会把 booleanQuestion 映射为原生 noul,但 core 0.6 对 nullable 输入的限制比原生 HTTP 更严,详见决策原语。

先恢复,再决定是否新建操作

初始设置使用 maxRetries: 0。Core APIError 提供状态、请求 ID 和重试延迟,不暴露平台分类响应头。恢复控制器应使用原生 HTTP,读取 X-System-One-Error-Code、X-System-One-Error-Source、X-Request-Id、Retry-After 与 X-System-One-Credits,不要通过任意错误正文判断提供方失败类型。

观察到的结果应用处理
断开连接、超时或结果未知在保留窗口内使用保存的键与相同的实际请求恢复,不推定已退款。
409 request_in_progress遵守 Retry-After,再使用同一键和请求体。
成功重放使用答案。X-Idempotency-Replayed: true 和零扣费头标记重放,没有执行新推理。
409 idempotency_failed前次尝试失败且已退款。明确决定重试时,使用新键。
409 idempotency_conflict恢复原请求,或仅为确实不同的操作使用新键。
429 rate_limit_exceeded等待账户限流恢复后重试同一操作。提供方的 provider_busy 有独立退款与重试语义。
503 request_reconciliation_pending、410 idempotency_expired 或未解决的内部失败保存原标识,检查账户用量后再决定是否发起其他操作。扣费头缺失不等于零。
认证、输入或余额不足错误先解决原因再尝试。上游 401 不能证明平台登录会话已过期。

Retry-After 可能是秒数或 HTTP 日期。按应用总期限与最大次数限制重试,缺少延迟提示时使用带随机抖动的退避。保留相同的实际请求模型、评分顺序、扩展与精确数字值。新键可能再次扣费;旧键配不同正文则产生冲突。

已完成操作的键与答案从请求创建起保留 24 小时。过期后,同一键可以发起新操作,不提供永久去重。应用执行工具时,需要自己的持久操作状态与幂等机制,因为决策 API 不执行或去重这些动作。参阅 API 重试、版本说明与数据处理。

决策原语

保留选项、加权评分和布尔概率的原始含义。

数据处理

请求流向、服务存储内容与保留规则。

本页内容

何时使用 System One在模型上下文之外认证添加一个决策步骤先恢复,再决定是否新建操作