[C#] 串接 Agnes AI 生圖 API:agnes-image-2.1-flash 完整實作

  • 55
  • 0

最近都一直在測試有沒有可以產生圖片的 AI,看到 Agnes AI 有提供圖片生成 API,目前 agnes-image-2.1-flash 產生圖片的價格是 $0 / 張。

這時候我就感興趣了,可以有不用錢又可以透過程式產生圖片的機會,當然要用一波,畢竟現在 token 都好貴 :'(

它的 API 格式跟 OpenAI 很接近,所以不需要安裝特別的 SDK,直接使用 C# 的 HttpClient 就可以呼叫。

1. 註冊 Agnes AI

首先到 Agnes AI 官網註冊:
https://www.agnes-ai.com/

2. 取得 API Key

註冊完成後,進入 Agnes AI 後台建立 API Key:
https://platform.agnes-ai.com/settings/apiKeys



 

這部分應該就是各家 AI 平台必備的流程。取得 API Key 之後,就可以開始寫程式了。

3. 使用 C# 呼叫圖片生成 API

這邊我使用自己比較熟悉的 C#。開發過程中有遇到一些小問題,不過現在大部分程式都可以直接請 AI 協助處理。

基本上可以直接把這篇範例貼給 AI,換掉自己的 API Key,很快就能完成。

下面直接提供完整程式碼,裡面也有標註需要注意的地方,讓 AI 或開發者都能直接看懂並實作。


C# 程式碼

    internal class Program
    {
        static void Main(string[] args)
        {
            try
            {
                /*
                 * API 呼叫、圖片生成與圖片下載都是非同步操作,
                 * 由同步 Main 進入點等待 MainAsync 執行完成。
                 */
                MainAsync().GetAwaiter().GetResult();
            }
            catch (Exception ex)
            {
                Console.WriteLine("程式執行失敗:");
                Console.WriteLine(ex.Message);
            }

            Console.WriteLine();
            Console.WriteLine("按任意鍵結束...");
            Console.ReadKey();
        }

        private static async Task MainAsync()
        {
            /*
             * 直接帶入 Agnes AI API Key。
             */
            const string apiKey = "你的API KEY";

            /*
             * Agnes AI 圖片生成 API。
             */
            const string endpoint =
                "https://apihub.agnes-ai.com/v1/images/generations";

            if (string.IsNullOrWhiteSpace(apiKey) ||
                apiKey.Contains("帶入你的"))
            {
                Console.WriteLine("請先設定 Agnes AI API Key");
                return;
            }

            /*
             * 這個 HttpClient 只負責呼叫 Agnes AI API。
             *
             * 因為裡面會加入 Authorization Header,
             * 不要再用它下載最後產生的圖片。
             */
            using var apiHttpClient = new HttpClient
            {
                Timeout = TimeSpan.FromMinutes(5)
            };

            /*
             * Agnes AI 使用 Bearer Token 驗證。
             */
            apiHttpClient.DefaultRequestHeaders.Authorization =
                new AuthenticationHeaderValue("Bearer", apiKey);

            /*
             * 圖片生成參數。
             *
             * model:
             * 使用 Agnes Image 2.1 Flash。
             *
             * prompt:
             * 建議寫清楚主體、場景、風格、
             * 光線、構圖與圖片用途。
            
             * ratio:
             * 支援 1:1、3:4、4:3、16:9、9:16、
             * 2:3、3:2、21:9。
             *
             * response_format:
             * 必須放在 extra_body 裡面。
             */
            var request = new
            {
                model = "agnes-image-2.1-flash",

                prompt = """
                         一名台灣女性年輕女性軟體工程師坐在電腦前開發 C# 程式,
                         深色科技工作室,
                         螢幕顯示清楚的程式碼,
                         電影級寫實攝影風格,
                         柔和側光與自然陰影,
                         16:9 橫向構圖,
                         適合作為技術 Blog 文章封面
                         """,
                //支援 1K、2K、3K、4K。
                size = "2K",

                ratio = "16:9",

                extra_body = new
                {
                    response_format = "url"
                }
            };

            Console.WriteLine("開始產生圖片...");

            /*
             * 呼叫 Agnes AI 圖片生成 API。
             */
            using var apiResponse =
                await apiHttpClient.PostAsJsonAsync(
                    endpoint,
                    request);

            var responseText =
                await apiResponse.Content.ReadAsStringAsync();

            /*
             * 呼叫失敗時輸出 Agnes AI 的完整回傳內容。
             */
            if (!apiResponse.IsSuccessStatusCode)
            {
                Console.WriteLine(
                    $"圖片生成失敗:{(int)apiResponse.StatusCode} " +
                    $"{apiResponse.StatusCode}");

                Console.WriteLine(responseText);
                return;
            }

            /*
             * URL 模式的圖片網址位於:
             *
             * data[0].url
             */
            var result =
                JsonSerializer.Deserialize(
                    responseText,
                    new JsonSerializerOptions
                    {
                        PropertyNameCaseInsensitive = true
                    });

            var imageUrl = result?
                .Data?
                .FirstOrDefault()?
                .Url;

            if (string.IsNullOrWhiteSpace(imageUrl))
            {
                Console.WriteLine("API 回應中找不到圖片網址");
                Console.WriteLine(responseText);
                return;
            }

            Console.WriteLine("圖片生成完成,開始下載...");
            Console.WriteLine(imageUrl);

            /*
             * 圖片放在 platform-outputs.agnes-ai.space 網域。
             *
             * 這裡必須使用另一個沒有 Authorization Header
             * 的 HttpClient 下載圖片。
             *
             * 如果使用前面的 apiHttpClient,
             * Agnes API Key 會被一起送到圖片伺服器,
             * 可能造成 401 Unauthorized。
             */
            using var imageHttpClient = new HttpClient
            {
                Timeout = TimeSpan.FromMinutes(5)
            };

            using var imageResponse =
                await imageHttpClient.GetAsync(
                    imageUrl,
                    HttpCompletionOption.ResponseHeadersRead);

            if (!imageResponse.IsSuccessStatusCode)
            {
                var downloadError =
                    await imageResponse.Content.ReadAsStringAsync();

                Console.WriteLine(
                    $"圖片下載失敗:{(int)imageResponse.StatusCode} " +
                    $"{imageResponse.StatusCode}");

                Console.WriteLine(downloadError);
                return;
            }

            var imageBytes =
                await imageResponse.Content.ReadAsByteArrayAsync();

            if (imageBytes.Length == 0)
            {
                Console.WriteLine("圖片下載失敗:回傳內容為空");
                return;
            }

            /*
             * 嘗試根據 Content-Type 決定副檔名。
             *
             * Agnes AI 目前多半回傳 PNG,
             * 但保留 JPG 與 WebP 的處理。
             */
            var contentType =
                imageResponse.Content.Headers.ContentType?
                    .MediaType?
                    .ToLowerInvariant();

            var extension = contentType switch
            {
                "image/jpeg" => ".jpg",
                "image/webp" => ".webp",
                _ => ".png"
            };

            /*
             * 圖片儲存在程式執行目錄。
             *
             * 檔名加入時間,避免覆蓋之前產生的圖片。
             */
            var fileName =
                $"agnes-image-{DateTime.Now:yyyyMMdd-HHmmss}{extension}";

            var outputPath = Path.Combine(
                AppContext.BaseDirectory,
                fileName);

            await File.WriteAllBytesAsync(
                outputPath,
                imageBytes);

            Console.WriteLine();
            Console.WriteLine("圖片下載完成");
            Console.WriteLine($"檔案位置:{outputPath}");
            Console.WriteLine($"檔案大小:{imageBytes.Length:N0} Bytes");
        }
    }

    /*
     * Agnes AI 圖片生成 API 回應格式。
     */
    public sealed class ImageResponse
    {
        [JsonPropertyName("created")]
        public long Created { get; set; }

        [JsonPropertyName("data")]
        public List? Data { get; set; }
    }

    public sealed class ImageData
    {
        /*
         * response_format 使用 url 時,
         * 圖片網址會放在這個欄位。
         */
        [JsonPropertyName("url")]
        public string? Url { get; set; }

        /*
         * response_format 使用 Base64 時,
         * 圖片內容可能會放在這個欄位。
         */
        [JsonPropertyName("b64_json")]
        public string? Base64Json { get; set; }

        /*
         * 部分模型可能回傳調整後的提示詞。
         */
        [JsonPropertyName("revised_prompt")]
        public string? RevisedPrompt { get; set; }
    }
    

產生結果 


 

 

這次實際測試 Agnes AI 的圖片生成 API,串接難度不高。基本上拿到 API Key 之後,使用 C# 的 HttpClient 就可以直接呼叫。

目前 agnes-image-2.1-flash 的圖片生成價格是 $0 / 張,算是相當有吸引力。

免費帳號使用限制

官方文件版本更新到 2026 年 7 月 30 日,但配額表目前仍標示為 2026 年 6 月 28 日的公開參考值。

核心文字、圖片、影片與多模態 API 目前仍宣稱可以免費使用,也沒有標示免費期限。免費版的主要限制是 RPM,也就是每分鐘請求數。

免費帳號實際限制:

文字模型:20 RPM
圖片 1K:20 RPM
圖片 2K:10 RPM
圖片 3K:1 RPM
圖片 4K:1 RPM
影片:1 RPM

需要注意的是,官方有提供兩種 RPM 數字:

Public Request RPM:前端允許送出的請求數量。
Actual Executable RPM:實際能進入執行的請求數量。

 

結論

對於想透過程式加入 AI 生圖功能、製作 Blog 封面產生器,或只是想測試圖片模型的人來說,Agnes AI 算是蠻不錯的選擇。

當然,免費不代表完全沒有限制,仍然會受到 RPM 與使用額度影響,而且未來也可能調整價格,所以目前就是能用先用。

現在寫這種 API 串接,其實也不用自己慢慢查格式。把官方文件和這篇程式碼交給 AI,再換成自己的 API Key,基本上很快就可以完成。

至少目前實際測試下來,確實可以正常產生圖片,也能直接下載到本機。拿來製作一些小工具或文章封面,應該完全沒有問題。

趁現在還免費,可以斟酌使用看看 :)

 

---

The bug existed in all possible states.
Until I ran the code.