UNPKG

ernie-ai-provider

Version:

Community-built ERNIE AI Provider for Vercel AI SDK - Integrate Baidu's ERNIE models with Vercel's AI application framework

256 lines (197 loc) 6.17 kB
# ERNIE AI Provider for Vercel AI SDK [![npm version](https://badge.fury.io/js/ernie-ai-provider.svg)](https://badge.fury.io/js/ernie-ai-provider) [![npm downloads](https://img.shields.io/npm/dm/ernie-ai-provider.svg)](https://www.npmjs.com/package/ernie-ai-provider) 百度千帆大模型的 Vercel AI SDK 简易版社区provider,支持 ERNIE 系列模型与 Vercel AI 的集成。 ## 特性 - 🚀 支持 ERNIE - 🎨 与 Vercel AI SDK 集成 - 🌊 流式响应支持 - 🎯 结构化数据生成(JSON 对象) - 📊 流式结构化对象生成(实时生成结构化数据) - 🛠️ 工具调用(Function Calling) - 🔧 TypeScript 支持 - 🔍 网络搜索功能(实时信息获取) - 👤 系统人设和角色定制 - 🎯 搜索过滤和域名限制 - 📈 流式响应增强选项 ## 安装 ```bash # 使用 npm npm install ernie-ai-provider # 使用 yarn yarn add ernie-ai-provider # 使用 pnpm pnpm add ernie-ai-provider ``` ## 环境变量 ```bash QIANFAN_API_KEY="your-api-key" ``` ## 快速开始 ### 基础用法 ```typescript import { ernie } from 'ernie-ai-provider'; import { generateText } from 'ai'; const { text } = await generateText({ model: ernie('ernie-4.0-8k'), prompt: '请写一个关于人工智能的简短介绍', }); console.log(text); ``` ### 自定义配置 ```typescript import { createErnie } from 'ernie-ai-provider'; import { generateText } from 'ai'; const ernie = createErnie({ apiKey: 'your-api-key', baseURL: 'https://qianfan.baidubce.com/v2', // 可选 }); const { text } = await generateText({ model: ernie('ernie-4.0-8k'), prompt: '请解释什么是机器学习', }); ``` ### 流式响应 ```typescript import { ernie } from 'ernie-ai-provider'; import { streamText } from 'ai'; const { textStream } = await streamText({ model: ernie('ernie-4.0-8k'), prompt: '请详细解释机器学习的基本概念', }); for await (const delta of textStream) { process.stdout.write(delta); } ``` ### 结构化数据生成 ```typescript import { ernie } from 'ernie-ai-provider'; import { generateObject } from 'ai'; import { z } from 'zod'; const result = await generateObject({ model: ernie('ernie-4.0-8k'), schema: z.object({ recipe: z.object({ name: z.string(), ingredients: z.array( z.object({ name: z.string(), amount: z.string(), }) ), steps: z.array(z.string()), }), }), prompt: '生成一个宫保鸡丁的菜谱', }); console.log(JSON.stringify(result.object.recipe, null, 2)); ``` ### 流式结构化数据生成 ```typescript import { ernie } from 'ernie-ai-provider'; import { streamObject } from 'ai'; import { z } from 'zod'; const productSchema = z.object({ name: z.string().describe('产品名称'), category: z.string().describe('产品分类'), price: z.number().describe('价格'), features: z.array(z.string()).describe('产品特性'), specifications: z.object({ weight: z.string(), dimensions: z.string(), color: z.string(), }), }); const { partialObjectStream, object } = await streamObject({ model: ernie('ernie-4.0-8k'), schema: productSchema, prompt: '生成一个智能手机的产品信息', }); // 实时显示生成过程 for await (const partialObject of partialObjectStream) { console.log('生成中:', JSON.stringify(partialObject, null, 2)); } // 获取最终结果 const finalProduct = await object; console.log('完成:', JSON.stringify(finalProduct, null, 2)); ``` ### 工具调用 ```javascript import { ernie } from 'ernie-ai-provider'; import { generateText, tool } from 'ai'; import { z } from 'zod'; const getWeatherTool = tool({ description: '获取指定城市的天气信息', parameters: z.object({ city: z.string().describe('城市名称'), }), execute: async ({ city }) => { // 这里应该调用真实的天气API return `${city}的天气:晴天,温度25°C`; }, }); const result = await generateText({ model: ernie('ernie-4.0-8k'), prompt: '北京今天天气怎么样?', tools: { getWeather: getWeatherTool, }, }); console.log(result.text); ``` ### 网络搜索功能 ```javascript import { ernie } from 'ernie-ai-provider'; import { generateText } from 'ai'; const result = await generateText({ model: ernie('ernie-4.0-8k', { web_search: { enable_citation: true, // 启用引用信息 enable_trace: true, // 启用搜索轨迹 enable_status: true, // 启用状态信息 } }), prompt: '请告诉我最新的AI技术发展动态', }); console.log(result.text); ``` ### 系统人设和角色定制 ```javascript import { ernie } from 'ernie-ai-provider'; import { generateText } from 'ai'; const result = await generateText({ model: ernie('ernie-4.0-8k'), prompt: '请分析一下当前的股市走势', // 设置系统人设 system: '你是一位资深的金融分析师,拥有15年的投资经验', // 设置详细指令 instruction: '请用专业术语分析,并提供具体的数据支撑', userId: 'analyst_001', maxOutputTokens: 600, }); console.log(result.text); ``` ## API 参考 ### `createErnie(options)` 创建一个自定义的 ERNIE 提供商实例。 **参数:** - `options.apiKey` (string, 可选): API 密钥,默认从 `QIANFAN_API_KEY` 环境变量读取 - `options.baseURL` (string, 可选): 自定义 API 基础 URL - `options.headers` (Record<string, string>, 可选): 自定义请求头 ### `ernie(modelId, settings?)` 创建一个 ERNIE 语言模型实例。 **参数:** - `modelId` (string): 模型标识符 - `settings` (object, 可选): 模型设置 - `temperature` (number): 控制输出随机性,范围 0-1 - `topP` (number): 核采样参数,范围 0-1 - `maxTokens` (number): 最大输出令牌数 - `penaltyScore` (number): 重复惩罚分数,范围 1.0-2.0 ## 许可证 MIT ## 贡献 欢迎提交 Issue 和 Pull Request! ## 相关链接 - [Vercel AI SDK](https://sdk.vercel.ai/) - [百度千帆大模型平台](https://cloud.baidu.com/product/wenxinworkshop) - [千帆 API 文档](https://cloud.baidu.com/doc/qianfan-api/)