@elg/coerce-llm-output

中文文档
0.1.0发布于 2024/07/10MITTypeScriptCommonJS近 30 天下载 4648
原始使用文档
文档目录6 节
  1. Installation
  2. Usage
  3. Basic usage with OpenAI
  4. Streaming
  5. Arrays
  6. Functionality

@elg/coerce-llm-output

CircleCI codecov

coerceLlmOutput makes it possible to use LLM output in a typesafe way by coercing it into a well-typed and validated JSON object or array.

Installation

npm install @elg/coerce-llm-output zod

OR

yarn add @elg/coerce-llm-output zod

Usage

Basic usage with OpenAI

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();

Streaming

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();

Arrays

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();

Functionality

coerceLlmOutput:

  1. Extracts JSON-like content.
  2. Parses incomplete JSON (using the excellent partial-json).
  3. Fixes up keys in the parsed JSON object to match the keys in the zod schema. We do this because LLMs sometimes generate camelCased or snake_cased, or wrongly cased keys unexpectedly.
  4. Parses the JSON object using the provided zod schema.

版本与发布记录

@elg/coerce-llm-output 共发布 1 个版本,首次发布于 2024/07/10;过去 12 个月发布了 0 个版本。

版本发布日期距今
0.1.0latest2024/07/102 年前

关于 @elg/coerce-llm-output 的常见问题

@elg/coerce-llm-output 是什么?

[![codecov](https://codecov.io/github/taneliang/coerce-l

如何安装 @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 和提交记录判断。