乐于分享
好东西不私藏

Flutter集成腾讯大模型,让App拥有AI大脑!

Flutter集成腾讯大模型,让App拥有AI大脑!

智能客服、AI助手、内容生成……大模型正在重塑移动应用。你的Flutter App如何快速接入腾讯混元等大模型能力?本文带你30分钟跑通全流程,实现AI对话、智能回复、实时字幕等场景。


一、为什么要在Flutter中集成大模型?

大模型与移动应用结合,正在创造全新的用户体验:

  • 💬 智能对话:App内直接与AI对话,解答用户问题

  • 🎯 个性化推荐:根据用户行为生成精准推荐内容

  • 📝 内容创作:帮助用户写文案、生成摘要、翻译文本

  • 🧠 知识问答:内置专业知识库,随时解答疑问

  • 🔊 实时字幕:将语音实时转为文字并智能处理

腾讯云提供的大模型能力,可以让你的Flutter应用快速拥有这些AI能力。


二、方案选型——哪种适合你?

腾讯云大模型在Flutter端的集成有多种方案,我整理了主流选择:

方案
特点
适用场景
AI实时对话(TRTC方案)
基于实时音视频,低延迟语音对话,支持智能打断
需要语音交互、实时对话的应用

(AI助手、智能客服)
智能客服UIKit
开箱即用的客服聊天界面,支持机器人自动回复
需要标准客服功能的App

,快速上线
机器人消息插件
在IM聊天中集成机器人,支持流式消息
已有IM功能

,需要增加AI助手
直接调用API
调用腾讯云混元大模型API,灵活定制
有开发能力

,需要完全自定义交互

我的推荐:如果做AI语音助手,选TRTC AI实时对话方案;如果做智能客服,选Customer UIKit;如果已有IM聊天,加个AI机器人,选tencent_cloud_chat_robot


三、方案一:TRTC AI实时对话(低延迟语音交互)

这是腾讯云最新推出的AI实时对话方案,基于TRTC SDK,支持极低延迟的语音对话,AI可以实时响应、智能打断。

3.1 前提条件

  1. 开通实时音视频 TRTC 服务

  2. 开通语音转文字服务

  3. 准备LLM应用(可使用腾讯混元或第三方大模型)

  4. (可选)开通TTS服务

⚠️ 注意:AI实时对话调用会产生费用,详情参见计费说明。

3.2 添加依赖

dependencies:  tencent_trtc_cloud: ^2.14.0  # TRTC SDK

3.3 权限配置

Android配置

打开 android/app/src/main/AndroidManifest.xml,添加权限:

<uses-permissionandroid:name="android.permission.INTERNET"/><uses-permissionandroid:name="android.permission.RECORD_AUDIO"/><uses-permissionandroid:name="android.permission.CAMERA"/><uses-permissionandroid:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

iOS配置

打开 ios/Runner/Info.plist,添加权限说明:

<key>NSCameraUsageDescription</key><string>需要相机权限进行视频通话</string><key>NSMicrophoneUsageDescription</key><string>需要麦克风权限进行语音对话</string>

3.4 核心代码实现

1. 初始化TRTC SDK并进入房间

import 'package:tencent_trtc_cloud/tencent_trtc_cloud.dart';class AIRTCService {  late TRTCCloud _trtcCloud;  String _userId = '';  int _roomId = 0;  Future<voidinitAndEnterRoom({    required int sdkAppId,    required String userId,    required String userSig,    required int roomId,  }) async {    _userId = userId;    _roomId = roomId;    // 1. 初始化TRTC    _trtcCloud = await TencentTRTCCloud.sharedInstance();    // 2. 设置回调监听    _trtcCloud.registerListener(onRecvCustomCmdMsg: (userId, cmdId, seq, message) {      _handleCustomMessage(userId, message);    });    // 3. 进入房间    TRTCParams params = TRTCParams(      sdkAppId: sdkAppId,      userId: userId,      userSig: userSig,      roomId: roomId,      role: TRTCRoleType.anchor,    );    await _trtcCloud.enterRoom(params, TRTCAppScene.speechCall);    // 4. 开启麦克风(语音模式,高噪声抑制)    await _trtcCloud.startLocalAudio(TRTCAudioQuality.speech);    print('进入房间成功,开始AI对话');  }  void _handleCustomMessage(String userId, Uint8List message) {    // 处理AI返回的实时字幕和状态    String data = utf8.decode(message);    try {      Map<String, dynamic> jsonData = jsonDecode(data);      if (jsonData['type'] == 10000) {        // 实时字幕        String text = jsonData['payload']['text'];        bool isFinal = jsonData['payload']['end'] == true;        print('${isFinal ? '完整' : '实时'}字幕: $text');      } else if (jsonData['type'] == 10001) {        // AI状态:1聆听中 2思考中 3说话中 4被打断 5已说完        int state = jsonData['payload']['state'];        print('AI状态: $state');      }    } catch (e) {      print('解析消息失败: $e');    }  }  // 发送打断信令  Future<voidsendInterrupt() async {    int cmdId = 0x2;    int timestamp = DateTime.now().millisecondsSinceEpoch;    Map<String, dynamic> payload = {      "type"20001// 打断信令      "sender": _userId,      "receiver": ["user_bot"], // AI机器人ID      "payload": {        "id""interrupt_${_roomId}_$timestamp",        "timestamp": timestamp ~/ 1000,      }    };    String jsonStr = jsonEncode(payload);    Uint8List data = utf8.encode(jsonStr);    await _trtcCloud.sendCustomCmdMsg(cmdId, data, truetrue);    print('发送打断信令');  }  // 离开房间  Future<voidexitRoom() async {    await _trtcCloud.exitRoom();    TencentTRTCCloud.destroySharedInstance();  }}

2. 发起AI对话(服务端调用)

注意:发起AI对话需要在业务后端调用腾讯云API,客户端只需进房即可。这里给出后端调用示例(Node.js):

// 后端代码示例const tencentcloud = require("tencentcloud-sdk-nodejs");const CimClient = tencentcloud.cim.v20190318.Client;const clientConfig = {  credential: {    secretId: "你的SecretId",    secretKey: "你的SecretKey",  },  region: "ap-guangzhou",  profile: {    httpProfile: {      endpoint: "cim.tencentcloudapi.com",    },  },};const client = new CimClient(clientConfig);// 发起AI对话任务async functionstartAIConversation(params{  const { sdkAppId, roomId, userId, aiUserId, llmConfig, ttsConfig } = params;  const res = await client.StartAIConversationTask({    SdkAppId: sdkAppId,    RoomId: roomId.toString(),    TargetUserId: userId, // 需要和客户端进房的UserId一致    AIConversationConfig: JSON.stringify({      LLMConfig: llmConfig,      TTSConfig: ttsConfig,    }),  });  return res;}

⚠️ 重要:AI实时对话要求客户端和服务端进入同一个房间号,且TargetUserId必须是客户端进房的用户ID。

3.5 完整示例:AI语音助手页面

classAIVoiceAssistantPageextendsStatefulWidget{  @override  _AIVoiceAssistantPageState createState() => _AIVoiceAssistantPageState();}class_AIVoiceAssistantPageStateextendsState<AIVoiceAssistantPage{  final AIRTCService _service = AIRTCService();  String _subtitle = '';  String _aiState = '';  bool _isListening = true;  @override  void initState() {    super.initState();    _initAI();  }  Future<void_initAI() async {    // 这里使用测试参数,实际应从服务器获取    await _service.initAndEnterRoom(      sdkAppId1400000000, // 你的SDKAppID      userId'user_${DateTime.now().millisecondsSinceEpoch}',      userSig'你的userSig',      roomId123456,    );  }  @override  Widget build(BuildContext context) {    return Scaffold(      appBarAppBar(titleText('AI语音助手')),      bodyCenter(        childColumn(          mainAxisAlignment: MainAxisAlignment.center,          children: [            Container(              padding: EdgeInsets.all(20),              decorationBoxDecoration(                color: Colors.grey[100],                borderRadius: BorderRadius.circular(12),              ),              childColumn(                children: [                  Text(                    _subtitle.isEmpty ? '点击麦克风开始对话' : _subtitle,                    styleTextStyle(fontSize18),                  ),                  SizedBox(height10),                  Text(                    'AI状态: $_aiState',                    styleTextStyle(color: Colors.grey),                  ),                ],              ),            ),            SizedBox(height30),            FloatingActionButton(              onPressed: () {                _service.sendInterrupt();              },              childIcon(Icons.stop),            ),          ],        ),      ),    );  }  @override  void dispose() {    _service.exitRoom();    super.dispose();  }}

四、方案二:智能客服UIKit(快速集成AI客服)

如果你的场景是标准的用户咨询客服,腾讯云提供了开箱即用的Customer UIKit,内置AI机器人能力。

4.1 添加依赖

dependencies:  tencentcloud_ai_desk_customer: ^1.6.2  # 智能客服UIKit

4.2 环境要求

  • Flutter版本: 3.24 – 3.27

  • 支持模拟器调试及真机运行

⚠️ 注意:如果使用Flutter 3.29,需要先降级至3.24。

4.3 初始化与登录

import 'package:tencentcloud_ai_desk_customer/tencentcloud_ai_desk_customer.dart';class CustomerService {  static Future<voidinit({    required int sdkAppID,    required String userID,    required String userSig,  }) async {    await TencentCloudAIDeskCustomer.init(      sdkAppID: sdkAppID,      userID: userID,      userSig: userSig,      config: TencentCloudCustomerConfig(), // 可选全局配置    );    print('智能客服初始化完成');  }}

4.4 打开客服聊天页

void openCustomerService(BuildContext context) {  TencentCloudAIDeskCustomer.navigate(    context: context,    customerServiceID"@customer_service_account"// 客服号ID  );}

就这么简单! 几行代码就实现了完整的AI客服聊天界面。

4.5 多语言支持

如果套餐包支持多语言,可以指定语言:

import 'package:tencentcloud_ai_desk_customer/tencentcloud_ai_desk_customer.dart';import 'package:tencent_desk_i18n_tool/language_json/strings.g.dart';TencentCloudAIDeskCustomer.navigate(  context: context,  configTencentCloudCustomerConfig(    languageTDeskAppLocale.en// 指定英语  ),);

支持的语言:英语、简体中文、繁体中文、日语、印尼语。


五、方案三:IM机器人插件(在聊天中集成AI)

如果你的App已经集成了腾讯云IM,想给用户增加一个AI聊天助手,可以使用tencent_cloud_chat_robot插件。

5.1 添加依赖

dependencies:  tencent_cloud_chat_robot: ^最新版本

5.2 判断和渲染机器人消息

import 'package:tencent_cloud_chat_robot/tencent_cloud_chat_robot.dart';// 判断消息是否为机器人消息bool isRobot = await TencentCloudChatRobotPlugin.isRobotMessage(message);// 渲染机器人消息(支持流式回复)if (isRobot) {  await TencentCloudChatRobotPlugin.renderRobotMessage(message);}

5.3 后端发送机器人消息格式

机器人消息需要通过服务端发送,格式如下:

{  "chatbotPlugin": 1,  "src": 2,  "isFinished": 1,  // 0表示未结束,1表示已结束  "chunks": ["hello", "this", "is", "a", "robot"]}

支持流式消息,可以分块发送,逐字显示。


六、方案四:直接调用混元大模型API

如果需要完全自定义的AI能力,可以直接调用腾讯云混元大模型的HTTP API。

6.1 获取API密钥

  1. 登录腾讯云控制台

  2. 访问API密钥管理

  3. 创建SecretId和SecretKey

6.2 调用示例

import 'package:http/http.dart' as http;import 'dart:convert';import 'package:crypto/crypto.dart';class HunyuanAPI {  final String secretId;  final String secretKey;  final String endpoint = "hunyuan.tencentcloudapi.com";  HunyuanAPI({required this.secretId, required this.secretKey});  Future<String> chat(String message) async {    // 1. 构建请求参数    final timestamp = (DateTime.now().millisecondsSinceEpoch / 1000).round();    final payload = {      "Action""ChatCompletions",      "Version""2023-09-01",      "Model""hunyuan-lite",      "Messages": [        {          "Role""user",          "Content": message        }      ]    };    // 2. 生成签名(简化示例,实际需完整实现TC3-HMAC-SHA256签名)    // 建议使用官方SDK或参考签名文档    // 3. 发送请求    final response = await http.post(      Uri.parse('https://$endpoint'),      headers: {        'Content-Type''application/json',        'Authorization''TC3-HMAC-SHA256 ...'// 完整签名        'X-TC-Timestamp': timestamp.toString(),        'X-TC-Version''2023-09-01',      },      body: jsonEncode(payload),    );    if (response.statusCode == 200) {      final data = jsonDecode(response.body);      return data['Response']['Choices'][0]['Message']['Content'];    } else {      throw Exception('调用失败: ${response.body}');    }  }}

⚠️ 注意:签名计算较复杂,建议使用腾讯云官方SDK或后端中转。


七、避坑指南

❌ AI实时对话收不到字幕

  • 确认客户端进房成功,且与服务端调用StartAIConversationTaskRoomId一致

  • 检查自定义消息的cmdID是否为1

  • 确认已开启麦克风采集startLocalAudio

❌ 智能客服UIKit初始化失败

  • 检查SDKAppID是否正确

  • 确认已开通智能客服服务

  • 客服号ID通常为@customer_service_account

❌ 编译报错(Flutter版本问题)

  • 如果使用Flutter 3.29,降级至3.24:flutter downgrade 3.24.0

  • Android编译问题:在build.gradle中添加subprojects配置

❌ 机器人消息不显示

  • 确认消息格式正确,包含chatbotPlugin字段

  • 检查isFinished字段,流式消息需要最后一条标记为1

❌ 费用问题

  • AI实时对话按并发和时长计费,默认并发限制100,超限需提工单

  • 智能客服按套餐包计费,具体参考官方文档


八、总结

腾讯云大模型在Flutter端的集成,可以根据场景选择不同方案:

方案
适用场景
核心插件
集成难度
AI实时对话
语音助手、实时对话
TRTC SDK
⭐⭐⭐
智能客服UIKit
标准客服功能
tencentcloud_ai_desk_customer
⭐⭐
IM机器人
聊天中集成AI助手
tencent_cloud_chat_robot
⭐⭐
直接调用API
完全自定义
http + 签名
⭐⭐⭐⭐

我的建议

  • 想做语音对话AI:用TRTC AI实时对话方案

  • 想做App内客服:用智能客服UIKit

  • 已有IM聊天:加个IM机器人插件

  • 需要完全定制:直接调用混元API(建议后端中转)

如果你有新的见解,欢迎在评论区分享交流!

谢谢你读到最后。

若觉得尚可,恳请点赞、在看、转发分享。

山高水长,我们下期再会。

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » Flutter集成腾讯大模型,让App拥有AI大脑!

评论 抢沙发

1 + 7 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮