# @elg/coerce-llm-output 中文文档

规范地址：https://npmcn.com/package/%40elg/coerce-llm-output/

版本：0\.1\.0
npm 元数据更新时间：2024-07-10T06:52:34.834Z
中文译文更新时间：2026-11-13T12:34:29.913Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40elg/coerce-llm-output
原文对照：https://npmcn.com/package/%40elg/coerce-llm-output/?lang=original
项目主页：https://github.com/taneliang/coerce-llm-output#readme
源码仓库：https://github.com/taneliang/coerce-llm-output

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：23.8 kB，15 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：1 个
- peer 依赖：zod ^3
- 首次发布：2024-07-10T06:52:34.131Z
- 最新版本发布：2024-07-10T06:52:34.544Z
- 近 30 天下载量：4648（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：1（近 12 个月 0 个）

## 中文简介

[![CircleCI](https://dl.circleci.com/status-badge/img/gh/taneliang/coerce-llm-output/tree/main.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/taneliang/coerce-llm-output/tree/main) \[代码cov\] ([https://codecov.io/github/taneliang/coerce-l 互联网档案馆的存檔,存档日期2013-12-22](https://codecov.io/github/taneliang/coerce-l)

## 安装

```sh
npm install @elg/coerce-llm-output
```

也可以使用：`pnpm add @elg/coerce-llm-output`、`yarn add @elg/coerce-llm-output`、`bun add @elg/coerce-llm-output`

## README

# @elg/ coerce- llm- 输出

[![CircleCI](https://dl.circleci.com/status-badge/img/gh/taneliang/coerce-llm-output/tree/main.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/taneliang/coerce-llm-output/tree/main) [![codecov](https://codecov.io/github/taneliang/coerce-llm-output/graph/badge.svg?token=Vry55xt2Xs)](https://codecov.io/github/taneliang/coerce-llm-output)

`coerceLlmOutput` 使得通过将LLM输出被强迫成一个有良好型态且经过验证的JSON对象或阵列,以打字安全的方式使用LLM输出成为可能.

## 安装

```sh
npm install @elg/coerce-llm-output zod
```

或

```sh
yarn add @elg/coerce-llm-output zod
```

## 使用量

### OpenAI 的基本使用

```typescript
import { coerceLlmOutput } from "@elg/coerce-llm-output";
import OpenAI from "openai";
import { z } from "zod";

const openai = new OpenAI();

const User = z.object({
  id: z.string(),
  name: z.string(),
  email: z.string(),
});

async function main() {
  const chatCompletion = await openai.chat.completions.create({
    model: "gpt-3.5-turbo",
    messages: [
      {
        role: "user",
        content:
          "Generate a JSON user object with the shape " +
          "{ id: string; name: string; email: string }",
      },
    ],
  });

  const output: z.infer<User> = coerceLlmOutput(
    chatCompletion.choices[0].message,
    User,
  );
}

main();
```

### 流线

```typescript
import { coerceLlmOutput } from "@elg/coerce-llm-output";
import OpenAI from "openai";
import { z } from "zod";

const openai = new OpenAI();

const User = z.object({
  id: z.string(),
  name: z.string(),
  email: z.string(),
});

async function main() {
  const stream = await openai.chat.completions.create({
    model: "gpt-3.5-turbo",
    messages: [
      {
        role: "user",
        content:
          "Generate a JSON user object with the shape " +
          "{ id: string; name: string; email: string }",
      },
    ],
    stream: true,
  });
  for await (const chunk of stream) {
    const output: z.infer<User> = coerceLlmOutput(
      chunk.choices[0].message, // TODO: Check if this works? Otherwise use chunk.choices[0].delta.content
      User,
    );
    // process.stdout.write(chunk.choices[0]?.delta?.content || '');
  }
}

main();
```

### 阵列

```typescript
import { coerceLlmOutput } from "@elg/coerce-llm-output";
import OpenAI from "openai";
import { z } from "zod";

const openai = new OpenAI();

const User = z.object({
  id: z.string(),
  name: z.string(),
  email: z.string(),
});

async function main() {
  const chatCompletion = await openai.chat.completions.create({
    model: "gpt-3.5-turbo",
    messages: [
      {
        role: "user",
        content:
          "Generate a JSON array of users. Each user must have the shape " +
          "{ id: string; name: string; email: string }",
      },
    ],
  });

  const output: z.infer<User>[] = coerceLlmOutput(
    chatCompletion.choices[0].message,
    z.array(User),
  );
}

main();
```

## 职能

`coerceLlmOutput`数字 :

1.  提取类似JSON的内容.
2.  解析不完整的 JSON(使用极佳的 [双子](https://www.npmjs.com/package/partial-json)) (中文(简体) ).
3.  在解析的JSON对象中修复密钥,以匹配zod schema中的密钥. 我们这样做是因为LLMS有时会产生骆驼卡塞德或蛇-cased,或者出乎意料地产生出错的按键.
4.  使用提供的 Zod 方案解析 JSON 对象 .

## 常见问题

### @elg/coerce-llm-output 是什么？

\[代码cov\] \(https://codecov\.io/github/taneliang/coerce-l 互联网档案馆的存檔,存档日期2013-12-22

### 如何安装 @elg/coerce-llm-output？

在项目目录运行 npm install @elg/coerce-llm-output，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：zod（^3）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @elg/coerce-llm-output 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @elg/coerce-llm-output 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @elg/coerce-llm-output 可以商用吗？

@elg/coerce-llm-output 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @elg/coerce-llm-output 的下载量有多少？

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

### @elg/coerce-llm-output 还在维护吗？

最新版本 0\.1\.0 发布于 2024/07/10（2 年前）；至今共发布 1 个版本，其中过去 12 个月发布了 0 个；首次发布于 2024/07/10。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

