概述
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
- 访问 https://bailian.console.aliyun.com/
- 创建应用,获取API Key
- 选择模型(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 🐝 整理。
扫码添加客服咨询