最近都一直在測試有沒有可以產生圖片的 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.


