动态

详情 返回 返回

Qoder + ADB Supabase :5分鐘GET超火AI手辦生圖APP - 动态 详情

視頻效果:

圖片

一、前言

在AI原生應用開發的時代,傳統的後端架構正在被重新定義。本文將帶你體驗如何使用 Qoder、阿里雲ADB Supabase 和通義千問圖像編輯模型(Qwen Image Edit),快速搭建一個完整的 AI 手辦生圖 Flutter 移動端應用。全程無需自建傳統後端,真實體驗一次 Vibe Coding 的極速開發。

二、總體思路

  • 前端由 Qoder 根據需求自動生成 Flutter 代碼,負責界面與交互。
  • 數據與對象存儲由 ADB Supabase 提供,承擔 BaaS 能力
  • AI 能力通過 ADB Supabase Edge Function 接入通義千問圖像編輯模型,實現圖片編輯。
  • 整體架構輕量、迭代快,適合從原型到上線的快速推進。
    圖片

三、環境與準備

  1. 開通阿里雲 ADB Supabase[1] 實例(限時免費1C2G),為了能夠調用百鍊 API,您需要配置ADB Supabase 實例的 vpc 通過終端節點私網訪問阿里雲百鍊平台[2](免費),或配置公網NAT網關[3](收費);
  2. 百鍊 DashScope API Key[4](調用通義千問圖像編輯模型);
  3. 安裝 Qoder[5] 與 Flutter[6] 插件,並安裝Flutter 環境(Android/iOS SDK),具體可參考使用 VS Code 安裝 Flutter[7]。

四、AI 驅動開發 - Qoder 自動生成 Flutter 代碼

Qoder 作為AI驅動的IDE Agent,能夠根據需求自動生成高質量的 Flutter 代碼。使用 Flutter 插件創建Empty Project 後,你只需描述核心功能,配合幾輪調試與 Debug,就能得到可運行的移動端應用。
圖片
可以參考本文源代碼[8],並在此基礎上進行二創!

五、後端即服務 - ADB Supabase 配置

5.1 獲取 API 配置

首先,打開ADB Supabase的dashboard頁面,複製API_URL和API_KEY。通過 dotenv 的方式將 ADB Supabase 實例的API_URL和API_KEY(Service Role Key)配置到項目根目錄。

SUPABASE_URL=https://sbp-xxxxx.supabase.opentrust.net
SUPABASE_SERVICE_KEY=xxxxxxxx

5.2 數據庫表結構設計

在ADB Supabase dashboard 中創建如下所示的數據庫表來存儲歷史數據,此表用於存儲用户編輯圖片的記錄,包括原始圖片URL、編輯後圖片URL、用户輸入的提示詞等關鍵信息。

CREATE TABLE public.edited_images (
    id TEXT PRIMARY KEY,
    prompt TEXT NOT NULL,
    original_image_url TEXT NOT NULL,
    edited_image_url TEXT NOT NULL,
    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

5.3 對象存儲桶創建

在ADB Supabase dashboard上的 Storage頁面創建名為 images 的存儲桶,用來存儲用户上傳的圖片數據。這個存儲桶將作為圖片文件的持久化存儲解決方案。

六、AI服務集成 - Edge Function 部署

6.1 Edge Function核心邏輯部署

打開 ADB Supabase Dashboard,在 Edge Functions 頁面點擊 "Via Editor Deploy a new function",在編輯器中鍵入如下所示的function,將function命名為wan,然後部署。

注意:如果您選擇通過終端節點私網訪問阿里雲百鍊平台[2](免費),BASE_URL需要設置為 https://vpc-cn-beijing.dashscope.aliyuncs.com/api/v1,若通過配置公網NAT網關[3](收費)訪問,BASE_URL 需要設置為 https://dashscope.aliyuncs.com/api/v1

const DASHSCOPE_API_KEY = Deno.env.get('BAILIAN_API_KEY');
const BASE_URL = 'https://vpc-cn-beijing.dashscope.aliyuncs.com/api/v1';
async function callImageEditAPI(image_url, prompt){
  const messages = [
    {
      role: "user",
      content: [
        {
          image: image_url
        },
        {
          text: prompt
        }
      ]
    }
  ];
  const payload = {
    model: "qwen-image-edit",
    input: {
      messages
    },
    parameters: {
      negative_prompt: "",
      watermark: false
    }
  };
  try {
    const response = await fetch(`${BASE_URL}/services/aigc/multimodal-generation/generation`, {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${DASHSCOPE_API_KEY}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(payload)
    });
    if (!response.ok) {
      console.error(`Request failed: ${response.status} ${response.statusText}`);
      return null;
    }
    const data = await response.json();
    return data.output?.choices?.[0]?.message?.content ?? null;
  } catch (error) {
    console.error("Request error:", error.message);
    return null;
  }
}
Deno.serve(async (req)=>{
  try {
    const { image_url, prompt } = await req.json();
    if (!image_url || !prompt) {
      returnnew Response(JSON.stringify({
        error: "Missing image_url or prompt"
      }), {
        status: 400,
        headers: {
          'Content-Type': 'application/json'
        }
      });
    }
    const result = await callImageEditAPI(image_url, prompt);
    returnnew Response(JSON.stringify({
      message: result
    }), {
      headers: {
        'Content-Type': 'application/json',
        'Connection': 'keep-alive'
      }
    });
  } catch (error) {
    console.error("Server error:", error);
    returnnew Response(JSON.stringify({
      error: "Internal server error"
    }), {
      status: 500,
      headers: {
        'Content-Type': 'application/json'
      }
    });
  }
});

該函數接收圖片 URL 與提示詞,調用通義千問圖像編輯模型,返回生成結果。

6.2 安全密鑰管理配置

在 ADB Supabase 中,我們提供原生的 Edge Function Secrets 配置與集中管理能力,可將 AI API Token(如 DashScope/百鍊)安全地存放在函數運行環境的密鑰庫中,通過 Deno.env.get 讀取,絕不下發到客户端,也不進入代碼倉庫或構建產物。

  • 在 Edge Functions 的 Secrets 頁面配置 BAILIAN_API_KEY。
  • 在函數中使用 Deno.env.get('BAILIAN_API_KEY') 讀取,避免將密鑰硬編碼或暴露到客户端。

七、總體流程及原理

image.png

八、測試與驗證

提示詞示例:繪製圖中角色的1/7比例的商業化手辦,寫實風格,真實環境,手辦放在電腦桌上,電腦屏幕裏的內容為該手辦的C4D建模過程,電腦屏幕旁放着印有原畫的BANDAI風格的塑料玩具包裝盒,電腦桌上還有製作手辦的工具,如畫筆,顏料,小刀等。

圖片

九、結語

通過 Qoder + ADB Supabase + 通義千問圖像編輯模型的組合,我們可以在沒有傳統後端的前提下,迅速完成一個可用的 AI 手辦生圖 Flutter 應用。從前端到後端、從數據到模型,全鏈路輕量敏捷,既適合原型驗證,也能平滑升級到生產。歡迎在實踐中根據業務場景加強安全與性能優化,把 Vibe Coding 的快感真正落地到真實應用。

參考鏈接:

[1]https://gpdbnext.console.aliyun.com/gpdb/cn-beijing/supabase

[2]https://help.aliyun.com/zh/model-studio/access-model-studio-t...

[3]https://vpc.console.aliyun.com/nat/cn-beijing/nats

[4]https://bailian.console.aliyun.com/

[5]https://qoder.com/

[6]https://marketplace.visualstudio.com/items

[7]https://docs.flutter.dev/install/with-vs-code

[8]https://github.com/fffzlfk/adb-supabase-flutter-demo

user avatar san-mu 头像 lenglengdechaomian 头像 vksfeng 头像 kukudejiqimao_bns3pe 头像 aloudata 头像 chaoqiezi 头像 liu_486 头像 huaming 头像 shiwangdehongshu 头像 pulangte 头像 wennuandedasuan_c6gnoc 头像 xiaoyi_ces 头像
点赞 14 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.