Flutter OpenAI接口集成插件openai_dart的使用
Flutter OpenAI接口集成插件openai_dart的使用
简介
openai_dart
是一个用于与OpenAI API交互的非官方Dart客户端。它支持所有平台,并且是类型安全、文档齐全和经过测试的。此外,它还支持自定义HTTP客户端、代理设置以及Azure OpenAI API的部分功能。
功能特性
- 完全类型安全:所有API调用都是类型安全的。
- 多平台支持:适用于Flutter Web、移动端和桌面端。
- 认证支持:支持组织级别的认证。
- 自定义配置:支持自定义基础URL、头部信息和查询参数。
- 兼容其他API:可以用于消费与OpenAI API兼容的其他服务。
使用方法
认证
首先需要通过API Key进行认证。请确保您的API Key保存在环境变量中或安全的地方,不要将其暴露在客户端代码中。
final openaiApiKey = Platform.environment['OPENAI_API_KEY'];
final client = OpenAIClient(apiKey: openaiApiKey);
如果您属于多个组织,还可以指定特定的组织ID:
final client = OpenAIClient(
apiKey: openaiApiKey,
organization: 'org-dtDDtkEGoFccn5xaP5W1p3Rr',
);
示例Demo
聊天完成 (Chat Completions)
创建一个简单的聊天对话:
Future<void> _chatCompletions(final OpenAIClient client) async {
final res = await client.createChatCompletion(
request: const CreateChatCompletionRequest(
model: ChatCompletionModel.modelId('gpt-4'),
messages: [
ChatCompletionMessage.system(
content: 'You are a helpful assistant.',
),
ChatCompletionMessage.user(
content: ChatCompletionUserMessageContent.string('Hello!'),
),
],
temperature: 0,
),
);
print(res.choices.first.message.content);
}
文本补全 (Completions)
生成一段文本补全:
Future<void> _completions(final OpenAIClient client) async {
final res = await client.createCompletion(
request: const CreateCompletionRequest(
model: CompletionModel.modelId('gpt-3.5-turbo-instruct'),
prompt: CompletionPrompt.string('Say this is a test'),
maxTokens: 7,
temperature: 0,
),
);
print(res.choices.first.text);
}
词向量 (Embeddings)
获取输入文本的词向量表示:
Future<void> _embeddings(final OpenAIClient client) async {
final res = await client.createEmbedding(
request: const CreateEmbeddingRequest(
model: EmbeddingModel.modelId('text-embedding-3-small'),
input: EmbeddingInput.string('The food was delicious and the waiter...'),
),
);
print(res.data.first.embeddingVector);
}
细调模型 (Fine-Tuning)
列出所有的细调任务:
Future<void> _fineTuning(final OpenAIClient client) async {
final res = await client.listPaginatedFineTuningJobs();
print(res.data.first.id);
}
图像生成 (Images)
根据提示生成图像:
Future<void> _images(final OpenAIClient client) async {
final res = await client.createImage(
request: const CreateImageRequest(
model: CreateImageRequestModel.model(ImageModels.dallE3),
prompt: 'A cute baby sea otter',
quality: ImageQuality.hd,
size: ImageSize.v1024x1792,
style: ImageStyle.natural,
),
);
print(res.data.first.url);
}
模型管理 (Models)
列出所有可用的模型:
Future<void> _models(final OpenAIClient client) async {
final res1 = await client.listModels();
print(res1.data.first.id);
final res2 = await client.retrieveModel(model: 'gpt-4');
print(res2.ownedBy);
}
内容审核 (Moderations)
检查文本是否包含有害内容:
Future<void> _moderations(final OpenAIClient client) async {
final res = await client.createModeration(
request: const CreateModerationRequest(
model: ModerationModel.model(ModerationModels.omniModerationLatest),
input: ModerationInput.string('I want to kill them.'),
),
);
print(res.results.first.categories.violence);
print(res.results.first.categoryScores.violence);
}
高级用法
自定义HTTP客户端
您可以提供自己的HTTP客户端实现以进行更深入的定制:
final client = OpenAIClient(
apiKey: 'OPENAI_API_KEY',
client: MyHttpClient(),
);
使用代理
如果您需要通过代理服务器访问API,可以通过以下方式设置:
-
HTTP代理:
final client = OpenAIClient( baseUrl: 'https://my-proxy.com', headers: { 'x-my-proxy-header': 'value', }, );
-
SOCKS5代理:
使用
socks5_proxy
包来配置SOCKS5代理:final baseHttpClient = HttpClient(); SocksTCPClient.assignToHttpClient(baseHttpClient, [ ProxySettings(InternetAddress.loopbackIPv4, 1080), ]); final httpClient = IOClient(baseClient); final client = OpenAIClient( client: httpClient, );
总结
openai_dart
提供了一个强大而灵活的方式来集成OpenAI API到您的Flutter应用中。无论是简单的聊天对话还是复杂的模型训练和部署,这个库都能满足您的需求。希望上述示例能够帮助您快速上手并充分利用其功能。
如果有任何问题或需要进一步的帮助,请参考官方文档或加入社区讨论。
更多关于Flutter OpenAI接口集成插件openai_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter OpenAI接口集成插件openai_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中集成并使用openai_dart
插件来与OpenAI接口进行交互的代码示例。这个示例展示了如何使用OpenAI的API进行文本生成。
首先,确保你已经在pubspec.yaml
文件中添加了openai_dart
依赖:
dependencies:
flutter:
sdk: flutter
openai_dart: ^最新版本号 # 替换为实际可用的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你需要创建一个OpenAI API密钥(如果你还没有的话),可以在OpenAI的网站上获取。请确保不要将这个密钥硬编码到你的应用程序中,最好是使用环境变量或安全的密钥管理服务。
以下是一个完整的Flutter应用示例,展示了如何使用openai_dart
进行文本生成:
import 'package:flutter/material.dart';
import 'package:openai_dart/openai_dart.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter OpenAI Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final OpenAI openAI = OpenAI(apiKey: 'YOUR_OPENAI_API_KEY'); // 请替换为你的API密钥
String generatedText = '';
Future<void> generateText() async {
try {
var response = await openAI.createCompletion(
engine: 'davinci',
prompt: 'Once upon a time',
maxTokens: 150,
temperature: 0.7,
);
setState(() {
generatedText = response.data!.choices!.first.text;
});
} catch (e) {
print('Error: $e');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter OpenAI Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Generated Text:',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 20),
Expanded(
child: Text(
generatedText,
style: TextStyle(fontSize: 18),
maxLines: null, // 允许文本换行
),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: generateText,
child: Text('Generate Text'),
),
],
),
),
);
}
}
在这个示例中:
- 我们创建了一个
OpenAI
实例,并传入了API密钥。 - 使用
createCompletion
方法生成文本。这里我们指定了engine
为davinci
,prompt
为"Once upon a time",并设置了maxTokens
和temperature
参数。 - 当点击按钮时,
generateText
方法会被调用,生成的文本会显示在界面上。
请确保将YOUR_OPENAI_API_KEY
替换为你自己的OpenAI API密钥。
注意:在实际应用中,处理API密钥时应采取安全措施,避免直接在代码中硬编码密钥。你可以使用环境变量、Flutter的dotenv
包或其他安全的密钥管理服务。