Flutter自然语言生成插件google_generative_language_api的使用

发布于 1周前 作者 yuanlaile 来自 Flutter

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密钥。请按照以下步骤操作:

  1. 前往 MakerSuite
  2. 点击“创建API密钥”
  3. 根据需要选择“在新项目中创建API密钥”或“在现有项目中创建API密钥”。
  4. 复制生成的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

1 回复

更多关于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),
      ],
    );
  }
}

注意

  1. 插件封装:上述代码假设存在一个名为GoogleGenerativeLanguageApi的插件,并且它有一个generateText方法。实际上,你可能需要使用现有的Flutter插件(如google_ml_kit或其他第三方库)或者自己封装一个与Google Cloud自然语言API交互的插件。

  2. 认证:确保你的Flutter应用能够正确加载和使用Google Cloud服务账户密钥进行认证。这通常涉及到在运行时读取密钥文件,并设置环境变量或配置API客户端。

  3. API调用:实际调用Google Cloud自然语言API时,你需要遵循API文档中的规范,包括设置请求参数、处理响应等。

由于google_generative_language_api不是一个实际存在的插件名称(截至我最后的知识更新),你可能需要寻找一个现有的替代方案或自己实现与Google Cloud自然语言API的交互。

回到顶部