更新日志
- v2.1
- DeepSeek 支持图片识别(视觉):新增
ChatWithImage/ChatWithImageUrl方法。需先把ModelName设为官方视觉模型deepseek-v4-flash-vision-exp(deepseek-v4-flash/deepseek-v4-pro是纯文本模型,传图会被拒绝)。图片支持 JPEG/PNG/GIF/WebP;不支持视频。
- DeepSeek 支持图片识别(视觉):新增
- v2.0
- DeepSeek 升级 V4 模型,新增思考模式开关(
ThinkingEnabled)和思考强度控制(ReasoningEffort)。 - 模型名称更新:
deepseek-v4-flash(快速模型)、deepseek-v4-pro(深度思考模型);旧名deepseek-chat/deepseek-reasoner将于 2026/07/24 弃用。 - 豆包
ModelName说明澄清:接入点ID(ep-开头)或直接填模型名(如doubao-seed-1.6)均可,组件原样传给方舟自动识别;并明确ImageModelName/ImageSize/ImageWatermark仅用于文生图/图生图,对话与识图一律用ModelName。 - 豆包(Doubao) 组件新增 文生图 / 图生图(Seedream):
GenerateImage/GenerateImageFromUrl方法 +GotImage事件,配套ImageModelName/ImageSize/ImageWatermark属性。 - 新增 豆包(Doubao) 大模型组件(火山引擎 Ark 平台),支持对话、图片/视频多模态识别。
- 思考模式重构:推理(思考)过程改由独立的
GotReasoning事件输出——想看思考过程就连接该事件,不连接即等于隐藏;因此 移除了HideReason属性,减少学习负担。 - 多模态完善:豆包 / Kimi / 通义千问 支持图片识别(
ChatWithImage/ChatWithImageUrl)与视频理解(ChatWithVideoUrl),需使用对应的视觉/视频模型。
- DeepSeek 升级 V4 模型,新增思考模式开关(
- v1.1
- 支持多轮对话,新增方法
StartNewChat可以开启一个新对话。 - 新增
HideReason属性,可以隐藏 DeepSeek-R1等模型的 推理过程的输出,让模型回答输出更简洁。
- 支持多轮对话,新增方法
- v1.0
- 首发,支持 DeepSeek / Kimi / 通义千问,默认流式输出。
中文网开发国内大模型拓展的初衷
App Inventor 2 原生的ChatGPT组件由于是国外的,使用起来不太便捷,且各种限制。
如今我们又身处AI浪潮之中,包括很多学校在内的国内用户都有AI结合传统的App来开发具有智能App的需求,因此,必须开发拓展以接入国内大模型,对,它专门接国内大模型的,国外的不接。
拓展接口参考了原生ChatGPT组件的简洁设计,在其基础上更加简化,还引入了它不支持的流式输出模式,且默认输出模式就是流式的,类似打字机的效果,当然也可以切换非流式,模型回答完成时一把输出。
v2.1 版本现已上线,DeepSeek 组件已升级支持 V4 模型、思考模式和图片识别,目前支持4个大模型的接入(DeepSeek、Kimi、通义千问、豆包)——其中 DeepSeek / Kimi / 通义千问 / 豆包 都支持图片识别,豆包还支持文生图/图生图。由于拓展是在最新源码平台上编译出来的,可能有些较老的平台不能很好的运行,有条件的话还是建议使用我们的平台,也会优先获得反馈支持。
当然,好的产品是需要不断迭代的,这款拓展也不例外,欢迎使用并期待您的反馈!
拓展下载
-
.aix 最新拓展下载:
cn.fun123.LLMAI2Ext.aix - v2.1
- DeepSeek 新增图片识别(视觉):ChatWithImage / ChatWithImageUrl,视觉模型 deepseek-v4-flash-vision-exp
- DeepSeek 升级 V4 模型,新增思考模式开关(ThinkingEnabled)和思考强度控制(ReasoningEffort)
- 模型名称更新:deepseek-v4-flash(快速模型)、deepseek-v4-pro(深度思考模型)
- 旧模型名 deepseek-chat / deepseek-reasoner 将于 2026/07/24 弃用
-
历史版本免费下载:
cn.fun123.LLMAI2Ext.aix - v2.0
注:所有大模型拓展共一个.aix拓展文件,里面有多个拓展组件,导入.aix效果参考如下:

回答效果参考如下:

我们尽量将接口方法设计得简单易用,由于demo中包含了APIKey,因此不直接提供aia源码,这里以Kimi为例,附上代码块:
开始对话:

切换输出模式(默认流式输出,可切换非流式一把输出内容):

流式输出响应事件,每输出一部分内容都会回调一次,追加展示;最后一次回调时 finished 参数为真:

非流式输出,只回调一次,内容直接展示即可:

大模型输出的 Markdown 格式,可以结合 Markdown拓展 进行实时渲染,效果如下:

错误通知
与模型对话过程中,如果发生异常,比如APIKey认证失败等错误,将触发屏幕的 出现错误时 事件,然后在这个事件中可以定制个性化的错误处理逻辑。
使用示例
下面每张积木图的右上角都有「复制代码块」,点一下,再到代码块编辑器里按 Ctrl+V,
积木就直接进工程了——不用照着一块块拖。
示例使用中文版设计器中的按钮1、标签1等原生组件;拓展组件使用英文名(DeepSeek1、Doubao1)。
粘贴后如果工程里没有同名组件,组件块会标红,把名字改成你自己的组件即可。
1. 最简单的一问一答
关掉流式,一次性拿到完整回答。适合翻译、润色这类「问一次、答一段」的功能。以下对话案例使用按钮、标签和文本输入框等原生组件。
when Screen1.Initialize() {
DeepSeek1.StreamMode = false
}
when 按钮_发送.Click() {
标签_回答.Text = "思考中…"
DeepSeek1.Chat(文本输入框_提问.Text)
}
when DeepSeek1.GotText(text) {
标签_回答.Text = text
}
2. 流式输出,边生成边显示
保持 StreamMode 为真(默认),回答会一段一段返回,等待感明显更低。
关键是把新内容追加到已有文本后面,而不是覆盖——这是最常见的错误。
when 按钮_发送.Click() {
标签_回答.Text = ""
DeepSeek1.Chat(文本输入框_提问.Text)
}
when DeepSeek1.GotStream(part, finished) {
标签_回答.Text = join(标签_回答.Text, part)
}
每次提问前把标签清空,否则新回答会接在上一轮后面。
3. 显示思考过程
开启思考模式后模型先推理再回答。推理内容走 GotReasoning,回答内容仍走 GotStream,
两条通道完全分开,可以放进两个标签。不想显示思考过程,不连接 GotReasoning 即可。
when Screen1.Initialize() {
DeepSeek1.ModelName = "deepseek-v4-pro"
DeepSeek1.ThinkingEnabled = true
}
when 按钮_发送.Click() {
标签_思考.Text = ""
标签_回答.Text = ""
DeepSeek1.Chat(文本输入框_提问.Text)
}
when DeepSeek1.GotReasoning(part, finished) {
标签_思考.Text = join(标签_思考.Text, part)
}
when DeepSeek1.GotStream(part, finished) {
标签_回答.Text = join(标签_回答.Text, part)
}
4. 多轮对话与重开一轮
拓展默认就是多轮对话:连续调用 Chat,模型记得前面聊过什么。
想让它忘掉上下文(比如换个话题、或上下文太长开始跑偏),调用 StartNewChat。
when 按钮_发送.Click() {
标签_回答.Text = ""
DeepSeek1.Chat(文本输入框_提问.Text)
}
when 按钮_新对话.Click() {
DeepSeek1.StartNewChat()
标签_回答.Text = ""
标签_提示.Text = "已开启新对话,模型不再记得之前聊过什么"
}
5. 防止重复点击,给出「回答中」状态
流式回答期间用户容易连点发送。用 finished 判断本轮结束,再把按钮放开。
when 按钮_发送.Click() {
if 文本输入框_提问.Text == "" {
标签_提示.Text = "请先输入问题"
} else {
按钮_发送.Enabled = false
按钮_发送.Text = "回答中…"
标签_回答.Text = ""
DeepSeek1.Chat(文本输入框_提问.Text)
}
}
when DeepSeek1.GotStream(part, finished) {
标签_回答.Text = join(标签_回答.Text, part)
if finished {
按钮_发送.Enabled = true
按钮_发送.Text = "发送"
}
}
6. 让模型看图说话
需要支持视觉的模型(DeepSeek、豆包、Kimi、通义千问的视觉模型)。
本地图片用 ChatWithImage,网络图片用 ChatWithImageUrl。
使用图像选择器选择图片,交给图像组件显示。
when 按钮_选图.Click() {
图像选择器1.Open()
}
when 图像选择器1.AfterPicking() {
图像1.Picture = 图像选择器1.Selection
标签_回答.Text = ""
Doubao1.ChatWithImage("请描述这张图片里有什么", 图像选择器1.Selection)
}
when Doubao1.GotStream(part, finished) {
标签_回答.Text = join(标签_回答.Text, part)
}
7. 拍照识物(DeepSeek 视觉模型)
DeepSeek 识图要用官方视觉模型 deepseek-v4-flash-vision-exp——启动时先把 ModelName 切过去
(deepseek-v4-flash / deepseek-v4-pro 是纯文本模型,传图会报错)。用照相机组件拍一张,
拍完的本地图片路径由拍摄完成事件带回,直接喂给 ChatWithImage;也可以交给图像组件显示。
when Screen1.Initialize() {
DeepSeek1.ModelName = "deepseek-v4-flash-vision-exp"
}
when 按钮_拍照.Click() {
照相机1.TakePicture()
}
when 照相机1.AfterPicture(image) {
图像1.Picture = image
标签_回答.Text = ""
DeepSeek1.ChatWithImage("拍到了什么?给出名称和一句简介", image)
}
when DeepSeek1.GotStream(part, finished) {
标签_回答.Text = join(标签_回答.Text, part)
}
识图对上下文同样生效:紧接着再
Chat("它多少钱?"),模型记得刚才那张图。 每张图最多折算 384 个 token,不必刻意压图;但单图不要超过 32MB。
8. 文生图
仅豆包提供。GenerateImage 发起后立刻返回,图片地址由 GotImage 事件送回,可交给图像组件显示。
when 按钮_画图.Click() {
标签_提示.Text = "正在生成,请稍候…"
Doubao1.GenerateImage(文本输入框_提问.Text)
}
when Doubao1.GotImage(imageUrl) {
图像1.Picture = imageUrl
标签_提示.Text = "生成完成(该链接有时效,请尽快保存)"
}
返回的是临时链接,过期后图片就打不开了。要长期保留,请及时下载到本地。
9. 处理错误
API Key 不对、余额不足、网络不通等都会触发屏幕的出现错误时事件。 记得在这里把界面状态复位,否则按钮会一直卡在「回答中」。
when Screen1.ErrorOccurred(component, functionName, errorNumber, message) {
按钮_发送.Enabled = true
按钮_发送.Text = "发送"
标签_提示.Text = join("出错了:", message)
}
DeepSeek
使用AppInventor2接入DeepSeek大模型(支持思考模式与图片识别)。从深度求索获取 API Key »
v2.1 起支持图片识别:把 ModelName 设为视觉模型 deepseek-v4-flash-vision-exp 后,
即可用 ChatWithImage(本地图片)或 ChatWithImageUrl(图片URL)发图提问。图片支持
JPEG/PNG/GIF/WebP,每张最多折算 384 个 token;不支持视频。
当然也可以对接其他厂商部署的DeepSeek服务,比如百度、阿里都有部署,这里选择阿里的DeepSeek服务进行测试验证:
BaseURL 由官方的改为:https://dashscope.aliyuncs.com/compatible-mode/v1
APIKey 用阿里云的。
ModelName 指定:deepseek-v3 或 deepseek-r1 (注意:第三方的模型名称和官方的不太一样)
参考测试结果如下:

属性
- APIKey
- 模型的Api Key。从深度求索获取 API Key »
- BaseURL
- DeepSeek 基础 URL,默认是官方地址,可修改接入第三方DeepSeek服务地址。
- ModelName
- 模型名称。官方模型填
deepseek-v4-flash(快速模型)、deepseek-v4-pro(深度思考模型)或deepseek-v4-flash-vision-exp(视觉模型,识图用)。旧名deepseek-chat/deepseek-reasoner将于 2026/07/24 弃用。 (注意:第三方的模型名称和官方的不太一样) - StreamMode
- 流式输出模式是否开启,默认’真’。 流式输出,即生成内容时边计算边返回,减少等待时间,提高响应速度,适用于聊天、代码补全等场景。 不开启,则是最终仅一次返回全部内容。
- ThinkingEnabled
- 思考模式开关。开启后模型会先思考再回答,回答质量更高但耗时更长、token 消耗更多。默认关闭。 仅对 DeepSeek V4 模型有效,其他模型会忽略此参数。
- ReasoningEffort
- 思考强度控制。
high适合普通对话(默认),max适合复杂推理和 Agent 类请求。 仅对 DeepSeek V4 模型有效,且 ThinkingEnabled 为真时才生效。
关于「隐藏推理过程」:v2.0 早期版本曾提供
HideReason属性,现已移除。是否显示思考过程改由「是否连接GotReasoning事件」决定——想看就连接该事件,不连接即等于隐藏。
事件
- GotStream(part,finished)
- 流式输出,每当有内容返回时都会触发该事件。part 为当前增量的部分内容,finished 标识输出是否已结束。
- GotReasoning(part,finished)
- 模型推理(思考)过程输出事件。part 为推理过程的增量内容,finished 标识推理是否结束。仅支持推理的模型(如 DeepSeek 思考模式)会触发。如果不需要显示思考过程,不连接本事件即可(即等于隐藏);回答内容仍通过 GotStream / GotText 输出。
- GotText(text)
- 非流式输出完成时触发该事件。text 为完整输出内容。
方法
- Chat(content)
- 开始与 DeepSeek 大模型进行对话。
- ChatWithImage(prompt,imagePath)
- 多模态对话:发送本地图片+文本。需先把 ModelName 设为视觉模型
deepseek-v4-flash-vision-exp(deepseek-v4-flash/deepseek-v4-pro是纯文本模型,不支持图片)。 - ChatWithImageUrl(prompt,imageUrl)
- 多模态对话:发送图片URL+文本。需先把 ModelName 设为视觉模型
deepseek-v4-flash-vision-exp。 - StartNewChat()
- 开启新对话。默认为多轮对话,此方法将开启一个全新的对话上下文。
Kimi
使用AppInventor2接入Kimi大模型。从 Moonshot 获取 API Key »
属性
- APIKey
- 模型的Api Key。从 Moonshot 获取 API Key »
- ModelName
- 模型名称。
- StreamMode
- 流式输出模式是否开启,默认’真’。 流式输出,即生成内容时边计算边返回,减少等待时间,提高响应速度,适用于聊天、代码补全等场景。 不开启,则是最终仅一次返回全部内容。
事件
- GotStream(part,finished)
- 流式输出,每当有内容返回时都会触发该事件。part 为当前增量的部分内容,finished 标识输出是否已结束。
- GotReasoning(part,finished)
- 模型推理(思考)过程输出事件。不连接本事件即等于隐藏思考过程。回答内容仍通过 GotStream / GotText 输出。
- GotText(text)
- 非流式输出完成时触发该事件。text 为完整输出内容。
方法
- Chat(content)
- 开始与 Kimi 大模型进行对话。
- ChatWithImage(prompt,imagePath)
- 多模态对话:发送本地图片+文本。需使用支持视觉的模型(如 kimi-vl-a32b)。
- ChatWithImageUrl(prompt,imageUrl)
- 多模态对话:发送图片URL+文本。需使用支持视觉的模型。
- ChatWithVideoUrl(prompt,videoUrl)
- 视频多模态对话:发送视频URL+文本。需使用支持视频理解的模型。
- StartNewChat()
- 开启新对话。默认为多轮对话,此方法将开启一个全新的对话上下文。
阿里通义千问
使用AppInventor2接入阿里通义千问大模型。从阿里云获取 API Key »

属性
- APIKey
- 模型的Api Key。从阿里云获取 API Key »
- ModelName
- 模型名称。
- StreamMode
- 流式输出模式是否开启,默认’真’。 流式输出,即生成内容时边计算边返回,减少等待时间,提高响应速度,适用于聊天、代码补全等场景。 不开启,则是最终仅一次返回全部内容。
事件
- GotStream(part,finished)
- 流式输出,每当有内容返回时都会触发该事件。part 为当前增量的部分内容,finished 标识输出是否已结束。
- GotReasoning(part,finished)
- 模型推理(思考)过程输出事件。不连接本事件即等于隐藏思考过程。回答内容仍通过 GotStream / GotText 输出。
- GotText(text)
- 非流式输出完成时触发该事件。text 为完整输出内容。
方法
- Chat(content)
- 开始与千问大模型进行对话。
- ChatWithImage(prompt,imagePath)
- 多模态对话:发送本地图片+文本。需使用支持视觉的模型(如 qwen-vl-plus)。
- ChatWithImageUrl(prompt,imageUrl)
- 多模态对话:发送图片URL+文本。需使用支持视觉的模型。
- ChatWithVideoUrl(prompt,videoUrl)
- 视频多模态对话:发送视频URL+文本。需使用支持视频理解的模型(如 qwen-vl-max)。
- StartNewChat()
- 开启新对话。默认为多轮对话,此方法将开启一个全新的对话上下文。
豆包
使用 AppInventor2 接入字节跳动豆包大模型(火山引擎 Ark 平台),支持对话、图片/视频多模态识别,以及 文生图 / 图生图(Seedream)。从火山引擎获取 API Key 及接入点 »
豆包的 ModelName 填对话/识图模型:可以是接入点ID(ep- 开头,在 Ark 平台「在线推理」创建),也可直接填模型名(如 doubao-seed-1.6,需 API Key 鉴权,默认最新版)——两者均可,组件原样传给方舟自动识别。注意:对话(Chat)和识图(ChatWithImage / ChatWithImageUrl / ChatWithVideoUrl)都用 ModelName,只有文生图/图生图(GenerateImage / GenerateImageFromUrl)用独立的图片模型(如 doubao-seedream-4-0-250828),填入 ImageModelName。
文生图/图生图返回的是一个 临时图片URL(通过
GotImage事件返回),可直接用 图像 组件显示;该URL有时效,建议尽快下载保存到本地。
属性
- APIKey
- 火山引擎 API Key。从火山引擎获取 API Key »
- BaseURL
- API 基础URL,默认火山引擎 Ark 平台地址
https://ark.cn-beijing.volces.com/api/v3。 - ModelName
- 对话/识图模型。两种填法均可:① 接入点ID(
ep-开头,如ep-20250101xxxxx,在 Ark 平台「在线推理」创建);② 直接填模型名(如doubao-seed-1.6、doubao-pro-32k-240515,需 API Key 鉴权,默认最新版)。组件原样传给方舟,方舟自动识别。 - StreamMode
- 流式输出模式是否开启,默认’真’。不开启则最终一次返回全部内容。
- ImageModelName
- 【仅文生图/图生图用】生图模型,如
doubao-seedream-4-0-250828、doubao-seedream-5.0-lite。对话(Chat)和识图(ChatWithImage等)都用ModelName、不读本属性,只有GenerateImage/GenerateImageFromUrl才用它。 - ImageSize
- 【仅文生图】生成图片尺寸:可填
1K/2K/4K,或具体像素如1024x1024、2048x2048。默认2K。 - ImageWatermark
- 【仅文生图】生成的图片是否添加水印,默认不加。
事件
- GotStream(part,finished)
- 流式输出,每当有内容返回时都会触发该事件。part 为当前增量的部分内容,finished 标识输出是否已结束。
- GotReasoning(part,finished)
- 模型推理(思考)过程输出事件。不连接本事件即等于隐藏思考过程。回答内容仍通过 GotStream / GotText 输出。
- GotText(text)
- 非流式输出完成时触发该事件。text 为完整输出内容。
- GotImage(imageUrl)
- 图片生成完成时触发。imageUrl 为生成图片的临时URL(可用图像组件显示,建议尽快下载保存——该URL有时效)。
方法
- Chat(content)
- 开始与豆包大模型对话。
- ChatWithImage(prompt,imagePath)
- 多模态对话:发送本地图片+文本。
- ChatWithImageUrl(prompt,imageUrl)
- 多模态对话:发送图片URL+文本。
- ChatWithVideoUrl(prompt,videoUrl)
- 视频多模态对话:发送视频URL+文本。需使用支持视频理解的模型。
- GenerateImage(prompt)
- 文生图:根据文字描述生成图片。生成完成会触发
GotImage事件返回图片URL。prompt 为图片描述(≤300汉字)。 - GenerateImageFromUrl(prompt,imageUrl)
- 图生图:基于一张参考图URL + 文字描述生成新图片。生成完成触发
GotImage事件。 - StartNewChat()
- 开启新对话。默认为多轮对话,此方法将开启一个全新的对话上下文。
Q & A
Q:使用标签进行输出,内容较多部分内容被隐藏,该如何让其可上下滚动呢?
A:请参考《App Inventor 2 标签内容过多,如何做到可上下滑动?》
Q:如何把图片发给大模型?是否支持此项功能?
A:现已支持!使用支持视觉的模型(DeepSeek、豆包、Kimi、通义千问的视觉模型——DeepSeek 需把 ModelName 设为 deepseek-v4-flash-vision-exp),调用 ChatWithImage(本地图片)或 ChatWithImageUrl(图片网络地址)即可把图片发给大模型识别。此外豆包还支持反向的 文生图/图生图(GenerateImage / GenerateImageFromUrl)。
扫码添加客服咨询