Flutter人工智能处理插件gemini_ai的使用

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

Flutter人工智能处理插件gemini_ai的使用

Gemini AI Flutter插件为Flutter开发者提供了一个集成Gemini AI功能的便捷方式,它利用了原生的Android和iOS库。以下是该插件的基本使用方法及示例代码。

安装

首先,在pubspec.yaml文件中添加依赖:

dependencies:
  gemini_ai: ^latest_version

然后运行flutter pub get来安装依赖。

初始化配置

Generative Model

创建一个生成模型实例:

import 'package:gemini_ai/model/generative_model.dart';
import 'package:gemini_ai/model/generation_config.dart';
import 'package:gemini_ai/model/safety_setting.dart';
import 'package:gemini_ai/enum/block_threshold.dart';
import 'package:gemini_ai/enum/harm_category.dart';

final GenerativeModel generativeModel = GenerativeModel(
  modelName: "gemini-pro",
  apiKey: "YOUR_API_KEY_HERE",
  generationConfig: _generationConfig,
  safetySettings: _safetySettings,
);

final GenerationConfig _generationConfig = GenerationConfig(
  temperature: 0.9,
  topK: 1,
  topP: 1,
  maxOutputTokens: 2048,
);

final List<SafetySetting> _safetySettings = [
  SafetySetting(
    HarmCategory.harassment,
    BlockThreshold.mediumAndAbove,
  ),
  SafetySetting(
    HarmCategory.hateSpeech,
    BlockThreshold.mediumAndAbove,
  ),
  SafetySetting(
    HarmCategory.sexuallyExplicit,
    BlockThreshold.mediumAndAbove,
  ),
  SafetySetting(
    HarmCategory.dangerousContent,
    BlockThreshold.mediumAndAbove,
  ),
];

生成内容

调用generateContent方法生成响应:

import 'package:gemini_ai/gemini_ai.dart';

final GeminiAi _gemini = GeminiAi();

void generateContent() async {
  String? content = await _gemini.generateContent(
    generativeModel,
    "Your message to Gemini",
  );
  print(content);
}

多模态输入(文本+图片)

如果你需要同时处理文本和图片,可以使用gemini-pro-vision模型:

final GenerativeModel generativeModelVision = GenerativeModel(
  modelName: "gemini-pro-vision",
  apiKey: "YOUR_API_KEY_HERE",
  generationConfig: _generationConfig,
  safetySettings: _safetySettings,
);

String? contentWithImages = await _gemini.generateContent(
  generativeModelVision,
  "What's different between these pictures?",
  images: [imageFile1, imageFile2],
);

聊天功能

构建多轮对话时,使用startChat方法:

String? chatResponse = await _gemini.startChat(
  generativeModel,
  "How many paws are in my house?",
  history: [
    ChatMessage(Role.user, ["Hello, I have 2 dogs in my house."]),
    ChatMessage(Role.model, ["Great to meet you. What would you like to know?"]),
  ],
);

流式响应

为了获得更快的交互体验,可以使用流式API:

_gemini.generateContentStream(
  generativeModel,
  _inputController.text.trim(),
).listen((content) {
  print(content);
});

完整示例Demo

以下是一个完整的Flutter应用示例,展示了如何集成Gemini AI插件进行简单的文本生成:

import 'package:flutter/material.dart';
import 'package:gemini_ai/gemini_ai.dart';
import 'package:gemini_ai/enum/block_threshold.dart';
import 'package:gemini_ai/enum/harm_category.dart';
import 'package:gemini_ai/model/generation_config.dart';
import 'package:gemini_ai/model/generative_model.dart';
import 'package:gemini_ai/model/safety_setting.dart';

class GeminiConfig {
  static final GenerativeModel generativeModel = GenerativeModel(
    modelName: "gemini-pro",
    apiKey: "YOUR_API_KEY_HERE",
    generationConfig: _generationConfig,
    safetySettings: _safetySettings,
  );

  static final GenerationConfig _generationConfig = GenerationConfig(
    temperature: 0.9,
    topK: 1,
    topP: 1,
    maxOutputTokens: 2048,
  );

  static final List<SafetySetting> _safetySettings = [
    SafetySetting(
      HarmCategory.harassment,
      BlockThreshold.mediumAndAbove,
    ),
    SafetySetting(
      HarmCategory.hateSpeech,
      BlockThreshold.mediumAndAbove,
    ),
    SafetySetting(
      HarmCategory.sexuallyExplicit,
      BlockThreshold.mediumAndAbove,
    ),
    SafetySetting(
      HarmCategory.dangerousContent,
      BlockThreshold.mediumAndAbove,
    ),
  ];
}

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: HomePage(),
    );
  }
}

enum _State { idle, loading }

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  [@override](/user/override)
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final TextEditingController _inputController = TextEditingController();
  final GeminiAi _gemini = GeminiAi();
  String _content = "";
  _State _state = _State.idle;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Gemini Demo"),
      ),
      body: SafeArea(
        child: _buildBody(),
      ),
    );
  }

  Widget _buildBody() {
    return Column(
      children: [
        Expanded(
          child: _state == _State.loading
              ? const Center(child: CircularProgressIndicator())
              : Padding(
                  padding: const EdgeInsets.all(16.0),
                  child: Text(_content),
                ),
        ),
        Row(
          children: [
            Expanded(
              child: Padding(
                padding: const EdgeInsets.all(8),
                child: TextField(
                  controller: _inputController,
                  decoration: InputDecoration(
                    labelText: "Ask to Gemini...",
                    border: OutlineInputBorder(
                      borderRadius: BorderRadius.circular(12),
                    ),
                  ),
                ),
              ),
            ),
            IconButton(
              icon: const Icon(Icons.send),
              onPressed: _generateContent,
            ),
          ],
        ),
      ],
    );
  }

  void _generateContent() async {
    setState(() {
      _state = _State.loading;
    });
    String? content = await _gemini.generateContent(
      GeminiConfig.generativeModel,
      _inputController.text.trim(),
    );
    if (content != null) {
      setState(() {
        _content = content;
        _state = _State.idle;
      });
    }
  }
}

更多关于Flutter人工智能处理插件gemini_ai的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter人工智能处理插件gemini_ai的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用gemini_ai插件进行人工智能处理的示例代码。gemini_ai是一个假想的插件名称,用于说明目的,因为实际上可能没有直接名为gemini_ai的官方Flutter插件。不过,这个示例将展示如何在Flutter中集成和使用一个假想的人工智能处理插件。

首先,确保你已经在pubspec.yaml文件中添加了gemini_ai插件的依赖(请注意,这里gemini_ai是虚构的,你需要替换为实际存在的AI插件名称):

dependencies:
  flutter:
    sdk: flutter
  gemini_ai: ^0.1.0  # 假设的版本号,实际使用时请替换为真实版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中创建一个使用gemini_ai插件的示例页面。假设这个插件提供了一个analyzeText方法用于文本分析。

import 'package:flutter/material.dart';
import 'package:gemini_ai/gemini_ai.dart';  // 导入假想的gemini_ai插件

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Gemini AI Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: AnalyzeTextScreen(),
    );
  }
}

class AnalyzeTextScreen extends StatefulWidget {
  @override
  _AnalyzeTextScreenState createState() => _AnalyzeTextScreenState();
}

class _AnalyzeTextScreenState extends State<AnalyzeTextScreen> {
  final TextEditingController _controller = TextEditingController();
  String _result = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Gemini AI Text Analysis'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            TextField(
              controller: _controller,
              decoration: InputDecoration(
                labelText: 'Enter text to analyze',
              ),
              maxLines: 5,
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                setState(() {
                  _result = 'Analyzing...';
                });
                try {
                  // 假设gemini_ai插件提供了一个analyzeText方法
                  var analysis = await GeminiAi.analyzeText(_controller.text);
                  setState(() {
                    _result = 'Analysis: ${analysis.result}';  // 假设analysis对象有一个result属性
                  });
                } catch (e) {
                  setState(() {
                    _result = 'Error: ${e.message}';
                  });
                }
              },
              child: Text('Analyze Text'),
            ),
            SizedBox(height: 20),
            Text(_result, style: TextStyle(fontSize: 18)),
          ],
        ),
      ),
    );
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,它有一个文本输入框和一个按钮。用户可以在文本输入框中输入文本,然后点击按钮来触发文本分析。我们假设GeminiAi类有一个静态方法analyzeText,它接受一个字符串参数并返回一个包含分析结果的对象。

请注意,由于gemini_ai是一个假想的插件,上述代码中的GeminiAi.analyzeText方法和返回的对象结构都是虚构的。在实际使用中,你需要参考实际AI插件的文档来了解如何调用其方法和处理返回结果。

此外,确保在实际项目中处理错误和异常情况,并根据需要优化用户体验。

回到顶部