OpenAI 相容 API 的建議 Base URL:
https://miyang.cn/v1 持續相容既有用戶端;新接請使用 https://miyang.cn/api/v1。
除公開的模型清單和模型費用介面外,推論介面均須在請求標頭攜帶 API 金鑰。支援兩種請求標頭:
- 建議:
Authorization: Bearer miyang-xxxxx - 備用:
x-api-key: miyang-xxxxx
API 金鑰在主控台建立並加密保存,可在「API Keys」頁面再次檢視和複製。
# Bearer Token(推荐) curl https://miyang.cn/api/v1/models \ -H "Authorization: Bearer miyang-xxx" # x-api-key(备用) curl https://miyang.cn/api/v1/models \ -H "x-api-key: miyang-xxx"
模型 ID 通常採用 {provider_slug}/{model_name} 格式。建議使用 miyang/auto 自動選擇模型,也可透過模型清單介面或主控台複製其他可用的呼叫 ID。
miyang/auto— 自動選擇適合目前請求的模型miyang/standard— 標準檔模型miyang/premium— 進階檔模型
miyang/* 模型用於 Alice 用戶端;其他應用程式或指令碼請從模型清單中選擇 usage_scope 為 general 的模型。
# 自动选择适合当前请求的模型 model = "miyang/auto"
每個 API 金鑰獨立計數,預設 60 次/分鐘,可在主控台調整上限。超出限速返回 429 Too Many Requests。
{
"error": {
"message": "Rate limit exceeded",
"type": "rate_limit_error",
"code": 1002
}
}
呼叫依實際用量即時結算,具體價格請以主控台和模型費用介面回傳的資訊為準。
- 呼叫前檢查餘額 > 0,餘額不足返回
402 - 按 prompt + completion token 用量計費
- 支援 Prompt Cache:
cache_read_tokens按折扣價計算
可在主控台儲值米粒,並在「用量明細」中檢視呼叫和消費紀錄。
// 余额不足响应(402) { "error": { "message": "Insufficient balance", "type": "insufficient_balance", "code": 1004 } }
OpenAI 相容的對話介面,支援串流與非串流輸出。可直接取代 OpenAI SDK 的 base_url。
| 參數 | 類型 | 說明 |
|---|---|---|
| model 必填 | string | 模型 ID,格式 provider_slug/model |
| messages 必填 | array | 對話訊息清單,每條含 role 和 content |
| stream | boolean | 是否啟用串流輸出(SSE),預設 false |
| temperature | float | 取樣溫度,範圍 0–2 |
| max_tokens | integer | 最大輸出 token 數 |
| response_format | object | 結構化輸出格式,見「結構化輸出」章節 |
curl https://miyang.cn/api/v1/chat/completions \ -H "Authorization: Bearer miyang-xxx" \ -H "Content-Type: application/json" \ -d '{ "model": "miyang/auto", "messages": [ {"role": "user", "content": "Hello!"} ], "stream": false }'
miyang/miyang-omni-v1 是用於音影片理解、會議紀要和內容分析的全模態模型,可在同一則使用者訊息中組合文字、圖片、音訊和影片,並輸出文字結果。
miyang-asr。
| 模型資訊 | 值 |
|---|---|
| 呼叫 ID | miyang/miyang-omni-v1 |
| 輸入模態 | 文字、圖片、音訊、影片,可組合輸入 |
| 輸出模態 | 文字(不產生語音) |
| 上下文上限 | 1000000 tokens |
多模態 content 格式
| type | 說明 |
|---|---|
text | 文字指令,放在 text 欄位 |
image_url | 公開 URL 或 Base64 Data URL,放在 image_url.url |
input_audio | 公開 URL 或 Base64 Data URL,放在 input_audio.data,並提供 format |
video_url | 公開影片 URL 或 Base64 Data URL,放在 video_url.url |
Omni 擴充參數
| 參數 | 類型 | 說明 |
|---|---|---|
| reasoning_effort | string | none、low、medium 或 xhigh。上游預設 xhigh;只做轉寫或快速摘要時建議設為 none。 |
| use_multichannel | boolean | 是否保留雙聲道立體聲或四聲道 FOA 空間資訊,預設 false;僅在輸入確為對應多聲道音訊時開啟。 |
音訊理解範例
curl https://miyang.cn/api/v1/chat/completions \ -H "Authorization: Bearer miyang-xxx" \ -H "Content-Type: application/json" \ -d '{ "model": "miyang/miyang-omni-v1", "reasoning_effort": "none", "messages": [{ "role": "user", "content": [ {"type": "text", "text": "依時間順序轉寫並摘要這段錄音。"}, {"type": "input_audio", "input_audio": { "data": "https://example.com/meeting.mp3", "format": "mp3" }} ] }], "stream": false }'
公開介面,無需 API 金鑰。返回目前公開可用模型;攜帶 API 金鑰時還會依帳號權限返回內部或白名單模型。回應欄位在標準 OpenAI 格式基礎上擴充了 context_length 和使用範圍資訊。
{
"object": "list",
"data": [
{
"id": "miyang/auto",
"object": "model",
"owned_by": "miyang",
"name": "自动",
"model_type": "text",
"usage_scope": "alice",
"usage_hint": "请在 Alice 客户端内使用",
"context_length": 262144
}
]
}
返回目前可見的全部模型費用。無需 API 金鑰時列出公開模型;攜帶 API 金鑰時會依帳號權限補充內部或白名單模型。
不同模型類型使用不同計費單位,請以 billing_unit 為準;rates 是目前生效價格,effective_pricing 會標明基礎價、分時價或活動價。
mili_per_usd 提供美元餘額與米粒的換算口徑。
curl https://miyang.cn/api/v1/pricing \
-H "Authorization: Bearer miyang-xxx"
{
"object": "pricing.list",
"mili_per_usd": 1000,
"data": [
{
"id": "miyang/auto",
"model_type": "text",
"currency": "USD",
"billing_mode": "tokens",
"billing_unit": "per_1m_tokens",
"effective_pricing": "<base | peak | promotion>",
"rates": {
"input": "<current rate>",
"output": "<current rate>",
"cache_read": "<current rate>",
"cache_write": "<current rate>"
}
}
]
}
OpenAI 相容的向量介面。模型是否支援向量任務,請以模型清單和主控台標記為準。
| 參數 | 類型 | 說明 |
|---|---|---|
| model 必填 | string | Embedding 模型呼叫 ID |
| input 必填 | string / array | 需要向量化的文字或文字陣列 |
| encoding_format | string | 向量編碼格式,常用值為 float |
curl https://miyang.cn/api/v1/embeddings \ -H "Authorization: Bearer miyang-xxx" \ -H "Content-Type: application/json" \ -d '{ "model": "provider/embedding-model", "input": "需要向量化的文本" }'
miyang/jev-1.13 是提供給所有米羊 API 使用者的低成本結構化決策模型,底層固定為 typesafe/jev-1.13。它只回答明確問題,不生成對話文字;Alice 的長期記憶預篩是第一個正式用途。
Authorization: Bearer miyang-xxx 呼叫。它採用獨立 Decisions 協定,不相容 /api/v1/chat/completions,因此不會混入 Chat 專用的 /api/v1/models 清單。
| 模型資訊 | 值 |
|---|---|
| 米羊模型 ID | miyang/jev-1.13 |
| 決策引擎 | typesafe/jev-1.13 |
| 上下文上限 | 32768 tokens |
| 問題類型 | noul / choice / score |
| 開放範圍 | 所有持有效米羊 API 金鑰的使用者 |
請求必須指定已登記的 Decisions 模型殼;Gateway 會依模型殼計費並固定真實上游。state 保存待判斷的結構化上下文,questions 定義要回答的問題。
| 參數 | 類型 | 說明 |
|---|---|---|
| model 必填 | string | 公開呼叫固定填寫 miyang/jev-1.13;內部場景模型殼不能由一般 API 使用者呼叫。 |
| state 必填 | object | 供決策使用的結構化狀態;呼叫方應在傳送前自行清理不必要的敏感資訊。 |
| questions 必填 | object | 以問題名稱為鍵的物件,至少 1 項,最多 24 項。 |
| questions.*.type 必填 | string | noul(0–1 機率)、choice(選項)或 score(分數)。 |
| questions.*.instructions 必填 | string | 清楚描述模型要判斷的問題。 |
| questions.*.criteria | object | 選填;說明各答案或分數分別代表什麼,以減少歧義。 |
單次請求內容最大 64 KiB,最多 24 個問題。伺服器不記錄 state 正文或決策答案,只記錄問題數量、耗時與 token 用量。
curl https://miyang.cn/api/v1/decisions \ -H "Authorization: Bearer miyang-xxx" \ -H "Content-Type: application/json" \ -d '{ "model": "miyang/jev-1.13", "state": {"dialog": "使用者詢問了一個一般技術問題"}, "questions": { "remember": { "type": "noul", "instructions": "這段對話是否包含值得長期保存的資訊?", "criteria": { "true": "包含穩定身分、長期偏好或明確關係事件", "false": "一次性任務、一般問答或寒暄" } } } }'
{
"model": "miyang/jev-1.13",
"provider": "miyang",
"answers": {
"remember": {
"type": "noul",
"noul": 0.02
}
}
}
OpenAI 相容的圖像生成介面。根據文字 prompt 生成圖像,回應返回圖片 URL 或 Base64 資料,與 OpenAI Images API 完全相容。
| 參數 | 類型 | 說明 |
|---|---|---|
| model 必填 | string | 模型 ID,格式 provider/model,如 ts/gpt-image-2 |
| prompt 必填 | string | 圖像描述文字 |
| n | integer | 生成圖像數量,預設 1,支援多張 |
| size | string | 圖像尺寸。常用值:1024x1024(方圖)、1024x1536(直圖)、1536x1024(橫圖)、auto(模型自動選擇)。最大邊長 3840px,兩邊須為 16 的倍數,長短邊比不超過 3:1 |
| quality | string | 算繪品質:low(快速草稿)、medium、high、auto(預設,模型自動選擇) |
| output_format | string | 輸出格式:png(預設)、jpeg(更快)、webp |
| output_compression | integer | 壓縮率 0–100,僅 JPEG / WebP 有效 |
| background | string | opaque(預設)或 transparent(透明背景,適合 icon/貼紙) |
| moderation | string | 內容審核:auto(預設)或 low(寬鬆) |
基礎範例 — 文生圖:
curl https://miyang.cn/api/v1/images/generations \ -H "Authorization: Bearer miyang-xxx" \ -H "Content-Type: application/json" \ -d '{ "model": "ts/gpt-image-2", "prompt": "A children'\''s book drawing of a veterinarian listening to the heartbeat of a baby otter", "size": "1024x1024", "quality": "high" }'
from openai import OpenAI import base64 client = OpenAI( api_key="miyang-xxx", base_url="https://miyang.cn/api/v1", timeout=180.0, # 图像生成需要较长超时 ) result = client.images.generate( model="ts/gpt-image-2", prompt="A children's book drawing of a veterinarian listening to the heartbeat of a baby otter", size="1024x1024", quality="high", ) print(result.data[0].url)
進階範例 — JPEG 輸出 + 壓縮 + 儲存到本機:
import httpx, json, base64 resp = httpx.post( "https://miyang.cn/api/v1/images/generations", headers={"Authorization": "Bearer miyang-xxx"}, json={ "model": "ts/gpt-image-2", "prompt": "A serene Japanese garden with a koi pond", "size": "1536x1024", "quality": "medium", "output_format": "jpeg", # jpeg 比 png 更快 "output_compression": 80, # 压缩率 0-100 }, timeout=180.0, ) data = resp.json() print(data["data"][0]["url"])
// 响应示例 { "created": 1779691963, "data": [ { "url": "https://image.token-recyclebin.com/images/2026/05/25/xxx.png", "revised_prompt": "A serene Japanese garden with a koi pond..." } ] }
尺寸與品質參考
| 參數 | 可選值 | 說明 |
|---|---|---|
| size | 1024x1024(方)1536x1024(橫)1024x1536(直)2048x2048(2K)3840x2160(4K 橫)auto | 最大邊長 ≤ 3840px,雙邊為 16 的倍數,比例 ≤ 3:1,總像素 655,360 – 8,294,400 |
| quality | low · medium · high · auto | low 最快,適合草稿和快速迭代;high 最精細,適合最終出圖 |
| output_format | png · jpeg · webp | jpeg 比 png 更快,優先用於對延遲敏感的情境 |
OpenAI 相容的圖像編輯介面。上傳一張或多張參考圖,配合文字 prompt 生成新圖像。支援局部編輯(mask)和多圖合成。請求使用 multipart/form-data 格式。
典型情境:
- 風格轉換 — 上傳照片 + "轉為油畫風格"
- 多圖合成 — 上傳多張素材 + "生成包含這些物品的禮品籃"
- 局部編輯 — 上傳原圖 + mask + "在遮罩區域加入一隻紅鶴"
| 參數 | 類型 | 說明 |
|---|---|---|
| model 必填 | string | 模型 ID,如 ts/gpt-image-2 |
| image 必填 | file / file[] | 參考圖片。單張用 image,多張用 image[](支援多個 image[]=@file.png) |
| prompt 必填 | string | 編輯指令描述 |
| mask | file | 遮罩圖片(需含 alpha 通道),透明區域為需要編輯的部分。多圖時 mask 套用至第一張 |
| n | integer | 生成數量,預設 1 |
| size | string | 輸出尺寸,預設 auto,支援與 Generations 相同的尺寸選項 |
| quality | string | low · medium · high · auto |
單圖編輯 — 風格轉換:
curl https://miyang.cn/api/v1/images/edits \ -H "Authorization: Bearer miyang-xxx" \ -F "model=ts/gpt-image-2" \ -F "prompt=Turn this photo into a Studio Ghibli style illustration" \ -F "image=@photo.png" \ -F "size=1536x1024"
from openai import OpenAI client = OpenAI( api_key="miyang-xxx", base_url="https://miyang.cn/api/v1", timeout=180.0, ) result = client.images.edit( model="ts/gpt-image-2", image=open("photo.png", "rb"), prompt="Turn this photo into a Studio Ghibli style illustration", ) print(result.data[0].url)
多圖合成 — 將多張素材合成一張:
# 多图参考:用 image[] 传多张 curl https://miyang.cn/api/v1/images/edits \ -H "Authorization: Bearer miyang-xxx" \ -F "model=ts/gpt-image-2" \ -F "image[]=@lotion.png" \ -F "image[]=@soap.png" \ -F "image[]=@candle.png" \ -F 'prompt=A gift basket on a white background containing all these items'
局部編輯 — 使用 mask 遮罩:
# mask 需要有 alpha 通道,透明区域为编辑区 result = client.images.edit( model="ts/gpt-image-2", image=open("room.png", "rb"), mask=open("mask.png", "rb"), prompt="Add a flamingo in the pool area", quality="high", ) print(result.data[0].url)
當使用者想修復 AI 圖片在反覆墊圖或生成中累積的格子紋、鱗片紋、疊瓦等週期性偽影時使用。它會把原圖交給背景服務完成診斷、淨化、必要時重新生成與品質驗收,讓使用者直接取得可發布、可列印或可繼續創作的乾淨成品。
必須攜帶 Idempotency-Key。網路逾時後以相同值重試會回傳原任務;同一值改傳另一張圖或另一組參數會回傳 409。
| 參數 | 類型 | 說明 |
|---|---|---|
| image 必填 | file | 待修復圖片;支援 PNG、JPEG、WebP,最大 40 MB、8.3 MP |
| allow_regen | boolean | 規則淨化不足時是否允許重新生成,預設 true |
| max_regen | integer | 最多重新生成輪數,1–2,預設 2 |
curl https://lab.miyang.cn/ripple/api/v1/jobs \ -H "Authorization: Bearer miyang-xxx" \ -H "Idempotency-Key: restore-order-001" \ -F "image=@photo.png" \ -F "allow_regen=true" \ -F "max_regen=2"
{
"id": "rp-api-...",
"object": "ripple.job",
"status": "queued",
"phase": "queued",
"result": null,
"error": null
}
建立任務後用這個介面持續取得進度與最終產物。非同步輪詢不必維持長連線,也不會讓使用者一直停留等待;任務成功後即可取得成品連結。
status 可能為 queued、processing、succeeded、failed、cancelled 或 expired。成功後 result.artifacts 會列出成品與過程產物。
curl https://lab.miyang.cn/ripple/api/v1/jobs/rp-api-... \
-H "Authorization: Bearer miyang-xxx"
{
"id": "rp-api-...",
"status": "succeeded",
"result": {
"outcome": "delivered",
"regen_rounds": 1,
"artifacts": [
{
"name": "photo_restored.png",
"primary": true,
"url": "https://lab.miyang.cn/ripple/api/v1/jobs/rp-api-.../artifacts/photo_restored.png"
}
]
},
"error": null
}
非同步影片生成介面。建立成功後返回 task_id,請透過查詢介面輪詢任務狀態;不要用同一個業務請求重複建立任務。
miyang/h3 和 miyang/h3-max。
| 參數 | 類型 | 說明 |
|---|---|---|
| model 必填 | string | miyang/h3 或 miyang/h3-max |
| content 必填 | array | 多模態內容陣列,必須包含且只能包含一筆非空文字;可同時提供圖片、影片或音訊素材 |
| duration 必填 | integer | 輸出時長(秒)。H3 支援 4–15 秒;H3 Max 支援 5–15 秒 |
| resolution | string | 預設 768P。H3 支援 768P / 2K;H3 Max 支援 480P / 768P |
| ratio | string | 畫面比例:21:9、16:9、4:3、1:1、3:4、9:16;參考素材可用 adaptive |
| aigc_watermark | boolean | 是否加入 AIGC 浮水印 |
| extra | object | 僅 H3 Max 支援,可設定 prompt_expansion_mode:disabled、balanced 或 quality |
content 素材格式
| type | role | 說明 |
|---|---|---|
| text | — | 必填且只能一筆,最長 7000 字元 |
| image_url | first_frame / last_frame / reference_image | 首幀、尾幀或參考圖;單張未指定 role 時自動作為首幀 |
| video_url | reference_video | 參考影片,最多 3 個,必須指定 role |
| audio_url | reference_audio | 參考音訊,最多 3 個,必須指定 role |
curl https://miyang.cn/api/v1/videos/generations \ -H "Authorization: Bearer miyang-xxx" \ -H "Idempotency-Key: alice-video-001" \ -H "Content-Type: application/json" \ -d '{ "model": "miyang/h3", "content": [ {"type": "text", "text": "A lamb runs across a sunlit meadow"} ], "duration": 5, "resolution": "768P", "ratio": "16:9" }'
{
"task_id": "443429054845209"
}
使用建立任務返回的 task_id 輪詢。狀態可能為 queued、running、succeeded、failed 或 cancelled。建議每 5–15 秒查詢一次。
curl https://miyang.cn/api/v1/videos/generations/443429054845209 \
-H "Authorization: Bearer miyang-xxx"
{
"task": {
"status": "succeeded",
"resolution": "768P",
"duration": 5,
"content": {
"url": "https://signed.example/video.mp4",
"drive_file_id": "drv-xxx",
"size_bytes": 1757278,
"expires_in": 3600
}
}
}
取消仍在處理的任務並釋放計費預授權。若任務已有米羊盤檔案,取消時會一併移除;已完成且上游不允許取消時,以介面回應為準。
curl -X DELETE https://miyang.cn/api/v1/videos/generations/443429054845209 \
-H "Authorization: Bearer miyang-xxx"
使用 miyang-asr 非同步轉寫已錄製完成的音訊或影片檔,支援 30 種語言與多種中文方言,並可區分說話者。建立成功會回傳任務 ID,再透過查詢介面取得全文、分段、說話者和時長。
multipart/form-data 上傳的檔案上限為 50 MB,會自動儲存到目前使用者的米羊盤並計入空間;file_url 支援公開 HTTP(S) 檔案,單檔不超過 2 GB、時長不超過 12 小時,不會複製進米羊盤。
舊模型名 miyang/transcription 與 miyang/transcription-realtime 仍可繼續使用,會自動對應到 miyang-asr 與 miyang-asr-realtime,既有程式碼無需修改。
| 參數 | 類型 | 說明 |
|---|---|---|
| model | string | 填寫 miyang-asr(也可寫作 miyang/miyang-asr);省略時預設使用此模型 |
| file | file | 與 file_url 二擇一。支援 mp3、wav、m4a、aac、flac、ogg、opus、mp4、mov、mkv、webm 等格式,直接上傳不超過 50 MB |
| file_url | string | 與 file 二擇一。可公開存取的 HTTP(S) 位址,網域須解析到公網 IP;檔案不超過 2 GB、時長不超過 12 小時 |
| source_language | string | 預設 auto 自動辨識;可指定 cn、en、yue、ja、ko;multilingual 需搭配 language_hints;fspk 表示中英混說 |
| language_hints | array / string | 僅 source_language=multilingual 時可用;可提示 cn、en、yue、ja、ko、de、fr、ru,最多 4 個 |
| diarization | boolean | 是否區分說話者,預設 true;啟用時建議音訊不超過 2 小時 |
| speaker_count | integer | 預期說話者人數,0 表示自動判斷;指定時範圍 2–100 |
依上游實際回傳的 Token 用量計費,音訊輸入 Token 與文字輸出 Token 分別計價;具體價格和最終扣費請以控制台用量明細為準。
建立任務時依 12 小時音訊的用量上限凍結米粒;任務完成後只扣實際用量並釋放差額。失敗任務不扣費。
範例一:直接上傳並自動存入米羊盤
curl https://miyang.cn/api/v1/audio/transcriptions \ -H "Authorization: Bearer miyang-xxx" \ -H "Idempotency-Key: meeting-20260921" \ -F "model=miyang-asr" \ -F "source_language=cn" \ -F "diarization=true" \ -F "file=@meeting.m4a"
範例二:提交公開檔案 URL(適合大型檔案)
curl https://miyang.cn/api/v1/audio/transcriptions \ -H "Authorization: Bearer miyang-xxx" \ -H "Idempotency-Key: archive-001" \ -H "Content-Type: application/json" \ -d '{ "model": "miyang-asr", "file_url": "https://example.com/recording.mp3", "source_language": "multilingual", "language_hints": ["cn", "en"] }'
{
"id": "6f3a...task",
"object": "audio.transcription.job",
"status": "processing",
"model": "miyang/miyang-asr",
"request_id": "3d7e...request",
"source_file_id": "drv-..."
}
使用建立回應中的 id 查詢,建議每 5–15 秒輪詢一次。提交結果不確定時,也可用 request_id 查詢同一任務。
curl https://miyang.cn/api/v1/audio/transcriptions/6f3a...task \
-H "Authorization: Bearer miyang-xxx"
{
"id": "6f3a...task",
"object": "audio.transcription.job",
"status": "completed",
"model": "miyang/miyang-asr",
"text": "Meeting transcript...",
"duration": 93.4,
"segments": [
{"speaker": "0", "start": 0.0, "end": 5.2, "text": "..."}
],
"usage": {
"audio_seconds": 93.4,
"duration_ms": 93400,
"input_tokens": 3270,
"output_tokens": 412
},
"source_file_id": "drv-..."
}
常見錯誤:402 代表米粒不足;409 代表冪等鍵對應不同請求;411/413 代表上傳缺少長度或超過 50 MB;429 代表限流;503 submission_uncertain 代表上游提交結果待確認。
先建立即時紀錄,再連線回應中的一次性 stream_url。用戶端可直接傳送 PCM,也可傳送 WAV、MP3、AAC、Ogg、WebM、M4A 等常見音訊串流;米羊會自動解碼並轉換為最適合即時辨識的內部格式,再回傳統一的辨識事件。用戶端不必配合特定辨識線路。
| 參數 | 類型 | 說明 |
|---|---|---|
| model | string | 填寫 miyang-asr-realtime(也可寫作 miyang/miyang-asr-realtime);省略時預設使用此模型 |
| format | string | pcm / wav / mp3 / aac / opus / speex / ogg / webm / m4a / mp4 |
| sample_rate | integer | 支援 16000;僅中文也支援 8000 |
| source_language | string | cn / en / yue / ja / ko / multilingual |
| language_hints | array | 僅 source_language=multilingual 時可用;即時辨識只採用第一個提示語言 |
| prompt | string | 選填的辨識上下文,最多 400 字。建議填入人名、產品名、會議主題、專業術語或緊鄰前文,用於提升辨識準確率;它不會改變輸出格式,也不是通用對話系統提示詞 |
| output_level | integer | 1 = 只回傳完整句;2 = 回傳中間結果與完整句(預設) |
| max_duration_seconds | integer | 本次即時串流允許的最長秒數,範圍 1–86400;依此上限凍結米粒,結束後依實際用量結算 |
格式約定:opus 與 speex 使用 Ogg 封裝,aac 使用 ADTS,m4a/mp4 使用可串流讀取的分片 MP4。瀏覽器建議使用 WebM/Opus,Apple 用戶端建議使用 M4A/AAC;米羊會統一完成解碼、單聲道轉換與重新取樣。
上下文增強案例
prompt 應提供下一段語音可能涉及的事實背景,而不是要求模型執行任務。背景越貼近即將出現的內容,人名、產品名與專業術語越容易被正確辨識。
| 使用情境 | 建議 prompt |
|---|---|
| 人名與專有名詞 | 與會者包括洛小山和 Eason,產品名稱是米羊,專案名稱是星潮計畫。 |
| 會議或課程背景 | 這是一次產品週會,主要討論截圖雲端庫、儲存預算和七天待刪除區。 |
| 承接前文 | 上一段討論了即時語音辨識,接下來將說明上下文增強和動態更新。 |
| 會中切換主題 | 接下來討論星潮計畫的發布安排,負責人是洛小山。 |
curl https://miyang.cn/api/v1/audio/transcriptions/realtime \ -H "Authorization: Bearer miyang-xxx" \ -H "Idempotency-Key: live-meeting-001" \ -H "Content-Type: application/json" \ -d '{ "model": "miyang-asr-realtime", "format": "pcm", "sample_rate": 16000, "source_language": "cn", "prompt": "这是一场米羊产品会议,参会人包括洛小山,项目名称是星潮计划。", "max_duration_seconds": 300, "output_level": 2 }'
{
"id": "realtime-task-id",
"status": "ready",
"mode": "realtime",
"model": "miyang/miyang-asr-realtime",
"stream_url": "wss://miyang.cn/api/v1/audio/transcriptions/realtime/.../stream?token=...",
"stream_token_expires_in": 600
}
stream_url 有效期 10 分鐘且只能連線一次,連線建立即表示辨識已啟動。之後持續傳送與建立參數一致的音訊位元組,米羊會自動處理格式轉換和說話停頓。要結束時傳送 {"header":{"name":"StopTranscription"}},伺服器會補發最後一句的 SentenceEnd 和 TranscriptionCompleted,再以 1000 關閉連線;也可以直接關閉連線。結束後可用統一查詢介面取得全文與結算結果。伺服器事件皆為 JSON,header.name 取值如下:
上下文改變時,可在同一個 WebSocket 中傳送 {"type":"context.update","prompt":"接下来讨论星潮计划的发布安排。"}。新的提示詞會套用到後續音訊,米羊接受後會回傳 ContextUpdated。
// 主題變化時更新後續辨識上下文 ws.send(JSON.stringify({ type: "context.update", prompt: "接下來討論星潮計畫的發布安排,負責人是洛小山。" })); // 收到 ContextUpdated 後繼續傳送音訊 ws.send(nextAudioChunk);
| 事件 | 說明 |
|---|---|
| SentenceBegin | 偵測到一句話開始;payload 含句序號 index 與開始時間 time(毫秒) |
| TranscriptionResultChanged | 目前句子的中間結果,payload.result 為最新文字;output_level=1 時不傳送 |
| SentenceEnd | 一句話結束;payload 含最終文字 result、begin_time、time 與逐詞時間 words |
| ContextUpdated | 米羊已接受 context.update,新的 prompt 將套用到後續音訊 |
| ContextUpdateFailed | context.update 未通過驗證;payload.status_text 說明原因,修正後可繼續傳送 |
| TranscriptionCompleted | 辨識任務結束,伺服器隨後關閉連線 |
| TaskFailed | 辨識失敗,header.status 為 40000000,payload.status_text 為原因;伺服器隨後以 1011 關閉連線 |
{
"header": {"namespace": "SpeechTranscriber", "name": "SentenceEnd", "status": 20000000},
"payload": {
"index": 1,
"begin_time": 0,
"time": 1820,
"result": "今天的会议先同步进度。",
"words": [{"text": "今天", "startTime": 0, "endTime": 320, "punctuation": ""}]
}
}
在同一個轉寫介面把 model 設為 miyang-asr-flash,請求會直接回傳辨識文字,不建立非同步任務。適合 5 分鐘以內的短音訊;較長的錄音請使用 miyang-asr。請求內容與錄音檔轉寫相同,file 與 file_url 二擇一。
依上游回傳的 Token 用量計費,成功後立即扣費;失敗不扣費。
curl https://miyang.cn/api/v1/audio/transcriptions \ -H "Authorization: Bearer miyang-xxx" \ -F "model=miyang-asr-flash" \ -F "file=@voice-note.m4a"
{
"text": "明天上午十点提醒我开会。",
"model": "miyang/miyang-asr-flash",
"usage": {"input_tokens": 125, "output_tokens": 9, "total_tokens": 134},
"request_id": "3d7e...request"
}
同步回傳音訊二進位,Content-Type 與 response_format 對應。miyang-tts-v1 針對即時互動最佳化,支援音色、音調與風格指令;miyang-tts-v1-pro 是統一音訊生成模型,目前開放單人語音合成,可提供參考音訊。
| 參數 | 類型 | 說明 |
|---|---|---|
| model | string | miyang-tts-v1 或 miyang-tts-v1-pro |
| input | string | 要合成的文字,也可寫作 text;v1 最多 20000 字元,v1 Pro 最多 3000 字元 |
| voice | string | 音色 ID,預設 longanhuan_v3.1;僅 v1 |
| response_format | string | mp3(預設)、wav、pcm;v1 另支援 opus |
| sample_rate | integer | 8000、16000、22050、24000、44100、48000;v1 預設 24000,v1 Pro 預設 48000 且不支援 22050 |
| speed | number | 語速 0.5–2,預設 1 |
| volume | number | 音量 0–100,預設 50 |
| pitch | number | 音調 0.5–2,預設 1;僅 v1 |
| instruction | string | 自然語言風格指令,最多 500 字元;僅 v1 |
| references | array | 參考音訊,最多 3 項,每項提供 audio_url 或 audio_data 其一;僅 v1 Pro |
依上游回傳的輸入與輸出 Token 計費,本次用量同時寫在回應標頭 X-Usage-Input-Tokens 與 X-Usage-Output-Tokens。
curl https://miyang.cn/api/v1/audio/speech \ -H "Authorization: Bearer miyang-xxx" \ -H "Content-Type: application/json" \ -d '{ "model": "miyang-tts-v1", "input": "欢迎使用米羊语音合成。", "voice": "longanhuan_v3.1", "response_format": "mp3" }' \ --output speech.mp3
miyang-omni-v1-realtime 是全雙工語音對話模型。使用 WebSocket 連線,並以 Authorization: Bearer miyang-xxx 請求標頭驗證。米羊透明轉發 Realtime 協定的用戶端與伺服器事件(如 session.update、input_audio_buffer.append、response.create、response.audio.delta)。
連線會以下列關閉碼拒絕:4401 驗證失敗,4402 餘額不足,4403 無模型權限,4429 限流,4503 線路暫不可用。
import WebSocket from "ws"; const ws = new WebSocket( "wss://miyang.cn/api/v1/realtime?model=miyang-omni-v1-realtime", { headers: { Authorization: "Bearer miyang-xxx" } } ); ws.on("open", () => { ws.send(JSON.stringify({ type: "session.update", session: { modalities: ["text", "audio"] } })); // then send input_audio_buffer.append (Base64 PCM) and read response.audio.delta }); ws.on("message", (data) => console.log(JSON.parse(data).type));
為 Agent 和應用程式提供即時連網能力:網頁搜尋、新聞搜尋和網頁正文讀取。全部為 GET 介面,使用與推論介面相同的 API 金鑰鑑權(Authorization: Bearer miyang-xxx)。
| 介面 | 參數 | 說明 |
|---|---|---|
| /api/v1/websearch/search | q | 深度搜尋:結果附帶頁面正文擷取與重新排序上下文,適合 RAG |
| /api/v1/websearch/simple-search | q | 快速搜尋:僅返回標題和摘要,回應更快 |
| /api/v1/websearch/reader | url | 網頁讀取:擷取指定 URL 並轉成乾淨文字 |
| /api/v1/websearch/search-news | q | 新聞搜尋:只搜近期新聞源,結果同樣附帶檢索上下文 |
完整搜尋鏈路:搜尋 → 頁面內容擷取 → 向量檢索 → 重新排序。每條結果附帶 contexts 正文片段,可直接提供給模型做引用回答。回應時間通常 3–8 秒。
| 參數 | 類型 | 說明 |
|---|---|---|
| q 必填 | string | 搜尋關鍵字 |
curl "https://miyang.cn/api/v1/websearch/search?q=最新AI新闻" \ -H "Authorization: Bearer miyang-xxx"
// 响应示例 { "code": 200, "message": "ok", "took_ms": 4200, "data": { "organic": [ { "title": "AI News", "link": "https://example.com", "snippet": "Latest updates...", "contexts": [ { "idx": 0, "text": "..." } ] } ] } }
只做搜尋、不做頁面擷取和重新排序,通常 1 秒內返回。適合只需要標題 + 摘要 + 連結的情境。命中答案卡片時回應會額外包含 answerBox 欄位。
| 參數 | 類型 | 說明 |
|---|---|---|
| q 必填 | string | 搜尋關鍵字 |
curl "https://miyang.cn/api/v1/websearch/simple-search?q=最新AI新闻" \ -H "Authorization: Bearer miyang-xxx"
// 响应示例 { "code": 200, "message": "ok", "took_ms": 950, "data": { "answerBox": { "title": "Latest AI news", "snippet": "..." }, "organic": [ { "title": "AI News", "link": "https://example.com", "snippet": "Latest updates..." } ] } }
已知目標網頁 URL 時,擷取頁面並轉換為乾淨的 Markdown 文字。注意此介面返回的是頂層 content 欄位,而不是 data。
| 參數 | 類型 | 說明 |
|---|---|---|
| url 必填 | string | 要讀取的網頁位址,必須以 http:// 或 https:// 開頭 |
curl "https://miyang.cn/api/v1/websearch/reader?url=https://go.dev" \ -H "Authorization: Bearer miyang-xxx"
// 响应示例(content 为页面正文) { "code": 200, "message": "ok", "content": "# The Go Programming Language\n\nGo is an open source programming language..." }
只搜尋近期新聞源,其餘鏈路與深度搜尋一致,結果同樣附帶 contexts 正文片段。
404(回應體為 {"code": 404, "message": "no search results"}),這屬於正常業務結果,不扣費。
| 參數 | 類型 | 說明 |
|---|---|---|
| q 必填 | string | 新聞搜尋關鍵字 |
curl "https://miyang.cn/api/v1/websearch/search-news?q=OpenAI" \ -H "Authorization: Bearer miyang-xxx"
// 响应示例 { "code": 200, "message": "ok", "took_ms": 4200, "data": { "organic": [ { "title": "Latest OpenAI news", "link": "https://example.com/news", "snippet": "Recent product and research updates...", "contexts": [ { "idx": 0, "text": "..." } ] } ] } }
在請求體中設定 "stream": true 啟用串流輸出,回應格式與 OpenAI 的 SSE 規範完全相容。串流結束標記為 data: [DONE]。
from openai import OpenAI client = OpenAI( api_key="miyang-xxx", base_url="https://miyang.cn/api/v1", ) stream = client.chat.completions.create( model="miyang/auto", messages=[{"role": "user", "content": "Hello!"}], stream=True, ) for chunk in stream: print(chunk.choices[0].delta.content, end="")
透傳 response_format 欄位,支援 JSON Schema。由上游模型保證輸出格式,平台不做額外處理。
{
"model": "miyang/auto",
"messages": [...],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "result",
"schema": {
"type": "object",
"properties": {
"answer": { "type": "string" }
}
}
}
}
}
對支援 Prompt Cache 的模型,上游返回的快取命中 token 會按折扣價計費。平台完整透傳上游 usage 欄位,帳單中會顯示快取命中量。
不同供應商的欄位名稱有差異:
cache_read_input_tokens— Anthropicprompt_cache_hit_tokens— DeepSeekcached_tokens— OpenAI
{
"usage": {
"prompt_tokens": 1000,
"completion_tokens": 200,
"cache_read_input_tokens": 800, // Anthropic
"prompt_cache_hit_tokens": 800, // DeepSeek
"cached_tokens": 800 // OpenAI
}
}
只需取代 base_url 和 api_key,即可透過 OpenAI SDK 呼叫。
from openai import OpenAI client = OpenAI( api_key="miyang-xxx", base_url="https://miyang.cn/api/v1", ) resp = client.chat.completions.create( model="miyang/auto", messages=[{"role": "user", "content": "Hello!"}], ) print(resp.choices[0].message.content)
無需安裝 SDK,就能快速驗證 API Key、介面連線與請求參數,適合初次串接或定位呼叫問題。
# 非流式 curl https://miyang.cn/api/v1/chat/completions \ -H "Authorization: Bearer miyang-xxx" \ -H "Content-Type: application/json" \ -d '{ "model": "miyang/auto", "messages": [{"role": "user", "content": "Hello"}] }' # 流式 curl https://miyang.cn/api/v1/chat/completions \ -H "Authorization: Bearer miyang-xxx" \ -H "Content-Type: application/json" \ -d '{ "model": "miyang/auto", "messages": [{"role": "user", "content": "Hello"}], "stream": true }'