跳到主要内容
Office Open

快速开始

AI 工具

使用 AI SDK 工具让 AI 代理生成 Office 文档

office-open 包提供了 AI SDK 工具,允许 AI 代理(Claude、GPT 等)使用 Vercel AI SDK 生成 .docx、.pptx、.xlsx、.odt、.rtf、.ods 和 .odp 文件。

#安装

pnpm
pnpm add office-open ai

需要 Vercel AI SDK(ai 包)v6+。

#工具

提供八个工具 — 每个受支持的根格式各一个,外加按需查询 schema 的 lookup 工具:

工具说明
generate-docx生成 .docx Word 文档
generate-pptx生成 .pptx 演示文稿
generate-xlsx生成 .xlsx 电子表格
generate-odt生成 .odt OpenDocument 文本
generate-rtf生成 .rtf 富文本文档
generate-ods生成 .ods OpenDocument 表格
generate-odp生成 .odp OpenDocument 演示
office-open-schema-lookup按需获取选项定义的 JSON Schema

每个生成工具在生成前使用 JSON Schema(ajv)验证输入。校验错误附带实例路径(如 at "sections.0.children.1.paragraph.children"),模型可以据此修复并重试。

#渐进披露

完整格式 schema 远超工具定义的承载上限(docx 约 675 KB),因此生成工具携带的是骨架输入 schema:顶层结构加子级包装键,其余以 stub 标注它所代表的定义名。工作流程:

  1. 在填充复杂对象前,调用 office-open-schema-lookup 传入 { type, definitions: [...] } 查询所需选项类型(如 ParagraphOptions、RunOptions、TableOptions)。名称来自骨架中的 stub,或 npx office-open schema index <type>。
  2. 填写选项并调用生成工具。
  3. 若校验拒绝输入,修复报错路径后重试 — 每次调用最多报告五个问题。

lookup 返回所请求定义及其依赖闭包;未请求的编目域保持为可展开的 stub,因此需要的每个域根都要单独请求。每次调用最多 8 个定义;未知名返回最接近的候选建议而非报错。

提供方的严格结构化输出模式(要求处处 additionalProperties: false)与骨架不兼容;校验由工具 execute 内的 ajv 负责。

#用法

ts
import { generateText } from "ai";
import { officeOpenTools } from "office-open/ai";

const result = await generateText({
  model,
  prompt: "创建一份季度报告文档",
  tools: officeOpenTools,
});

#工具输入

每个工具直接接受文档选项(无需包裹 — 直接传入文档结构):

#generate-docx

JSON
{
  "sections": [
    {
      "children": [{ "paragraph": { "children": [{ "text": "你好,世界!", "bold": true }] } }]
    }
  ]
}

#generate-pptx

JSON
{
  "title": "我的演示文稿",
  "slides": [
    {
      "children": [
        {
          "shape": {
            "x": 100,
            "y": 100,
            "width": 760,
            "height": 340,
            "textBody": { "paragraphs": [{ "children": [{ "text": "你好,世界!", "size": 32 }] }] }
          }
        }
      ]
    }
  ]
}

#generate-xlsx

JSON
{
  "worksheets": [
    {
      "name": "Sheet1",
      "rows": [
        { "cells": [{ "value": "姓名" }, { "value": "分数" }] },
        { "cells": [{ "value": "张三" }, { "value": 95 }] }
      ]
    }
  ]
}

#工具输出

每个工具返回 base64 编码的文件:

json
{
  "base64": "...",
  "mimeType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
}

#JSON Schemas

完整 schema 与切片 API 均可导出供自定义使用:

ts
import {
  docxSchema,
  pptxSchema,
  xlsxSchema,
  validateDocumentInput,
  sliceDocumentSchema,
  SCHEMA_ENTRIES,
} from "office-open/schemas";

// 提取指定选项类型的依赖闭包:
const slice = sliceDocumentSchema("docx", ["ParagraphOptions", "RunOptions"]);

同样的查询能力也可通过 CLI 使用(npx office-open schema index docx、npx office-open schema slice docx ParagraphOptions)。

完整的 schema 说明请参考 DOCX、PPTX 和 XLSX 文档。