# OpenAI Service Plugin 一个用于Flutter应用的OpenAI服务插件,支持Android和iOS平台。 ## 功能 - 支持文本生成(completions) - 支持流式输出(streaming) - 支持函数调用(function calling) - 支持自定义API基础URL - 支持自定义模型选择 ## 安装 在你的`pubspec.yaml`文件中添加以下依赖: ```yaml dependencies: open_ai_service: path: 本地路径/open_ai_service ``` ## 使用方法 ### 初始化服务 ```dart import 'package:open_ai_service/open_ai_service.dart'; final openAIService = OpenAIService(); // 初始化服务 await openAIService.initialize( apiKey: 'your_openai_api_key', baseUrl: 'https://api.openai.com/v1/chat/completions', // 可选 model: 'gpt-4-turbo', // 可选 ); ``` ### 发送非流式请求 ```dart // 创建消息 final userMessage = await openAIService.createUserMessage('你好,请介绍一下自己'); // 发送请求 final response = await openAIService.sendMessage( messages: [userMessage], systemPrompt: '你是一个有用的AI助手', ); print('AI回复: $response'); ``` ### 发送流式请求(回调方式) ```dart // 创建消息 final userMessage = await openAIService.createUserMessage('写一个短故事'); // 发送流式请求 await openAIService.sendMessageStream( messages: [userMessage], systemPrompt: '你是一个善于讲故事的AI助手', ); // 处理事件 final subscription = openAIService.processEvents( onToken: (token) { // 处理每个返回的token print(token); }, onComplete: () { // 处理完成事件 print('生成完成'); }, onError: (error) { // 处理错误 print('错误: $error'); }, onFunctionCall: (functionCall) { // 处理函数调用 print('函数调用: ${functionCall['name']}'); }, ); // 在不需要时取消订阅 subscription.cancel(); ``` ### 发送流式请求(Stream方式) ```dart // 创建消息 final userMessage = await openAIService.createUserMessage('写一个短故事'); // 获取字符串流 final stream = openAIService.streamMessage( messages: [userMessage], systemPrompt: '你是一个善于讲故事的AI助手', ); // 使用流 final StringBuilder responseBuilder = StringBuilder(); stream.listen( (token) { // 处理每个token responseBuilder.write(token); print(token); // 实时输出 }, onDone: () { // 流结束 print('完整回复: ${responseBuilder.toString()}'); }, onError: (error) { // 错误处理 print('错误: $error'); } ); ``` ### 注册函数 ```dart // 注册一个函数 await openAIService.registerFunction( name: 'get_weather', description: '获取指定城市的天气信息', parameters: { 'type': 'object', 'properties': { 'city': { 'type': 'string', 'description': '城市名称', }, 'date': { 'type': 'string', 'description': '日期,格式为YYYY-MM-DD', }, }, 'required': ['city'], }, ); ``` ### 处理函数调用 ```dart // 创建消息 final userMessage = await openAIService.createUserMessage('明天北京的天气如何?'); // 发送流式请求 await openAIService.sendMessageStream( messages: [userMessage], systemPrompt: '你是一个有用的AI助手', ); // 处理事件 openAIService.processEvents( onToken: (token) { print(token); }, onComplete: () { print('生成完成'); }, onError: (error) { print('错误: $error'); }, onFunctionCall: (functionCall) { // 处理函数调用 final name = functionCall['name']; final arguments = functionCall['arguments']; print('收到函数调用: $name, 参数: $arguments'); // 假设处理了函数调用并获得结果 final result = '{"temperature": 25, "condition": "sunny"}'; // 发送函数调用结果 openAIService.sendFunctionCallResult( messages: [userMessage], systemPrompt: '你是一个有用的AI助手', functionCall: functionCall, functionResult: result, ); }, ); ``` ### 使用Stream API处理函数调用 ```dart // 创建消息和响应处理器 final userMessage = await openAIService.createUserMessage('明天北京的天气如何?'); final responseBuilder = StringBuilder(); // 处理事件流以捕获函数调用 final subscription = openAIService.processEvents( onFunctionCall: (functionCall) async { // 取消当前事件监听 subscription.cancel(); // 处理函数调用 final name = functionCall['name']; final arguments = functionCall['arguments']; print('收到函数调用: $name, 参数: $arguments'); // 假设处理了函数调用并获得结果 final result = '{"temperature": 25, "condition": "sunny"}'; // 使用Stream API发送函数调用结果 final resultStream = openAIService.streamFunctionResult( messages: [userMessage], systemPrompt: '你是一个有用的AI助手', functionCall: functionCall, functionResult: result, ); // 处理结果流 resultStream.listen( (token) { responseBuilder.write(token); print(token); // 实时输出 }, onDone: () { print('完整回复: ${responseBuilder.toString()}'); }, onError: (error) { print('错误: $error'); } ); } ); // 启动请求 await openAIService.sendMessageStream( messages: [userMessage], systemPrompt: '你是一个有用的AI助手', ); ``` ## 注意事项 1. 确保在使用前已正确初始化服务 2. 对于流式请求,确保在不需要时取消订阅 3. 处理函数调用时,确保提供有效的结果格式 4. 网络请求可能会失败,请确保加入适当的错误处理 ## 许可证 [MIT License](LICENSE)