🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付

=======================================================

Flutter 與 Dart 團隊再次展現了他們在 AI 場景的決心。繼 Flutter MCP、GenUI、Plugin Assets AI 與 Flutter Skills 之後,現在 Genkit 也正式支援 Dart。它最重要的意義在於:

Flutter 使用 Dart 可以直接原生實作 AI 編排框架,支援不同模型與本地場景,提供 agent workflow / tool calling / RAG 等能力。

因為 AI 應用並不只是單一的 LLM 請求這類簡單場景,它還會涉及到 提示詞管理、工具呼叫、檢索增強生成 (RAG)、工作流編排、除錯、監控與部署 等複合場景,而 Genkit 提供了在生產環境下解決這類問題的能力。

genkit-dart 的核心目標就是將 LLM 的組織能力工程化。

簡單來說,在一般的 AI 應用開發場景,開發者通常需要自行實作:

  • 提示詞(Prompt)組織與版本管理
  • 多步驟 AI 工作流程
  • 工具呼叫(function calling)
  • 檢索增強生成(RAG)
  • LLM 供應商管理
  • 追蹤與除錯
  • 生產部署

而 Genkit 就是把這些能力整合成一個統一框架,本質上就是 AI 應用的 runtime + 編排 framework

<div><div><div></div><span>markdown</span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>```
<span>Frontend (Web / Mobile / Flutter)</span>
<span><span>        ↓</span></span>
<span>Genkit Runtime</span>
<span>        ↓</span>
<span>LLM / Tools / Vector DB</span>
<span></span>

對應 `genkit-dart` 的整體結構就是:

![](https://i.imgur.com/5hAKpQV.jpeg)

簡單來說,以前你做 AI App 需要適配不同模型廠商,例如同時支援 OpenAI、Gemini 與 Claude,你就需要在本地寫不同的呼叫方式,或是在後端做一層獨立的 adapter 層去轉換;而如果透過 Genkit,現在你只需要:

<div><div><div></div><span>ts</span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>```
<span><span>import</span> <span>'package:genkit/genkit.dart'</span>;</span>
<span><span>import</span> <span>'package:genkit_google_genai/genkit_google_genai.dart'</span>;</span>
<span><span>import</span> <span>'package:genkit_anthropic/genkit_anthropic.dart'</span>;</span>
<span></span>
<span><span>void</span> <span>main</span>() <span>async</span> {</span>
<span> <span>// Initialize Genkit with plugins</span></span>
<span> final ai = <span>Genkit</span>(<span>plugins</span>: [</span>
<span> <span>googleAI</span>(),</span>
<span> <span>anthropic</span>(),</span>
<span> ]);</span>
<span></span>
<span> <span>// Call Google Gemini</span></span>
<span> final geminiResponse = <span>await</span> ai.<span>generate</span>(</span>
<span> <span>model</span>: googleAI.<span>gemini</span>(<span>'gemini-3.1-pro-preview'</span>),</span>
<span> <span>prompt</span>: <span>'Hello from Gemini'</span>,</span>
<span> );</span>
<span></span>
<span> <span>// Call Anthropic Claude</span></span>
<span> final claudeResponse = <span>await</span> ai.<span>generate</span>(</span>
<span> <span>model</span>: anthropic.<span>model</span>(<span>'claude-opus-4.6'</span>),</span>
<span> <span>prompt</span>: <span>'Hello from Claude'</span>,</span>
<span> );</span>
<span>}</span>

在 Genkit 裡整個 AI 流程都是一個 Flow,類似一個現成的 AI pipeline,使用 Genkit 可以將 AI 邏輯封裝成可測試、可觀察、並支援獨立部署的函式,感覺如下:

<div><div><div></div><span>dart</span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>```
<span><span>import</span> <span>'package:genkit/genkit.dart'</span>;</span>
<span><span>import</span> <span>'package:genkit_google_genai/genkit_google_genai.dart'</span>;</span>
<span><span>import</span> <span>'package:schemantic/schemantic.dart'</span>;</span>
<span></span>
<span><span>part</span> <span>'travel_flow.g.dart'</span>;</span>
<span></span>
<span><span>// Define flow input schema with schemantic</span></span>
<span><span>@Schema</span>()</span>
<span><span>abstract</span> <span><span>class</span> $<span>TripRequest</span> </span>{</span>
<span>  <span>String</span> <span>get</span> destination;</span>
<span>  <span>int</span> <span>get</span> days;</span>
<span>}</span>
<span></span>
<span><span>// Define tool input schema</span></span>
<span><span>@Schema</span>()</span>
<span><span>abstract</span> <span><span>class</span> $<span>WeatherRequest</span> </span>{</span>
<span>  <span>@Field</span>(description: <span>'The city name'</span>)</span>
<span>  <span>String</span> <span>get</span> city;</span>
<span>}</span>
<span></span>
<span><span>void</span> main() <span>async</span> {</span>
<span>  <span>// Initialize Genkit and register the Google AI plugin</span></span>
<span>  <span>final</span> ai = Genkit(plugins: [googleAI()]);</span>
<span></span>
<span>  <span>// Define a tool the model can invoke to fetch live data</span></span>
<span>  ai.defineTool(</span>
<span>    name: <span>'fetchWeather'</span>,</span>
<span>    description: <span>'Retrieves the current weather forecast for a given city'</span>,</span>
<span>    inputSchema: WeatherRequest.$schema,</span>
<span>    fn: (request, _) <span>async</span> => request.city.toLowerCase() == <span>'seattle'</span> ? <span>'Rainy'</span> : <span>'Sunny'</span>, </span>
<span>  );</span>
<span></span>
<span>  <span>// Construct a strongly-typed, observable flow</span></span>
<span>  <span>final</span> tripPlannerFlow = ai.defineFlow(</span>
<span>    name: <span>'planTrip'</span>,</span>
<span>    inputSchema: TripRequest.$schema,</span>
<span>    outputSchema: .string(),</span>
<span>    fn: (request, _) <span>async</span> {</span>
<span>      <span>// Generate content using the model and tool</span></span>
<span>      <span>final</span> response = <span>await</span> ai.generate(</span>
<span>        model: googleAI.gemini(<span>'gemini-3.1-pro-preview'</span>),</span>
<span>        prompt: <span>'Build a <span>${request.days}</span>-day travel itinerary for <span>${request.destination}</span>. '</span></span>
<span>                <span>'Make sure to check the weather forecast first to suggest appropriate activities.'</span>,</span>
<span>        toolNames: [<span>'fetchWeather'</span>],</span>
<span>      );</span>
<span>      </span>
<span>      <span>return</span> response.text;</span>
<span>    },</span>
<span>  );</span>
<span></span>
<span>  <span>// Run the flow</span></span>
<span>  <span>final</span> itinerary = <span>await</span> tripPlannerFlow(</span>
<span>    TripRequest(destination: <span>'Seattle'</span>, days: <span>3</span>)</span>
<span>  );</span>
<span>  <span>print</span>(itinerary);</span>
<span>}</span>

而對於 Genkit,它提供的核心能力主要有:

- 提示詞管理:從 Genkit 整體能力設計來看,提示詞在 Genkit 中是結構化資源,開發者可以將提示詞定義為獨立檔案,並支援:
    - 參數化
    - 類型驗證
    - 版本管理

<div><div><div></div><span>dart</span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>```
<span><span>// 基本 Prompt 定義 </span></span>
<span>serverAi.definePrompt<promptinput>( </promptinput></span>
<span> name: <span>'echoPrompt'</span>, </span>
<span> description: <span>'Returns a simple prompt with one user message.'</span>, </span>
<span> inputSchema: PromptInput.$schema, </span>
<span> fn: (input, _) <span>async</span> { </span>
<span> <span>return</span> GenerateActionOptions( </span>
<span> messages: [ </span>
<span> Message( </span>
<span> role: Role.user, </span>
<span> content: [TextPart(text: <span>'prompt says: <span>${input.input}</span>'</span>)], </span>
<span> ), </span>
<span> ], </span>
<span> ); </span>
<span> }, </span>
<span>);</span>
<span></span>
<span><span>// 取得遠端 Prompt </span></span>
<span><span>final</span> prompts = <span>await</span> client.getActivePrompts(clientAi); </span>
<span><span>final</span> prompt = prompts.firstWhere( </span>
<span> (p) => p.name == <span>'example-client/echoPrompt'</span>, </span>
<span>); </span>
<span><span>final</span> request = <span>await</span> prompt.call({<span>'input'</span>: <span>'hello'</span>});</span>
<span></span>

  • Genkit 內建支援 LLM 工具呼叫,自帶了 Agent 能力的適配場景,也是以一個 Agent 開發框架實作,透過 ActionTool 的抽象,你可以定義一系列函式(例如查詢資料庫、發送郵件、搜尋網頁),模型可以根據使用者意圖自主決定要呼叫哪些工具
<div><div><div></div><span>dart</span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>```
<span><span>@Schema</span>()  </span>
<span><span>abstract</span> <span><span>class</span> $<span>WeatherInput</span> </span>{  </span>
<span>  <span>String</span> <span>get</span> location;  </span>
<span>}  </span>
<span>  </span>
<span><span>final</span> weatherTool = ai.defineTool(  </span>
<span>  name: <span>'getWeather'</span>,  </span>
<span>  description: <span>'Gets the current weather for a location'</span>,  </span>
<span>  inputSchema: WeatherInput.$schema,  </span>
<span>  fn: (input, _) <span>async</span> {  </span>
<span>    <span>// 呼叫天氣 API  </span></span>
<span>    <span>return</span> <span>'Weather in <span>${input.location}</span>: 72°F and sunny'</span>;  </span>
<span>  },  </span>
<span>);</span>
<span></span>
<span>genkit.defineTool(  </span>
<span>  name: <span>'transferFunds'</span>,  </span>
<span>  description: <span>'Transfers funds between accounts. Requires user approval.'</span>,  </span>
<span>  inputSchema: .map(.string(), .string()),  </span>
<span>  fn: (input, context) <span>async</span> {  </span>
<span>    <span>final</span> from = input[<span>'from'</span>];  </span>
<span>    <span>final</span> to = input[<span>'to'</span>];  </span>
<span>    <span>return</span> <span>'SUCCESS: Transferred funds from <span>$from</span> to <span>$to</span>'</span>;  </span>
<span>  },  </span>
<span>);</span>

- Genkit 內建支援 RAG 流程,包括向量嵌入(Embedding)、向量搜尋(Vector Search)、檢索流水線(Retrieval Pipeline)

<div><div><div></div><span>dart</span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>```
<span><span>// 在 agentic_patterns 應用中定義 RAG 流程 </span></span>
<span><span>final</span> agenticRagFlow = defineAgenticRagFlow(ai, geminiFlash); </span>
<span> </span>
<span><span>// 使用範例 </span></span>
<span><span>final</span> result = <span>await</span> agenticRagFlow(AgenticRagInput(question: question));</span>
<span></span>
<span></span>
<span><span>final</span> embeddings = <span>await</span> ai.embedMany( </span>
<span> documents: [ </span>
<span> DocumentData(content: [TextPart(text: <span>'Hello world'</span>)]), </span>
<span> ], </span>
<span> embedder: googleAI.textEmbedding(<span>'text-embedding-004'</span>), </span>
<span>); </span>
<span> </span>
<span><span>print</span>(embeddings.first.embedding);</span>
<span></span>

  • Genkit 提供統一的模型介面,可以連接不同模型供應商的抽象層,你可以呼叫遠端模型,也能適配本地模型場景
  • 可觀察性與除錯:Genkit 提供完整的開發者 UI,使用者可以看到:
    • 提示詞
    • 流程執行追蹤(Flow execution trace)
    • token 使用量
    • 延遲(latency)
    • LLM 回應

  • 中斷機制支援人機互動場景,支援流程暫停並等待外部輸入
<div><div><div></div><span>dart</span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>```
<span><span>@Schema</span>()  </span>
<span><span>abstract</span> <span><span>class</span> $<span>AskUserInput</span> </span>{  </span>
<span>  <span>String</span> <span>get</span> question;  </span>
<span>}  </span>
<span>  </span>
<span><span>// 在工具中觸發中斷  </span></span>
<span>fn: (input, context) <span>async</span> {  </span>
<span>  context.interrupt({<span>'question'</span>: input.question});  </span>
<span>  <span>// 等待外部輸入後繼續執行  </span></span>
<span>}</span>

因此,使用 Genkit 你可以完全自訂你的 Flow,一個 Flow 可以包含多步推理、多次工具呼叫以及複雜的邏輯分支,這也是構建智能代理(Agent)的基石。實際上就是:

> **使用 Genkit + Flutter,你可以讓 AI + Agent 在不同平台一次完成。**

<div><div><div></div><span>dart</span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>```
<span><span>/// <span>編排 flow</span></span></span>
<span>ai.defineFlow( </span>
<span> name: <span>'weatherFlow'</span>, </span>
<span> inputSchema: .string(defaultValue: <span>'What is the weather like in Boston?'</span>), </span>
<span> outputSchema: .string(), </span>
<span> fn: (prompt, context) <span>async</span> { </span>
<span> <span>final</span> response = <span>await</span> ai.generate( </span>
<span> model: googleAI.gemini(<span>'gemini-3-flash-preview'</span>), </span>
<span> prompt: prompt, </span>
<span> toolNames: [<span>'getWeather'</span>], </span>
<span> ); </span>
<span> <span>return</span> response.text; </span>
<span> }, </span>
<span>);</span>
<span></span>
<span><span>final</span> streamStory = ai.defineFlow( </span>
<span> name: <span>'streamStory'</span>, </span>
<span> inputSchema: .string(), </span>
<span> outputSchema: .string(), </span>
<span> streamSchema: .string(), </span>
<span> fn: (topic, context) <span>async</span> { </span>
<span> <span>final</span> stream = ai.generateStream( </span>
<span> model: googleAI.gemini(<span>'gemini-2.5-flash'</span>), </span>
<span> prompt: <span>'Write a story about <span>$topic</span>'</span>, </span>
<span> ); </span>
<span> </span>
<span> <span>await</span> <span>for</span> (<span>final</span> chunk <span>in</span> stream) { </span>
<span> context.sendChunk(chunk.text); </span>
<span> } </span>
<span> <span>return</span> <span>'Story complete'</span>; </span>
<span> }, </span>
<span>);</span>
<span></span>
<span></span>
<span><span>// Flow 是一種 Action </span></span>
<span><span>final</span> flow = Flow(name: <span>'myFlow'</span>, fn: ..., actionType: <span>'flow'</span>); </span>
<span>registry.register(flow); <span>// 存放在 _actions['flow']['myFlow'] </span></span>
<span> </span>
<span><span>// Tool 也是一種 Action </span></span>
<span><span>final</span> tool = Tool(name: <span>'myTool'</span>, fn: ..., actionType: <span>'tool'</span>); </span>
<span>registry.register(tool); <span>// 存放在 _actions['tool']['myTool']</span></span>
<span></span>
<span></span>
<span><span>// 查找已註冊的工具 </span></span>
<span><span>final</span> tool = <span>await</span> genkit.registry.lookupAction(<span>'tool'</span>, <span>'testTool'</span>); </span>
<span> </span>
<span><span>// 查找已註冊的流程 </span></span>
<span><span>final</span> flow = <span>await</span> genkit.registry.lookupAction(<span>'flow'</span>, <span>'testFlow'</span>);</span>
<span></span>
<span></span>
<span><span>/// <span>Action 呼叫</span></span></span>
<span><span>final</span> remoteAction = defineRemoteAction( </span>
<span> url: <span>'http://localhost:3400/my-flow'</span>, </span>
<span> inputSchema: .string(), </span>
<span> outputSchema: .string(), </span>
<span>); </span>
<span> </span>
<span><span>final</span> response = <span>await</span> remoteAction(input: <span>'Hello from Dart!'</span>);</span>
<span></span>
<span></span>

所以可以看到,genkit-dart 正是透過可觀察的 Flows 與統一的模型抽象層,讓 AI 開發變得更像傳統軟體工程一樣簡單。

我們可以簡單總結,Genkit 在裡面主要定義了 AI 應用的基礎構建模組:

  • Actions & Flows:Genkit 的核心抽象,Flow 是一個可追蹤、可觀測的工作流單元。透過 Flow 封裝的 AI 邏輯會自動產生追蹤資料,方便在 Genkit 開發 UI 中除錯。不論是 Flow 或是 Tool,本質上都是可被呼叫的 Action。
  • Registry:透過單例模式管理所有模型、工具、索引器等資源。
  • 模型抽象層:定義了統一的 GenerateRequestGenerateResponse 介面,可以在不改變業務邏輯的情況下,透過配置輕鬆切換底層模型(例如從 Gemini 切換到 OpenAI)。
  • Tooling(工具呼叫):實作了函數呼叫(Function Calling)的封裝,允許大型語言模型呼叫本地 Dart 程式碼。

其次 Genkit 還內建了豐富的外掛生態,可提供第三方整合:

  • 模型支援:genkit_google_genai (Gemini)、genkit_vertexaigenkit_openaigenkit_anthropic (Claude)
  • Web 服務:genkit_shelf 支援將 AI 流程直接掛載到 Dart 的標準 Web 伺服器 shelf 上,作為 API 提供服務
  • 生態適配:genkit_firebase_ai 提供與 Firebase 生態的深度整合,方便行動端開發者

最重要的是,在 packages/genkit_mcp 同樣實作了 MCP 協議,並且還有 packages/genkit_middleware 檔案系統中間件提供例如儲存、審核或重試支援:

<div><div><div></div><span>dart</span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>```
<span><span>final</span> ai = Genkit(</span>
<span>  plugins: [</span>
<span>    googleAI(),</span>
<span>    RetryPlugin(), <span>// Required for retry middleware</span></span>
<span>  ],</span>
<span>);</span>
<span></span>
<span><span>final</span> response = <span>await</span> ai.generate(</span>
<span>  model: googleAI.gemini(<span>'gemini-2.5-flash'</span>),</span>
<span>  prompt: <span>'Reliable request'</span>,</span>
<span>  use: [</span>
<span>    retry(</span>
<span>      maxRetries: <span>3</span>,</span>
<span>      retryModel: <span>true</span>, <span>// Retry model validation errors (default: true)</span></span>
<span>      retryTools: <span>false</span>, <span>// Retry tool execution errors (default: false)</span></span>
<span>      statuses: [StatusCodes.UNAVAILABLE], <span>// Retry only on specific errors</span></span>
<span>    ),</span>
<span>  ],</span>
<span>);</span>
<span></span>

例如 Demo 裡的 `agentic_patterns` 也展示了如何構建 RAG 系統,實現更專業的智能體場景,例如迭代精煉邏輯:讓模型生成內容後,透過另一個 Action 進行自我校正:

<div><div><div></div><span>dart</span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>```
<span> <span>final</span> iterativeRefinementFlow = defineIterativeRefinementFlow(</span>
<span> ai,</span>
<span> geminiFlash,</span>
<span> );</span>
<span> <span>final</span> storyWriterFlow = defineStoryWriterFlow(ai, geminiFlash);</span>
<span> <span>final</span> marketingCopyFlow = defineMarketingCopyFlow(ai, geminiFlash);</span>
<span> <span>final</span> routerFlow = defineRouterFlow(ai, geminiFlash);</span>
<span> <span>final</span> toolCallingFlow = defineToolCallingFlow(ai, geminiFlash);</span>
<span> <span>final</span> researchAgent = defineResearchAgent(ai, geminiFlash);</span>
<span> <span>final</span> agenticRagFlow = defineAgenticRagFlow(ai, geminiFlash);</span>
<span> <span>final</span> statefulChatFlow = defineStatefulChatFlow(ai, geminiFlash);</span>
<span> <span>final</span> imageGeneratorFlow = defineImageGeneratorFlow(ai, geminiFlash);</span>
<span></span>
<span></span>
<span>Flow<iterativerefinementinput>String</iterativerefinementinput></span>, <span>void</span>, <span>void</span>>
<span>defineIterativeRefinementFlow(Genkit ai, ModelRef geminiFlash) {</span>
<span> <span>return</span> ai.defineFlow(</span>
<span> name: <span>'iterativeRefinementFlow'</span>,</span>
<span> inputSchema: IterativeRefinementInput.$schema,</span>
<span> outputSchema: .string(),</span>
<span> fn: (input, _) <span>async</span> {</span>
<span> <span>var</span> content = <span>''</span>;</span>
<span> <span>var</span> feedback = <span>''</span>;</span>
<span> <span>var</span> attempts = <span>0</span>;</span>
<span></span>
<span> <span>// Step 1: Generate the initial draft</span></span>
<span> <span>final</span> draftResponse = <span>await</span> ai.generate(</span>
<span> model: geminiFlash,</span>
<span> prompt:</span>
<span> <span>'Write a short, single-paragraph blog post about: <span>${input.topic}</span>.'</span>,</span>
<span> );</span>
<span> content = draftResponse.text;</span>
<span></span>
<span> <span>// Step 2: Iteratively refine the content</span></span>
<span> <span>while</span> (attempts 3</span>) {
<span> attempts++;</span>
<span></span>
<span> <span>// The "Evaluator" provides feedback</span></span>
<span> <span>final</span> evaluationResponse = <span>await</span> ai.generate(</span>
<span> model: geminiFlash,</span>
<span> prompt:</span>
<span> <span>'Critique the following blog post. Is it clear, concise, and engaging? Provide specific feedback for improvement. Post: "<span>$content</span>"'</span>,</span>
<span> outputSchema: Evaluation.$schema,</span>
<span> );</span>
<span></span>
<span> <span>final</span> evaluation = evaluationResponse.output;</span>
<span> <span>if</span> (evaluation == <span>null</span>) {</span>
<span> <span>throw</span> Exception(<span>'Failed to evaluate content.'</span>);</span>
<span> }</span>
<span></span>
<span> <span>if</span> (evaluation.satisfied) {</span>
<span> <span>break</span>; <span>// Exit loop if content is good enough</span></span>
<span> }</span>
<span></span>
<span> feedback = evaluation.critique;</span>
<span></span>
<span> <span>// The "Optimizer" refines the content based on feedback</span></span>
<span> <span>final</span> optimizationResponse = <span>await</span> ai.generate(</span>
<span> model: geminiFlash,</span>
<span> prompt:</span>
<span> <span>'Revise the following blog post based on the feedback provided.\nPost: "<span>$content</span>"\nFeedback: "<span>$feedback</span>"'</span>,</span>
<span> );</span>
<span> content = optimizationResponse.text;</span>
<span> }</span>
<span></span>
<span> <span>return</span> content;</span>
<span> },</span>
<span> );</span>
<span>}</span>

最重要的是,雖然 Genkit 由 Google 開發,且與 Firebase 有高度整合(例如 genkit_firebase_ai),但它的設計是解耦的

  • genkit_shelf 套件支援你使用標準的 Dart Web 框架 shelf 來執行 AI 邏輯,完全不依賴 Firebase
  • 使用者可以接入 genkit_openaigenkit_anthropic 等非 Google 的模型外掛,並在任何支援 Dart 執行時的環境部署

更有趣的是,你可以在 Flutter App 中直接使用 Genkit 執行 AI 邏輯,直接使用本地模型,也可以把 Flutter App 當作 Client 呼叫遠端的 Genkit 服務,遠端的 Genkit 服務可以用 Python、TypeScript、Go 甚至 Dart 撰寫:

最後,雖然 Genkit 目前只內建了 OpenAI、Claude、Gemini 等部分 Provider,但你完全可以透過 OpenAI 協議接入 DeepSeek、豆包、Qwen 等支援,例如:

<div><div><div></div><span>dart</span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>```
<span><span>final</span> ai = Genkit(  </span>
<span>  plugins: [  </span>
<span>    <span>// DeepSeek 整合  </span></span>
<span>    openAI(  </span>
<span>      name: <span>'deepseek'</span>,</span>
<span>      apiKey: Platform.environment[<span>'DEEPSEEK_API_KEY'</span>],  </span>
<span>      baseUrl: <span>'https://api.deepseek.com'</span>,  </span>
<span>    ),  </span>
<span>    <span>// 豆包整合</span></span>
<span>    openAI(  </span>
<span>      name: <span>'doubao'</span>,</span>
<span>      apiKey: Platform.environment[<span>'DOUBAO_API_KEY'</span>],  </span>
<span>      baseUrl: <span>'https://ark.cn-beijing.volces.com/api/v3'</span>,  </span>
<span>    ),  </span>
<span>  ],  </span>
<span>);  </span>


> 而對於不支援相容協議的模型,就需要實作自訂的 `GenkitPlugin`。

所以,可以看到 Genkit Dart 對於 Flutter 來說是 AI 時代非常重要的進展,它讓 Flutter 能夠更快在多平台上實現 Agent 能力,進一步放大了 Flutter 的跨平台優勢。

那麼,你覺得 Genkit 對你有幫助嗎?

連結
--

[blog.dart.dev/announcing-…](https://link.juejin.cn?target=https%3A%2F%2Fblog.dart.dev%2Fannouncing-genkit-dart-build-full-stack-ai-apps-with-dart-and-flutter-2a5c90a27aab)

---

原文出處:https://juejin.cn/post/7615551904538755114

精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝26   💬7  
635
🥈
我愛JS
💬3  
10
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付