Flutter谷歌AI集成插件googleai_dart的使用
Flutter谷歌AI集成插件googleai_dart
的使用
简介
googleai_dart
是一个非官方的Dart客户端,用于与Google AI API进行交互。它支持多种功能,包括生成内容、嵌入内容、计算token数量以及获取模型信息等。
特性
- 基于Google AI的OpenAPI规范生成。
- 完全类型安全,并且有详细的文档和测试。
- 支持所有平台。
- 支持自定义基础URL、头部和查询参数(例如HTTP代理)。
- 支持自定义HTTP客户端(例如SOCKS5代理或高级用例)。
使用方法
认证
Google AI API使用API密钥进行认证。你需要访问Google AI Studio仪表盘页面来获取API密钥,并在请求中使用它。
import 'dart:io';
import 'package:googleai_dart/googleai_dart.dart';
final googleaiApiKey = Platform.environment['GOOGLEAI_API_KEY'];
final client = GoogleAIClient(apiKey: googleaiApiKey);
生成内容
文本输入
你可以使用generateContent
方法根据给定的输入消息从模型生成响应。
final res = await client.generateContent(
modelId: 'gemini-pro',
request: const GenerateContentRequest(
contents: [
Content(
parts: [
Part(text: 'Write a story about a magic backpack.'),
],
),
],
generationConfig: GenerationConfig(
temperature: 0.8,
),
),
);
print(res.candidates?.first.content?.parts?.first.text);
// In a quaint little town nestled amidst rolling hills, there lived a...
文本和图像输入
如果输入包含文本和图像,可以使用gemini-pro-vision
模型。
final res = await client.generateContent(
modelId: 'gemini-pro-vision',
request: GenerateContentRequest(
contents: [
Content(
parts: [
const Part(text: 'What is this picture?'),
Part(
inlineData: Blob(
mimeType: 'image/png',
data: base64.encode(
await File('./test/assets/1.png').readAsBytes(),
),
),
),
],
),
],
),
);
print(res.candidates?.first.content?.parts?.first.text);
// The picture shows some scones with blueberries and flowers...
多轮对话(聊天)
你可以使用Gemini构建多轮对话。
final res = await client.generateContent(
modelId: 'gemini-pro',
request: const GenerateContentRequest(
contents: [
Content(
role: 'user',
parts: [
Part(
text: 'Write the first line of a story about a magic backpack.',
),
],
),
Content(
role: 'model',
parts: [
Part(
text:
'In the bustling city of Meadow brook, lived a young girl named Sophie. '
'She was a bright and curious soul with an imaginative mind.',
),
],
),
Content(
role: 'user',
parts: [
Part(
text: 'Can you set it in a quiet village in 1600s France?',
),
],
),
],
),
);
print(res.candidates?.first.content?.parts?.first.text);
// In the heart of a tranquil village nestled amidst the rolling hills of 17th century France...
流式生成内容
你可以通过streamGenerateContent
方法实时处理生成的内容。
final stream = client.streamGenerateContent(
modelId: 'gemini-pro',
request: const GenerateContentRequest(
contents: [
Content(
parts: [
Part(text: 'Write a story about a magic backpack.'),
],
),
],
generationConfig: GenerationConfig(
temperature: 0.8,
),
),
);
await for (final res in stream) {
print(res.candidates?.first.content?.parts?.first.text);
// In a quaint little town nestled amidst rolling hills, there lived a...
}
计算Token数量
当使用长提示时,可能需要先计算Token的数量。
final res = await client.countTokens(
modelId: 'gemini-pro',
request: const CountTokensRequest(
contents: [
Content(
parts: [
Part(
text: 'Write a story about a magic backpack.',
),
],
),
],
),
);
print(res.totalTokens);
// 8
内容嵌入
你可以使用embedding-001
模型将内容转换为嵌入向量。
final res = await client.embedContent(
modelId: 'embedding-001',
request: const EmbedContentRequest(
content: Content(
parts: [
Part(text: 'Write a story about a magic backpack.'),
],
),
),
);
print(res.embedding?.values);
// [0.008624583, -0.030451821, -0.042496547, ...]
模型信息
列出所有模型
你可以使用listModels
方法列出所有可用的模型。
final res = await client.listModels();
print(res.models);
// [Model(name: models/gemini-pro, displayName: Gemini Pro, description: The best model...
获取特定模型信息
你可以使用getModel
方法获取某个模型的详细信息。
final res = await client.getModel(modelId: 'gemini-pro');
print(res);
// Model(name: models/gemini-pro, displayName: Gemini Pro, description: The best model...
示例Demo
以下是一个完整的示例demo,展示了如何使用googleai_dart
插件进行各种操作:
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'dart:platform';
import 'package:googleai_dart/googleai_dart.dart';
Future<void> main() async {
final client = GoogleAIClient(
apiKey: Platform.environment['GOOGLEAI_API_KEY'],
);
// 生成文本输入内容
await _generateContentTextInput(client);
// 生成文本和图像输入内容
await _generateContentTextAndImageInput(client);
// 多轮对话
await _generateContentMultiTurnConversations(client);
// 流式生成内容
await _streamGenerateContentTextInput(client);
// 计算Token数量
await _countTokens(client);
// 内容嵌入
await _embedContent(client);
// 模型操作
await _listModels(client);
await _getModel(client);
client.endSession();
}
Future<void> _generateContentTextInput(final GoogleAIClient client) async {
final res = await client.generateContent(
modelId: 'gemini-pro',
request: const GenerateContentRequest(
contents: [
Content(
parts: [
Part(text: 'Write a story about a magic backpack.'),
],
),
],
generationConfig: GenerationConfig(
temperature: 0.8,
),
),
);
print(res.candidates?.first.content?.parts?.first.text);
}
Future<void> _generateContentTextAndImageInput(
final GoogleAIClient client,
) async {
final res = await client.generateContent(
modelId: 'gemini-pro-vision',
request: GenerateContentRequest(
contents: [
Content(
parts: [
const Part(text: 'What is this picture?'),
Part(
inlineData: Blob(
mimeType: 'image/png',
data: base64.encode(
await File('./test/assets/1.png').readAsBytes(),
),
),
),
],
),
],
),
);
print(res.candidates?.first.content?.parts?.first.text);
}
Future<void> _generateContentMultiTurnConversations(
final GoogleAIClient client,
) async {
final res = await client.generateContent(
modelId: 'gemini-pro',
request: const GenerateContentRequest(
contents: [
Content(
role: 'user',
parts: [
Part(
text: 'Write the first line of a story about a magic backpack.',
),
],
),
Content(
role: 'model',
parts: [
Part(
text:
'In the bustling city of Meadow brook, lived a young girl named Sophie. '
'She was a bright and curious soul with an imaginative mind.',
),
],
),
Content(
role: 'user',
parts: [
Part(
text: 'Can you set it in a quiet village in 1600s France?',
),
],
),
],
),
);
print(res.candidates?.first.content?.parts?.first.text);
}
Future<void> _streamGenerateContentTextInput(
final GoogleAIClient client,
) async {
final stream = client.streamGenerateContent(
modelId: 'gemini-pro',
request: const GenerateContentRequest(
contents: [
Content(
parts: [
Part(text: 'Write a story about a magic backpack.'),
],
),
],
generationConfig: GenerationConfig(
temperature: 0.8,
),
),
);
await for (final res in stream) {
print(res.candidates?.first.content?.parts?.first.text);
}
}
Future<void> _countTokens(final GoogleAIClient client) async {
final res = await client.countTokens(
modelId: 'gemini-pro',
request: const CountTokensRequest(
contents: [
Content(
parts: [
Part(
text: 'Write a story about a magic backpack.',
),
],
),
],
),
);
print(res.totalTokens);
}
Future<void> _embedContent(final GoogleAIClient client) async {
final res = await client.embedContent(
modelId: 'embedding-001',
request: const EmbedContentRequest(
content: Content(
parts: [
Part(text: 'Write a story about a magic backpack.'),
],
),
),
);
print(res.embedding?.values);
}
Future<void> _listModels(final GoogleAIClient client) async {
final res = await client.listModels();
print(res.models);
}
Future<void> _getModel(final GoogleAIClient client) async {
final res = await client.getModel(modelId: 'gemini-pro');
print(res);
}
这个示例展示了如何使用googleai_dart
插件执行各种操作,如生成内容、流式生成内容、计算Token数量、内容嵌入以及获取模型信息等。希望对你有所帮助!
更多关于Flutter谷歌AI集成插件googleai_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter谷歌AI集成插件googleai_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中集成并使用googleai_dart
插件的示例代码。googleai_dart
是一个用于与Google AI服务交互的Dart库,虽然它本身可能不是直接为Flutter设计的,但你可以在Flutter项目中通过平台通道或其他方式调用其Dart API。
请注意,由于googleai_dart
库的具体实现和API可能会随时间变化,以下代码是基于假设和通用概念的示例。实际使用时,请查阅最新的googleai_dart
文档和Flutter集成指南。
1. 添加依赖
首先,你需要在你的pubspec.yaml
文件中添加googleai_dart
依赖(如果它是一个可用的Dart包)。由于googleai_dart
可能不是一个官方的Flutter插件,你可能需要查找正确的包名和版本。
dependencies:
flutter:
sdk: flutter
googleai_dart: ^x.y.z # 替换为实际的版本号
然后运行flutter pub get
来安装依赖。
2. 配置Google AI服务
在使用Google AI服务之前,你需要在Google Cloud Platform上创建一个项目,并启用相应的API(如Vision API、Translation API等)。然后,你需要获取一个API密钥或设置OAuth 2.0认证。
3. 编写Flutter代码
以下是一个假设的Flutter代码示例,用于演示如何集成并使用googleai_dart
库(具体API调用可能有所不同)。
import 'package:flutter/material.dart';
import 'package:googleai_dart/googleai_dart.dart'; // 假设的导入路径
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Google AI Integration'),
),
body: Center(
child: GoogleAiExample(),
),
),
);
}
}
class GoogleAiExample extends StatefulWidget {
@override
_GoogleAiExampleState createState() => _GoogleAiExampleState();
}
class _GoogleAiExampleState extends State<GoogleAiExample> {
String result = '';
void callGoogleAiService() async {
// 假设的API密钥和服务配置
String apiKey = 'YOUR_API_KEY';
String projectId = 'YOUR_PROJECT_ID';
// 初始化Google AI客户端(具体实现取决于googleai_dart库)
// GoogleAiClient client = GoogleAiClient(apiKey: apiKey, projectId: projectId);
// 示例:调用翻译API(具体API调用取决于googleai_dart库的实现)
// TranslationRequest request = TranslationRequest(
// q: 'Hello, world!',
// target: 'es', // 西班牙语
// );
// TranslationResponse response = await client.translate(request);
// setState(() {
// result = response.translatedText;
// });
// 注意:以上代码是伪代码,具体实现需要参考googleai_dart库的文档。
// 由于没有具体的googleai_dart实现细节,这里用一个简单的模拟来展示
setState(() {
result = 'This is a simulated response from Google AI service.';
});
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Calling Google AI Service...'),
ElevatedButton(
onPressed: callGoogleAiService,
child: Text('Call Service'),
),
Text(result),
],
);
}
}
4. 注意事项
- API密钥安全:不要在客户端代码中硬编码API密钥。考虑使用更安全的方法来管理密钥,如Firebase Cloud Functions或后端服务。
- 错误处理:在实际应用中,添加适当的错误处理逻辑以处理网络问题、API限制等问题。
- 平台特定代码:如果
googleai_dart
需要平台特定的代码(如Android或iOS的原生代码),你可能需要设置平台通道。
由于googleai_dart
的具体实现细节和API可能有所不同,建议查阅最新的文档和示例代码来获取准确的集成和使用方法。