Skip to content

@cmtx/ai API

AI 模型调用封装层,基于 Vercel AI SDK 提供统一的文本生成和 Slug 生成接口。支持 DeepSeek、阿里云通义千问和 OpenAI 兼容协议。

WARNING

CMTX 仍处于活跃开发阶段,API 可能随版本迭代发生变化。如有疑问或发现文档错误,欢迎通过 GitHub Issues 反馈。

安装

bash
pnpm add @cmtx/ai

快速开始

typescript
import { generateWithModel, generateSlug } from '@cmtx/ai'
import type { AIModelConfig } from '@cmtx/ai'

const model: AIModelConfig = {
  provider: 'deepseek',
  model: 'deepseek-chat',
  apiKey: process.env.DEEPSEEK_API_KEY!,
}

// 文本生成
const response = await generateWithModel(model, '介绍 TypeScript')
console.log(response)

// Slug 生成
const slug = await generateSlug(model, 'TypeScript 入门教程')
// => 'typescript-ru-men-jiao-cheng'

类型定义

AIConfig / AIProvider / AIModelConfig

AI 配置相关类型定义于 @cmtx/asset 并在此 re-export。完整文档请见 asset-config.md

GenerateOptions

文本生成选项。

ts
interface GenerateOptions {
  system?: string
  temperature?: number
  maxTokens?: number
}
属性类型说明
systemstring系统提示词(可选)
temperaturenumber生成温度,控制随机性(可选)
maxTokensnumber最大输出 token 数(可选)

文本生成

generateWithModel

使用指定模型生成文本。

ts
function generateWithModel(
  modelConfig: AIModelConfig,
  prompt: string,
  options?: GenerateOptions,
): Promise<string>
参数类型说明
modelConfigAIModelConfig模型配置
promptstring提示文本
optionsGenerateOptions生成选项(可选)

返回值

Promise<string> — 生成的文本内容。

typescript
const result = await generateWithModel(
  { provider: 'alibaba', model: 'qwen-plus', apiKey: process.env.DASHSCOPE_API_KEY! },
  '用一句话解释什么是 FPE',
  { temperature: 0.5, maxTokens: 200 },
)

TIP

provider'deepseek' 时,自动禁用思维链(chain-of-thought)输出,确保只返回最终文本。

Slug 生成

SlugOptions

Slug 生成选项。

ts
interface SlugOptions {
  temperature?: number
  maxTokens?: number
}
属性类型默认值说明
temperaturenumber0.3生成温度(可选)
maxTokensnumber300最大输出 token 数(可选)

generateSlug

根据标题和可选内容生成 URL 友好的 Slug。

ts
function generateSlug(
  modelConfig: AIModelConfig,
  title: string,
  content?: string,
  options?: SlugOptions,
): Promise<string>
参数类型说明
modelConfigAIModelConfig模型配置
titlestring标题
contentstring正文内容(可选,用于上下文)
optionsSlugOptions生成选项(可选)

返回值

Promise<string> — 生成的 Slug。仅包含小写字母、数字和连字符,不超过 30 字符。

typescript
const slug = await generateSlug(
  { provider: 'deepseek', model: 'deepseek-chat', apiKey: process.env.DEEPSEEK_API_KEY! },
  'TypeScript 入门教程',
  '本文介绍 TypeScript 的基础概念和类型系统',
)
// => 'typescript-ru-men-jiao-cheng'

TIP

Slug 使用专用的系统提示词,要求模型仅输出 Slug 本身,不输出推理过程或其他文本。

参考

基于 MIT 许可发布