Flutter OpenAI集成插件openai_package的使用
Flutter OpenAI集成插件openai_package的使用
您可以通过以下步骤在Flutter应用中使用openai_package
插件来集成OpenAI的各种API功能。以下是详细的使用指南和代码示例。
支持此项目以帮助更多人受益!您可以点赞⭐。
您可以使用本项目提供的几乎所有OpenAI API功能,在您的应用中进行开发。这是一个开源且免费的软件库。
该包通过HTTP请求与API通信,使用起来非常简单。如果您是Dart/Flutter新手,也不会遇到任何困难!
请随意在您的应用中使用此包,它随时准备就绪,无需更新即可在任何时间、任何地点使用OpenAI API包。
未官方支持
OpenAI没有提供官方的Dart库。
关键特性 ✨
- 方法设计易于使用,精确地反映了OpenAI文档,并增强了与Dart编程语言的优化功能。
- 一次授权,可在应用中的任何位置和任何时间使用。
- 对开发者友好。
- 我们的包并未包含所有OpenAI API部分。很快,所有部分都会被添加进来。
- 包含了几乎所有的已实现功能的完整示例/代码片段,位于
/example
文件夹中。
代码进度 (65 %) 👑
- ✅ 认证
- ✅ 聊天(GPT)
- ✅ 编辑
- ✅ 图像
- ✅ 嵌入
- ✅ 音频
- ✅ 语音
- ❌ 模型
- ❌ 完成
- ❌ 修订
- ❌ 文件
- ❌ 微调
测试进度 (45 %) 💫
- ✅ 认证
- ✅ 聊天(GPT)
- ✅ 图像
- ✅ 音频
- ✅ 语音
- ❌ 模型
- ❌ 完成
- ❌ 修订
- ❌ 文件
- ❌ 微调
- ❌ 编辑
- ❌ 嵌入
完整文档 📜
有关库的完整文档,请查看这里。
使用 🟢
认证
API密钥
OpenAI API使用API密钥进行认证。您可以在API密钥部分获取您的账户的API密钥。
import 'package:openai_package/openai_package.dart';
import 'package:openai_package/src/openai/import/importAi.dart'; // 你必须添加
// lib/main.dart
void main() {
OpenAI.apiKey = 'your-api-key';
// ..
}
如果没有提供apiKey
数据,您将收到一条警告消息,提示输入apiKey
数据。
如果提供了apiKey
但已过期或无效,您将从OpenAI API收到错误消息。
如果没有指定model
,您将收到一条警告消息,提示选择首选模型。
如果指定了model
但无效或不受支持,您将收到一条错误消息,指示问题。
设置组织
如果您想在使用OpenAI API时配置一个organization
,可以使用以下代码片段:
// 输入用户的组织ID
OpenAI.organization = 'org-HZ3hl5Z89fEYVUufQOCzunok';
了解更多详情,请参阅此处。
设置默认请求超时
该库使用http
包进行API请求,默认超时时间为30秒。任何超过此时间的请求都会被取消并抛出异常。为了避免意外取消,您可以配置自定义默认超时:
// 将默认请求超时设置为60秒(根据需要调整)
OpenAI.connectionTimeout = Duration(seconds: 60);
这样,您的API调用现在将等待最多60秒的响应,然后再抛出异常,从而为可能较慢的请求提供更多的缓冲空间。
关键点
- 可调节超时:使用
OpenAI.requestsTimeout
设置所需的响应时间。 - 时间格式:使用
Duration
类指定超时时间(例如,Duration(seconds: 45)
)。 - 提升灵活性:避免对较长运行的请求进行不必要的取消。
注意事项
- 注意不要超过合理的超时时间,因为这会显著影响性能和响应性。
- 根据您的具体用例和预期响应时间调整超时值。
其他注意事项
- 如果需要,考虑为单个请求实现自定义超时逻辑。
- 监控和管理增加超时值的性能影响。
聊天(GPT)
创建聊天完成
基于提供的属性提供预测的聊天消息完成:
如果您想使用旧版本:
MessageData result = await openAI.chat(version: 'old', prompt: 'hello world!');
print(result.message);
如果您想使用新版本:
/// 这段代码展示了如何使用`openAI`包进行基于聊天的对话。
/// 它创建了一个消息列表,每个消息都有一个角色(系统或用户)和内容。
/// 然后调用`openAI.chat`方法,传入消息列表来启动聊天。
/// 聊天结果会被打印出来,然后使用`FormatMessage`类格式化回复。
/// 最后,格式化的回复也会被打印出来。
List<Message> message = [
Message(role: 'system', content: 'you are my help ai'),
Message(role: 'user', content: 'I need help with my computer'),
];
MessageData result = await openAI.chat(messages: message);
print(result.message);
// 如果你想打印其他信息:
print(result.model);
chat
方法用于与OpenAI API交互以生成对话响应。它接受各种参数来自定义对话行为。
参数
version
: 指定要使用的OpenAI API版本。默认为’new’。messages
: 聊天中之前的消息列表。每个消息应该是Message
类的实例。prompt
: 开始对话的初始提示。maxTokens
: 生成响应的最大令牌数。默认为100。temperature
: 控制响应的随机性。较高的值导致更大的随机性。默认为0.3。topP
: 通过从最有可能的令牌中采样来控制响应的多样性。默认为1.0。n
: 指定要生成的响应数量。默认为1。frequencyPenalty
: 应用于响应中令牌频率的惩罚。默认为0。logitBias
: 指定令牌的日志偏差字典。logprobs
: 是否包括响应中的日志概率。topLogprobs
: 指定响应中要包括的日志概率数量。presencePenalty
: 应用于响应中令牌的存在性的惩罚。responseFormat
: 指定响应格式。可以是’json’或’text’。seed
: 用于生成随机响应的种子值。stop
: 指定生成令牌的停止条件。stream
: 是否流式传输正在生成的响应。speed
: 控制响应生成的速度。
使用示例
import 'package:openai_package/openai_package.dart';
import 'package:openai_package/src/openai/import/importAi.dart'; // 你必须添加
void main() {
// 初始化OpenAI实例
OpenAI.apiKey = 'your-api-key';
// 定义之前的消息
List<Message> messages = [
Message(role: 'system', content: 'Hello, how can I assist you today?')
];
OpenAI openAi = OpenAI();
// 生成响应
Future<MessageData> response = openAi.chat(
messages: messages,
// for old version prompt: 'I need help with a programming problem.',
maxTokens: 150,
temperature: 0.7,
n: 1,
stream: false,
);
print(response.toString());
}
OpenAI嵌入 🚀
embeddings
方法允许您使用OpenAI嵌入API生成文本嵌入。文本嵌入是捕捉文本语义意义的数值表示。
参数
input
(必需): 您想要生成嵌入的输入文本。encodingFormat
: 输入文本的编码格式。默认为’float’。dimensions
: 输入文本的维度。user
: 与请求关联的用户ID。maxTokens
: 生成响应的最大令牌数。默认为100。temperature
: 控制响应的随机性。较高的值导致更丰富的嵌入。默认为0.3。topP
: 通过从最有可能的令牌中采样来控制响应的多样性。默认为1.0。n
: 指定要生成的嵌入数量。默认为1。
使用
import 'package:openai_package/openai_package.dart';
import 'package:openai_package/src/openai/import/importAi.dart'; // 你必须添加
void main() async {
// 初始化OpenAI实例
OpenAI.apiKey = 'your-api-key';
OpenAI.model = 'your-model';
// 生成嵌入
OpenAIEmbeddings embeddings = await openAi.embeddings(
input: 'Text input for generating embeddings',
encodingFormat: 'float',
dimensions: 512,
user: 'user_id',
maxTokens: 100,
temperature: 0.3,
topP: 1.0,
n: 1,
);
print(embeddings);
}
响应
embeddings
方法的响应是一个字符串,表示为输入文本生成的embeddings
。
{
"embeddings": [
0.123,
0.456,
...
]
}
注意事项
确保在初始化OpenAI
实例时提供您的API密钥。
如果没有提供或无效的apiKey
,您将收到错误消息作为输出。
确保指定的模型受嵌入应用程序支持,否则将抛出错误。
OpenAI图像生成 🖼️
generateImage
方法允许您使用OpenAI图像API生成图像。您可以基于提示生成图像,编辑现有图像,创建图像的变体。
参数
prompt
(必需): 生成或编辑图像的提示。n
(必需): 要生成的图像数量。size
(必需): 要生成的图像大小。edit
: 指定是否执行图像编辑。默认为false
。image
: 编辑图像时的图像文件路径。mask
: 编辑图像时的遮罩文件路径。variations
: 指定是否生成图像变体。默认为false
。response_format
: 所需的响应格式。默认为"url"。style
: 生成图像的风格。默认为"vivid"。
使用
import 'package:openai_package/openai_package.dart';
void main() async {
// 初始化OpenAI实例
OpenAI.apiKey = 'your-api-key';
OpenAI.model = 'your-model';
// 生成图像
OpenAIGenerateImage generatedImage = await openAi.generateImage(
prompt: 'Generate an image of a cat playing with a ball.',
n: 1,
size: '256x256',
edit: false,
variations: false,
response_format: 'url',
style: 'vivid',
);
print(generatedImage);
// 或
print(generatedImage.url);
}
响应
generateImage
方法的响应是一个字符串,表示生成的图像URL或图像数据,取决于指定的响应格式。
{
"url": "https://generated_image_url.com/image.jpg"
}
注意事项
确保在初始化OpenAI
实例时提供您的API密钥。
如果没有提供或无效的apiKey
,您将收到错误消息作为输出。
edit
和variations
参数控制要执行的图像生成操作类型。
image
和mask
参数在执行图像编辑时是必需的。
OpenAI音频转录 🎙️
transcriptions
方法允许您使用OpenAI音频API转录音频文件。您可以转录音频文件的多种格式和语言。
参数
audioUrl
(必需): 要转录的音频文件的URL。response_format
: 响应的格式。默认为"text"。language
: 音频文件的语言(如果有)。prompt
: 转录的可选提示。temperature
: 控制生成文本的随机性。默认为0.3。topP
: 选择下一个令牌的累积概率。默认为1.0。n
: 要生成的完成数量。默认为1。
使用
import 'package:openai_package/openai_package.dart';
void main() async {
// 初始化OpenAI实例
OpenAI.apiKey = 'your-api-key';
OpenAI.model = 'your-model';
// 转录音频
String transcription = await openAi.transcriptions(
audioUrl: 'https://example.com/audio.mp3',
response_format: 'text',
language: 'en',
prompt: 'Transcribe the following audio clip:',
temperature: 0.3,
topP: 1.0,
n: 1,
);
print(transcription);
}
响应
transcriptions
方法的响应是一个字符串,表示转录的文本。
{
"transcription": "The transcribed text will be here."
}
注意事项
确保在初始化OpenAI
实例时提供您的API密钥。
如果没有提供或无效的apiKey
,您将收到错误消息作为输出。
audioUrl
参数应该直接指向音频文件的URL。
支持的音频文件格式包括MP3、MP4、MPEG、MPG、M4A、WAV和WebM。
language
参数是可选的,可用于指定音频文件的语言。
prompt
参数是可选的,可用于为转录提供更多上下文。
OpenAI 文本到语音(TTS) 🎤
speech
方法允许您使用OpenAI文本到语音(TTS)API将文本转换为语音。您可以自定义各种参数,如语音、速度和输出格式。
参数
input
(必需): 要转换为语音的文本。voice
: 用于语音的语音。默认为’alloy’。response_format
: 语音输出的格式。默认为’mp3’。output
: 保存语音的输出文件名。默认为’speech.mp3’。speed
: 语音生成速度。默认为1.0。
支持的模型和声音
TTS应用程序支持的模型和声音如下:
- 模型: “tts-1”, “tts-1-hd”
- 声音: “alloy”, “echo”, “fable”, “onyx”, “nova”, “shimmer”
使用
import 'package:openai_package/openai_package.dart';
void main() async {
// 初始化OpenAI实例
OpenAI.apiKey = 'your-api-key';
OpenAI.model = 'your-model';
// 将文本转换为语音
String result = await openAi.speech(
input: 'Hello, how are you?',
voice: 'alloy',
response_format: 'mp3',
output: 'speech.mp3',
speed: 1.0,
);
print(result); // 文件下载到speech.mp3
}
更多关于Flutter OpenAI集成插件openai_package的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter OpenAI集成插件openai_package的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter应用中使用openai_package
插件来集成OpenAI API的代码案例。这个插件假设已经封装了对OpenAI API的调用,但请注意,实际开发中可能需要根据具体的插件实现进行调整。以下是一个简化的示例,展示了如何初始化插件并使用它来进行API请求。
首先,确保你已经在pubspec.yaml
文件中添加了openai_package
依赖(注意:这里openai_package
是一个假设的包名,实际使用时请替换为真实的包名):
dependencies:
flutter:
sdk: flutter
openai_package: ^x.y.z # 替换为实际的版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter应用中,你可以按照以下步骤使用openai_package
:
- 导入包并初始化:
import 'package:flutter/material.dart';
import 'package:openai_package/openai_package.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter OpenAI Integration'),
),
body: OpenAIExample(),
),
);
}
}
class OpenAIExample extends StatefulWidget {
@override
_OpenAIExampleState createState() => _OpenAIExampleState();
}
class _OpenAIExampleState extends State<OpenAIExample> {
final OpenAI _openAI = OpenAI(apiKey: 'YOUR_OPENAI_API_KEY'); // 替换为你的OpenAI API密钥
String _response = '';
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('OpenAI API Response:'),
Text(_response),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
setState(() {
_response = 'Loading...';
});
String result = await _makeOpenAIRequest();
setState(() {
_response = result;
});
},
child: Text('Fetch from OpenAI'),
),
],
),
);
}
Future<String> _makeOpenAIRequest() async {
try {
// 假设插件提供了一个名为`completion`的方法来进行文本生成
CompletionRequest request = CompletionRequest(
prompt: 'Write a short story about a magical forest.',
maxTokens: 150,
temperature: 0.7,
);
CompletionResponse response = await _openAI.completion(request);
return response.choices.first.text; // 返回生成的文本
} catch (e) {
return 'Error: ${e.message}';
}
}
}
- 定义请求和响应类(这些类可能需要根据实际插件的API进行调整):
class CompletionRequest {
String prompt;
int maxTokens;
double temperature;
CompletionRequest({required this.prompt, required this.maxTokens, required this.temperature});
}
class Choice {
String text;
Choice({required this.text});
}
class CompletionResponse {
List<Choice> choices;
CompletionResponse({required this.choices});
}
class OpenAI {
String apiKey;
OpenAI({required this.apiKey});
// 假设这是插件提供的用于文本生成的方法
Future<CompletionResponse> completion(CompletionRequest request) async {
// 这里应该是实际的网络请求代码,使用http或其他网络库
// 由于这是一个示例,我们直接返回一个模拟的响应
String mockResponseText = '''
{
"choices": [
{
"text": "Once upon a time, in a magical forest far, far away..."
}
]
}
''';
// 解析模拟响应
Map<String, dynamic> mockResponse = jsonDecode(mockResponseText);
List<Map<String, String>> choicesList = mockResponse['choices'] as List<Map<String, String>>;
List<Choice> choices = choicesList.map((choice) => Choice(text: choice['text']!)).toList();
return CompletionResponse(choices: choices);
}
}
注意:上面的OpenAI
类中的completion
方法是一个模拟实现,用于展示如何处理响应。在实际应用中,你需要使用HTTP客户端(如http
包)来发送请求到OpenAI的API端点,并处理实际的JSON响应。
由于openai_package
是一个假设的包名,你可能需要查找一个实际的Flutter插件来与OpenAI API交互,并根据该插件的文档进行相应的调整。上述代码提供了一个基本的框架,展示了如何在Flutter应用中集成和使用这样的插件。