Flutter自然语言生成插件google_generative_language_api的使用
Flutter自然语言生成插件 google_generative_language_api
的使用
Generative Language API (PaLM)
这是一个Dart包,提供了对Generative Language API的便捷访问。它允许你与API交互,生成消息、生成文本、嵌入文本、检索模型、列出可用模型以及计算消息令牌数。
该包是一个第三方包装器,围绕REST API构建,不是官方的Google包。尽管如此,我已尽力使该包尽可能易于使用,并将模型和文档适配为Dart。如果你遇到任何差异、问题或有建议,请在GitHub上提交问题。
PaLM API允许开发者使用PaLM模型构建生成式AI应用程序。大型语言模型(LLMs)是一种强大的、多用途的机器学习模型,能够通过一系列提示使计算机理解并生成自然语言。
PaLM API基于Google的新一代LLM,PaLM。它在多种任务中表现出色,如代码生成、推理和写作。你可以使用PaLM API构建用于内容生成、对话代理、摘要和分类系统的生成式AI应用程序。
更多信息请参阅 Generative Language API 文档。
特性
- 使用指定的模型生成消息。
- 使用指定的模型生成文本。
- 使用指定的模型嵌入文本。
- 检索特定模型的详细信息。
- 列出可用模型,支持分页。
- 计算消息中的令牌数。
入门
在使用此包之前,你需要获取Generative Language API的API密钥。请按照以下步骤操作:
- 前往 MakerSuite
- 点击“创建API密钥”
- 根据需要选择“在新项目中创建API密钥”或“在现有项目中创建API密钥”。
- 复制生成的API密钥并保存到安全的地方。
- 请勿与任何人共享你的API密钥,也请勿将其提交到公共仓库。
- 使用API密钥时请注意安全,并遵循最佳实践。
获取API密钥后,可以通过在 pubspec.yaml
文件中添加包来安装它:
dependencies:
google_generative_language_api: ^latest
然后在终端中运行 flutter pub get
。
使用方法
在Dart文件中导入包:
import 'package:google_generative_language_api/google_generative_language_api.dart';
你可以使用包提供的各种方法,例如:
获取模型详细信息
void main() async {
final Model model = await GenerativeLanguageAPI.getModel(
modelName: 'models/chat-bison-001',
apiKey: 'PALM_API_KEY',
);
print('Model Name: ${model.name}');
print('Description: ${model.description}');
// 打印其他相关的模型详细信息
}
列出所有可用模型
void main() async {
final ListModelResponse response =
await GenerativeLanguageAPI.listModels(apiKey: 'PALM_API_KEY');
print('Models:');
for (final Model model in response.models) {
print('Name: ${model.name}');
print('Description: ${model.description}');
// 打印其他相关的模型详细信息
}
if (response.nextPageToken != null) {
print('Next Page Token: ${response.nextPageToken}');
}
}
生成消息
void main() async {
const request = GenerateMessageRequest(
prompt: MessagePrompt(
messages: [
Message(author: '1', content: 'hi'),
],
),
);
final GeneratedMessage generatedMessage =
await GenerativeLanguageAPI.generateMessage(
modelName: 'models/chat-bison-001',
request: request,
apiKey: 'PALM_API_KEY',
);
print(generatedMessage.messages.map((message) => message.content).join('\n'));
print(generatedMessage.candidates.map((message) => message.content).join('\n'));
}
生成文本
void main() async {
const request = GenerateTextRequest(
prompt: TextPrompt(text: 'Write a story about a magic backpack.'),
temperature: 1.0,
candidateCount: 2,
);
final GeneratedText text = await GenerativeLanguageAPI.generateText(
modelName: 'models/text-bison-001',
request: request,
apiKey: 'PALM_API_KEY',
);
print(text.candidates.map((candidate) => candidate.output).join('\n'));
}
嵌入文本
void main() async {
const request = EmbedTextRequest(text: 'say something nice!');
final EmbeddedText embed = await GenerativeLanguageAPI.embedText(
modelName: 'models/embedding-gecko-001',
request: request,
apiKey: 'PALM_API_KEY',
);
print(embed.embedding.values.join('\n'));
}
计算消息中的令牌数
void main() async {
final int tokenCount = await GenerativeLanguageAPI.countMessageTokens(
modelName: 'models/chat-bison-001',
request: CountMessageTokensRequest(prompt: MessagePrompt(messages: [Message(author: '1', content: 'hi')])),
apiKey: 'PALM_API_KEY',
);
print('Token Count: $tokenCount');
}
额外信息
更多详细信息,请参阅 [Generative Language API 文档]。此包仅是REST API的第三方包装器。
如果遇到任何问题或有建议,请在GitHub上提交问题。
社交媒体
示例代码
以下是一个完整的示例代码,展示了如何使用 google_generative_language_api
包:
import 'dart:convert';
import 'package:dotenv/dotenv.dart';
import 'package:google_generative_language_api/google_generative_language_api.dart';
/// API密钥存储在本地的 .env 文件中。如果你想运行此示例,请创建一个 .env 文件或替换此apiKey为你自己的。
///
/// 请勿公开分享你的API密钥。
/// .env 文件应包含如下行:
///
/// API_KEY=<PALM_API_KEY>
late final String apiKey;
void main() async {
final DotEnv env = DotEnv(includePlatformEnvironment: true)..load();
apiKey = env['API_KEY']!;
const String chatModel = 'models/chat-bison-001';
const String textModel = 'models/text-bison-001';
const String embedModel = 'models/embedding-gecko-001';
// 获取模型详细信息。
final Model model = await GenerativeLanguageAPI.getModel(
modelName: chatModel,
apiKey: apiKey,
);
print('Model Name: ${model.name}');
print('Description: ${model.description}');
// 打印其他相关的模型详细信息
// 列出API密钥可用的所有模型。
final ListModelResponse listModelResponse =
await GenerativeLanguageAPI.listModels(
pageSize: 50,
pageToken: null,
apiKey: apiKey,
);
print('Models:');
for (final Model model in listModelResponse.models) {
print('Name: ${model.name}');
print('Description: ${model.description}');
// 打印其他相关的模型详细信息
}
if (listModelResponse.nextPageToken != null) {
print('Next Page Token: ${listModelResponse.nextPageToken}');
}
// 生成消息。
const messagePrompt = MessagePrompt(
messages: [
Message(author: '1', content: 'hi'),
],
);
const messageRequest = GenerateMessageRequest(
prompt: messagePrompt,
);
final GeneratedMessage messageResponse =
await GenerativeLanguageAPI.generateMessage(
modelName: chatModel,
request: messageRequest,
apiKey: apiKey,
);
print(const JsonEncoder.withIndent(' ').convert(messageResponse));
// 计算消息中的令牌数。
final int tokenCount = await GenerativeLanguageAPI.countMessageTokens(
modelName: chatModel,
request: const CountMessageTokensRequest(prompt: messagePrompt),
apiKey: apiKey,
);
print('Token Count: $tokenCount');
// 生成文本。
const textRequest = GenerateTextRequest(
prompt: TextPrompt(text: 'Write a story about a magic backpack.'),
temperature: 1.0,
candidateCount: 2,
);
final response = await GenerativeLanguageAPI.generateText(
modelName: textModel,
request: textRequest,
apiKey: apiKey,
);
print(const JsonEncoder.withIndent(' ').convert(response));
// 嵌入文本。
const embedRequest = EmbedTextRequest(text: 'say something nice!');
final embedResponse = await GenerativeLanguageAPI.embedText(
modelName: embedModel,
request: embedRequest,
apiKey: apiKey,
);
print(const JsonEncoder.withIndent(' ').convert(embedResponse));
}
希望这些信息对你有所帮助!如果有任何问题或建议,请随时联系我。
更多关于Flutter自然语言生成插件google_generative_language_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter自然语言生成插件google_generative_language_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用google_generative_language_api
插件进行自然语言生成的代码示例。请注意,由于这是一个假设性的插件名称(因为Google可能还没有一个直接名为google_generative_language_api
的官方Flutter插件),以下代码将基于一般Flutter插件的使用方法和Google Cloud的自然语言生成API的概念进行构建。
首先,你需要确保你的Flutter项目已经配置好并连接到Google Cloud。这通常包括设置Google Cloud项目、启用相关的API(如自然语言API)、创建服务账户并下载JSON密钥文件。
1. 添加依赖
在pubspec.yaml
文件中添加对假设的google_generative_language_api
插件的依赖(实际上,你可能需要使用一个现有的类似插件或自己封装一个):
dependencies:
flutter:
sdk: flutter
google_generative_language_api: ^x.y.z # 假设版本号
2. 配置Google Cloud
将你的Google Cloud服务账户JSON密钥文件放置在项目的合适位置(例如android/app/
目录下),并在android/app/build.gradle
中配置它:
android {
...
defaultConfig {
...
buildConfigField "String", "GOOGLE_APPLICATION_CREDENTIALS", "\"@string/google_application_credentials\""
}
...
}
然后在android/app/src/main/res/values/strings.xml
中添加:
<resources>
<string name="google_application_credentials">@raw/your_service_account_key.json</string>
</resources>
对于iOS,你可能需要在Info.plist中添加一些配置,或者将密钥文件直接嵌入到应用中(不推荐,出于安全考虑)。
3. 使用插件
在你的Dart代码中,你可以这样使用插件:
import 'package:flutter/material.dart';
import 'package:google_generative_language_api/google_generative_language_api.dart'; // 假设导入路径
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Google Generative Language API Example'),
),
body: Center(
child: GenerateTextButton(),
),
),
);
}
}
class GenerateTextButton extends StatefulWidget {
@override
_GenerateTextButtonState createState() => _GenerateTextButtonState();
}
class _GenerateTextButtonState extends State<GenerateTextButton> {
String generatedText = '';
void _generateText() async {
try {
// 假设插件提供了一个名为generateText的方法
String prompt = "Once upon a time";
var response = await GoogleGenerativeLanguageApi.generateText(prompt: prompt);
setState(() {
generatedText = response.generatedText;
});
} catch (e) {
print("Error generating text: $e");
}
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: _generateText,
child: Text('Generate Text'),
),
Text(generatedText),
],
);
}
}
注意
-
插件封装:上述代码假设存在一个名为
GoogleGenerativeLanguageApi
的插件,并且它有一个generateText
方法。实际上,你可能需要使用现有的Flutter插件(如google_ml_kit
或其他第三方库)或者自己封装一个与Google Cloud自然语言API交互的插件。 -
认证:确保你的Flutter应用能够正确加载和使用Google Cloud服务账户密钥进行认证。这通常涉及到在运行时读取密钥文件,并设置环境变量或配置API客户端。
-
API调用:实际调用Google Cloud自然语言API时,你需要遵循API文档中的规范,包括设置请求参数、处理响应等。
由于google_generative_language_api
不是一个实际存在的插件名称(截至我最后的知识更新),你可能需要寻找一个现有的替代方案或自己实现与Google Cloud自然语言API的交互。