本頁依用途整理本站對話端點的呼叫方式:文字對話、影像辨識、影像生成、語音辨識、語音生成、影片生成。各節的模組清單與 curl 範例依本站目前開通的模組即時產生,未開通的模組不會出現在本頁。
所有用途都呼叫同一個端點,只需更換 module 與對應的參數:
POST https://www.myai168.com/tw/ai/chat/chat
使用開發者金鑰認證,放在 Authorization: Bearer YOUR_API_KEY 標頭(也接受 X-Dev-Key 標頭)。範例中的 YOUR_API_KEY 請換成你自己的金鑰。金鑰取得網址:https://www.myai168.com/tw/ai/user/developer
以表單送出:純文字請求用 application/x-www-form-urlencoded(curl 的 --data-urlencode);需要上傳檔案時用 multipart/form-data(curl 的 -F,檔名前加 @)。curl 請加 -N,讓串流即時輸出。
本站單次請求(含全部上傳檔案)的總大小上限為 512 MB,超過時回 HTTP 413。
| 參數 | 型別 | 必填 | 說明 |
|---|---|---|---|
module | string | 必填 | 模組代號。default 代表本站預設模型;各用途可用的代號見下方各節。 |
input | string | 視模組而定 | 要送給模組的問題、指令或內容。文字對話與各種生成用途必填;語音辨識不需要。 |
upload_file[] | file | 視模組而定 | 上傳的檔案,可重複此欄位上傳多個檔案(multipart/form-data)。影像辨識與語音辨識必須帶檔案。 |
session_sn | integer | 選填 | 連續對話編號。第一次呼叫不帶;支援連續對話的模組會在串流中送出 data: {"session_sn": N},之後每次接續呼叫都帶回同一個值。 |
search_internet | boolean | 選填 | 設為 true 時,模型會先上網搜尋再回答(僅支援上網搜尋的模型有效;搜尋另外計費)。 |
effort | string | 選填 | 推理強度(僅推理模型有效,可用值依模型而定;未帶時使用該模型預設值)。 |
display | string | 選填 | 設為 summarized 時,在回覆中附上思考過程摘要(僅支援的推理模型有效;預設 omitted 不顯示)。 |
param2/param3/param4 | string | 視模組而定 | 模組專屬參數(例如語音辨識的語言、語音生成的聲音),意義依模組而定,見各節說明。 |
影像生成、影片生成等模組另有專屬欄位(例如 quality、aspect_ratio、resolution、duration),請見各節說明;模組用不到的欄位會被忽略。
| 模組代號 | 名稱 |
|---|---|
search | 搜尋 |
default | 網站預設模型 |
agent | AI Agent |
gemini_4_argon | Google Gemini 4 Argon |
gemini_3_8_flash | Google Gemini 3.8 Flash |
gemini_3_8_live | 即時語音對話 gemini-3.8-live |
gemini_3_8_live_extended_thinking | 即時語音對話 gemini-3.8-live-extended-thinking |
gemini_3_6_flash | Google Gemini 3.6 Flash |
gemini_3_5_flash_lite | Google Gemini 3.5 Flash 輕量版 |
gemini_3_1_pro | Google Gemini 3.1 專業版 |
gemini_3_1_flash_live | 即時語音對話 gemini-3.1-flash-live |
gemini_3_1_flash_lite | Google Gemini 3.1 Flash 輕量版 |
claude_fable_5_1 | Anthropic Claude Fable 5.1 頂級版 |
claude_fable_5 | Anthropic Claude Fable 5 頂級版 |
claude_opus_5_5 | Anthropic Claude Opus 5.5 旗艦版 |
claude_opus_5 | Anthropic Claude Opus 5 旗艦版 |
claude_opus_4_8 | Anthropic Claude Opus 4.8 旗艦版 |
claude_sonnet_5_5 | Anthropic Claude Sonnet 5.5 中階版 |
claude_sonnet_5 | Anthropic Claude Sonnet 5 中階版 |
claude_haiku_5_5 | Anthropic Claude Haiku 5.5 輕量版 |
claude_haiku_4_5 | Anthropic Claude Haiku 4.5 輕量版 |
gpt_6_astra | OpenAI GPT-6 Astra 旗艦版 |
gpt_6_1_sol | OpenAI GPT-6.1 Sol 準旗艦版 |
gpt_6_sol | OpenAI GPT-6 Sol 程式代理版 |
gpt_6_luna | OpenAI GPT-6 Luna 高效版 |
openai_decisions | OpenAI Decisions 決策判定 |
gpt_5_6_sol | OpenAI GPT-5.6 Sol 旗艦版 |
gpt_5_6_terra | OpenAI GPT-5.6 Terra 平衡版 |
gpt_5_6_luna | OpenAI GPT-5.6 Luna 輕量版 |
chatgpt_5_5 | OpenAI ChatGPT 5.5 旗艦版 |
chatgpt_5_4_mini | OpenAI ChatGPT 5.4 輕量版 |
chatgpt_5_4_nano | OpenAI ChatGPT 5.4 極簡版 |
perplexity_sonar_deep_research | Perplexity Sonar 深度研究版 |
perplexity_sonar_reasoning_pro | Perplexity Sonar 推理專業版 |
perplexity_sonar_pro | Perplexity Sonar 專業版 |
grok_4_7 | xAI Grok 4.7 |
grok_4_6 | xAI Grok 4.6 |
grok_4_5 | xAI Grok 4.5 |
muse_spark_1.3 | Meta Muse Spark 1.3 |
kimi_k3 | 月之暗面 Kimi K3 |
glm_5_2 | 智譜 GLM 5.2 |
qwen3.5_397b_a17b | 阿里 Qwen 3.5 397B A17B 開源 |
knowledge_chunk | 知識區塊切割 |
meeting_minutes | 會議記錄整理 |
notes | 筆記整理 |
slide_outline | 投影片大綱 |
slide2 | 投影片生成2 |
slide | 投影片生成 |
editor | AI 小編 / 文案改寫 |
official_document | 公文寫作 |
chatpdf | PDF文件對話(僅文字) |
homework | 作業助手 |
social_media_content_improver | 社群貼文優化 |
contract | 合約審閱 |
report | 報告生成 |
webpage_summary | 網頁摘要 |
google_search | Google 搜尋 |
google_news | Google 新聞 |
paper | 論文寫作 |
speech_to_text | 語音辨識 |
gpt_transcribe | 語音辨識 gpt_transcribe |
whisper_1 | 語音辨識 whisper_1 |
gpt_4o_transcribe_diarize | 多語者語音辨識 |
programming | 程式設計助手 |
plan | 企劃案寫作 |
news_report | 新聞稿撰寫 |
news_oral_report | 新聞口語播報稿 |
ocr | 圖片光學字元辨識 |
document_ocr_to_md | 文件光學字元辨識轉Markdown |
document_ocr_to_docx | 文件光學字元辨識轉docx |
gai_article_detector | AI 生成文章偵測 |
summary_500 | 文章摘要 (500 字) |
summary_1000 | 文章摘要 (1000 字) |
writing_optimizer | 寫作優化 |
essay_grading | 作文評分 |
zenrows | 網路爬蟲 |
get_text | 文件文字擷取 |
gpt_image_2_5_flare | GPT Image 2.5 Flare 圖像生成 |
gpt_image_2_5_sunburst | GPT Image 2.5 Sunburst 圖像生成 |
gemini_nano_banana_2_1 | Google Nano Banana 2.1 |
nano_banana_pro | Google Nano Banana 專業版 |
nano_banana_3_1_flash | Google Nano Banana 3.1 Flash 輕量版 |
image_to_prompt | 圖像反推提示詞 |
gemini_omni_flash_1_1 | Google Gemini Omni Flash 1.1 文生影片 |
music | 音樂生成 |
music_extend | 接續歌曲 |
music_cover | 歌曲風格重製 |
music_voice | 聲音複製唱歌 |
music_stems | 人聲伴奏分離 |
change_clothes | AI 換衣服 |
seedream_5_0 | BytePlus Seedream 5.0 Pro 文生圖 |
seedance_2_5 | seedance 2.5 生成影片 |
seedance_2_0 | seedance 2.0 生成影片 |
cheer_video | 加油影片生成 |
christmas_video | 聖誕影片生成 |
rich_new_year_video | 新年發財影片生成 |
gemini_3_8_flash_tts | Google Gemini 3.8 Flash 文字轉語音 |
gemini_3_8_flash_lite_tts | Google Gemini 3.8 Flash-Lite 文字轉語音 |
gemini_2_5_flash_tts | Google Gemini 2.5 Flash 文字轉語音 |
gemini_2_5_pro_tts | Google Gemini 2.5 Pro 文字轉語音 |
text_to_speech_byteplus | BytePlus seed-tts 文字轉語音 |
seedaudio_1_0 | BytePlus SeedAudio 1.0 音訊生成 |
voice_replication | BytePlus 聲音複製 |
translate_to_tc | 翻譯成正體中文 |
translate_to_english | 翻譯成英文 |
english_gramma | 英文文法檢查 |
speak_female | 多國語音女老師 Sophie |
speak_male | 多國語音男老師 Alex |
travel_translator | 旅行翻譯機 |
gemini_3.5_live_translate | 即時語音翻譯 gemini-3.5-live-translate |
gpt_live_transcribe | 即時語音辨識 gpt_live_transcribe |
sc2tc | 簡體轉正體 |
tc2sc | 正體轉簡體 |
simplified_chinese_detector | 簡體中文偵測 |
check_typo | 檢查錯字 |
health_education | 健康衛教 |
每次成功呼叫依模型計價自動扣點數,回覆末端會附上本次扣點摘要;發生任何錯誤或連線中斷一律不扣點。錯誤以 HTTP 200+串流內的文字訊息回覆(例如金鑰無效、點數不足、模組未開通),不是 HTTP 錯誤碼;單次請求超過大小上限時回 HTTP 413。
| 狀況 | 串流內的訊息 | 出現位置 |
|---|---|---|
| 金鑰缺漏或無效 | 「請先登入」連結 | html 事件 |
| 金鑰已達使用點數限制 | API 金鑰已達使用點數限制! | html 事件 |
| 本站未開放 API 呼叫 | 本站未開放 API 呼叫。 | html 事件 |
| 點數不足 | 請儲值!/點數不足,請儲值! | html 事件 |
| 模型服務暫時異常,或請求內容被模型拒絕 | 說明原因的文字訊息(服務異常時以 ERROR! 開頭並附 UTC 時間) | 文字片段 |
以上情況都不扣點。程式判斷建議:串流結束時若沒有收到任何回覆文字與產出檔案,就把 html 事件的內容當作失敗原因處理;訊息文字會依站台語系顯示,請不要用整句文字完全比對來判斷。
一般問答、寫作、翻譯、程式等文字工作都走文字對話:module 帶文字模型代號、input 帶問題,回覆以串流逐段送出文字。
default 代表本站預設模型;要指定特定模型,請換成「快速開始與共通參數」一節「本站可用模組代號」清單中的任一代號。
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "module=default" \ --data-urlencode "input=你好,請自我介紹。"
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "module=default" \ --data-urlencode "search_internet=true" \ --data-urlencode "input=請整理今天最重要的科技新聞。"
search_internet 僅對支援上網搜尋的模型有效;搜尋另外計費。
第一次呼叫不帶 session_sn;從串流讀取 data: {"session_sn": N} 事件並保存該值,之後同一段對話的每次接續呼叫都帶回這個值。
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "module=default" \ --data-urlencode "input=請推薦三本時間管理的書。"
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "module=default" \ --data-urlencode "session_sn=YOUR_SESSION_SN" \ --data-urlencode "input=哪一本最適合初學者?"
請把 YOUR_SESSION_SN 換成第一次呼叫取得的值。
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "module=claude_opus_5_5" \ --data-urlencode "effort=high" \ --data-urlencode "input=請證明根號 2 是無理數。"
effort 設定推理模型的思考強度(常見值:low、medium、high;部分模型另接受 minimal、xhigh、max)。可用值依模型而定,未帶時使用該模型預設值。display 設為 summarized 時,支援的模型會在回覆中附上思考過程摘要。
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "module=openai_decisions" \ --data-urlencode "param2=choice" \ --data-urlencode "param3=這則客訴應該由哪個部門處理?" \ --data-urlencode "param4=billing|Payments, invoices and refunds technical|Problems using the product shipping|Delivery and tracking other|Anything else" \ --data-urlencode "input=我的訂單被重複收費了。"
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "module=openai_decisions" \ -F "param2=predicate" \ -F "param3=這張照片中的商品有損壞嗎?" \ -F "upload_file[]=@photo.jpg"
param2 是問題類型(predicate、choice、score),param3 是問題或判定條件,param4 一行一個列出選項(分類選擇)或等級(等級評分),格式為 value|description。回覆為表格,列出各選項的機率與信心度。用 upload_file[] 上傳圖片即可判定圖片;省略 param3 時以輸入文字當問題、以圖片當判定對象。
上傳圖片並以 input 提問,由支援影像的模型看圖回答(描述內容、辨識文字、分析圖表等)。圖片以 multipart/form-data 的 upload_file[] 欄位上傳。
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "module=default" \ -F "input=這張圖片裡有什麼?請詳細描述。" \ -F "upload_file[]=@photo.jpg"
重複 upload_file[] 欄位即可一次送出多張圖片。可接受的格式、張數與大小上限依模組而定。
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "module=ocr" \ -F "input=請擷取這張圖片中的所有文字。" \ -F "upload_file[]=@scan.png"
using System;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
string url = "https://www.myai168.com/tw/ai/chat/chat";
string imagePath = "scan.png";
using var http = new HttpClient { Timeout = TimeSpan.FromMinutes(10) };
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_API_KEY");
using var form = new MultipartFormDataContent();
form.Add(new StringContent("ocr"), "module");
form.Add(new StringContent("請擷取這張圖片中的所有文字。"), "input");
form.Add(new ByteArrayContent(await File.ReadAllBytesAsync(imagePath)),
"upload_file[]", Path.GetFileName(imagePath));
using var request = new HttpRequestMessage(HttpMethod.Post, url) { Content = form };
using var response = await http.SendAsync(
request, HttpCompletionOption.ResponseHeadersRead);
response.EnsureSuccessStatusCode();
var text = new StringBuilder();
var notice = new StringBuilder();
using var reader = new StreamReader(
await response.Content.ReadAsStreamAsync(), Encoding.UTF8);
string? line;
while ((line = await reader.ReadLineAsync()) != null)
{
if (!line.StartsWith("data: "))
{
continue;
}
using var doc = JsonDocument.Parse(line.Substring(6));
JsonElement root = doc.RootElement;
if (root.TryGetProperty("html", out JsonElement html))
{
notice.AppendLine(html.GetString());
continue;
}
if (!root.TryGetProperty("choices", out JsonElement choices)
|| choices.GetArrayLength() == 0)
{
continue;
}
JsonElement choice = choices[0];
if (choice.TryGetProperty("delta", out JsonElement delta)
&& delta.TryGetProperty("content", out JsonElement content)
&& content.ValueKind == JsonValueKind.String)
{
text.Append(content.GetString());
}
if (choice.TryGetProperty("finish_reason", out JsonElement finish)
&& finish.ValueKind == JsonValueKind.String
&& finish.GetString() == "stop")
{
break;
}
}
Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine(text.Length > 0 ? text.ToString() : notice.ToString());
}
}
需要 .NET 6 以上。範例把 scan.png 以 MultipartFormDataContent 上傳,逐行讀取串流並把 choices[0].delta.content 的文字接起來;串流結束仍沒有任何文字時,html 事件的內容就是失敗原因。上傳的檔名請保留副檔名,圖片格式依副檔名判斷。
| 模組代號 | 名稱 | 備註 |
|---|---|---|
default | 網站預設模型 | 本站預設模型。 |
gemini_4_argon | Google Gemini 4 Argon | — |
gemini_3_8_flash | Google Gemini 3.8 Flash | — |
gemini_3_6_flash | Google Gemini 3.6 Flash | — |
gemini_3_5_flash_lite | Google Gemini 3.5 Flash 輕量版 | — |
gemini_3_1_pro | Google Gemini 3.1 專業版 | — |
gemini_3_1_flash_lite | Google Gemini 3.1 Flash 輕量版 | — |
claude_fable_5_1 | Anthropic Claude Fable 5.1 頂級版 | — |
claude_fable_5 | Anthropic Claude Fable 5 頂級版 | — |
claude_opus_5_5 | Anthropic Claude Opus 5.5 旗艦版 | — |
claude_opus_5 | Anthropic Claude Opus 5 旗艦版 | — |
claude_opus_4_8 | Anthropic Claude Opus 4.8 旗艦版 | — |
claude_sonnet_5_5 | Anthropic Claude Sonnet 5.5 中階版 | — |
claude_sonnet_5 | Anthropic Claude Sonnet 5 中階版 | — |
claude_haiku_5_5 | Anthropic Claude Haiku 5.5 輕量版 | — |
claude_haiku_4_5 | Anthropic Claude Haiku 4.5 輕量版 | — |
gpt_6_astra | OpenAI GPT-6 Astra 旗艦版 | — |
gpt_6_1_sol | OpenAI GPT-6.1 Sol 準旗艦版 | — |
gpt_6_sol | OpenAI GPT-6 Sol 程式代理版 | — |
gpt_6_luna | OpenAI GPT-6 Luna 高效版 | — |
openai_decisions | OpenAI Decisions 決策判定 | — |
gpt_5_6_sol | OpenAI GPT-5.6 Sol 旗艦版 | — |
gpt_5_6_terra | OpenAI GPT-5.6 Terra 平衡版 | — |
gpt_5_6_luna | OpenAI GPT-5.6 Luna 輕量版 | — |
chatgpt_5_5 | OpenAI ChatGPT 5.5 旗艦版 | — |
chatgpt_5_4_mini | OpenAI ChatGPT 5.4 輕量版 | — |
chatgpt_5_4_nano | OpenAI ChatGPT 5.4 極簡版 | — |
perplexity_sonar_deep_research | Perplexity Sonar 深度研究版 | — |
perplexity_sonar_reasoning_pro | Perplexity Sonar 推理專業版 | — |
perplexity_sonar_pro | Perplexity Sonar 專業版 | — |
grok_4_7 | xAI Grok 4.7 | — |
grok_4_6 | xAI Grok 4.6 | — |
grok_4_5 | xAI Grok 4.5 | — |
muse_spark_1.3 | Meta Muse Spark 1.3 | — |
kimi_k3 | 月之暗面 Kimi K3 | — |
qwen3.5_397b_a17b | 阿里 Qwen 3.5 397B A17B 開源 | — |
ocr | 圖片光學字元辨識 | 必須上傳至少一張圖片檔案。 |
image_to_prompt | 圖像反推提示詞 | 必須上傳至少一張圖片檔案。 |
以 input 描述想要的畫面即可生成圖片;上傳參考圖可以修改圖片,帶回 session_sn 可以接續修改上一張。生成的圖片以下載連結回覆(見「解析回應與取得產出檔案」)。
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "module=gpt_image_2_5_flare" \ --data-urlencode "input=一隻坐在書桌上的貓,數位插畫"
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "module=gpt_image_2_5_flare" \ -F "input=把背景換成夕陽下的海灘" \ -F "upload_file[]=@photo.png"
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "module=gpt_image_2_5_flare" \ --data-urlencode "session_sn=YOUR_SESSION_SN" \ --data-urlencode "input=讓貓圍上一條紅色圍巾"
支援連續修改的影像模組會在第一次呼叫送出 data: {"session_sn": N};帶回該值且未上傳新圖片時,會以上一張結果作為修改的原圖。
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "module=gpt_image_2_5_flare" \ --data-urlencode "quality=high" \ --data-urlencode "input=黎明時分的燈塔水彩畫"
| 參數 | 必填 | 描述 |
|---|---|---|
upload_file[] | 選填 | 要修改的原圖或參考圖(multipart/form-data,可多個檔案)。下表標示必須上傳圖片的模組,沒有圖片無法執行。 |
session_sn | 選填 | 接續修改上一次呼叫生成的圖片(僅支援連續修改的模組)。 |
quality | 選填 | gpt_image_2_5_flare、gpt_image_2_5_sunburst 的圖片品質:auto、low、medium、high、xhigh、max(預設 auto,由模型自動決定)。品質越高,產出量越大,所需點數也越多。 |
| 模組代號 | 名稱 | 備註 |
|---|---|---|
gpt_image_2_5_flare | GPT Image 2.5 Flare 圖像生成 | 可上傳參考圖。 支援連續修改。 圖片輸出尺寸:由模型依提示自動決定,常見為 1024x1024、1024x1536 或 1536x1024,也可能是其他解析度(最長邊不超過 3840 像素)。 |
gpt_image_2_5_sunburst | GPT Image 2.5 Sunburst 圖像生成 | 可上傳參考圖。 支援連續修改。 圖片輸出尺寸:由模型依提示自動決定,常見為 1024x1024、1024x1536 或 1536x1024,也可能是其他解析度(最長邊不超過 3840 像素)。 |
gemini_nano_banana_2_1 | Google Nano Banana 2.1 | 可上傳參考圖。 支援連續修改。 圖片輸出尺寸:1K(約 1024x1024)。 |
nano_banana_pro | Google Nano Banana 專業版 | 可上傳參考圖。 支援連續修改。 圖片輸出尺寸:1K(約 1024x1024)。 |
nano_banana_3_1_flash | Google Nano Banana 3.1 Flash 輕量版 | 可上傳參考圖。 支援連續修改。 圖片輸出尺寸:1K(約 1024x1024)。 |
change_clothes | AI 換衣服 | 必須上傳至少一張圖片檔案。 圖片輸出尺寸:2K 解析度級距(1:1 時約 2048x2048,長寬比由模型依提示或參考圖決定)。 |
seedream_5_0 | BytePlus Seedream 5.0 Pro 文生圖 | 可上傳參考圖。 支援連續修改。 圖片輸出尺寸:2K 解析度級距(1:1 時約 2048x2048,長寬比由模型依提示或參考圖決定)。 |
上傳音檔轉成文字,可指定語言,部分模組可輸出 SRT 字幕格式。
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "module=speech_to_text" \ -F "param2=zh" \ -F "upload_file[]=@speech.mp3"
不需要帶 input:語音辨識模組不使用輸入的文字。
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "module=speech_to_text" \ -F "param2=zh" \ -F "param3=on" \ -F "upload_file[]=@speech.mp3"
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "module=speech_to_text" \ -F "param2=zh" \ -F "hint=林美玲,台積電,Kubernetes" \ -F "upload_file[]=@speech.mp3"
| 參數 | 必填 | 描述 |
|---|---|---|
upload_file[] | 必填 | 要辨識的音檔。可接受的格式與大小上限依模組而定。 |
param2 | 選填 | 音檔語言,填 ISO 639-1 兩碼語言代碼,例如 zh、en、ja、ko。未帶時以本站預設語言辨識;帶 zh 時,辨識結果以正體中文輸出。 |
param3 | 選填 | 設為 on 時以 SRT 字幕格式輸出(僅下表標示支援的模組;其他模組會回覆不支援 SRT,且不扣點)。 |
hint | 選填 | 音檔中可能出現的人名與術語,以逗號分隔,例如 林美玲,台積電,Kubernetes,可提升專有名詞的辨識正確率。換行會被移除,最多使用前 200 個字;下表標示不支援的模組會忽略此參數,並在回覆中註明。 |
| 模組代號 | 名稱 | SRT 字幕 | 人名與術語提示 |
|---|---|---|---|
speech_to_text | 語音辨識 | 支援 | 支援 |
gpt_transcribe | 語音辨識 gpt_transcribe | 不支援 | 支援 |
whisper_1 | 語音辨識 whisper_1 | 支援 | 支援 |
gpt_4o_transcribe_diarize | 多語者語音辨識 | 不支援 | 不支援 |
把 input 的文字轉成語音,以 param2 等參數選擇聲音與語言;產出為 MP3 音檔的下載連結。
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "module=gemini_3_8_flash_tts" \ --data-urlencode "param2=Kore" \ --data-urlencode "param3=cmn-CN" \ --data-urlencode "param4=溫暖開朗" \ --data-urlencode "input=歡迎光臨我們的網站,祝您有美好的一天。"
| 參數 | 必填 | 描述 |
|---|---|---|
input | 必填 | 要念出的文字。 |
param2 | 選填 | 聲音名稱(不分大小寫;未帶時為 Kore),見下方聲音清單。 |
param3 | 選填 | 語言代碼(BCP-47,例如 cmn-CN、en-US、ja-JP)。未帶時自動偵測語言。 |
param4 | 選填 | gemini_3_8_flash_tts、gemini_3_8_flash_lite_tts 的說話語氣,例如 溫暖開朗。也可以寫在 input 的第一行,格式為 語氣:溫暖開朗;該行不會被念出。 |
gemini_3_8_flash_tts、gemini_3_8_flash_lite_tts、gemini_2_5_flash_tts、gemini_2_5_pro_tts 使用相同的參數。
| 值 | 描述 |
|---|---|
Zephyr | 明亮 |
Puck | 活潑 |
Charon | 知性 |
Kore | 堅定 |
Fenrir | 興奮 |
Leda | 年輕 |
Orus | 堅定 |
Aoede | 輕快 |
Callirrhoe | 隨和 |
Autonoe | 明亮 |
Enceladus | 氣音 |
Iapetus | 清晰 |
Umbriel | 隨和 |
Algieba | 柔順 |
Despina | 柔順 |
Erinome | 清晰 |
Algenib | 沙啞 |
Rasalgethi | 知性 |
Laomedeia | 活潑 |
Achernar | 輕柔 |
Alnilam | 堅定 |
Schedar | 平穩 |
Gacrux | 溫暖 |
Pulcherrima | 直率 |
Achird | 友善 |
Zubenelgenubi | 隨性 |
Vindemiatrix | 溫和 |
Sadachbia | 生動 |
Sadaltager | 博學 |
Sulafat | 溫暖 |
| 值 | 描述 |
|---|---|
de-DE | 德語(德國) |
en-AU | 英語(澳洲) |
en-GB | 英語(英國) |
en-IN | 英語(印度) |
en-US | 英語(美國) |
es-US | 西班牙語(美國) |
fr-FR | 法語(法國) |
hi-IN | 印地文 |
pt-BR | 葡萄牙語(巴西) |
ar-XA | 阿拉伯文 |
es-ES | 西班牙語(西班牙) |
fr-CA | 法語(加拿大) |
id-ID | 印尼語(印尼) |
it-IT | 義大利語(義大利) |
ja-JP | 日語(日本) |
tr-TR | 土耳其語(土耳其) |
vi-VN | 越南語(越南) |
bn-IN | 孟加拉語(印度) |
gu-IN | 古吉拉特語(印度) |
kn-IN | 坎納達語(印度) |
ml-IN | 馬拉雅拉姆語(印度) |
mr-IN | 馬拉地語(印度) |
ta-IN | 坦米爾語(印度) |
te-IN | 泰盧固語(印度) |
nl-NL | 荷蘭語(荷蘭) |
ko-KR | 韓語(南韓) |
cmn-CN | 中文 |
pl-PL | 波蘭語(波蘭) |
ru-RU | 俄語(俄羅斯) |
th-TH | 泰語(泰國) |
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "module=text_to_speech_byteplus" \ --data-urlencode "param2=zh_female_wanwanxiaohe_moon_bigtts" \ --data-urlencode "input=歡迎光臨我們的網站,祝您有美好的一天。"
| 參數 | 必填 | 描述 |
|---|---|---|
input | 必填 | 要念出的文字。 |
param2 | 必填 | 聲音代號,見下方聲音清單。 |
| 值 | 描述 |
|---|---|
zh_female_wanwanxiaohe_moon_bigtts | 伊莎貝拉 (Isabella) - 台灣甜美 |
zh_female_cancan_mars_bigtts | 燦燦 (Luna) - 通用明亮女聲 |
zh_male_baqiqingshu_mars_bigtts | 愛德華 (Edward) - 霸氣青叔 |
zh_female_wenroushunv_mars_bigtts | 艾瑪 (Emma) - 溫柔淑女 |
zh_female_shaoergushi_mars_bigtts | 蒂娜 (Tina) - 少兒故事 |
zh_male_silang_mars_bigtts | 威廉 (William) - 磁性司朗 |
zh_male_jieshuonansheng_mars_bigtts | 詹姆斯 (James) - 解說男聲 |
zh_female_jitangmeimei_mars_bigtts | 格蕾絲 (Grace) - 雞湯妹妹 |
zh_female_tiexinnvsheng_mars_bigtts | 索菲亞 (Sophia) - 貼心女聲 |
zh_female_qiaopinvsheng_mars_bigtts | 米婭 (Mia) - 俏皮女聲 |
zh_female_mengyatou_mars_bigtts | 艾娃 (Ava) - 萌丫頭 |
zh_female_qingxinnvsheng_mars_bigtts | 奧莉維亞 (Olivia) - 清新女聲 |
zh_female_linjia_mars_bigtts | 莉莉 (Lily) - 鄰家女孩 |
en_female_anna_mars_bigtts | 安娜 (Anna) - 美式溫柔 |
en_male_adam_mars_bigtts | 亞當 (Adam) - 美式清晰 |
en_female_sarah_mars_bigtts | 莎拉 (Sarah) - 澳洲女聲 |
en_male_dryw_mars_bigtts | 德魯 (Dryw) - 澳洲深沉 |
en_male_smith_mars_bigtts | 史密斯 (Smith) - 英式深沉 |
zh_male_guozhoudege_moon_bigtts | 安德魯 (Andrew) - 粵語男聲 |
zh_female_daimengchuanmei_moon_bigtts | 埃琳娜 (Elena) - 四川萌妹 |
zh_male_jingqiangkanye_moon_bigtts | 托馬斯 (Thomas) - 京腔侃爺 |
zh_female_wanqudashu_moon_bigtts | 羅伯特 (Robert) - 頑皮大叔 |
zh_female_gaolengyujie_moon_bigtts | 夏洛特 (Charlotte) - 高冷御姐 |
zh_male_wennuanahu_moon_bigtts | 馬克 (Mark) - 溫暖阿虎 |
zh_female_linjianvhai_moon_bigtts | 萊拉 (Lila) - 清新鄰家 |
zh_male_shaonianzixin_moon_bigtts | 伊森 (Ethan) - 自信少年 |
zh_male_yuanboxiaoshu_moon_bigtts | 約瑟夫 (Joseph) - 淵博小叔 |
zh_male_yangguangqingnian_moon_bigtts | 喬治 (George) - 陽光青年 |
zh_female_shuangkuaisisi_moon_bigtts | 艾莉亞 (Aria) - 爽快女聲 |
multi_female_shuangkuaisisi_moon_bigtts | 春子 (Haruko) - 日/西語活力女聲 |
multi_male_jingqiangkanye_moon_bigtts | 和音 (Kazune) - 日/西語男聲 |
multi_female_gaolengyujie_moon_bigtts | 明美 (Akemi) - 日語高冷女聲 |
multi_male_wanqudashu_moon_bigtts | 浩 (Hiroshi) - 日/西語大叔 |
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "module=voice_replication" \ -F "input=歡迎光臨我們的網站,祝您有美好的一天。" \ -F "upload_file[]=@voice_sample.mp3"
上傳一段要模仿的清晰人聲錄音(upload_file[]),並把要念出的文字放在 input。
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "module=seedaudio_1_0" \ --data-urlencode "input=細雨打在窗上,遠處傳來雷聲,寧靜的氛圍"
在 input 描述想要的音效、人聲或氛圍。可另附最多 3 段參考音檔(在文字中以 @Audio1、@Audio2… 引用)或 1 張參考圖片;音檔與圖片不可混用。
| 模組代號 | 名稱 | 備註 |
|---|---|---|
gemini_3_8_flash_tts | Google Gemini 3.8 Flash 文字轉語音 | 音訊輸出格式:MP3。 |
gemini_3_8_flash_lite_tts | Google Gemini 3.8 Flash-Lite 文字轉語音 | 音訊輸出格式:MP3。 |
gemini_2_5_flash_tts | Google Gemini 2.5 Flash 文字轉語音 | 音訊輸出格式:MP3。 |
gemini_2_5_pro_tts | Google Gemini 2.5 Pro 文字轉語音 | 音訊輸出格式:MP3。 |
text_to_speech_byteplus | BytePlus seed-tts 文字轉語音 | 音訊輸出格式:MP3。 |
seedaudio_1_0 | BytePlus SeedAudio 1.0 音訊生成 | 文字輸入上限:3,000 字元。 音訊輸出格式:MP3(最長 120 秒)。 |
voice_replication | BytePlus 聲音複製 | 音訊輸出格式:MP3。 |
以 input 描述畫面生成影片,可指定長寬比、解析度、長度,或上傳圖片作為首幀與參考素材;產出為 MP4 影片的下載連結。
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "module=seedance_2_5" \ --data-urlencode "aspect_ratio=16:9" \ --data-urlencode "resolution=1080p" \ --data-urlencode "duration=10" \ --data-urlencode "generate_audio=true" \ --data-urlencode "input=一隻貓以慢動作跳過圍籬,電影感光線"
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "module=seedance_2_5" \ -F "input=花朵緩緩綻放" \ -F "first_frame=@start.jpg" \ -F "last_frame=@end.jpg"
| 參數 | 必填 | 描述 |
|---|---|---|
aspect_ratio | 選填 | 長寬比(預設 16:9)。seedance_2_5: 16:9、9:16、1:1、4:3、3:4、21:9、adaptiveseedance_2_0: 16:9、9:16、1:1、4:3、3:4、21:9、9:21 |
resolution | 選填 | seedance_2_5 的解析度:720p、1080p(預設 720p)。 |
duration | 選填 | seedance_2_5 的影片長度(秒):4 至 30(預設 15)。 |
generate_audio | 選填 | true(預設)同時生成聲音;false 生成無聲影片。 |
first_frame | 選填 | 作為第一格畫面的圖片檔。 |
last_frame | 選填 | 作為最後一格畫面的圖片檔。 |
keyframes[] | 選填 | 參考圖片(可多個檔案)。 |
upload_file[] | 選填 | 參考圖片、影片或聲音(可多個檔案)。 |
首幀/末幀不可與參考素材(keyframes[] 或 upload_file[])在同一次呼叫中混用;混用時會在生成前被拒絕,且不扣點。
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "module=gemini_omni_flash_1_1" \ --data-urlencode "resolution=1080p" \ --data-urlencode "aspect_ratio=9:16" \ --data-urlencode "input=一隻貓以慢動作跳過圍籬,電影感光線"
| 參數 | 必填 | 描述 |
|---|---|---|
resolution | 選填 | gemini_omni_flash_1_1 的解析度:720p、1080p、4k(預設 720p)。 |
aspect_ratio | 選填 | gemini_omni_flash_1_1 的長寬比:16:9、9:16(預設 16:9)。 |
upload_file[] | 選填 | 影片的參考圖片。 |
session_sn | 選填 | 帶回上一次呼叫取得的值,即可修改上一支影片。 |
影片生成通常需要數分鐘。串流期間會持續送出進度訊息,請保持連線直到收到結束事件(連線中斷一律不扣點)。
| 模組代號 | 名稱 | 備註 |
|---|---|---|
gemini_omni_flash_1_1 | Google Gemini Omni Flash 1.1 文生影片 | 影片輸出:一部含音訊的 MP4 影片,解析度(預設 720P,可選 1080P/4K 放大)與長寬比(16:9 或 9:16)依面板選項,長度由模型決定(約 3~10 秒)。 |
seedance_2_5 | seedance 2.5 生成影片 | 影片輸出:一部 4 到 30 秒(預設 15 秒)720P 或 1080P 的 MP4 影片,長度、解析度與長寬比依面板選項(含參考影片時由模型自動決定長寬比與長度,最長 30 秒)。 |
seedance_2_0 | seedance 2.0 生成影片 | 影片輸出:一部 15 秒 720P MP4 影片,長寬比依面板選項。 |
呼叫你自己建立的、或本站公開的 GPTs 客製助手,走站台原生對話端點:送出 module=gpts,並以 param2 指定助手編號。編號就是該助手對話頁網址結尾的數字(https://www.myai168.com/tw/ai/gpts/gpts?sn=YOUR_GPT_SN)。
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "module=gpts" \ --data-urlencode "param2=YOUR_GPT_SN" \ --data-urlencode "input=你好,請自我介紹。"
接續同一段對話——請把 YOUR_SESSION_SN 換成上一次回應串流回傳的 session_sn 值:
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "module=gpts" \ --data-urlencode "param2=YOUR_GPT_SN" \ --data-urlencode "session_sn=YOUR_SESSION_SN" \ --data-urlencode "input=請繼續。"
助手的角色指令與綁定的知識庫會自動套用,不需要在 input 內重複描述。要接續同一段對話,把串流回傳的 session_sn 值帶回來。費用依本站預設模型計價;私有助手只有建立者本人的金鑰可以呼叫。
AI Agent 會把任務拆成多個步驟,逐輪使用工具(上網搜尋、抓取網頁、閱讀文件、撰寫文件、產生圖表與檔案)直到完成。送出 module=agent,並在 input 描述要完成的任務即可。每次開始新對話都會建立一本專屬的筆記本,上傳的檔案與產出檔案都存放在該筆記本。
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "module=agent" \ --data-urlencode "input=你好,請自我介紹。"
第一次呼叫不帶 session_sn;任務一開始,串流就會送出 data: {"session_sn": N} 事件,請保存這個值,之後同一段對話的每一次呼叫都帶回同一個值(接續的呼叫不會再送出新的編號)。AI Agent 會延續前幾輪的內容,並沿用同一本筆記本,先前上傳與產出的檔案都還在,可以直接要求修改。
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "module=agent" \ --data-urlencode "input=請調查電動機車市場,整理成一份簡短的 Word 報告。"
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "module=agent" \ --data-urlencode "session_sn=YOUR_SESSION_SN" \ --data-urlencode "input=請把報告的結論改成條列式。"
請把 YOUR_SESSION_SN 換成第一次呼叫取得的值。
任務步驟較多時,AI Agent 可能在中途停下來詢問是否繼續;回覆「繼續」並帶同一個 session_sn,就會接著先前的進度完成。要開始不相關的新任務時不要帶 session_sn,系統會另建一本新的筆記本。
curl -N https://www.myai168.com/tw/ai/chat/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "module=agent" \ -F "input=請閱讀這份文件,列出五個重點。" \ -F "upload_file[]=@report.pdf"
上傳的檔案(upload_file[],可多個)會存進該次對話的筆記本,供 AI Agent 讀取與編輯。
| 參數 | 必填 | 描述 |
|---|---|---|
module | 必填 | 固定為 agent。 |
input | 必填 | 要完成的任務;接續對話時則是追加的要求。 |
session_sn | 選填 | 連續對話編號,接續同一段對話時帶回(見上方說明)。 |
chat_model | 選填 | 執行任務的模型,可用值見下表;未帶或帶 default 時使用本站預設模型。 |
upload_file[] | 選填 | 要交給 AI Agent 處理的檔案(multipart/form-data,可多個)。 |
notebook_sn | 選填 | 在自己的指定筆記本裡執行,可使用該筆記本的來源、記事與檔案;編號即筆記本頁網址 notebook?sn= 後面的數字。必須是自己的筆記本,否則會回覆沒有權限並停止,不扣點。未帶時,新對話會另建一本新的筆記本,接續的對話則沿用最近一次使用的筆記本。 |
chat_log_ts | 選填 | 搭配 notebook_sn 指定要接續該筆記本的哪一條對話串,串流中的 data: {"chat_log_ts": "..."} 事件即為本次使用的對話串。一般的連續對話只要帶 session_sn 即可。 |
chat_model 可用值(25 個)| 值 | 名稱 |
|---|---|
default | 站台預設 |
gemini_4_argon | Gemini 4 Argon |
gemini_3_8_flash | Gemini 3.8 Flash |
gemini_3_6_flash | Gemini 3.6 Flash |
gemini_3_5_flash_lite | Gemini 3.5 Flash Lite |
gemini_3_1_pro | Gemini 3.1 Pro |
gemini_3_1_flash_lite | Gemini 3.1 Flash Lite |
claude_fable_5_1 | Claude Fable 5.1 |
claude_fable_5 | Claude Fable 5 |
claude_opus_5_5 | Claude Opus 5.5 |
claude_opus_5 | Claude Opus 5 |
claude_opus_4_8 | Claude Opus 4.8 |
claude_sonnet_5_5 | Claude Sonnet 5.5 |
claude_sonnet_5 | Claude Sonnet 5 |
claude_haiku_5_5 | Claude Haiku 5.5 |
claude_haiku_4_5 | Claude Haiku 4.5 |
gpt_6_1_sol | GPT-6.1 Sol |
gpt_6_sol | GPT-6 Sol |
gpt_6_luna | GPT-6 Luna |
gpt_5_6_sol | GPT-5.6 Sol |
gpt_5_6_terra | GPT-5.6 Terra |
gpt_5_6_luna | GPT-5.6 Luna |
chatgpt_5_5 | ChatGPT 5.5 |
chatgpt_5_4_mini | ChatGPT 5.4 mini |
chatgpt_5_4_nano | ChatGPT 5.4 nano |
AI Agent 的回覆內容以 html 事件送出,並附上 md 鍵(同一段內容的 Markdown 原文),依序串接 md 的值即為完整回覆。html 事件中沒有 md 鍵者,是每一輪的執行過程(步驟與工具動作)及回覆末端的扣點摘要,可以略過。系統訊息(例如點數不足、詢問是否繼續)以文字片段 choices[0].delta.content 送出。
產出檔案的下載連結會出現在回覆內容中,網址形如 https://www.myai168.com/tw/api/file/download_nb?sn=...&fn=...。這些是呼叫帳號的私人檔案:請以同一帳號登入本站後用瀏覽器開啟,或到「AI Agent 筆記本」頁面開啟該次對話的筆記本下載。
import json
import requests
url = "https://www.myai168.com/tw/ai/chat/chat"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
def ask(text, session_sn=0):
data = {"module": "agent", "input": text}
if session_sn:
data["session_sn"] = session_sn
reply = []
with requests.post(url, headers=headers, data=data, stream=True, timeout=(10, 1800)) as r:
r.raise_for_status()
r.encoding = "utf-8"
for line in r.iter_lines(decode_unicode=True):
if not line or not line.startswith("data: "):
continue
payload = json.loads(line[6:])
if "session_sn" in payload:
session_sn = payload["session_sn"]
elif "md" in payload:
reply.append(payload["md"])
elif payload.get("choices"):
choice = payload["choices"][0]
content = (choice.get("delta") or {}).get("content")
if content:
reply.append(content)
if choice.get("finish_reason") == "stop":
break
return "".join(reply), session_sn
answer, session_sn = ask("請調查電動機車市場,整理成一份簡短的 Word 報告。")
print(answer)
print("session_sn:", session_sn)
answer, session_sn = ask("請把報告的結論改成條列式。", session_sn)
print(answer)
需先安裝 pip install requests。ask() 回傳回覆內容與連續對話編號;第二次呼叫把編號帶回,即接續同一段對話。
finish_reason 為 stop 才算完成,用戶端的讀取逾時請設長一點。連線中斷時任務會停止,已完成的輪次仍依用量扣點。session_sn 只對開始該段對話的帳號有效,請使用同一帳號的金鑰。AI Agent 的對話不會列在歷史紀錄頁,session_sn 請由程式自行保存。回應為 SSE 串流(Content-Type: text/event-stream,內容為 UTF-8),每筆事件是一行 data: {JSON}:
| 事件 | 說明 |
|---|---|
{"choices": [{"delta": {"content": "..."}}]} | 文字片段(相容 OpenAI 的 chat.completion.chunk 結構),依序串接即為完整回覆。 |
{"html": "..."} | HTML 片段:圖片、影片、音檔的預覽與下載連結、提示訊息,以及回覆末端的扣點摘要。 |
{"session_sn": N} | 連續對話編號(支援的模組才會送出),下一次呼叫帶回即可接續。 |
{"user_request_html": "..."} | 上傳檔案後的回顯(HTML),程式可以忽略。 |
"finish_reason": "stop" | 串流結束(這一筆的 delta.content 為 null)。 |
遇到上表以外的鍵請直接略過——日後可能新增其他事件種類。
成功的呼叫在串流結束前會送出一筆 html 事件,內容以 <span class="billing-summary"> 包住,寫明本次使用的點數、耗時與剩餘點數。文字依站台語系顯示,適合直接呈現給使用者;程式需要數值時,請呼叫 GET https://www.myai168.com/tw/api/user/get_credits 查詢餘額。
圖片、影片、音檔等產出會以本站的下載網址出現在 html 片段的 href/src 屬性中(網址形如 https://www.myai168.com/tw/api/file/download_photo?id=... 或 https://www.myai168.com/tw/api/file/download?id=...)。這些檔案是呼叫帳號的私人檔案:請以同一個帳號登入本站後,用瀏覽器開啟網址下載。
以下範例讀取串流,組出完整文字回覆,並收集連續對話編號、產出檔案網址與扣點摘要;串流結束時若沒有任何回覆文字與產出檔案,就把收到的提示訊息當作失敗原因(請先安裝套件:pip install requests):
import json
import re
import requests
url = "https://www.myai168.com/tw/ai/chat/chat"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
data = {"module": "default", "input": "你好,請自我介紹"}
text_parts = []
file_urls = []
notices = []
billing = ""
session_sn = 0
with requests.post(url, headers=headers, data=data, stream=True, timeout=(10, 900)) as r:
r.raise_for_status()
r.encoding = "utf-8"
for line in r.iter_lines(decode_unicode=True):
if not line or not line.startswith("data: "):
continue
payload = json.loads(line[6:])
if "session_sn" in payload:
session_sn = payload["session_sn"]
elif "html" in payload:
fragment = payload["html"]
for u in re.findall(r'(?:href|src)="([^"]*/api/file/[^"]+)"', fragment):
if u not in file_urls:
file_urls.append(u)
plain = " ".join(re.sub(r"<[^>]+>", " ", fragment).split())
if 'class="billing-summary"' in fragment:
billing = plain
elif plain:
notices.append(plain)
elif payload.get("choices"):
choice = payload["choices"][0]
content = (choice.get("delta") or {}).get("content")
if content:
text_parts.append(content)
if choice.get("finish_reason") == "stop":
break
answer = "".join(text_parts)
if not answer and not file_urls:
raise RuntimeError("request failed: " + " / ".join(notices))
print(answer)
print("session_sn:", session_sn)
print("files:", file_urls)
print("billing:", billing)
r.encoding = "utf-8" 這一行不能省略:回應標頭沒有標示編碼,少了它 requests 會把中文解成亂碼。timeout=(10, 900) 是連線 10 秒、兩筆資料之間最長等待 900 秒。
需要上傳檔案時,把檔案放進 files 參數,欄位名稱為 upload_file[]:
files = [("upload_file[]", open("photo.jpg", "rb"))]
data = {"module": "default", "input": "這張圖片裡有什麼?"}
r = requests.post(url, headers=headers, data=data, files=files, stream=True, timeout=(10, 900))
使用 Node.js 18 以上內建的 fetch,不需安裝套件。存成 chat.mjs 後以 node chat.mjs 執行:
const url = "https://www.myai168.com/tw/ai/chat/chat";
const body = new URLSearchParams({ module: "default", input: "你好,請自我介紹" });
const res = await fetch(url, {
method: "POST",
headers: { Authorization: "Bearer YOUR_API_KEY" },
body,
});
if (!res.ok) throw new Error("HTTP " + res.status);
let answer = "";
let sessionSn = 0;
const fileUrls = new Set();
const decoder = new TextDecoder();
let buffer = "";
for await (const chunk of res.body) {
buffer += decoder.decode(chunk, { stream: true });
const lines = buffer.split("\n");
buffer = lines.pop();
for (const line of lines) {
if (!line.startsWith("data: ")) continue;
const payload = JSON.parse(line.slice(6));
if (payload.session_sn !== undefined) {
sessionSn = payload.session_sn;
} else if (payload.html !== undefined) {
for (const m of payload.html.matchAll(/(?:href|src)="([^"]*\/api\/file\/[^"]+)"/g)) {
fileUrls.add(m[1]);
}
} else if (payload.choices) {
answer += payload.choices[0].delta?.content ?? "";
}
}
}
console.log(answer);
console.log("session_sn:", sessionSn);
console.log("files:", [...fileUrls]);
上傳檔案時改用 FormData(不要自行設定 Content-Type,fetch 會自動帶上分隔字串),回應的讀取方式與上面相同:
import { readFile } from "node:fs/promises";
const form = new FormData();
form.append("module", "default");
form.append("input", "這張圖片裡有什麼?");
form.append("upload_file[]", new Blob([await readFile("photo.jpg")]), "photo.jpg");
const res = await fetch("https://www.myai168.com/tw/ai/chat/chat", {
method: "POST",
headers: { Authorization: "Bearer YOUR_API_KEY" },
body: form,
});
finish_reason 為 stop 才算完成。中途斷線的呼叫不扣點,可以直接重送。session_sn;要開始新話題時不要帶它。