cherry-studio/packages/aiCore
MyPrototypeWhat 3d2caaf96a fix: refine experimental_transform handling and improve chunking logic
- Updated PluginEnabledAiClient to streamline the handling of experimental_transform parameters.
- Adjusted ModernAiProvider's smoothStream configuration for better chunking of text, enhancing processing efficiency.
- Re-enabled block updates in messageThunk for improved state management.
2025-06-20 17:36:39 +08:00
..
src fix: refine experimental_transform handling and improve chunking logic 2025-06-20 17:36:39 +08:00
AI_SDK_ARCHITECTURE.md feat: 完成api层,业务逻辑层,编排层的分离 2025-06-20 05:44:44 +08:00
package.json feat: 完成api层,业务逻辑层,编排层的分离 2025-06-20 05:44:44 +08:00
pnpm-lock.yaml feat: update AI Core client types and provider registry 2025-06-17 20:05:31 +08:00
README.md feat: enhance AI SDK documentation and client functionality 2025-06-20 16:19:55 +08:00
tsconfig.json feat: introduce Cherry Studio AI Core package with unified AI provider interface 2025-06-16 22:35:09 +08:00

@cherrystudio/ai-core

Cherry Studio AI Core 是一个基于 Vercel AI SDK 的统一 AI Provider 接口包。

特性

  • 🚀 统一的 AI Provider 接口
  • 🔄 动态导入支持
  • 💾 智能缓存机制
  • 🛠️ TypeScript 支持
  • 📦 轻量级设计

支持的 Providers

基于 AI SDK 官方支持的 providers

核心 Providers:

  • OpenAI
  • Anthropic
  • Google Generative AI
  • Google Vertex AI
  • Mistral AI
  • xAI (Grok)
  • Azure OpenAI
  • Amazon Bedrock

扩展 Providers:

  • Cohere
  • Groq
  • Together.ai
  • Fireworks
  • DeepSeek
  • Cerebras
  • DeepInfra
  • Replicate
  • Perplexity
  • Fal AI
  • Vercel

安装

npm install @cherrystudio/ai-core ai

还需要安装你要使用的 AI SDK provider:

npm install @ai-sdk/openai @ai-sdk/anthropic @ai-sdk/google

使用示例

基础用法

import { createAiSdkClient } from '@cherrystudio/ai-core'

// 创建 OpenAI 客户端
const client = await createAiSdkClient('openai', {
  apiKey: 'your-api-key'
})

// 流式生成
const result = await client.stream({
  modelId: 'gpt-4',
  messages: [{ role: 'user', content: 'Hello!' }]
})

// 非流式生成
const response = await client.generate({
  modelId: 'gpt-4',
  messages: [{ role: 'user', content: 'Hello!' }]
})

便捷函数

import { createOpenAIClient, streamGeneration } from '@cherrystudio/ai-core'

// 快速创建 OpenAI 客户端
const client = await createOpenAIClient({
  apiKey: 'your-api-key'
})

// 便捷流式生成
const result = await streamGeneration('openai', 'gpt-4', [{ role: 'user', content: 'Hello!' }], {
  apiKey: 'your-api-key'
})

多 Provider 支持

import { createAiSdkClient } from '@cherrystudio/ai-core'

// 支持多种 AI providers
const openaiClient = await createAiSdkClient('openai', { apiKey: 'openai-key' })
const anthropicClient = await createAiSdkClient('anthropic', { apiKey: 'anthropic-key' })
const googleClient = await createAiSdkClient('google', { apiKey: 'google-key' })
const xaiClient = await createAiSdkClient('xai', { apiKey: 'xai-key' })

使用 AI SDK 原生 Provider 注册表

https://ai-sdk.dev/docs/reference/ai-sdk-core/provider-registry

除了使用内建的 provider 管理,你还可以使用 AI SDK 原生的 createProviderRegistry 来构建自己的 provider 注册表。

基本用法示例

import { createClient } from '@cherrystudio/ai-core'
import { createProviderRegistry } from 'ai'
import { createOpenAI } from '@ai-sdk/openai'
import { anthropic } from '@ai-sdk/anthropic'

// 1. 创建 AI SDK 原生注册表
export const registry = createProviderRegistry({
  // register provider with prefix and default setup:
  anthropic,

  // register provider with prefix and custom setup:
  openai: createOpenAI({
    apiKey: process.env.OPENAI_API_KEY
  })
})

// 2. 创建client,'openai'可以传空或者传providerId(内建的provider)
const client = PluginEnabledAiClient.create('openai', {
  apiKey: process.env.OPENAI_API_KEY
})

// 3. 方式1使用内建逻辑传统方式
const result1 = await client.streamText('gpt-4', {
  messages: [{ role: 'user', content: 'Hello with built-in logic!' }]
})

// 4. 方式2使用自定义注册表灵活方式
const result2 = await client.streamText({
  model: registry.languageModel('openai:gpt-4'),
  messages: [{ role: 'user', content: 'Hello with custom registry!' }]
})

// 5. 支持的重载方法
await client.generateObject({
  model: registry.languageModel('openai:gpt-4'),
  schema: z.object({ name: z.string() }),
  messages: [{ role: 'user', content: 'Generate a user' }]
})

await client.streamObject({
  model: registry.languageModel('anthropic:claude-3-opus-20240229'),
  schema: z.object({ items: z.array(z.string()) }),
  messages: [{ role: 'user', content: 'Generate a list' }]
})

与插件系统配合使用

更强大的是,你还可以将自定义注册表与 Cherry Studio 的插件系统结合使用:

import { PluginEnabledAiClient } from '@cherrystudio/ai-core'
import { createProviderRegistry } from 'ai'
import { createOpenAI } from '@ai-sdk/openai'
import { anthropic } from '@ai-sdk/anthropic'

// 1. 创建带插件的客户端
const client = PluginEnabledAiClient.create(
  'openai',
  {
    apiKey: process.env.OPENAI_API_KEY
  },
  [LoggingPlugin, RetryPlugin]
)

// 2. 创建自定义注册表
const registry = createProviderRegistry({
  openai: createOpenAI({ apiKey: process.env.OPENAI_API_KEY }),
  anthropic: anthropic({ apiKey: process.env.ANTHROPIC_API_KEY })
})

// 3. 方式1使用内建逻辑 + 完整插件系统
await client.streamText('gpt-4', {
  messages: [{ role: 'user', content: 'Hello with plugins!' }]
})

// 4. 方式2使用自定义注册表 + 有限插件支持
await client.streamText({
  model: registry.languageModel('anthropic:claude-3-opus-20240229'),
  messages: [{ role: 'user', content: 'Hello from Claude!' }]
})

// 5. 支持的方法
await client.generateObject({
  model: registry.languageModel('openai:gpt-4'),
  schema: z.object({ name: z.string() }),
  messages: [{ role: 'user', content: 'Generate a user' }]
})

await client.streamObject({
  model: registry.languageModel('openai:gpt-4'),
  schema: z.object({ items: z.array(z.string()) }),
  messages: [{ role: 'user', content: 'Generate a list' }]
})

混合使用的优势

  • 灵活性:可以根据需要选择使用内建逻辑或自定义注册表
  • 兼容性:完全兼容 AI SDK 的 createProviderRegistry API
  • 渐进式:可以逐步迁移现有代码,无需一次性重构
  • 插件支持:自定义注册表仍可享受 Cherry Studio 插件系统的部分功能
  • 最佳实践:结合两种方式的优点,既有动态加载的性能优势,又有统一注册表的便利性

License

MIT