App Inventor 2 调用大模型API教程 - 阿里云百练等LLM集成

« 返回首页

概述

App Inventor可以通过Web组件的HTTP请求调用各种大模型API,实现AI对话、文本生成等功能。

已有文档api_communication.md 介绍了Web组件基本用法。本文聚焦大模型API调用。

支持的大模型API

平台 API格式 文档
阿里云百练 OpenAI兼容 help.aliyun.com
DeepSeek OpenAI兼容 platform.deepseek.com
百度文心 自有格式 cloud.baidu.com
Google Gemini Google格式 ai.google.dev
OpenAI OpenAI platform.openai.com

调用阿里云百练

获取API Key

  1. 访问 https://bailian.console.aliyun.com/
  2. 创建应用,获取API Key
  3. 选择模型(qwen-plus, qwen-max等)

积木块代码

设 API_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions"
设 API_KEY = "sk-your-api-key"

当 按钮_发送.被点击
  设 用户消息 = 输入框_问题.文本
  设 请求体 = "{""model"":""qwen-plus"",""messages"":[{""role"":""user"",""content"":""" & 调用 Web1.网址编码(用户消息) & """}]}"
  
  设 Web_大模型.请求头 = [
    "Content-Type: application/json",
    "Authorization: Bearer " & API_KEY
  ]
  调用 Web_大模型.执行Post文本请求(API_URL, 请求体, "UTF-8")
  标签_状态.文本 = "正在思考..."

当 Web_大模型.收到文本(网址, 响应码, 响应类型, 响应内容)
  如果 响应码 = 200
    设 响应数据 = 调用 文本.从JSON解析(响应内容)
    设 选择列表 = 从字典 响应数据 获取 "choices"
    设 第一个选择 = 列表第1项(选择列表)
    设 消息 = 从字典 第一个选择 获取 "message"
    设 回复内容 = 从字典 消息 获取 "content"
    标签_回复.文本 = 回复内容
  否则
    标签_状态.文本 = "❌ 请求失败:" & 响应码

多轮对话

设 对话历史 = 创建空列表

当 按钮_发送.被点击
  设 用户消息 = 输入框_问题.文本
  
  ' 添加用户消息到历史
  设 对话历史 = 添加列表项(对话历史, 创建字典("role" → "user", "content" → 用户消息))
  
  ' 构建请求体
  设 消息JSON = 调用 列表转消息JSON(对话历史)
  设 请求体 = "{""model"":""qwen-plus"",""messages"":" & 消息JSON & "}"
  
  设 Web_大模型.请求头 = [
    "Content-Type: application/json",
    "Authorization: Bearer " & API_KEY
  ]
  调用 Web_大模型.执行Post文本请求(API_URL, 请求体, "UTF-8")

当 Web_大模型.收到文本(网址, 响应码, 响应类型, 响应内容)
  如果 响应码 = 200
    设 响应数据 = 调用 文本.从JSON解析(响应内容)
    设 选择列表 = 从字典 响应数据 获取 "choices"
   设 回复内容 = 从字典 从字典 列表第1项(选择列表) 获取 "message" 获取 "content"
    
    ' 添加助手回复到历史
    设 对话历史 = 添加列表项(对话历史, 创建字典("role" → "assistant", "content" → 回复内容))
    
    标签_回复.文本 = 回复内容

调用DeepSeek

DeepSeek使用OpenAI兼容格式,只需更换URL和Key:

设 API_URL = "https://api.deepseek.com/v1/chat/completions"
设 API_KEY = "sk-your-deepseek-key"
' 请求格式与阿里云百练完全相同,只需改model为 "deepseek-chat"

使用LLMAI2Ext扩展

已有 extensions/LLMAI2Ext.md,直接调用大模型更方便:

当 Screen1.初始化
  设 LLMAI2Ext1.API地址 = "https://dashscope.aliyuncs.com/compatible-mode/v1"
  设 LLMAI2Ext1.API密钥 = "sk-your-key"
  设 LLMAI2Ext1.模型 = "qwen-plus"

当 按钮_发送.被点击
  调用 LLMAI2Ext1.对话(输入框_问题.文本)

当 LLMAI2Ext1.收到回复(回复)
  标签_回复.文本 = 回复

常见问题

Q1: 返回401 Unauthorized?

API Key不正确。检查Key是否有效,是否有过期或配额限制。

Q2: 返回429 Too Many Requests?

请求频率过高。增加请求间隔,或升级API套餐。

Q3: 回复内容是乱码?

确保请求和响应都使用UTF-8编码。

Q4: 如何保护API Key不被反编译?

⚠️ App Inventor编译的APK可以被反编译,API Key会暴露。解决方案:

  • 使用自己的中转服务器代理API请求
  • 设置API Key的使用限制(IP白名单、配额限制)
  • 不要在App中直接存放重要的API Key

总结

方案 难度 安全性 推荐度
Web组件直接调用 ⭐⭐ ❌ Key暴露 ⭐⭐⭐
中转服务器 ⭐⭐⭐ ✅ Key安全 ⭐⭐⭐⭐
LLMAI2Ext扩展 ❌ Key暴露 ⭐⭐⭐⭐

版权声明:MIT App Inventor 官方文档采用 CC BY-SA 4.0 授权,本文档由 ai2claw 🐝 整理。

文档反馈