@digitalocean/dots

中文文档
1.24.0发布于 2026/11/12Apache-2.0ES Module近 30 天下载 4271

基于 DigitalOcean 的 OpenAPI 规格的 TypeScript 客户端生成器.

中文使用文档
文档目录13 节
  1. 开始
  2. 基本用途
  3. AI 推论( I)
  4. 认证
  5. 正在流出聊天完成
  6. 图像生成
  7. 列出现有模式
  8. 导入样式( 全部等同)
  9. 可运行示例
  10. 已知问题
  11. 路线图
  12. 捐款
  13. 许可证

点数

DoTs 是基于DO OpenAPIv3规格的官方数字海洋打字客户端.

新设 ——推论现活在自己的名字空间: import { Client } from "@digitalocean/dots/inference"遗产 import { InferenceClient } from "@digitalocean/dots" 仍得到充分支持(Client 财务报告和审定财务报表 InferenceClient 是同一构造器)。 跳转到 AI 推论( I) 用于使用.

在v1.11.0中新建 —— 说 DoTs 舰只一等支持 DigitalOcean 无服务器推论:流式聊天完成,图像生成,和模型上市. 浏览可运行的脚本 examples/inference/。 。 。 .

开始

先决条件

  • 节点JS 20.10或以上
  • 类型脚本 5 或以上
  • 一个数字海洋账户,有活跃订阅. 连同一个数字海洋标志,并有管理数字海洋资源的适当权限.
  • "type": "module" 在您的软件包中。 json( 用于 ES 模块支持)

安装

该套件发布于npmjs.com.

npm i @digitalocean/dots

文档

注:目前缺乏综合文件质量,正在编制之中。 文件正在积极改进,一旦固定,将予以更新.

https://digital oceandots.readthedocs.io/en/latest/ (中文(简体) )

基本用途

从客户端开始的快速指南

认证

dots 必须初始化为 createDigitalOceanClient()。需要数字海洋符号。 可通过 DigitalOceanApiKeyAuthenticationProvider(),下文举例:

const authProvider = new DigitalOceanApiKeyAuthenticationProvider(token!);
// Create request adapter using the fetch-based implementation
const adapter = new FetchRequestAdapter(authProvider);
// Create the API client
const client = createDigitalOceanClient(adapter);

管理数字海洋资源

在下面查找创建数字海洋卷的工作示例 dots数字 :

import { createDigitalOceanClient, DigitalOceanApiKeyAuthenticationProvider,
 FetchRequestAdapter, Volumes_ext4 } from "@digitalocean/dots";

const token = process.env.DIGITALOCEAN_TOKEN;
if (!token) {
    throw new Error("DIGITALOCEAN_TOKEN not set");
}

const authProvider = new DigitalOceanApiKeyAuthenticationProvider(token!);
// Create request adapter using the fetch-based implementation
const adapter = new FetchRequestAdapter(authProvider);
// Create the API client
const client = createDigitalOceanClient(adapter);

async function main(): Promise<void> {
    try {
        const volumeReq: Volumes_ext4 = {
            sizeGigabytes: 10,
            name: `test-volume`,
            description: "Block storage testing",
            region: "nyc3",
            filesystemType: "ext4",
        };

        const resp = await client.v2.volumes.post(volumeReq);
        if (resp && resp.volume) {
            const volume = resp.volume;
            console.log(`Created volume ${volume.name} <ID: ${volume.id}>`);
        } else {
            throw new Error("Failed to create volume or volume is undefined");
        }

        console.log("Done!");

    } catch (err) {
        console.error(err);
    }
}

main();

运行上面代码片段 tsc && node index.js 将输出如下:

Created volume test-volume <ID: 751d0c09-1613-11f0-8aa5-0a58ac147241>
Done!

更多工作实例可见于 dots/examples。 。 。 .

AI 推论( I)

已添加 页:1。直接从 DoTs ——流畅聊天,图像生成,模型上市等.

认证

推断API由从v2控制-平面符号中分离的证书入门. 您必须使用 一个 改为:

  • A 类 DigitalOcean 个人访问托肯( PAT) 与 完全进入 范围 在所有资源,包括GenAI/Inference中阅读/写作。 只有特定资源类型的托肯将被拒绝.
  • A 类 模式访问密钥 数字海洋云控制台 GenAI 平台 — 模式存取密钥这些是推荐的 生产工作量的证书 因为范围只是推断.

证书作为 apiKey 推论 Client。同样的 DIGITALOCEAN_TOKEN 校对:Soup 只有在 pAT有全访问范围;否则使用模型访问密钥.

import { Client } from "@digitalocean/dots/inference";

const client = new Client({
    apiKey: process.env.DIGITALOCEAN_TOKEN!, // full-access PAT or Model Access Key
});

正在流出聊天完成

import { Client } from "@digitalocean/dots/inference";

const client = new Client({ apiKey: process.env.DIGITALOCEAN_TOKEN! });

const stream = await client.chat.completions.create({
    model: "llama3.3-70b-instruct",
    messages: [{ role: "user", content: "Write two short lines about DigitalOcean." }],
    stream: true,
});

for await (const chunk of stream) {
    process.stdout.write(chunk.choices?.[0]?.delta?.content ?? "");
}
process.stdout.write("\n");

还支持调用式的流线:

await client.chat.completions.create(
    { model: "llama3.3-70b-instruct", messages, stream: true },
    {
        onData: (chunk) => process.stdout.write(chunk.choices?.[0]?.delta?.content ?? ""),
        onComplete: () => console.log("\n[done]"),
        onError: (err) => console.error(err),
    },
);

图像生成

import { Client } from "@digitalocean/dots/inference";

const client = new Client({ apiKey: process.env.DIGITALOCEAN_TOKEN! });

const result = await client.images.generate({
    model: "stable-diffusion-3.5-large", // any image model from `client.models.list()`
    prompt: "An isometric illustration of a serverless data center, soft pastel colors",
    n: 1,
    size: "1024x1024",
});

const img = result.data?.[0];
if (img?.url) {
    console.log(img.url);
} else if (img?.b64_json) {
    // Stable Diffusion returns base64 — decode and save to disk.
    const fs = await import("node:fs");
    fs.writeFileSync("generated-image.png", Buffer.from(img.b64_json, "base64"));
    console.log("Saved generated-image.png");
}

列出现有模式

import { Client } from "@digitalocean/dots/inference";

const client = new Client({ apiKey: process.env.DIGITALOCEAN_TOKEN! });

const models = await client.models.list();
for (const m of models.data ?? []) {
    console.log(`${m.id}\t${m.owned_by ?? ""}`);
}

导入样式( 全部等同)

新的 @digitalocean/dots/inference 子路径支持所有通常的导入形状 —— 选择与您的项目常规相匹配的形状 。 下面的每个表格都决定 不变 构造器( e)Client === InferenceClient),因此可以混合并匹配,而没有任何运行时间差异:

// Named import — closest to `from pydo.inference import client`
import { Client } from "@digitalocean/dots/inference";

// Namespace import — gives you Client, ClientOptions, SSEStream, etc. in one bag
import * as inference from "@digitalocean/dots/inference";
const c = new inference.Client({ apiKey });

// Default import
import Client from "@digitalocean/dots/inference";

// Legacy name still reachable through the new subpath
import { InferenceClient } from "@digitalocean/dots/inference";

// Original root import — unchanged, still fully supported
import { InferenceClient } from "@digitalocean/dots";

后相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相. 遗产 import { InferenceClient } from "@digitalocean/dots" 继续和以前一样工作。 现有代码无需更改. 在两个表面自动添加到 OpenAPI spec 地块中的新端点—— 您不需要编辑 src/inference-gen/inference.ts 来揭露他们.

可运行示例

上面每个片段的最小,可操作的版本活在下面 examples/inference/数字 :

  • namespace-usage.ts - 练习新的 @digitalocean/dots/inference 命名空间端到端( 身份检查, models.list,非流畅聊天,流畅聊天,嵌入式).
  • chat-streaming.ts ——流出聊天完成并打印到到达时的符号.
  • image-generation.ts —— 生成一个单一的图像 stable-diffusion-3.5-large。如果模型返回一个,则打印URL,否则解码基数64的有效载荷并写入 generated-image.png。 。 。 .
  • models-list.ts ——列出可以调用的所有型号的ID.

每个脚本只需要 DIGITALOCEAN_TOKEN 设定 :

DIGITALOCEAN_TOKEN=... npx tsx examples/inference/namespace-usage.ts
DIGITALOCEAN_TOKEN=... npx tsx examples/inference/chat-streaming.ts
DIGITALOCEAN_TOKEN=... npx tsx examples/inference/image-generation.ts
DIGITALOCEAN_TOKEN=... npx tsx examples/inference/models-list.ts

看见 HTTP 401: Unauthorized — Unable to authenticate you您提供的令牌要么是空的, 过期的, 要么只被限定为特定资源 。 资源范围PAT无法调用推断网关——使用全接PAT或模型访问密钥.

已知问题

本节列出已知的客户端生成器问题.

产生巢穴 value 嵌入数组的字段

  • 这是我们的代码生成工具Kiota的现存问题
  • 有关这个问题的更详细情况可见于此 这里

路线图

DoTs 覆盖数字海洋控制平面今日,积极拓展AI/Information表面. 即将到来和飞行中的工作:

  • 推论
    • 扩展了对无服务器推论端点的覆盖(响应API,嵌入,音频,Async图像生成).
    • 用于推断请求/反应形状的一等打字(目前打法松散为: Record<string, any> 用于前向比较).
    • GenAI平台控制平面的助手:代理,知识基础,以及模型访问密钥管理.
    • 内建回调,速率限制处理,以及结构化出错类型用于推论调用.
  • 专门推论
    • 提供和管理专门推论终点和信使的方便包装.
  • 数字化
    • 为控制平面和推论工作流程更好地生成文件和端到端实例.
    • 扩展示例 examples/ (包括额外) examples/inference/ 剧本).

有你喜欢的用例优先吗? 打开一个问题 并告诉我们.

捐款

我们欢迎捐款! 随便你,通过访问我们的客户 联系指南 详细信息和指南. 对于特性请求或错误报告,打开一个问题帮助我们改进客户端.

许可证

这个项目根据Apache许可证2.0获得许可. 见 自由主义 详细文件.

版本与发布记录

@digitalocean/dots 共发布 32 个版本,首次发布于 2025/07/29;过去 12 个月发布了 22 个版本。

版本发布日期距今
1.24.0latest2026/11/12今天
1.23.02026/11/056 天前
1.22.02026/11/039 天前
1.21.02026/10/2715 天前
1.20.02026/10/011 个月前
1.19.02026/08/033 个月前

其他发布通道:beta → 1.18.0-beta.1。

关于 @digitalocean/dots 的常见问题

@digitalocean/dots 是什么?

基于 DigitalOcean 的 OpenAPI 规格的 TypeScript 客户端生成器.

如何安装 @digitalocean/dots?

在项目目录运行 npm install @digitalocean/dots,或使用 pnpm add / yarn add / bun add。

@digitalocean/dots 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/digitalocean__dots 是否存在。

@digitalocean/dots 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@digitalocean/dots 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20.10.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@digitalocean/dots 可以商用吗?

@digitalocean/dots 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@digitalocean/dots 的下载量有多少?

根据 npm 官方下载统计,@digitalocean/dots 在 2026/10/12 – 2026/11/10 这 30 天内被下载 4,271 次,日均约 142 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@digitalocean/dots 还在维护吗?

最新版本 1.24.0 发布于 2026/11/12(今天);至今共发布 32 个版本,其中过去 12 个月发布了 22 个;首次发布于 2025/07/29。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。