models

Z.ai: GLM 5.3 Flash

Markdown · JSON

Z.ai: GLM 5.3 Flash

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

เกี่ยวกับโมเดล

คำอธิบายนี้ครอบคลุมความสามารถของโมเดล อินพุต เอาต์พุต และตัวเลือกที่ใช้ได้ใน Ailoot แสดงด้านล่างตามเมธอดที่เลือก

โมเดลมัลติโมดัลสำหรับทำงาน

GLM 5.3 Flash ผสานความเข้าใจข้อความ ภาพ วิดีโอ และไฟล์ สร้างคำตอบข้อความและใช้สำหรับเขียนโปรแกรมพร้อมข้อมูลตอบกลับด้านภาพ ประมวลผลเอกสาร และงานวิชาชีพ ระบุบริบทได้ถึงหนึ่งล้านโทเคนและเอาต์พุตสูงสุด 128 พันโทเคน

สถาปัตยกรรมสำหรับบริบทยาว

โมเดลมีพารามิเตอร์ 320 พันล้านตัว โดยเปิดใช้ 18 พันล้านตัว กลไกความสนใจแบบผสมผสานรวมการประมวลผลแบบ sparse กับเชิงเส้น การเชื่อมต่อพิเศษระหว่างชั้นช่วยรักษาเสถียรภาพเมื่อขยายขนาด ข้อมูลมัลติโมดัลรวมอยู่ในการฝึกล่วงหน้า

ข้อมูลภาพร่วมอยู่ในวงจรการทำงาน ผู้ช่วยดูส่วนติดต่อหรือผลที่เรนเดอร์ เปรียบเทียบกับโจทย์ และเสนอการแก้ไข นี่อธิบายจุดเน้นของผู้ผลิตเรื่องตรวจผลภาพจริงหลังเขียนโค้ด

การใช้เหตุผล เครื่องมือ และข้อมูล

การใช้เหตุผลเปิดอยู่ตลอด เลือกความลึกด้วย low, high และ max ไม่มีโหมดปิด ในงานยาวอาจเก็บประวัติการใช้เหตุผลระหว่างขั้นตอนได้

สำหรับเครื่องมือ โมเดลสร้างชื่อฟังก์ชันและอาร์กิวเมนต์ แอปพลิเคชันดำเนินการแล้วส่งผลกลับ JSON เหมาะกับการประมวลผลคำตอบด้วยโปรแกรม กำหนดฟิลด์ที่คาดหวังด้วยคำสั่งและตรวจไวยากรณ์กับความหมายของค่าแยกกัน รูปแบบสตรีมเปิดให้รับข้อความทยอยมา

การแคชคำสั่งหรือประวัติซ้ำช่วยนำบริบทที่ประมวลผลแล้วมาใช้ใหม่ ตามข้อมูลของ Z.ai ลดการประมวลผลซ้ำในงานที่เหมาะสม การใช้ซ้ำจริงขึ้นอยู่กับผลของคำขอเฉพาะ

การพัฒนาจากโจทย์ภาพ

โมเดลวิเคราะห์หลายภาพหน้าจอของผลิตภัณฑ์เดียว ความสัมพันธ์ระหว่างหน้า องค์ประกอบร่วม สถานะส่วนติดต่อ และแอนิเมชันได้ ในสภาพแวดล้อมเอเจนต์ที่มีเครื่องมือ โมเดลเขียนโค้ด รันแอป ดูภาพหน้าจอผล และแก้ความไม่ตรงกัน ในการพัฒนาเกม วงจรนี้ครอบคลุมกฎ การเคลื่อนไหว ปฏิสัมพันธ์ คะแนน และการจบเซสชันเกม

เอกสารและการวิเคราะห์ทางวิชาชีพ

ในงานสไลด์ รายงาน และตาราง โมเดลคำนึงทั้งเนื้อหาและเลย์เอาต์ ได้แก่ ข้อความ ภาพ แผนภาพ และตำแหน่งองค์ประกอบ ผ่านเครื่องมือสามารถสร้างและตรวจ PPTX, PDF, DOCX และ XLSX ไฟล์เหล่านี้เป็นผลการทำงานของแอปพลิเคชัน คำตอบโดยตรงของโมเดลยังเป็นข้อความ

การวิเคราะห์ทางการเงินรวมงานรายงาน ตรวจความสอดคล้องของสูตร และแยกข้อมูลที่เปิดเผย สมมติฐาน และข้อสรุป ในกระบวนการที่ผู้ผลิตอธิบาย ข้อมูลมาจากเนื้อหาของงาน

วิดีโอ ฉากสามมิติ และส่วนติดต่อ

ในสภาพแวดล้อมเอเจนต์ โมเดลวิเคราะห์วิดีโอ ลำดับเหตุการณ์ตามเวลา ลักษณะภาพของผู้เข้าร่วม และคำบรรยายได้ เครื่องมือเป็นผู้ตัดต่อและบันทึกผล

เมื่อทำงานกับฉากสามมิติหรือแบบเขียน เชื่อมคำอธิบายเชิงพื้นที่ สัดส่วน และผลที่เห็น วงจรเครื่องมือรวมการสร้าง เรนเดอร์จากมุมที่กำหนด เปรียบเทียบภาพ และแก้ไข เช่นเดียวกัน โมเดลวิเคราะห์หน้าจอแอปและช่วยทำงานกับส่วนติดต่อตามลำดับได้

สถานการณ์เหล่านี้อธิบายคุณสมบัติโมเดลในสภาพแวดล้อมที่มีเครื่องมือจำเป็น ชนิดข้อมูลที่รับกำหนดโดยวิธีที่เลือก ความเข้าใจภาพไม่ได้หมายความว่าทุกคำขอประมวลผลวิดีโอ ไฟล์ หรือสร้างสิ่งที่ระบุได้โดยอัตโนมัติ

งานตัวอย่างจริง

งานตัวอย่างจริง

ตัวอย่างทางเทคนิคภาษาอังกฤษ

Audit a report calculation

Review these report rows supplied as text: revenue 12,000; cost of goods 7,000; delivery expense 800; reported gross profit 4,200. The report defines gross profit as revenue minus cost of goods, excluding delivery. Identify the formula mismatch, show the defined calculation and suggest a separate label for the delivery-adjusted figure.

ผลลัพธ์ที่คาดหวัง

A formula check, arithmetic using the given definition and a suggested label distinguishing the two measures.

ตรวจสอบผลลัพธ์

Check that the report's stated definition, rather than an invented accounting rule, determines the correction.
Ailoot · Anthropic Messages POST /v1/messages glm-5.3-flash

glm-5.3-flash

Z.ai /glm-5.3-flash
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest
  • z-ai/glm-5.3-flash

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ · รูปภาพ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · Anthropic Messages POST /v1/messages
ขาเข้า
text, image
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-5.3-flash
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัด
จำนวนรายการขั้นต่ำ: 1
ค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
user, assistant
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstring|content_block[]ข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์systemประเภทstring|content_block[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดจำเป็นค่าและข้อจำกัด
ขั้นต่ำ: 1
ข้อจำกัดใช้กับ: เพดานที่ตรงกับโมเดล/การ์ดที่เลือก
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์stop_sequencesประเภทstring[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทtool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].nameประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: มีเครื่องมือให้ใช้
ค่าเริ่มต้น—
ฟิลด์tools[].descriptionประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tools[].input_schemaประเภทJSON_schemaข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์thinking.typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์thinking.budget_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์output_config.effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์metadataประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์cache_controlประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

messages[].content หรือบล็อก type=text

ข้อความ + ภาพ

{type:image,source:{type:base64,media_type,data}} หรือแหล่งข้อมูลชนิด type=url

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext, image
พารามิเตอร์requiredข้อกำหนดmodel, messages, max_tokens
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot Anthropic MessagesPOST /v1/messages
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · Anthropic Messages

ตัวอย่างข้อความขาเข้า, รูปภาพPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-5.3-flash", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-5.3-flash", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="glm-5.3-flash",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(msg.to_dict(mode="json"))
import Anthropic from "@anthropic-ai/sdk";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
  model: "glm-5.3-flash",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(msg);
import anthropic,os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.messages.stream(model='glm-5.3-flash',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_message()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · Anthropic Messages

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกบล็อกเนื้อหา ลายเซ็นการคิด และ ID การใช้เครื่องมือจริง ประกอบส่วนเพิ่มของบล็อก SSE ทั้งหมด บล็อกข้อความแรกไม่ใช่ผลลัพธ์ทั้งหมด

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์idประเภทstring
ฟิลด์modelประเภทstring
ฟิลด์content[]ประเภทtext|thinking|tool_use|other content block
ฟิลด์stop_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · OpenAI Responses POST /v1/responses glm-5.3-flash

glm-5.3-flash

Z.ai /glm-5.3-flash
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ · รูปภาพ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · OpenAI Responses POST /v1/responses
ขาเข้า
text, image
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-5.3-flash
ค่าเริ่มต้น—
ฟิลด์inputประเภทstring|input_item[]ข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์instructionsประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์input[].typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
message, reasoning, function_call, function_call_output
ค่าเริ่มต้น—
ฟิลด์input[].contentประเภทstring|content_part[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์input[].call_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: function_call_output โดยเก็บ call_id ที่ส่งกลับจริง
ค่าเริ่มต้น—
ฟิลด์input[].outputประเภทstring|content_part[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: function_call_output
ค่าเริ่มต้น—
ฟิลด์max_output_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทtool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์parallel_tool_callsประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning.effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning.summaryประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์text.formatประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์text.verbosityประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์includeประเภทstring[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์storeประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์previous_response_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ข้อกำหนด ID: เฉพาะ ID คำตอบจริงจากขั้นตอนต่อเนื่องที่รองรับ
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์service_tierประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_keyประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_optionsประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

ข้อความอินพุตหรือส่วน input_text

ข้อความ + ภาพ

{type:input_image,image_url}

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext, image
พารามิเตอร์requiredข้อกำหนดmodel, input
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot OpenAI ResponsesPOST /v1/responses
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · OpenAI Responses

ตัวอย่างข้อความขาเข้า, รูปภาพPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-5.3-flash", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-5.3-flash", "input": [{"role": "user", "content": [{"type": "input_text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["input"][0]["content"].append({"type":"input_image","image_url":"data:"+mime+";base64,"+b64})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.responses.create(model="glm-5.3-flash", input="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.responses.create({ model: "glm-5.3-flash", input: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
with client.responses.stream(model="glm-5.3-flash", input="Explain the difference between an observation and a hypothesis in three sentences.") as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_response()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · OpenAI Responses

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกผลลัพธ์และส่วนเนื้อหา call_id ของฟังก์ชันจริง การใช้เหตุผลที่เข้ารหัส และข้อมูลการใช้งาน ในการสตรีมให้เก็บตัวตนของเหตุการณ์/รายการครบถ้วน

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์idประเภทstring
ฟิลด์statusประเภทstring
ฟิลด์output[]ประเภทmessage|reasoning|function_call|other item
ฟิลด์output[].content[]ประเภทcontent part
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · OpenAI Chat POST /v1/chat/completions glm-5.3-flash

glm-5.3-flash

Z.ai /glm-5.3-flash
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest
  • z-ai/glm-5.3-flash

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ · รูปภาพ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · OpenAI Chat POST /v1/chat/completions
ขาเข้า
text, image
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-5.3-flash
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัด
จำนวนรายการขั้นต่ำ: 1
ค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ตัวอย่าง: system, user, assistant, tool, function
เงื่อนไข: บทบาทเหล่านี้แทนอย่างชัดเจนด้วยชนิดข้อมูลเพื่อความเข้ากันได้ในซอร์สโค้ด แต่ชุดบทบาทที่แน่นอนยังขึ้นกับแต่ละโมเดล
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstring|content_part[]|nullข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_callsประเภทtool_call[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_call_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: role=tool โดยใช้ ID ที่ส่งกลับจริง
ค่าเริ่มต้น—
ฟิลด์messages[].nameประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].reasoning_contentประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: ส่งเนื้อหาการใช้เหตุผลที่คืนจริงกลับในคำขอถัดไป เมื่อโมเดลนี้ใช้เนื้อหานั้น
ค่าเริ่มต้น—
ฟิลด์messages[].reasoning_detailsประเภทobject|arrayข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_completion_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์stream_options.include_usageประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์stopประเภทstring|string[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทfunction_tool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].function.nameประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ใช้เมื่อ: มีเครื่องมือฟังก์ชันให้ใช้
ค่าเริ่มต้น—
ฟิลด์tools[].function.descriptionประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tools[].function.parametersประเภทJSON_schemaข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์parallel_tool_callsประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์response_formatประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning_effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoningประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์service_tierประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์instructionsประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ฟิลด์เพื่อความเข้ากันได้
ค่าเริ่มต้น—
ฟิลด์functionsประเภทfunction[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์function_callประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_optionsประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

messages[].content

ข้อความ + ภาพ

{type:image_url,image_url:{url,detail}}

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext, image
พารามิเตอร์requiredข้อกำหนดmodel, messages
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot OpenAI ChatPOST /v1/chat/completions
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · OpenAI Chat

ตัวอย่างข้อความขาเข้า, รูปภาพPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-5.3-flash", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-5.3-flash", "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image_url","image_url":{"url":"data:"+mime+";base64,"+b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="glm-5.3-flash",
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
  model: "glm-5.3-flash",
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='glm-5.3-flash',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · OpenAI Chat

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกตัวเลือกพร้อมเนื้อหา/การเรียกเครื่องมือ/การใช้เหตุผล ใน SSE ให้ประกอบส่วนเพิ่มตามดัชนีตัวเลือก/เครื่องมือ และเก็บเหตุผลสิ้นสุดกับข้อมูลการใช้งานสุดท้าย

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์choices[].indexประเภทinteger
ฟิลด์choices[].message.contentประเภทstring|null
ฟิลด์choices[].message.tool_callsประเภทtool_call[]
ฟิลด์choices[].message.reasoning_contentประเภทstring
ฟิลด์choices[].message.reasoning_detailsประเภทobject|array
ฟิลด์choices[].finish_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions glm-5.3-flash

glm-5.3-flash

Z.ai /glm-5.3-flash
ID โมเดล
  • glm-5.3-flash
  • z-ai/glm-5.3-flash
  • ~z-ai/glm-flash-latest

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
ขาเข้า
text
ขาออก
text
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-5.3-flash
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัด
จำนวนรายการขั้นต่ำ: 1
ค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: บทสนทนาข้อความ
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

messages[].content

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์requiredข้อกำหนดmodel, messages
พารามิเตอร์material_typesข้อกำหนดtext
พารามิเตอร์messagesข้อกำหนดอาร์เรย์ข้อความที่มีโครงสร้าง role/content
พารามิเตอร์file_materialข้อกำหนดแทรกเอกสาร UTF-8 จริงเป็นข้อความตามต้นฉบับ โดยไม่อนุมาน ID ไฟล์
พารามิเตอร์optional_controlsข้อกำหนดstream
พารามิเตอร์control_scopeข้อกำหนดบทสนทนาข้อความ โดย stream เป็นบูลีนและมีค่าเริ่มต้น false
พารามิเตอร์output_modalitiesข้อกำหนดtext
พารามิเตอร์hosted_operationsข้อกำหนดfalse
พารามิเตอร์multimodal_input_bindingข้อกำหนดnull

ชื่ออื่นของเมธอด: /chat/completions

วงจรการทำงาน: synchronous_or_streamed

ส่ง ID โมเดลที่ตรงทุกตัวพร้อม messages

ความยาวบริบทไม่ใช่เพดานผลลัพธ์

ไฟล์ข้อความให้ข้อความตามต้นฉบับได้ ส่วนข้อมูลเข้าภาพ/เสียง/ออบเจ็กต์ไฟล์ต้องมีการผูกที่ตรงตามจริง

ราคา

ข้อมูลอัตราราคาไม่ได้เพิ่มตัวเลือกคำขอ พารามิเตอร์ที่รองรับระบุไว้สำหรับเมธอดที่เลือก

โหมดรวดเร็ว
อัตรามาตรฐาน เมื่อเลือกโหมดรวดเร็ว
โหมดยืดหยุ่น
อัตรามาตรฐาน เมื่อเลือกโหมด flex
ระดับการใช้เหตุผลสูงสุด
อัตรามาตรฐาน เมื่อใช้การปรับตามค่าเริ่มต้น (default) สำหรับระดับการใช้เหตุผลสูงสุด
ระดับการใช้เหตุผล · สูง
อัตรามาตรฐาน เมื่อระดับการใช้เหตุผลอยู่ในระดับสูง
ระดับการใช้เหตุผล · ต่ำ
อัตรามาตรฐาน เมื่อระดับการใช้เหตุผลอยู่ในระดับต่ำ
ระดับการใช้เหตุผล · สูงสุด
อัตรามาตรฐาน เมื่อระดับการใช้เหตุผลอยู่ในระดับสูงสุด

อัตราค่าบริการ Ailoot

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าอัตราราคาพื้นฐานของโทเคนตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าระดับความยาวคำขอ 1ตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

ตัวอย่างคำขอ

Ailoot Ultra · OpenAI Chat

curlPython SDK
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model":"glm-5.3-flash","messages":[{"role":"user","content":"hello"}],"stream":false}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model="glm-5.3-flash", messages=[{"role":"user","content":"hello"}], stream=False)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))

รับและบันทึกผลลัพธ์

Ailoot Ultra · OpenAI Chat

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกตัวเลือกพร้อมเนื้อหา/การเรียกเครื่องมือ/การใช้เหตุผล ใน SSE ให้ประกอบส่วนเพิ่มตามดัชนีตัวเลือก/เครื่องมือ และเก็บเหตุผลสิ้นสุดกับข้อมูลการใช้งานสุดท้าย

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์choices[].indexประเภทinteger
ฟิลด์choices[].message.contentประเภทstring|null
ฟิลด์choices[].message.tool_callsประเภทtool_call[]
ฟิลด์choices[].message.reasoning_contentประเภทstring
ฟิลด์choices[].message.reasoning_detailsประเภทobject|array
ฟิลด์choices[].finish_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot Ultra · Anthropic Messages POST /v1/messages glm-5.3-flash

glm-5.3-flash

Z.ai /glm-5.3-flash
ID โมเดล
  • glm-5.3-flash
  • z-ai/glm-5.3-flash
  • ~z-ai/glm-flash-latest

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ
ผลลัพธ์
json · sse

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot Ultra · Anthropic Messages POST /v1/messages
ขาเข้า
text
ขาออก
json, sse
รูปแบบเอาต์พุต
JSON หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-5.3-flash
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
user, assistant
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF-8

สตริง messages[].content

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์requiredข้อกำหนดmodel, messages, max_tokens
พารามิเตอร์optional_controlsข้อกำหนดstream
พารามิเตอร์material_typesข้อกำหนดtext
พารามิเตอร์text_file_materialข้อกำหนดอ่านเอกสาร UTF-8 จริง แล้วใส่ข้อความใน input หรือสตริงเนื้อหาข้อความที่ระบุ

วงจรการทำงาน: synchronous_or_streamed

ราคา

ข้อมูลอัตราราคาไม่ได้เพิ่มตัวเลือกคำขอ พารามิเตอร์ที่รองรับระบุไว้สำหรับเมธอดที่เลือก

โหมดรวดเร็ว
อัตรามาตรฐาน เมื่อเลือกโหมดรวดเร็ว
โหมดยืดหยุ่น
อัตรามาตรฐาน เมื่อเลือกโหมด flex
ระดับการใช้เหตุผลสูงสุด
อัตรามาตรฐาน เมื่อใช้การปรับตามค่าเริ่มต้น (default) สำหรับระดับการใช้เหตุผลสูงสุด
ระดับการใช้เหตุผล · สูง
อัตรามาตรฐาน เมื่อระดับการใช้เหตุผลอยู่ในระดับสูง
ระดับการใช้เหตุผล · ต่ำ
อัตรามาตรฐาน เมื่อระดับการใช้เหตุผลอยู่ในระดับต่ำ
ระดับการใช้เหตุผล · สูงสุด
อัตรามาตรฐาน เมื่อระดับการใช้เหตุผลอยู่ในระดับสูงสุด

อัตราค่าบริการ Ailoot

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าอัตราราคาพื้นฐานของโทเคนตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าระดับความยาวคำขอ 1ตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

ตัวอย่างคำขอ

Ailoot Ultra · Anthropic Messages

เนื้อหาคำขอ JSON ขั้นต่ำที่ครบถ้วนcurl · ใช้เอกสาร UTF-8 ของคุณPython · บันทึกผลลัพธ์ให้ครบถ้วน
{
  "model": "glm-5.3-flash",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'glm-5.3-flash', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'glm-5.3-flash', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))

รับและบันทึกผลลัพธ์

Ailoot Ultra · Anthropic Messages

JSON หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกบล็อกเนื้อหา ลายเซ็นการคิด และ ID การใช้เครื่องมือจริง ประกอบส่วนเพิ่มของบล็อก SSE ทั้งหมด บล็อกข้อความแรกไม่ใช่ผลลัพธ์ทั้งหมด

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์idประเภทstring
ฟิลด์modelประเภทstring
ฟิลด์content[]ประเภทtext|thinking|tool_use|other content block
ฟิลด์stop_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · Anthropic Messages POST /v1/messages glm-4.5

glm-4.5

Z.ai /glm-4.5
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest
  • z-ai/glm-5.3-flash

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ · รูปภาพ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · Anthropic Messages POST /v1/messages
ขาเข้า
text, image
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-4.5
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัด
จำนวนรายการขั้นต่ำ: 1
ค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
user, assistant
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstring|content_block[]ข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์systemประเภทstring|content_block[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดจำเป็นค่าและข้อจำกัด
ขั้นต่ำ: 1
ข้อจำกัดใช้กับ: เพดานที่ตรงกับโมเดล/การ์ดที่เลือก
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์stop_sequencesประเภทstring[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทtool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].nameประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: มีเครื่องมือให้ใช้
ค่าเริ่มต้น—
ฟิลด์tools[].descriptionประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tools[].input_schemaประเภทJSON_schemaข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์thinking.typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์thinking.budget_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์output_config.effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์metadataประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์cache_controlประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

messages[].content หรือบล็อก type=text

ข้อความ + ภาพ

{type:image,source:{type:base64,media_type,data}} หรือแหล่งข้อมูลชนิด type=url

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext, image
พารามิเตอร์requiredข้อกำหนดmodel, messages, max_tokens
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot Anthropic MessagesPOST /v1/messages
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · Anthropic Messages

ตัวอย่างข้อความขาเข้า, รูปภาพPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-4.5", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-4.5", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="glm-4.5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(msg.to_dict(mode="json"))
import Anthropic from "@anthropic-ai/sdk";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
  model: "glm-4.5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(msg);
import anthropic,os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.messages.stream(model='glm-4.5',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_message()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · Anthropic Messages

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกบล็อกเนื้อหา ลายเซ็นการคิด และ ID การใช้เครื่องมือจริง ประกอบส่วนเพิ่มของบล็อก SSE ทั้งหมด บล็อกข้อความแรกไม่ใช่ผลลัพธ์ทั้งหมด

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์idประเภทstring
ฟิลด์modelประเภทstring
ฟิลด์content[]ประเภทtext|thinking|tool_use|other content block
ฟิลด์stop_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · OpenAI Responses POST /v1/responses glm-4.5

glm-4.5

Z.ai /glm-4.5
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ · รูปภาพ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · OpenAI Responses POST /v1/responses
ขาเข้า
text, image
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-4.5
ค่าเริ่มต้น—
ฟิลด์inputประเภทstring|input_item[]ข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์instructionsประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์input[].typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
message, reasoning, function_call, function_call_output
ค่าเริ่มต้น—
ฟิลด์input[].contentประเภทstring|content_part[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์input[].call_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: function_call_output โดยเก็บ call_id ที่ส่งกลับจริง
ค่าเริ่มต้น—
ฟิลด์input[].outputประเภทstring|content_part[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: function_call_output
ค่าเริ่มต้น—
ฟิลด์max_output_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทtool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์parallel_tool_callsประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning.effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning.summaryประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์text.formatประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์text.verbosityประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์includeประเภทstring[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์storeประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์previous_response_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ข้อกำหนด ID: เฉพาะ ID คำตอบจริงจากขั้นตอนต่อเนื่องที่รองรับ
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์service_tierประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_keyประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_optionsประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

ข้อความอินพุตหรือส่วน input_text

ข้อความ + ภาพ

{type:input_image,image_url}

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext, image
พารามิเตอร์requiredข้อกำหนดmodel, input
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot OpenAI ResponsesPOST /v1/responses
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · OpenAI Responses

ตัวอย่างข้อความขาเข้า, รูปภาพPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-4.5", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-4.5", "input": [{"role": "user", "content": [{"type": "input_text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["input"][0]["content"].append({"type":"input_image","image_url":"data:"+mime+";base64,"+b64})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.responses.create(model="glm-4.5", input="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.responses.create({ model: "glm-4.5", input: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
with client.responses.stream(model="glm-4.5", input="Explain the difference between an observation and a hypothesis in three sentences.") as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_response()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · OpenAI Responses

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกผลลัพธ์และส่วนเนื้อหา call_id ของฟังก์ชันจริง การใช้เหตุผลที่เข้ารหัส และข้อมูลการใช้งาน ในการสตรีมให้เก็บตัวตนของเหตุการณ์/รายการครบถ้วน

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์idประเภทstring
ฟิลด์statusประเภทstring
ฟิลด์output[]ประเภทmessage|reasoning|function_call|other item
ฟิลด์output[].content[]ประเภทcontent part
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · OpenAI Chat POST /v1/chat/completions glm-4.5

glm-4.5

Z.ai /glm-4.5
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest
  • z-ai/glm-5.3-flash

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ · รูปภาพ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · OpenAI Chat POST /v1/chat/completions
ขาเข้า
text, image
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-4.5
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัด
จำนวนรายการขั้นต่ำ: 1
ค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ตัวอย่าง: system, user, assistant, tool, function
เงื่อนไข: บทบาทเหล่านี้แทนอย่างชัดเจนด้วยชนิดข้อมูลเพื่อความเข้ากันได้ในซอร์สโค้ด แต่ชุดบทบาทที่แน่นอนยังขึ้นกับแต่ละโมเดล
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstring|content_part[]|nullข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_callsประเภทtool_call[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_call_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: role=tool โดยใช้ ID ที่ส่งกลับจริง
ค่าเริ่มต้น—
ฟิลด์messages[].nameประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].reasoning_contentประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: ส่งเนื้อหาการใช้เหตุผลที่คืนจริงกลับในคำขอถัดไป เมื่อโมเดลนี้ใช้เนื้อหานั้น
ค่าเริ่มต้น—
ฟิลด์messages[].reasoning_detailsประเภทobject|arrayข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_completion_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์stream_options.include_usageประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์stopประเภทstring|string[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทfunction_tool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].function.nameประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ใช้เมื่อ: มีเครื่องมือฟังก์ชันให้ใช้
ค่าเริ่มต้น—
ฟิลด์tools[].function.descriptionประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tools[].function.parametersประเภทJSON_schemaข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์parallel_tool_callsประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์response_formatประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning_effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoningประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์service_tierประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์instructionsประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ฟิลด์เพื่อความเข้ากันได้
ค่าเริ่มต้น—
ฟิลด์functionsประเภทfunction[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์function_callประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_optionsประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

messages[].content

ข้อความ + ภาพ

{type:image_url,image_url:{url,detail}}

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext, image
พารามิเตอร์requiredข้อกำหนดmodel, messages
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot OpenAI ChatPOST /v1/chat/completions
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · OpenAI Chat

ตัวอย่างข้อความขาเข้า, รูปภาพPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-4.5", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-4.5", "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image_url","image_url":{"url":"data:"+mime+";base64,"+b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="glm-4.5",
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
  model: "glm-4.5",
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='glm-4.5',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · OpenAI Chat

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกตัวเลือกพร้อมเนื้อหา/การเรียกเครื่องมือ/การใช้เหตุผล ใน SSE ให้ประกอบส่วนเพิ่มตามดัชนีตัวเลือก/เครื่องมือ และเก็บเหตุผลสิ้นสุดกับข้อมูลการใช้งานสุดท้าย

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์choices[].indexประเภทinteger
ฟิลด์choices[].message.contentประเภทstring|null
ฟิลด์choices[].message.tool_callsประเภทtool_call[]
ฟิลด์choices[].message.reasoning_contentประเภทstring
ฟิลด์choices[].message.reasoning_detailsประเภทobject|array
ฟิลด์choices[].finish_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · Anthropic Messages POST /v1/messages glm-4.5-air

glm-4.5-air

Z.ai /glm-4.5-air
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest
  • z-ai/glm-5.3-flash

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ · รูปภาพ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · Anthropic Messages POST /v1/messages
ขาเข้า
text, image
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-4.5-air
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัด
จำนวนรายการขั้นต่ำ: 1
ค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
user, assistant
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstring|content_block[]ข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์systemประเภทstring|content_block[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดจำเป็นค่าและข้อจำกัด
ขั้นต่ำ: 1
ข้อจำกัดใช้กับ: เพดานที่ตรงกับโมเดล/การ์ดที่เลือก
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์stop_sequencesประเภทstring[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทtool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].nameประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: มีเครื่องมือให้ใช้
ค่าเริ่มต้น—
ฟิลด์tools[].descriptionประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tools[].input_schemaประเภทJSON_schemaข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์thinking.typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์thinking.budget_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์output_config.effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์metadataประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์cache_controlประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

messages[].content หรือบล็อก type=text

ข้อความ + ภาพ

{type:image,source:{type:base64,media_type,data}} หรือแหล่งข้อมูลชนิด type=url

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext, image
พารามิเตอร์requiredข้อกำหนดmodel, messages, max_tokens
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot Anthropic MessagesPOST /v1/messages
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · Anthropic Messages

ตัวอย่างข้อความขาเข้า, รูปภาพPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-4.5-air", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-4.5-air", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="glm-4.5-air",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(msg.to_dict(mode="json"))
import Anthropic from "@anthropic-ai/sdk";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
  model: "glm-4.5-air",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(msg);
import anthropic,os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.messages.stream(model='glm-4.5-air',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_message()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · Anthropic Messages

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกบล็อกเนื้อหา ลายเซ็นการคิด และ ID การใช้เครื่องมือจริง ประกอบส่วนเพิ่มของบล็อก SSE ทั้งหมด บล็อกข้อความแรกไม่ใช่ผลลัพธ์ทั้งหมด

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์idประเภทstring
ฟิลด์modelประเภทstring
ฟิลด์content[]ประเภทtext|thinking|tool_use|other content block
ฟิลด์stop_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · OpenAI Responses POST /v1/responses glm-4.5-air

glm-4.5-air

Z.ai /glm-4.5-air
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ · รูปภาพ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · OpenAI Responses POST /v1/responses
ขาเข้า
text, image
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-4.5-air
ค่าเริ่มต้น—
ฟิลด์inputประเภทstring|input_item[]ข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์instructionsประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์input[].typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
message, reasoning, function_call, function_call_output
ค่าเริ่มต้น—
ฟิลด์input[].contentประเภทstring|content_part[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์input[].call_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: function_call_output โดยเก็บ call_id ที่ส่งกลับจริง
ค่าเริ่มต้น—
ฟิลด์input[].outputประเภทstring|content_part[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: function_call_output
ค่าเริ่มต้น—
ฟิลด์max_output_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทtool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์parallel_tool_callsประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning.effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning.summaryประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์text.formatประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์text.verbosityประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์includeประเภทstring[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์storeประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์previous_response_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ข้อกำหนด ID: เฉพาะ ID คำตอบจริงจากขั้นตอนต่อเนื่องที่รองรับ
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์service_tierประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_keyประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_optionsประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

ข้อความอินพุตหรือส่วน input_text

ข้อความ + ภาพ

{type:input_image,image_url}

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext, image
พารามิเตอร์requiredข้อกำหนดmodel, input
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot OpenAI ResponsesPOST /v1/responses
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · OpenAI Responses

ตัวอย่างข้อความขาเข้า, รูปภาพPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-4.5-air", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-4.5-air", "input": [{"role": "user", "content": [{"type": "input_text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["input"][0]["content"].append({"type":"input_image","image_url":"data:"+mime+";base64,"+b64})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.responses.create(model="glm-4.5-air", input="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.responses.create({ model: "glm-4.5-air", input: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
with client.responses.stream(model="glm-4.5-air", input="Explain the difference between an observation and a hypothesis in three sentences.") as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_response()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · OpenAI Responses

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกผลลัพธ์และส่วนเนื้อหา call_id ของฟังก์ชันจริง การใช้เหตุผลที่เข้ารหัส และข้อมูลการใช้งาน ในการสตรีมให้เก็บตัวตนของเหตุการณ์/รายการครบถ้วน

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์idประเภทstring
ฟิลด์statusประเภทstring
ฟิลด์output[]ประเภทmessage|reasoning|function_call|other item
ฟิลด์output[].content[]ประเภทcontent part
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · OpenAI Chat POST /v1/chat/completions glm-4.5-air

glm-4.5-air

Z.ai /glm-4.5-air
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest
  • z-ai/glm-5.3-flash

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ · รูปภาพ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · OpenAI Chat POST /v1/chat/completions
ขาเข้า
text, image
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-4.5-air
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัด
จำนวนรายการขั้นต่ำ: 1
ค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ตัวอย่าง: system, user, assistant, tool, function
เงื่อนไข: บทบาทเหล่านี้แทนอย่างชัดเจนด้วยชนิดข้อมูลเพื่อความเข้ากันได้ในซอร์สโค้ด แต่ชุดบทบาทที่แน่นอนยังขึ้นกับแต่ละโมเดล
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstring|content_part[]|nullข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_callsประเภทtool_call[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_call_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: role=tool โดยใช้ ID ที่ส่งกลับจริง
ค่าเริ่มต้น—
ฟิลด์messages[].nameประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].reasoning_contentประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: ส่งเนื้อหาการใช้เหตุผลที่คืนจริงกลับในคำขอถัดไป เมื่อโมเดลนี้ใช้เนื้อหานั้น
ค่าเริ่มต้น—
ฟิลด์messages[].reasoning_detailsประเภทobject|arrayข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_completion_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์stream_options.include_usageประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์stopประเภทstring|string[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทfunction_tool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].function.nameประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ใช้เมื่อ: มีเครื่องมือฟังก์ชันให้ใช้
ค่าเริ่มต้น—
ฟิลด์tools[].function.descriptionประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tools[].function.parametersประเภทJSON_schemaข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์parallel_tool_callsประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์response_formatประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning_effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoningประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์service_tierประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์instructionsประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ฟิลด์เพื่อความเข้ากันได้
ค่าเริ่มต้น—
ฟิลด์functionsประเภทfunction[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์function_callประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_optionsประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

messages[].content

ข้อความ + ภาพ

{type:image_url,image_url:{url,detail}}

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext, image
พารามิเตอร์requiredข้อกำหนดmodel, messages
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot OpenAI ChatPOST /v1/chat/completions
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · OpenAI Chat

ตัวอย่างข้อความขาเข้า, รูปภาพPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-4.5-air", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-4.5-air", "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image_url","image_url":{"url":"data:"+mime+";base64,"+b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="glm-4.5-air",
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
  model: "glm-4.5-air",
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='glm-4.5-air',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · OpenAI Chat

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกตัวเลือกพร้อมเนื้อหา/การเรียกเครื่องมือ/การใช้เหตุผล ใน SSE ให้ประกอบส่วนเพิ่มตามดัชนีตัวเลือก/เครื่องมือ และเก็บเหตุผลสิ้นสุดกับข้อมูลการใช้งานสุดท้าย

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์choices[].indexประเภทinteger
ฟิลด์choices[].message.contentประเภทstring|null
ฟิลด์choices[].message.tool_callsประเภทtool_call[]
ฟิลด์choices[].message.reasoning_contentประเภทstring
ฟิลด์choices[].message.reasoning_detailsประเภทobject|array
ฟิลด์choices[].finish_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · Anthropic Messages POST /v1/messages glm-4.6

glm-4.6

Z.ai /glm-4.6
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest
  • z-ai/glm-5.3-flash

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ · รูปภาพ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · Anthropic Messages POST /v1/messages
ขาเข้า
text, image
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-4.6
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัด
จำนวนรายการขั้นต่ำ: 1
ค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
user, assistant
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstring|content_block[]ข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์systemประเภทstring|content_block[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดจำเป็นค่าและข้อจำกัด
ขั้นต่ำ: 1
ข้อจำกัดใช้กับ: เพดานที่ตรงกับโมเดล/การ์ดที่เลือก
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์stop_sequencesประเภทstring[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทtool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].nameประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: มีเครื่องมือให้ใช้
ค่าเริ่มต้น—
ฟิลด์tools[].descriptionประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tools[].input_schemaประเภทJSON_schemaข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์thinking.typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์thinking.budget_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์output_config.effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์metadataประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์cache_controlประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

messages[].content หรือบล็อก type=text

ข้อความ + ภาพ

{type:image,source:{type:base64,media_type,data}} หรือแหล่งข้อมูลชนิด type=url

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext, image
พารามิเตอร์requiredข้อกำหนดmodel, messages, max_tokens
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot Anthropic MessagesPOST /v1/messages
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · Anthropic Messages

ตัวอย่างข้อความขาเข้า, รูปภาพPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-4.6", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-4.6", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="glm-4.6",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(msg.to_dict(mode="json"))
import Anthropic from "@anthropic-ai/sdk";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
  model: "glm-4.6",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(msg);
import anthropic,os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.messages.stream(model='glm-4.6',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_message()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · Anthropic Messages

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกบล็อกเนื้อหา ลายเซ็นการคิด และ ID การใช้เครื่องมือจริง ประกอบส่วนเพิ่มของบล็อก SSE ทั้งหมด บล็อกข้อความแรกไม่ใช่ผลลัพธ์ทั้งหมด

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์idประเภทstring
ฟิลด์modelประเภทstring
ฟิลด์content[]ประเภทtext|thinking|tool_use|other content block
ฟิลด์stop_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · OpenAI Responses POST /v1/responses glm-4.6

glm-4.6

Z.ai /glm-4.6
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ · รูปภาพ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · OpenAI Responses POST /v1/responses
ขาเข้า
text, image
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-4.6
ค่าเริ่มต้น—
ฟิลด์inputประเภทstring|input_item[]ข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์instructionsประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์input[].typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
message, reasoning, function_call, function_call_output
ค่าเริ่มต้น—
ฟิลด์input[].contentประเภทstring|content_part[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์input[].call_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: function_call_output โดยเก็บ call_id ที่ส่งกลับจริง
ค่าเริ่มต้น—
ฟิลด์input[].outputประเภทstring|content_part[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: function_call_output
ค่าเริ่มต้น—
ฟิลด์max_output_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทtool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์parallel_tool_callsประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning.effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning.summaryประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์text.formatประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์text.verbosityประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์includeประเภทstring[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์storeประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์previous_response_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ข้อกำหนด ID: เฉพาะ ID คำตอบจริงจากขั้นตอนต่อเนื่องที่รองรับ
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์service_tierประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_keyประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_optionsประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

ข้อความอินพุตหรือส่วน input_text

ข้อความ + ภาพ

{type:input_image,image_url}

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext, image
พารามิเตอร์requiredข้อกำหนดmodel, input
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot OpenAI ResponsesPOST /v1/responses
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · OpenAI Responses

ตัวอย่างข้อความขาเข้า, รูปภาพPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-4.6", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-4.6", "input": [{"role": "user", "content": [{"type": "input_text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["input"][0]["content"].append({"type":"input_image","image_url":"data:"+mime+";base64,"+b64})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.responses.create(model="glm-4.6", input="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.responses.create({ model: "glm-4.6", input: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
with client.responses.stream(model="glm-4.6", input="Explain the difference between an observation and a hypothesis in three sentences.") as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_response()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · OpenAI Responses

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกผลลัพธ์และส่วนเนื้อหา call_id ของฟังก์ชันจริง การใช้เหตุผลที่เข้ารหัส และข้อมูลการใช้งาน ในการสตรีมให้เก็บตัวตนของเหตุการณ์/รายการครบถ้วน

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์idประเภทstring
ฟิลด์statusประเภทstring
ฟิลด์output[]ประเภทmessage|reasoning|function_call|other item
ฟิลด์output[].content[]ประเภทcontent part
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · OpenAI Chat POST /v1/chat/completions glm-4.6

glm-4.6

Z.ai /glm-4.6
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest
  • z-ai/glm-5.3-flash

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ · รูปภาพ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · OpenAI Chat POST /v1/chat/completions
ขาเข้า
text, image
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-4.6
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัด
จำนวนรายการขั้นต่ำ: 1
ค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ตัวอย่าง: system, user, assistant, tool, function
เงื่อนไข: บทบาทเหล่านี้แทนอย่างชัดเจนด้วยชนิดข้อมูลเพื่อความเข้ากันได้ในซอร์สโค้ด แต่ชุดบทบาทที่แน่นอนยังขึ้นกับแต่ละโมเดล
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstring|content_part[]|nullข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_callsประเภทtool_call[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_call_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: role=tool โดยใช้ ID ที่ส่งกลับจริง
ค่าเริ่มต้น—
ฟิลด์messages[].nameประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].reasoning_contentประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: ส่งเนื้อหาการใช้เหตุผลที่คืนจริงกลับในคำขอถัดไป เมื่อโมเดลนี้ใช้เนื้อหานั้น
ค่าเริ่มต้น—
ฟิลด์messages[].reasoning_detailsประเภทobject|arrayข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_completion_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์stream_options.include_usageประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์stopประเภทstring|string[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทfunction_tool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].function.nameประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ใช้เมื่อ: มีเครื่องมือฟังก์ชันให้ใช้
ค่าเริ่มต้น—
ฟิลด์tools[].function.descriptionประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tools[].function.parametersประเภทJSON_schemaข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์parallel_tool_callsประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์response_formatประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning_effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoningประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์service_tierประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์instructionsประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ฟิลด์เพื่อความเข้ากันได้
ค่าเริ่มต้น—
ฟิลด์functionsประเภทfunction[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์function_callประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_optionsประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

messages[].content

ข้อความ + ภาพ

{type:image_url,image_url:{url,detail}}

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext, image
พารามิเตอร์requiredข้อกำหนดmodel, messages
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot OpenAI ChatPOST /v1/chat/completions
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · OpenAI Chat

ตัวอย่างข้อความขาเข้า, รูปภาพPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-4.6", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-4.6", "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image_url","image_url":{"url":"data:"+mime+";base64,"+b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="glm-4.6",
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
  model: "glm-4.6",
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='glm-4.6',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · OpenAI Chat

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกตัวเลือกพร้อมเนื้อหา/การเรียกเครื่องมือ/การใช้เหตุผล ใน SSE ให้ประกอบส่วนเพิ่มตามดัชนีตัวเลือก/เครื่องมือ และเก็บเหตุผลสิ้นสุดกับข้อมูลการใช้งานสุดท้าย

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์choices[].indexประเภทinteger
ฟิลด์choices[].message.contentประเภทstring|null
ฟิลด์choices[].message.tool_callsประเภทtool_call[]
ฟิลด์choices[].message.reasoning_contentประเภทstring
ฟิลด์choices[].message.reasoning_detailsประเภทobject|array
ฟิลด์choices[].finish_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · Anthropic Messages POST /v1/messages glm-4.7

glm-4.7

Z.ai /glm-4.7
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest
  • z-ai/glm-5.3-flash

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · Anthropic Messages POST /v1/messages
ขาเข้า
text
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-4.7
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัด
จำนวนรายการขั้นต่ำ: 1
ค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
user, assistant
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstring|content_block[]ข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์systemประเภทstring|content_block[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดจำเป็นค่าและข้อจำกัด
ขั้นต่ำ: 1
ข้อจำกัดใช้กับ: เพดานที่ตรงกับโมเดล/การ์ดที่เลือก
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์stop_sequencesประเภทstring[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทtool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].nameประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: มีเครื่องมือให้ใช้
ค่าเริ่มต้น—
ฟิลด์tools[].descriptionประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tools[].input_schemaประเภทJSON_schemaข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์thinking.typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์thinking.budget_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์output_config.effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์metadataประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์cache_controlประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

messages[].content หรือบล็อก type=text

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext
พารามิเตอร์requiredข้อกำหนดmodel, messages, max_tokens
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot Anthropic MessagesPOST /v1/messages
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · Anthropic Messages

ตัวอย่างข้อความPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-4.7", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="glm-4.7",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(msg.to_dict(mode="json"))
import Anthropic from "@anthropic-ai/sdk";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
  model: "glm-4.7",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(msg);
import anthropic,os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.messages.stream(model='glm-4.7',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_message()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · Anthropic Messages

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกบล็อกเนื้อหา ลายเซ็นการคิด และ ID การใช้เครื่องมือจริง ประกอบส่วนเพิ่มของบล็อก SSE ทั้งหมด บล็อกข้อความแรกไม่ใช่ผลลัพธ์ทั้งหมด

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์idประเภทstring
ฟิลด์modelประเภทstring
ฟิลด์content[]ประเภทtext|thinking|tool_use|other content block
ฟิลด์stop_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · OpenAI Responses POST /v1/responses glm-4.7

glm-4.7

Z.ai /glm-4.7
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · OpenAI Responses POST /v1/responses
ขาเข้า
text
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-4.7
ค่าเริ่มต้น—
ฟิลด์inputประเภทstring|input_item[]ข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์instructionsประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์input[].typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
message, reasoning, function_call, function_call_output
ค่าเริ่มต้น—
ฟิลด์input[].contentประเภทstring|content_part[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์input[].call_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: function_call_output โดยเก็บ call_id ที่ส่งกลับจริง
ค่าเริ่มต้น—
ฟิลด์input[].outputประเภทstring|content_part[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: function_call_output
ค่าเริ่มต้น—
ฟิลด์max_output_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทtool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์parallel_tool_callsประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning.effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning.summaryประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์text.formatประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์text.verbosityประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์includeประเภทstring[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์storeประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์previous_response_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ข้อกำหนด ID: เฉพาะ ID คำตอบจริงจากขั้นตอนต่อเนื่องที่รองรับ
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์service_tierประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_keyประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_optionsประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

ข้อความอินพุตหรือส่วน input_text

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext
พารามิเตอร์requiredข้อกำหนดmodel, input
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot OpenAI ResponsesPOST /v1/responses
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · OpenAI Responses

ตัวอย่างข้อความPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-4.7", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.responses.create(model="glm-4.7", input="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.responses.create({ model: "glm-4.7", input: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
with client.responses.stream(model="glm-4.7", input="Explain the difference between an observation and a hypothesis in three sentences.") as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_response()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · OpenAI Responses

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกผลลัพธ์และส่วนเนื้อหา call_id ของฟังก์ชันจริง การใช้เหตุผลที่เข้ารหัส และข้อมูลการใช้งาน ในการสตรีมให้เก็บตัวตนของเหตุการณ์/รายการครบถ้วน

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์idประเภทstring
ฟิลด์statusประเภทstring
ฟิลด์output[]ประเภทmessage|reasoning|function_call|other item
ฟิลด์output[].content[]ประเภทcontent part
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · OpenAI Chat POST /v1/chat/completions glm-4.7

glm-4.7

Z.ai /glm-4.7
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest
  • z-ai/glm-5.3-flash

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · OpenAI Chat POST /v1/chat/completions
ขาเข้า
text
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-4.7
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัด
จำนวนรายการขั้นต่ำ: 1
ค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ตัวอย่าง: system, user, assistant, tool, function
เงื่อนไข: บทบาทเหล่านี้แทนอย่างชัดเจนด้วยชนิดข้อมูลเพื่อความเข้ากันได้ในซอร์สโค้ด แต่ชุดบทบาทที่แน่นอนยังขึ้นกับแต่ละโมเดล
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstring|content_part[]|nullข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_callsประเภทtool_call[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_call_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: role=tool โดยใช้ ID ที่ส่งกลับจริง
ค่าเริ่มต้น—
ฟิลด์messages[].nameประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].reasoning_contentประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: ส่งเนื้อหาการใช้เหตุผลที่คืนจริงกลับในคำขอถัดไป เมื่อโมเดลนี้ใช้เนื้อหานั้น
ค่าเริ่มต้น—
ฟิลด์messages[].reasoning_detailsประเภทobject|arrayข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_completion_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์stream_options.include_usageประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์stopประเภทstring|string[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทfunction_tool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].function.nameประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ใช้เมื่อ: มีเครื่องมือฟังก์ชันให้ใช้
ค่าเริ่มต้น—
ฟิลด์tools[].function.descriptionประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tools[].function.parametersประเภทJSON_schemaข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์parallel_tool_callsประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์response_formatประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning_effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoningประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์service_tierประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์instructionsประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ฟิลด์เพื่อความเข้ากันได้
ค่าเริ่มต้น—
ฟิลด์functionsประเภทfunction[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์function_callประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_optionsประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

messages[].content

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext
พารามิเตอร์requiredข้อกำหนดmodel, messages
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot OpenAI ChatPOST /v1/chat/completions
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · OpenAI Chat

ตัวอย่างข้อความPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-4.7", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="glm-4.7",
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
  model: "glm-4.7",
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='glm-4.7',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · OpenAI Chat

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกตัวเลือกพร้อมเนื้อหา/การเรียกเครื่องมือ/การใช้เหตุผล ใน SSE ให้ประกอบส่วนเพิ่มตามดัชนีตัวเลือก/เครื่องมือ และเก็บเหตุผลสิ้นสุดกับข้อมูลการใช้งานสุดท้าย

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์choices[].indexประเภทinteger
ฟิลด์choices[].message.contentประเภทstring|null
ฟิลด์choices[].message.tool_callsประเภทtool_call[]
ฟิลด์choices[].message.reasoning_contentประเภทstring
ฟิลด์choices[].message.reasoning_detailsประเภทobject|array
ฟิลด์choices[].finish_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · Anthropic Messages POST /v1/messages glm-5-turbo

glm-5-turbo

Z.ai /glm-5-turbo
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest
  • z-ai/glm-5.3-flash

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ · รูปภาพ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · Anthropic Messages POST /v1/messages
ขาเข้า
text, image
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-5-turbo
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัด
จำนวนรายการขั้นต่ำ: 1
ค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
user, assistant
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstring|content_block[]ข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์systemประเภทstring|content_block[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดจำเป็นค่าและข้อจำกัด
ขั้นต่ำ: 1
ข้อจำกัดใช้กับ: เพดานที่ตรงกับโมเดล/การ์ดที่เลือก
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์stop_sequencesประเภทstring[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทtool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].nameประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: มีเครื่องมือให้ใช้
ค่าเริ่มต้น—
ฟิลด์tools[].descriptionประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tools[].input_schemaประเภทJSON_schemaข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์thinking.typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์thinking.budget_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์output_config.effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์metadataประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์cache_controlประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

messages[].content หรือบล็อก type=text

ข้อความ + ภาพ

{type:image,source:{type:base64,media_type,data}} หรือแหล่งข้อมูลชนิด type=url

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext, image
พารามิเตอร์requiredข้อกำหนดmodel, messages, max_tokens
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot Anthropic MessagesPOST /v1/messages
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · Anthropic Messages

ตัวอย่างข้อความขาเข้า, รูปภาพPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-5-turbo", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-5-turbo", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="glm-5-turbo",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(msg.to_dict(mode="json"))
import Anthropic from "@anthropic-ai/sdk";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
  model: "glm-5-turbo",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(msg);
import anthropic,os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.messages.stream(model='glm-5-turbo',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_message()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · Anthropic Messages

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกบล็อกเนื้อหา ลายเซ็นการคิด และ ID การใช้เครื่องมือจริง ประกอบส่วนเพิ่มของบล็อก SSE ทั้งหมด บล็อกข้อความแรกไม่ใช่ผลลัพธ์ทั้งหมด

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์idประเภทstring
ฟิลด์modelประเภทstring
ฟิลด์content[]ประเภทtext|thinking|tool_use|other content block
ฟิลด์stop_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · OpenAI Responses POST /v1/responses glm-5-turbo

glm-5-turbo

Z.ai /glm-5-turbo
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ · รูปภาพ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · OpenAI Responses POST /v1/responses
ขาเข้า
text, image
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-5-turbo
ค่าเริ่มต้น—
ฟิลด์inputประเภทstring|input_item[]ข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์instructionsประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์input[].typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
message, reasoning, function_call, function_call_output
ค่าเริ่มต้น—
ฟิลด์input[].contentประเภทstring|content_part[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์input[].call_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: function_call_output โดยเก็บ call_id ที่ส่งกลับจริง
ค่าเริ่มต้น—
ฟิลด์input[].outputประเภทstring|content_part[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: function_call_output
ค่าเริ่มต้น—
ฟิลด์max_output_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทtool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์parallel_tool_callsประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning.effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning.summaryประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์text.formatประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์text.verbosityประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์includeประเภทstring[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์storeประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์previous_response_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ข้อกำหนด ID: เฉพาะ ID คำตอบจริงจากขั้นตอนต่อเนื่องที่รองรับ
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์service_tierประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_keyประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_optionsประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

ข้อความอินพุตหรือส่วน input_text

ข้อความ + ภาพ

{type:input_image,image_url}

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext, image
พารามิเตอร์requiredข้อกำหนดmodel, input
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot OpenAI ResponsesPOST /v1/responses
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · OpenAI Responses

ตัวอย่างข้อความขาเข้า, รูปภาพPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-5-turbo", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-5-turbo", "input": [{"role": "user", "content": [{"type": "input_text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["input"][0]["content"].append({"type":"input_image","image_url":"data:"+mime+";base64,"+b64})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.responses.create(model="glm-5-turbo", input="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.responses.create({ model: "glm-5-turbo", input: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
with client.responses.stream(model="glm-5-turbo", input="Explain the difference between an observation and a hypothesis in three sentences.") as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_response()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · OpenAI Responses

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกผลลัพธ์และส่วนเนื้อหา call_id ของฟังก์ชันจริง การใช้เหตุผลที่เข้ารหัส และข้อมูลการใช้งาน ในการสตรีมให้เก็บตัวตนของเหตุการณ์/รายการครบถ้วน

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์idประเภทstring
ฟิลด์statusประเภทstring
ฟิลด์output[]ประเภทmessage|reasoning|function_call|other item
ฟิลด์output[].content[]ประเภทcontent part
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · OpenAI Chat POST /v1/chat/completions glm-5-turbo

glm-5-turbo

Z.ai /glm-5-turbo
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest
  • z-ai/glm-5.3-flash

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ · รูปภาพ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · OpenAI Chat POST /v1/chat/completions
ขาเข้า
text, image
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-5-turbo
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัด
จำนวนรายการขั้นต่ำ: 1
ค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ตัวอย่าง: system, user, assistant, tool, function
เงื่อนไข: บทบาทเหล่านี้แทนอย่างชัดเจนด้วยชนิดข้อมูลเพื่อความเข้ากันได้ในซอร์สโค้ด แต่ชุดบทบาทที่แน่นอนยังขึ้นกับแต่ละโมเดล
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstring|content_part[]|nullข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_callsประเภทtool_call[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_call_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: role=tool โดยใช้ ID ที่ส่งกลับจริง
ค่าเริ่มต้น—
ฟิลด์messages[].nameประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].reasoning_contentประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: ส่งเนื้อหาการใช้เหตุผลที่คืนจริงกลับในคำขอถัดไป เมื่อโมเดลนี้ใช้เนื้อหานั้น
ค่าเริ่มต้น—
ฟิลด์messages[].reasoning_detailsประเภทobject|arrayข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_completion_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์stream_options.include_usageประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์stopประเภทstring|string[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทfunction_tool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].function.nameประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ใช้เมื่อ: มีเครื่องมือฟังก์ชันให้ใช้
ค่าเริ่มต้น—
ฟิลด์tools[].function.descriptionประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tools[].function.parametersประเภทJSON_schemaข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์parallel_tool_callsประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์response_formatประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning_effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoningประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์service_tierประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์instructionsประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ฟิลด์เพื่อความเข้ากันได้
ค่าเริ่มต้น—
ฟิลด์functionsประเภทfunction[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์function_callประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_optionsประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

messages[].content

ข้อความ + ภาพ

{type:image_url,image_url:{url,detail}}

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext, image
พารามิเตอร์requiredข้อกำหนดmodel, messages
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot OpenAI ChatPOST /v1/chat/completions
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · OpenAI Chat

ตัวอย่างข้อความขาเข้า, รูปภาพPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-5-turbo", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-5-turbo", "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image_url","image_url":{"url":"data:"+mime+";base64,"+b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="glm-5-turbo",
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
  model: "glm-5-turbo",
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='glm-5-turbo',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · OpenAI Chat

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกตัวเลือกพร้อมเนื้อหา/การเรียกเครื่องมือ/การใช้เหตุผล ใน SSE ให้ประกอบส่วนเพิ่มตามดัชนีตัวเลือก/เครื่องมือ และเก็บเหตุผลสิ้นสุดกับข้อมูลการใช้งานสุดท้าย

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์choices[].indexประเภทinteger
ฟิลด์choices[].message.contentประเภทstring|null
ฟิลด์choices[].message.tool_callsประเภทtool_call[]
ฟิลด์choices[].message.reasoning_contentประเภทstring
ฟิลด์choices[].message.reasoning_detailsประเภทobject|array
ฟิลด์choices[].finish_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · Anthropic Messages POST /v1/messages glm-flash

glm-flash

Z.ai /glm-flash
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest
  • z-ai/glm-5.3-flash

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ · รูปภาพ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · Anthropic Messages POST /v1/messages
ขาเข้า
text, image
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-flash
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัด
จำนวนรายการขั้นต่ำ: 1
ค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
user, assistant
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstring|content_block[]ข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์systemประเภทstring|content_block[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดจำเป็นค่าและข้อจำกัด
ขั้นต่ำ: 1
ข้อจำกัดใช้กับ: เพดานที่ตรงกับโมเดล/การ์ดที่เลือก
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์stop_sequencesประเภทstring[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทtool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].nameประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: มีเครื่องมือให้ใช้
ค่าเริ่มต้น—
ฟิลด์tools[].descriptionประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tools[].input_schemaประเภทJSON_schemaข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์thinking.typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์thinking.budget_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์output_config.effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์metadataประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์cache_controlประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

messages[].content หรือบล็อก type=text

ข้อความ + ภาพ

{type:image,source:{type:base64,media_type,data}} หรือแหล่งข้อมูลชนิด type=url

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext, image
พารามิเตอร์requiredข้อกำหนดmodel, messages, max_tokens
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot Anthropic MessagesPOST /v1/messages
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · Anthropic Messages

ตัวอย่างข้อความขาเข้า, รูปภาพPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-flash", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-flash", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="glm-flash",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(msg.to_dict(mode="json"))
import Anthropic from "@anthropic-ai/sdk";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
  model: "glm-flash",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(msg);
import anthropic,os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.messages.stream(model='glm-flash',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_message()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · Anthropic Messages

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกบล็อกเนื้อหา ลายเซ็นการคิด และ ID การใช้เครื่องมือจริง ประกอบส่วนเพิ่มของบล็อก SSE ทั้งหมด บล็อกข้อความแรกไม่ใช่ผลลัพธ์ทั้งหมด

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์idประเภทstring
ฟิลด์modelประเภทstring
ฟิลด์content[]ประเภทtext|thinking|tool_use|other content block
ฟิลด์stop_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · OpenAI Responses POST /v1/responses glm-flash

glm-flash

Z.ai /glm-flash
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ · รูปภาพ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · OpenAI Responses POST /v1/responses
ขาเข้า
text, image
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-flash
ค่าเริ่มต้น—
ฟิลด์inputประเภทstring|input_item[]ข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์instructionsประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์input[].typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
message, reasoning, function_call, function_call_output
ค่าเริ่มต้น—
ฟิลด์input[].contentประเภทstring|content_part[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์input[].call_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: function_call_output โดยเก็บ call_id ที่ส่งกลับจริง
ค่าเริ่มต้น—
ฟิลด์input[].outputประเภทstring|content_part[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: function_call_output
ค่าเริ่มต้น—
ฟิลด์max_output_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทtool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์parallel_tool_callsประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning.effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning.summaryประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์text.formatประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์text.verbosityประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์includeประเภทstring[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์storeประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์previous_response_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ข้อกำหนด ID: เฉพาะ ID คำตอบจริงจากขั้นตอนต่อเนื่องที่รองรับ
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์service_tierประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_keyประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_optionsประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

ข้อความอินพุตหรือส่วน input_text

ข้อความ + ภาพ

{type:input_image,image_url}

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext, image
พารามิเตอร์requiredข้อกำหนดmodel, input
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot OpenAI ResponsesPOST /v1/responses
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · OpenAI Responses

ตัวอย่างข้อความขาเข้า, รูปภาพPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-flash", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-flash", "input": [{"role": "user", "content": [{"type": "input_text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["input"][0]["content"].append({"type":"input_image","image_url":"data:"+mime+";base64,"+b64})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.responses.create(model="glm-flash", input="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.responses.create({ model: "glm-flash", input: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
with client.responses.stream(model="glm-flash", input="Explain the difference between an observation and a hypothesis in three sentences.") as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_response()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · OpenAI Responses

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกผลลัพธ์และส่วนเนื้อหา call_id ของฟังก์ชันจริง การใช้เหตุผลที่เข้ารหัส และข้อมูลการใช้งาน ในการสตรีมให้เก็บตัวตนของเหตุการณ์/รายการครบถ้วน

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์idประเภทstring
ฟิลด์statusประเภทstring
ฟิลด์output[]ประเภทmessage|reasoning|function_call|other item
ฟิลด์output[].content[]ประเภทcontent part
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · OpenAI Chat POST /v1/chat/completions glm-flash

glm-flash

Z.ai /glm-flash
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest
  • z-ai/glm-5.3-flash

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ · รูปภาพ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · OpenAI Chat POST /v1/chat/completions
ขาเข้า
text, image
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-flash
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัด
จำนวนรายการขั้นต่ำ: 1
ค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ตัวอย่าง: system, user, assistant, tool, function
เงื่อนไข: บทบาทเหล่านี้แทนอย่างชัดเจนด้วยชนิดข้อมูลเพื่อความเข้ากันได้ในซอร์สโค้ด แต่ชุดบทบาทที่แน่นอนยังขึ้นกับแต่ละโมเดล
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstring|content_part[]|nullข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_callsประเภทtool_call[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_call_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: role=tool โดยใช้ ID ที่ส่งกลับจริง
ค่าเริ่มต้น—
ฟิลด์messages[].nameประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].reasoning_contentประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: ส่งเนื้อหาการใช้เหตุผลที่คืนจริงกลับในคำขอถัดไป เมื่อโมเดลนี้ใช้เนื้อหานั้น
ค่าเริ่มต้น—
ฟิลด์messages[].reasoning_detailsประเภทobject|arrayข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_completion_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์stream_options.include_usageประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์stopประเภทstring|string[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทfunction_tool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].function.nameประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ใช้เมื่อ: มีเครื่องมือฟังก์ชันให้ใช้
ค่าเริ่มต้น—
ฟิลด์tools[].function.descriptionประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tools[].function.parametersประเภทJSON_schemaข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์parallel_tool_callsประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์response_formatประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning_effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoningประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์service_tierประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์instructionsประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ฟิลด์เพื่อความเข้ากันได้
ค่าเริ่มต้น—
ฟิลด์functionsประเภทfunction[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์function_callประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_optionsประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

messages[].content

ข้อความ + ภาพ

{type:image_url,image_url:{url,detail}}

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext, image
พารามิเตอร์requiredข้อกำหนดmodel, messages
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot OpenAI ChatPOST /v1/chat/completions
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · OpenAI Chat

ตัวอย่างข้อความขาเข้า, รูปภาพPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-flash", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-flash", "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image_url","image_url":{"url":"data:"+mime+";base64,"+b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="glm-flash",
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
  model: "glm-flash",
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='glm-flash',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · OpenAI Chat

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกตัวเลือกพร้อมเนื้อหา/การเรียกเครื่องมือ/การใช้เหตุผล ใน SSE ให้ประกอบส่วนเพิ่มตามดัชนีตัวเลือก/เครื่องมือ และเก็บเหตุผลสิ้นสุดกับข้อมูลการใช้งานสุดท้าย

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์choices[].indexประเภทinteger
ฟิลด์choices[].message.contentประเภทstring|null
ฟิลด์choices[].message.tool_callsประเภทtool_call[]
ฟิลด์choices[].message.reasoning_contentประเภทstring
ฟิลด์choices[].message.reasoning_detailsประเภทobject|array
ฟิลด์choices[].finish_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · Anthropic Messages POST /v1/messages glm-flash-latest

glm-flash-latest

Z.ai /glm-flash-latest
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest
  • z-ai/glm-5.3-flash

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ · รูปภาพ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · Anthropic Messages POST /v1/messages
ขาเข้า
text, image
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-flash-latest
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัด
จำนวนรายการขั้นต่ำ: 1
ค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
user, assistant
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstring|content_block[]ข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์systemประเภทstring|content_block[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดจำเป็นค่าและข้อจำกัด
ขั้นต่ำ: 1
ข้อจำกัดใช้กับ: เพดานที่ตรงกับโมเดล/การ์ดที่เลือก
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์stop_sequencesประเภทstring[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทtool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].nameประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: มีเครื่องมือให้ใช้
ค่าเริ่มต้น—
ฟิลด์tools[].descriptionประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tools[].input_schemaประเภทJSON_schemaข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์thinking.typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์thinking.budget_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์output_config.effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์metadataประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์cache_controlประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

messages[].content หรือบล็อก type=text

ข้อความ + ภาพ

{type:image,source:{type:base64,media_type,data}} หรือแหล่งข้อมูลชนิด type=url

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext, image
พารามิเตอร์requiredข้อกำหนดmodel, messages, max_tokens
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot Anthropic MessagesPOST /v1/messages
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · Anthropic Messages

ตัวอย่างข้อความขาเข้า, รูปภาพPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-flash-latest", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-flash-latest", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="glm-flash-latest",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(msg.to_dict(mode="json"))
import Anthropic from "@anthropic-ai/sdk";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
  model: "glm-flash-latest",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(msg);
import anthropic,os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.messages.stream(model='glm-flash-latest',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_message()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · Anthropic Messages

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกบล็อกเนื้อหา ลายเซ็นการคิด และ ID การใช้เครื่องมือจริง ประกอบส่วนเพิ่มของบล็อก SSE ทั้งหมด บล็อกข้อความแรกไม่ใช่ผลลัพธ์ทั้งหมด

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์idประเภทstring
ฟิลด์modelประเภทstring
ฟิลด์content[]ประเภทtext|thinking|tool_use|other content block
ฟิลด์stop_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · OpenAI Responses POST /v1/responses glm-flash-latest

glm-flash-latest

Z.ai /glm-flash-latest
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ · รูปภาพ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · OpenAI Responses POST /v1/responses
ขาเข้า
text, image
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-flash-latest
ค่าเริ่มต้น—
ฟิลด์inputประเภทstring|input_item[]ข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์instructionsประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์input[].typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
message, reasoning, function_call, function_call_output
ค่าเริ่มต้น—
ฟิลด์input[].contentประเภทstring|content_part[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์input[].call_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: function_call_output โดยเก็บ call_id ที่ส่งกลับจริง
ค่าเริ่มต้น—
ฟิลด์input[].outputประเภทstring|content_part[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: function_call_output
ค่าเริ่มต้น—
ฟิลด์max_output_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทtool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์parallel_tool_callsประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning.effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning.summaryประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์text.formatประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์text.verbosityประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์includeประเภทstring[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์storeประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์previous_response_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ข้อกำหนด ID: เฉพาะ ID คำตอบจริงจากขั้นตอนต่อเนื่องที่รองรับ
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์service_tierประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_keyประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_optionsประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

ข้อความอินพุตหรือส่วน input_text

ข้อความ + ภาพ

{type:input_image,image_url}

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext, image
พารามิเตอร์requiredข้อกำหนดmodel, input
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot OpenAI ResponsesPOST /v1/responses
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · OpenAI Responses

ตัวอย่างข้อความขาเข้า, รูปภาพPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-flash-latest", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-flash-latest", "input": [{"role": "user", "content": [{"type": "input_text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["input"][0]["content"].append({"type":"input_image","image_url":"data:"+mime+";base64,"+b64})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.responses.create(model="glm-flash-latest", input="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.responses.create({ model: "glm-flash-latest", input: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
with client.responses.stream(model="glm-flash-latest", input="Explain the difference between an observation and a hypothesis in three sentences.") as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_response()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · OpenAI Responses

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกผลลัพธ์และส่วนเนื้อหา call_id ของฟังก์ชันจริง การใช้เหตุผลที่เข้ารหัส และข้อมูลการใช้งาน ในการสตรีมให้เก็บตัวตนของเหตุการณ์/รายการครบถ้วน

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์idประเภทstring
ฟิลด์statusประเภทstring
ฟิลด์output[]ประเภทmessage|reasoning|function_call|other item
ฟิลด์output[].content[]ประเภทcontent part
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · OpenAI Chat POST /v1/chat/completions glm-flash-latest

glm-flash-latest

Z.ai /glm-flash-latest
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest
  • z-ai/glm-5.3-flash

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ · รูปภาพ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · OpenAI Chat POST /v1/chat/completions
ขาเข้า
text, image
ขาออก
text
บริบท
1,000,000 tokens
เอาต์พุตสูงสุด
131,072 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
glm-flash-latest
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัด
จำนวนรายการขั้นต่ำ: 1
ค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ตัวอย่าง: system, user, assistant, tool, function
เงื่อนไข: บทบาทเหล่านี้แทนอย่างชัดเจนด้วยชนิดข้อมูลเพื่อความเข้ากันได้ในซอร์สโค้ด แต่ชุดบทบาทที่แน่นอนยังขึ้นกับแต่ละโมเดล
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstring|content_part[]|nullข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_callsประเภทtool_call[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_call_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: role=tool โดยใช้ ID ที่ส่งกลับจริง
ค่าเริ่มต้น—
ฟิลด์messages[].nameประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].reasoning_contentประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: ส่งเนื้อหาการใช้เหตุผลที่คืนจริงกลับในคำขอถัดไป เมื่อโมเดลนี้ใช้เนื้อหานั้น
ค่าเริ่มต้น—
ฟิลด์messages[].reasoning_detailsประเภทobject|arrayข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_completion_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์stream_options.include_usageประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์stopประเภทstring|string[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทfunction_tool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].function.nameประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ใช้เมื่อ: มีเครื่องมือฟังก์ชันให้ใช้
ค่าเริ่มต้น—
ฟิลด์tools[].function.descriptionประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tools[].function.parametersประเภทJSON_schemaข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์parallel_tool_callsประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์response_formatประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning_effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoningประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์service_tierประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์instructionsประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ฟิลด์เพื่อความเข้ากันได้
ค่าเริ่มต้น—
ฟิลด์functionsประเภทfunction[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์function_callประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_optionsประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

messages[].content

ข้อความ + ภาพ

{type:image_url,image_url:{url,detail}}

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext, image
พารามิเตอร์requiredข้อกำหนดmodel, messages
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot OpenAI ChatPOST /v1/chat/completions
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · OpenAI Chat

ตัวอย่างข้อความขาเข้า, รูปภาพPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-flash-latest", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "glm-flash-latest", "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image_url","image_url":{"url":"data:"+mime+";base64,"+b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="glm-flash-latest",
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
  model: "glm-flash-latest",
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='glm-flash-latest',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · OpenAI Chat

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกตัวเลือกพร้อมเนื้อหา/การเรียกเครื่องมือ/การใช้เหตุผล ใน SSE ให้ประกอบส่วนเพิ่มตามดัชนีตัวเลือก/เครื่องมือ และเก็บเหตุผลสิ้นสุดกับข้อมูลการใช้งานสุดท้าย

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์choices[].indexประเภทinteger
ฟิลด์choices[].message.contentประเภทstring|null
ฟิลด์choices[].message.tool_callsประเภทtool_call[]
ฟิลด์choices[].message.reasoning_contentประเภทstring
ฟิลด์choices[].message.reasoning_detailsประเภทobject|array
ฟิลด์choices[].finish_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · Anthropic Messages POST /v1/messages z-ai/glm-5.3-flash

z-ai/glm-5.3-flash

Z.ai /z-ai/glm-5.3-flash
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest
  • z-ai/glm-5.3-flash

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · Anthropic Messages POST /v1/messages
ขาเข้า
text
ขาออก
text
บริบท
1,048,576 tokens
เอาต์พุตสูงสุด
32,768 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
z-ai/glm-5.3-flash
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัด
จำนวนรายการขั้นต่ำ: 1
ค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
user, assistant
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstring|content_block[]ข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์systemประเภทstring|content_block[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดจำเป็นค่าและข้อจำกัด
ขั้นต่ำ: 1
ข้อจำกัดใช้กับ: เพดานที่ตรงกับโมเดล/การ์ดที่เลือก
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์stop_sequencesประเภทstring[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทtool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].nameประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: มีเครื่องมือให้ใช้
ค่าเริ่มต้น—
ฟิลด์tools[].descriptionประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tools[].input_schemaประเภทJSON_schemaข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์thinking.typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์thinking.budget_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์output_config.effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์metadataประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์cache_controlประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

messages[].content หรือบล็อก type=text

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext
พารามิเตอร์requiredข้อกำหนดmodel, messages, max_tokens
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot Anthropic MessagesPOST /v1/messages
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K
การเขียนแคช
US$0.00015 / 1K
การเขียนแคช, 5 นาที
US$0.00015 / 1K tokens

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · Anthropic Messages

ตัวอย่างข้อความPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "z-ai/glm-5.3-flash", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="z-ai/glm-5.3-flash",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(msg.to_dict(mode="json"))
import Anthropic from "@anthropic-ai/sdk";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
  model: "z-ai/glm-5.3-flash",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(msg);
import anthropic,os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.messages.stream(model='z-ai/glm-5.3-flash',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_message()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · Anthropic Messages

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกบล็อกเนื้อหา ลายเซ็นการคิด และ ID การใช้เครื่องมือจริง ประกอบส่วนเพิ่มของบล็อก SSE ทั้งหมด บล็อกข้อความแรกไม่ใช่ผลลัพธ์ทั้งหมด

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์idประเภทstring
ฟิลด์modelประเภทstring
ฟิลด์content[]ประเภทtext|thinking|tool_use|other content block
ฟิลด์stop_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot · OpenAI Chat POST /v1/chat/completions z-ai/glm-5.3-flash

z-ai/glm-5.3-flash

Z.ai /z-ai/glm-5.3-flash
ID โมเดล
  • glm-5.3-flash
  • glm-4.5
  • glm-4.5-air
  • glm-4.6
  • glm-4.7
  • glm-5-turbo
  • glm-flash
  • glm-flash-latest
  • z-ai/glm-5.3-flash

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot · OpenAI Chat POST /v1/chat/completions
ขาเข้า
text
ขาออก
text
บริบท
4,096 tokens
เอาต์พุตสูงสุด
1,024 tokens
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
z-ai/glm-5.3-flash
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัด
จำนวนรายการขั้นต่ำ: 1
ค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ตัวอย่าง: system, user, assistant, tool, function
เงื่อนไข: บทบาทเหล่านี้แทนอย่างชัดเจนด้วยชนิดข้อมูลเพื่อความเข้ากันได้ในซอร์สโค้ด แต่ชุดบทบาทที่แน่นอนยังขึ้นกับแต่ละโมเดล
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstring|content_part[]|nullข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_callsประเภทtool_call[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_call_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: role=tool โดยใช้ ID ที่ส่งกลับจริง
ค่าเริ่มต้น—
ฟิลด์messages[].nameประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].reasoning_contentประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: ส่งเนื้อหาการใช้เหตุผลที่คืนจริงกลับในคำขอถัดไป เมื่อโมเดลนี้ใช้เนื้อหานั้น
ค่าเริ่มต้น—
ฟิลด์messages[].reasoning_detailsประเภทobject|arrayข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_completion_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์stream_options.include_usageประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์stopประเภทstring|string[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทfunction_tool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].function.nameประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ใช้เมื่อ: มีเครื่องมือฟังก์ชันให้ใช้
ค่าเริ่มต้น—
ฟิลด์tools[].function.descriptionประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tools[].function.parametersประเภทJSON_schemaข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์parallel_tool_callsประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์response_formatประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning_effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoningประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์service_tierประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์instructionsประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ฟิลด์เพื่อความเข้ากันได้
ค่าเริ่มต้น—
ฟิลด์functionsประเภทfunction[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์function_callประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_optionsประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

messages[].content

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์material_typesข้อกำหนดtext
พารามิเตอร์requiredข้อกำหนดmodel, messages
พารามิเตอร์optional_controlsข้อกำหนดnull
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์text_file_materialข้อกำหนดแทรกเนื้อหา UTF-8 จริงเป็นข้อความ ส่วน ID ไฟล์/URLs ต้องมีการรองรับเฉพาะที่ตรงตามจริงแยกต่างหาก

วงจรการทำงาน: exact retained published method

รูปแบบเมธอดและ ID ระบุอย่างแม่นยำ ความสามารถของผู้ให้บริการแยกจากการอนุญาตให้รับคำขอ

ราคา

อัตราค่าบริการเมธอด Ailoot

Ailoot OpenAI ChatPOST /v1/chat/completions
ขาเข้า
US$0.00015 / 1K
ขาออก
US$0.0005 / 1K
การอ่านแคช
≈US$0.00003 / 1K
การเขียนแคช
US$0.00015 / 1K
การเขียนแคช, 5 นาที
US$0.00015 / 1K tokens

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

รายละเอียดอัตราอ้างอิง

ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก

ตารางอัตราอ้างอิงของโมเดล

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าOpenAI Chat · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าOpenAI Chat · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · อัตราพื้นฐานต่อโทเค็นตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าAnthropic Messages · ระดับ 1 ตามความยาวคำขอตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

ตัวอย่างคำขอ

Ailoot · OpenAI Chat

ตัวอย่างข้อความPython SDKNode.js SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "z-ai/glm-5.3-flash", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="z-ai/glm-5.3-flash",
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
  model: "z-ai/glm-5.3-flash",
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='z-ai/glm-5.3-flash',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot · OpenAI Chat

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกตัวเลือกพร้อมเนื้อหา/การเรียกเครื่องมือ/การใช้เหตุผล ใน SSE ให้ประกอบส่วนเพิ่มตามดัชนีตัวเลือก/เครื่องมือ และเก็บเหตุผลสิ้นสุดกับข้อมูลการใช้งานสุดท้าย

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์choices[].indexประเภทinteger
ฟิลด์choices[].message.contentประเภทstring|null
ฟิลด์choices[].message.tool_callsประเภทtool_call[]
ฟิลด์choices[].message.reasoning_contentประเภทstring
ฟิลด์choices[].message.reasoning_detailsประเภทobject|array
ฟิลด์choices[].finish_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions z-ai/glm-5.3-flash

z-ai/glm-5.3-flash

Z.ai /z-ai/glm-5.3-flash
ID โมเดล
  • glm-5.3-flash
  • z-ai/glm-5.3-flash
  • ~z-ai/glm-flash-latest

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
ขาเข้า
text
ขาออก
text
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
z-ai/glm-5.3-flash
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัด
จำนวนรายการขั้นต่ำ: 1
ค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ตัวอย่าง: system, user, assistant, tool, function
เงื่อนไข: บทบาทเหล่านี้แทนอย่างชัดเจนด้วยชนิดข้อมูลเพื่อความเข้ากันได้ในซอร์สโค้ด แต่ชุดบทบาทที่แน่นอนยังขึ้นกับแต่ละโมเดล
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstring|content_part[]|nullข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_callsประเภทtool_call[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_call_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: role=tool โดยใช้ ID ที่ส่งกลับจริง
ค่าเริ่มต้น—
ฟิลด์messages[].nameประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].reasoning_contentประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: ส่งเนื้อหาการใช้เหตุผลที่คืนจริงกลับในคำขอถัดไป เมื่อโมเดลนี้ใช้เนื้อหานั้น
ค่าเริ่มต้น—
ฟิลด์messages[].reasoning_detailsประเภทobject|arrayข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_completion_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์stream_options.include_usageประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์stopประเภทstring|string[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทfunction_tool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
function
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].function.nameประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ใช้เมื่อ: มีเครื่องมือฟังก์ชันให้ใช้
ค่าเริ่มต้น—
ฟิลด์tools[].function.descriptionประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tools[].function.parametersประเภทJSON_schemaข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์parallel_tool_callsประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์response_formatประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning_effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoningประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์service_tierประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์instructionsประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ฟิลด์เพื่อความเข้ากันได้
ค่าเริ่มต้น—
ฟิลด์functionsประเภทfunction[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์function_callประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_optionsประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์modalitiesประเภทstring[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
text
ค่าเริ่มต้น—
ฟิลด์providerประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
เงื่อนไข: เส้นทางข้อความ Ultra นี้ปฏิเสธ provider.options
ค่าเริ่มต้น—
ฟิลด์cache_control.ttlประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
เงื่อนไข: ตำแหน่งแคชพรอมป์ต์จริงปฏิเสธ 1h
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

messages[].content

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์requiredข้อกำหนดmodel, messages
พารามิเตอร์material_typesข้อกำหนดtext
พารามิเตอร์messagesข้อกำหนดอาร์เรย์ข้อความที่มีโครงสร้าง role/content
พารามิเตอร์file_materialข้อกำหนดแทรกเอกสาร UTF-8 จริงเป็นข้อความตามต้นฉบับ โดยไม่อนุมาน ID ไฟล์
พารามิเตอร์optional_controlsข้อกำหนดstream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice
พารามิเตอร์control_scopeข้อกำหนดขึ้นกับโมเดล เครื่องมือฟังก์ชันของผู้ใช้ต่างจากเครื่องมือที่โฮสต์จัดให้
พารามิเตอร์output_modalitiesข้อกำหนดtext
พารามิเตอร์hosted_operationsข้อกำหนดfalse
พารามิเตอร์multimodal_input_bindingข้อกำหนดnull

วงจรการทำงาน: synchronous_or_streamed

ส่ง ID โมเดลที่ตรงทุกตัวพร้อม messages

ความยาวบริบทไม่ใช่เพดานผลลัพธ์

ไฟล์ข้อความให้ข้อความตามต้นฉบับได้ ส่วนข้อมูลเข้าภาพ/เสียง/ออบเจ็กต์ไฟล์ต้องมีการผูกที่ตรงตามจริง

ราคา

ข้อมูลอัตราราคาไม่ได้เพิ่มตัวเลือกคำขอ พารามิเตอร์ที่รองรับระบุไว้สำหรับเมธอดที่เลือก

โหมดรวดเร็ว
อัตรามาตรฐาน เมื่อเลือกโหมดรวดเร็ว
โหมดยืดหยุ่น
อัตรามาตรฐาน เมื่อเลือกโหมด flex
ระดับการใช้เหตุผลสูงสุด
อัตรามาตรฐาน เมื่อใช้การปรับตามค่าเริ่มต้น (default) สำหรับระดับการใช้เหตุผลสูงสุด
ระดับการใช้เหตุผล · สูง
อัตรามาตรฐาน เมื่อระดับการใช้เหตุผลอยู่ในระดับสูง
ระดับการใช้เหตุผล · ต่ำ
อัตรามาตรฐาน เมื่อระดับการใช้เหตุผลอยู่ในระดับต่ำ
ระดับการใช้เหตุผล · สูงสุด
อัตรามาตรฐาน เมื่อระดับการใช้เหตุผลอยู่ในระดับสูงสุด

อัตราค่าบริการ Ailoot

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าอัตราราคาพื้นฐานของโทเคนตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าระดับความยาวคำขอ 1ตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

ตัวอย่างคำขอ

Ailoot Ultra · OpenAI Chat

curlPython SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "z-ai/glm-5.3-flash", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='z-ai/glm-5.3-flash',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='z-ai/glm-5.3-flash',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot Ultra · OpenAI Chat

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกตัวเลือกพร้อมเนื้อหา/การเรียกเครื่องมือ/การใช้เหตุผล ใน SSE ให้ประกอบส่วนเพิ่มตามดัชนีตัวเลือก/เครื่องมือ และเก็บเหตุผลสิ้นสุดกับข้อมูลการใช้งานสุดท้าย

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์choices[].indexประเภทinteger
ฟิลด์choices[].message.contentประเภทstring|null
ฟิลด์choices[].message.tool_callsประเภทtool_call[]
ฟิลด์choices[].message.reasoning_contentประเภทstring
ฟิลด์choices[].message.reasoning_detailsประเภทobject|array
ฟิลด์choices[].finish_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot Ultra · Anthropic Messages POST /v1/messages z-ai/glm-5.3-flash

z-ai/glm-5.3-flash

Z.ai /z-ai/glm-5.3-flash
ID โมเดล
  • glm-5.3-flash
  • z-ai/glm-5.3-flash
  • ~z-ai/glm-flash-latest

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ
ผลลัพธ์
json · sse

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot Ultra · Anthropic Messages POST /v1/messages
ขาเข้า
text
ขาออก
json, sse
รูปแบบเอาต์พุต
JSON หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
z-ai/glm-5.3-flash
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
user, assistant
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF-8

สตริง messages[].content

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์requiredข้อกำหนดmodel, messages, max_tokens
พารามิเตอร์optional_controlsข้อกำหนดstream
พารามิเตอร์material_typesข้อกำหนดtext
พารามิเตอร์text_file_materialข้อกำหนดอ่านเอกสาร UTF-8 จริง แล้วใส่ข้อความใน input หรือสตริงเนื้อหาข้อความที่ระบุ

วงจรการทำงาน: synchronous_or_streamed

ราคา

ข้อมูลอัตราราคาไม่ได้เพิ่มตัวเลือกคำขอ พารามิเตอร์ที่รองรับระบุไว้สำหรับเมธอดที่เลือก

โหมดรวดเร็ว
อัตรามาตรฐาน เมื่อเลือกโหมดรวดเร็ว
โหมดยืดหยุ่น
อัตรามาตรฐาน เมื่อเลือกโหมด flex
ระดับการใช้เหตุผลสูงสุด
อัตรามาตรฐาน เมื่อใช้การปรับตามค่าเริ่มต้น (default) สำหรับระดับการใช้เหตุผลสูงสุด
ระดับการใช้เหตุผล · สูง
อัตรามาตรฐาน เมื่อระดับการใช้เหตุผลอยู่ในระดับสูง
ระดับการใช้เหตุผล · ต่ำ
อัตรามาตรฐาน เมื่อระดับการใช้เหตุผลอยู่ในระดับต่ำ
ระดับการใช้เหตุผล · สูงสุด
อัตรามาตรฐาน เมื่อระดับการใช้เหตุผลอยู่ในระดับสูงสุด

อัตราค่าบริการ Ailoot

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าอัตราราคาพื้นฐานของโทเคนตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าระดับความยาวคำขอ 1ตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

ตัวอย่างคำขอ

Ailoot Ultra · Anthropic Messages

เนื้อหาคำขอ JSON ขั้นต่ำที่ครบถ้วนcurl · ใช้เอกสาร UTF-8 ของคุณPython · บันทึกผลลัพธ์ให้ครบถ้วน
{
  "model": "z-ai/glm-5.3-flash",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'z-ai/glm-5.3-flash', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'z-ai/glm-5.3-flash', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))

รับและบันทึกผลลัพธ์

Ailoot Ultra · Anthropic Messages

JSON หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกบล็อกเนื้อหา ลายเซ็นการคิด และ ID การใช้เครื่องมือจริง ประกอบส่วนเพิ่มของบล็อก SSE ทั้งหมด บล็อกข้อความแรกไม่ใช่ผลลัพธ์ทั้งหมด

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์idประเภทstring
ฟิลด์modelประเภทstring
ฟิลด์content[]ประเภทtext|thinking|tool_use|other content block
ฟิลด์stop_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions ~z-ai/glm-flash-latest

~z-ai/glm-flash-latest

Z.ai /~z-ai/glm-flash-latest
ID โมเดล
  • glm-5.3-flash
  • z-ai/glm-5.3-flash
  • ~z-ai/glm-flash-latest

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ
ผลลัพธ์
ข้อความ

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
ขาเข้า
text
ขาออก
text
รูปแบบเอาต์พุต
json หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
~z-ai/glm-flash-latest
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัด
จำนวนรายการขั้นต่ำ: 1
ค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ตัวอย่าง: system, user, assistant, tool, function
เงื่อนไข: บทบาทเหล่านี้แทนอย่างชัดเจนด้วยชนิดข้อมูลเพื่อความเข้ากันได้ในซอร์สโค้ด แต่ชุดบทบาทที่แน่นอนยังขึ้นกับแต่ละโมเดล
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstring|content_part[]|nullข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_callsประเภทtool_call[]ข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].tool_call_idประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: role=tool โดยใช้ ID ที่ส่งกลับจริง
ค่าเริ่มต้น—
ฟิลด์messages[].nameประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].reasoning_contentประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ใช้เมื่อ: ส่งเนื้อหาการใช้เหตุผลที่คืนจริงกลับในคำขอถัดไป เมื่อโมเดลนี้ใช้เนื้อหานั้น
ค่าเริ่มต้น—
ฟิลด์messages[].reasoning_detailsประเภทobject|arrayข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์max_completion_tokensประเภทintegerข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขั้นต่ำ: 1
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ฟิลด์stream_options.include_usageประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์temperatureประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์top_pประเภทnumberข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์stopประเภทstring|string[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์toolsประเภทfunction_tool[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].typeประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
function
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์tools[].function.nameประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
ใช้เมื่อ: มีเครื่องมือฟังก์ชันให้ใช้
ค่าเริ่มต้น—
ฟิลด์tools[].function.descriptionประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tools[].function.parametersประเภทJSON_schemaข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์tool_choiceประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์parallel_tool_callsประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์response_formatประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoning_effortประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์reasoningประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์service_tierประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์instructionsประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
ฟิลด์เพื่อความเข้ากันได้
ค่าเริ่มต้น—
ฟิลด์functionsประเภทfunction[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์function_callประเภทstring|objectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์prompt_cache_optionsประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
ขึ้นอยู่กับโมเดล
ค่าเริ่มต้น—
ฟิลด์modalitiesประเภทstring[]ข้อกำหนดไม่บังคับค่าและข้อจำกัด
text
ค่าเริ่มต้น—
ฟิลด์providerประเภทobjectข้อกำหนดไม่บังคับค่าและข้อจำกัด
เงื่อนไข: เส้นทางข้อความ Ultra นี้ปฏิเสธ provider.options
ค่าเริ่มต้น—
ฟิลด์cache_control.ttlประเภทstringข้อกำหนดไม่บังคับค่าและข้อจำกัด
เงื่อนไข: ตำแหน่งแคชพรอมป์ต์จริงปฏิเสธ 1h
ค่าเริ่มต้น—
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF8

messages[].content

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์requiredข้อกำหนดmodel, messages
พารามิเตอร์material_typesข้อกำหนดtext
พารามิเตอร์messagesข้อกำหนดอาร์เรย์ข้อความที่มีโครงสร้าง role/content
พารามิเตอร์file_materialข้อกำหนดแทรกเอกสาร UTF-8 จริงเป็นข้อความตามต้นฉบับ โดยไม่อนุมาน ID ไฟล์
พารามิเตอร์optional_controlsข้อกำหนดstream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice
พารามิเตอร์control_scopeข้อกำหนดขึ้นกับโมเดล เครื่องมือฟังก์ชันของผู้ใช้ต่างจากเครื่องมือที่โฮสต์จัดให้
พารามิเตอร์output_modalitiesข้อกำหนดtext
พารามิเตอร์hosted_operationsข้อกำหนดfalse
พารามิเตอร์multimodal_input_bindingข้อกำหนดnull

วงจรการทำงาน: synchronous_or_streamed

ส่ง ID โมเดลที่ตรงทุกตัวพร้อม messages

ความยาวบริบทไม่ใช่เพดานผลลัพธ์

ไฟล์ข้อความให้ข้อความตามต้นฉบับได้ ส่วนข้อมูลเข้าภาพ/เสียง/ออบเจ็กต์ไฟล์ต้องมีการผูกที่ตรงตามจริง

ราคา

ข้อมูลอัตราราคาไม่ได้เพิ่มตัวเลือกคำขอ พารามิเตอร์ที่รองรับระบุไว้สำหรับเมธอดที่เลือก

โหมดรวดเร็ว
อัตรามาตรฐาน เมื่อเลือกโหมดรวดเร็ว
โหมดยืดหยุ่น
อัตรามาตรฐาน เมื่อเลือกโหมด flex
ระดับการใช้เหตุผลสูงสุด
อัตรามาตรฐาน เมื่อใช้การปรับตามค่าเริ่มต้น (default) สำหรับระดับการใช้เหตุผลสูงสุด
ระดับการใช้เหตุผล · สูง
อัตรามาตรฐาน เมื่อระดับการใช้เหตุผลอยู่ในระดับสูง
ระดับการใช้เหตุผล · ต่ำ
อัตรามาตรฐาน เมื่อระดับการใช้เหตุผลอยู่ในระดับต่ำ
ระดับการใช้เหตุผล · สูงสุด
อัตรามาตรฐาน เมื่อระดับการใช้เหตุผลอยู่ในระดับสูงสุด

อัตราค่าบริการ Ailoot

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าอัตราราคาพื้นฐานของโทเคนตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าระดับความยาวคำขอ 1ตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

ตัวอย่างคำขอ

Ailoot Ultra · OpenAI Chat

curlPython SDKสตรีมด้วย Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "~z-ai/glm-flash-latest", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='~z-ai/glm-flash-latest',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='~z-ai/glm-flash-latest',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

รับและบันทึกผลลัพธ์

Ailoot Ultra · OpenAI Chat

json หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกตัวเลือกพร้อมเนื้อหา/การเรียกเครื่องมือ/การใช้เหตุผล ใน SSE ให้ประกอบส่วนเพิ่มตามดัชนีตัวเลือก/เครื่องมือ และเก็บเหตุผลสิ้นสุดกับข้อมูลการใช้งานสุดท้าย

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์choices[].indexประเภทinteger
ฟิลด์choices[].message.contentประเภทstring|null
ฟิลด์choices[].message.tool_callsประเภทtool_call[]
ฟิลด์choices[].message.reasoning_contentประเภทstring
ฟิลด์choices[].message.reasoning_detailsประเภทobject|array
ฟิลด์choices[].finish_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

Ailoot Ultra · Anthropic Messages POST /v1/messages ~z-ai/glm-flash-latest

~z-ai/glm-flash-latest

Z.ai /~z-ai/glm-flash-latest
ID โมเดล
  • glm-5.3-flash
  • z-ai/glm-5.3-flash
  • ~z-ai/glm-flash-latest

เริ่มต้น

GLM 5.3 Flash เป็นโมเดลมัลติโมดัลของ Z.ai สำหรับพัฒนาตามข้อมูลภาพ วิเคราะห์เอกสาร และทำงานแบบเอเจนต์ โดยให้ผลลัพธ์เป็นข้อความ

อินพุตที่รองรับ
ข้อความ
ผลลัพธ์
json · sse

ใช้งานได้ใน Ailoot · อินพุตและเมธอด

Ailoot Ultra · Anthropic Messages POST /v1/messages
ขาเข้า
text
ขาออก
json, sse
รูปแบบเอาต์พุต
JSON หรือ SSE
ฟิลด์ประเภทข้อกำหนดค่าและข้อจำกัดค่าเริ่มต้น
ฟิลด์modelประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
~z-ai/glm-flash-latest
ค่าเริ่มต้น—
ฟิลด์messagesประเภทmessage[]ข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์messages[].roleประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัด
user, assistant
ค่าเริ่มต้น—
ฟิลด์messages[].contentประเภทstringข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์max_tokensประเภทintegerข้อกำหนดจำเป็นค่าและข้อจำกัดค่าเริ่มต้น—
ฟิลด์streamประเภทbooleanข้อกำหนดไม่บังคับค่าและข้อจำกัดค่าเริ่มต้นfalse
ชุดผสมของสื่ออินพุต

ข้อความ · ข้อความ UTF-8

สตริง messages[].content

พารามิเตอร์และวงจรการทำงานของเมธอด
พารามิเตอร์ข้อกำหนด
พารามิเตอร์content_typeข้อกำหนดapplication/json
พารามิเตอร์requiredข้อกำหนดmodel, messages, max_tokens
พารามิเตอร์optional_controlsข้อกำหนดstream
พารามิเตอร์material_typesข้อกำหนดtext
พารามิเตอร์text_file_materialข้อกำหนดอ่านเอกสาร UTF-8 จริง แล้วใส่ข้อความใน input หรือสตริงเนื้อหาข้อความที่ระบุ

วงจรการทำงาน: synchronous_or_streamed

ราคา

ข้อมูลอัตราราคาไม่ได้เพิ่มตัวเลือกคำขอ พารามิเตอร์ที่รองรับระบุไว้สำหรับเมธอดที่เลือก

โหมดรวดเร็ว
อัตรามาตรฐาน เมื่อเลือกโหมดรวดเร็ว
โหมดยืดหยุ่น
อัตรามาตรฐาน เมื่อเลือกโหมด flex
ระดับการใช้เหตุผลสูงสุด
อัตรามาตรฐาน เมื่อใช้การปรับตามค่าเริ่มต้น (default) สำหรับระดับการใช้เหตุผลสูงสุด
ระดับการใช้เหตุผล · สูง
อัตรามาตรฐาน เมื่อระดับการใช้เหตุผลอยู่ในระดับสูง
ระดับการใช้เหตุผล · ต่ำ
อัตรามาตรฐาน เมื่อระดับการใช้เหตุผลอยู่ในระดับต่ำ
ระดับการใช้เหตุผล · สูงสุด
อัตรามาตรฐาน เมื่อระดับการใช้เหตุผลอยู่ในระดับสูงสุด

อัตราค่าบริการ Ailoot

ราคาตามการตั้งค่า

เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน

การตั้งค่าตารางอัตราค่าบริการโทเค็นบริบท มากกว่าโทเค็นบริบท ไม่เกินและรวมค่าค่าบริการ
การตั้งค่าอัตราราคาพื้นฐานของโทเคนตารางอัตราค่าบริการอัตราพื้นฐานโทเค็นบริบท มากกว่า—โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น
การตั้งค่าระดับความยาวคำขอ 1ตารางอัตราค่าบริการ—โทเค็นบริบท มากกว่า0โทเค็นบริบท ไม่เกินและรวมค่าไม่มีขีดจำกัดสูงสุดค่าบริการ
ขาเข้า · โทเค็นอินพุต $0.0003 / 1K โทเค็น
ขาออก · โทเค็นเอาต์พุต $0.001 / 1K โทเค็น
ขาเข้า · การอ่านแคช $0.00006 / 1K โทเค็น
ขาเข้า · การเขียนแคช — / 1K โทเค็น
ขาเข้า · การเขียนแคช, 1 ชั่วโมง — / 1K โทเค็น

Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →

ตัวอย่างคำขอ

Ailoot Ultra · Anthropic Messages

เนื้อหาคำขอ JSON ขั้นต่ำที่ครบถ้วนcurl · ใช้เอกสาร UTF-8 ของคุณPython · บันทึกผลลัพธ์ให้ครบถ้วน
{
  "model": "~z-ai/glm-flash-latest",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': '~z-ai/glm-flash-latest', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': '~z-ai/glm-flash-latest', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))

รับและบันทึกผลลัพธ์

Ailoot Ultra · Anthropic Messages

JSON หรือ SSE

เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด

เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน

เก็บทุกบล็อกเนื้อหา ลายเซ็นการคิด และ ID การใช้เครื่องมือจริง ประกอบส่วนเพิ่มของบล็อก SSE ทั้งหมด บล็อกข้อความแรกไม่ใช่ผลลัพธ์ทั้งหมด

เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ

เก็บ ID และส่วนหัวของคำขอ/คำตอบ ไม่มี URL ทั่วไปสำหรับดึงงานข้อความให้ใช้

ฟิลด์การตอบกลับ
ฟิลด์ประเภท
ฟิลด์idประเภทstring
ฟิลด์modelประเภทstring
ฟิลด์content[]ประเภทtext|thinking|tool_use|other content block
ฟิลด์stop_reasonประเภทstring|null
ฟิลด์usageประเภทobject
ข้อผิดพลาดและขั้นตอนถัดไป
การตอบกลับเงื่อนไขขั้นตอนถัดไป
การตอบกลับ400 · invalid_request_errorเงื่อนไขฟิลด์จำเป็น รูปแบบการแทนข้อมูล หรือค่าพารามิเตอร์ไม่ถูกต้องขั้นตอนถัดไปแก้ฟิลด์ที่ระบุก่อนส่งคำขอสร้างครั้งใหม่

ชื่ออื่น

ชื่ออื่นของโมเดล

Ailoot glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, z-ai/glm-5.3-flash
Ailoot Ultra glm-5.3-flash, z-ai/glm-5.3-flash, ~z-ai/glm-flash-latest

ชื่อพาธเมธอดอื่น

/chat/completions

ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล

z-ai/glm-5.3-flash, z-ai/glm-5.3-flash, glm-4.5, glm-4.5-air, glm-4.6, glm-4.7, glm-5-turbo, glm-flash, glm-flash-latest, ~z-ai/glm-flash-latest, glm-5.3-flash, glm-5.3-flash

FAQ · z-ai/glm-5.3-flash
มีอินพุตและผลลัพธ์ใดบ้าง?

POST /v1/messages · glm-5.3-flash: text, image → text

POST /v1/responses · glm-5.3-flash: text, image → text

POST /v1/chat/completions · glm-5.3-flash: text, image → text

POST /v1/chat/completions · glm-5.3-flash: text → text

POST /v1/messages · glm-5.3-flash: text → json, sse

POST /v1/messages · glm-4.5: text, image → text

POST /v1/responses · glm-4.5: text, image → text

POST /v1/chat/completions · glm-4.5: text, image → text

POST /v1/messages · glm-4.5-air: text, image → text

POST /v1/responses · glm-4.5-air: text, image → text

POST /v1/chat/completions · glm-4.5-air: text, image → text

POST /v1/messages · glm-4.6: text, image → text

POST /v1/responses · glm-4.6: text, image → text

POST /v1/chat/completions · glm-4.6: text, image → text

POST /v1/messages · glm-4.7: text → text

POST /v1/responses · glm-4.7: text → text

POST /v1/chat/completions · glm-4.7: text → text

POST /v1/messages · glm-5-turbo: text, image → text

POST /v1/responses · glm-5-turbo: text, image → text

POST /v1/chat/completions · glm-5-turbo: text, image → text

POST /v1/messages · glm-flash: text, image → text

POST /v1/responses · glm-flash: text, image → text

POST /v1/chat/completions · glm-flash: text, image → text

POST /v1/messages · glm-flash-latest: text, image → text

POST /v1/responses · glm-flash-latest: text, image → text

POST /v1/chat/completions · glm-flash-latest: text, image → text

POST /v1/messages · z-ai/glm-5.3-flash: text → text

POST /v1/chat/completions · z-ai/glm-5.3-flash: text → text

POST /v1/chat/completions · z-ai/glm-5.3-flash: text → text

POST /v1/messages · z-ai/glm-5.3-flash: text → json, sse

POST /v1/chat/completions · ~z-ai/glm-flash-latest: text → text

POST /v1/messages · ~z-ai/glm-flash-latest: text → json, sse

คำขอใช้ฟิลด์ใดบ้าง?

POST /v1/messages · glm-5.3-flash: model, messages, system, max_tokens, stream, metadata

POST /v1/responses · glm-5.3-flash: model, input, instructions, stream

POST /v1/chat/completions · glm-5.3-flash: model, messages, stream

POST /v1/chat/completions · glm-5.3-flash: model, messages, stream

POST /v1/messages · glm-5.3-flash: model, messages, max_tokens, stream

POST /v1/messages · glm-4.5: model, messages, system, max_tokens, stream, metadata

POST /v1/responses · glm-4.5: model, input, instructions, stream

POST /v1/chat/completions · glm-4.5: model, messages, stream

POST /v1/messages · glm-4.5-air: model, messages, system, max_tokens, stream, metadata

POST /v1/responses · glm-4.5-air: model, input, instructions, stream

POST /v1/chat/completions · glm-4.5-air: model, messages, stream

POST /v1/messages · glm-4.6: model, messages, system, max_tokens, stream, metadata

POST /v1/responses · glm-4.6: model, input, instructions, stream

POST /v1/chat/completions · glm-4.6: model, messages, stream

POST /v1/messages · glm-4.7: model, messages, system, max_tokens, stream, metadata

POST /v1/responses · glm-4.7: model, input, instructions, stream

POST /v1/chat/completions · glm-4.7: model, messages, stream

POST /v1/messages · glm-5-turbo: model, messages, system, max_tokens, stream, metadata

POST /v1/responses · glm-5-turbo: model, input, instructions, stream

POST /v1/chat/completions · glm-5-turbo: model, messages, stream

POST /v1/messages · glm-flash: model, messages, system, max_tokens, stream, metadata

POST /v1/responses · glm-flash: model, input, instructions, stream

POST /v1/chat/completions · glm-flash: model, messages, stream

POST /v1/messages · glm-flash-latest: model, messages, system, max_tokens, stream, metadata

POST /v1/responses · glm-flash-latest: model, input, instructions, stream

POST /v1/chat/completions · glm-flash-latest: model, messages, stream

POST /v1/messages · z-ai/glm-5.3-flash: model, messages, system, max_tokens, stream, metadata

POST /v1/chat/completions · z-ai/glm-5.3-flash: model, messages, stream

POST /v1/chat/completions · z-ai/glm-5.3-flash: model, messages, stream, modalities, provider

POST /v1/messages · z-ai/glm-5.3-flash: model, messages, max_tokens, stream

POST /v1/chat/completions · ~z-ai/glm-flash-latest: model, messages, stream, modalities, provider

POST /v1/messages · ~z-ai/glm-flash-latest: model, messages, max_tokens, stream

มีข้อจำกัดใดบ้าง?

POST /v1/messages · glm-5.3-flash: ctx: 1000000; max_out: 131072; messages.min_items: 1; max_tokens.minimum: 1

POST /v1/responses · glm-5.3-flash: ctx: 1000000; max_out: 131072

POST /v1/chat/completions · glm-5.3-flash: ctx: 1000000; max_out: 131072; messages.min_items: 1

POST /v1/chat/completions · glm-5.3-flash: messages.min_items: 1

POST /v1/messages · glm-4.5: ctx: 1000000; max_out: 131072; messages.min_items: 1; max_tokens.minimum: 1

POST /v1/responses · glm-4.5: ctx: 1000000; max_out: 131072

POST /v1/chat/completions · glm-4.5: ctx: 1000000; max_out: 131072; messages.min_items: 1

POST /v1/messages · glm-4.5-air: ctx: 1000000; max_out: 131072; messages.min_items: 1; max_tokens.minimum: 1

POST /v1/responses · glm-4.5-air: ctx: 1000000; max_out: 131072

POST /v1/chat/completions · glm-4.5-air: ctx: 1000000; max_out: 131072; messages.min_items: 1

POST /v1/messages · glm-4.6: ctx: 1000000; max_out: 131072; messages.min_items: 1; max_tokens.minimum: 1

POST /v1/responses · glm-4.6: ctx: 1000000; max_out: 131072

POST /v1/chat/completions · glm-4.6: ctx: 1000000; max_out: 131072; messages.min_items: 1

POST /v1/messages · glm-4.7: ctx: 1000000; max_out: 131072; messages.min_items: 1; max_tokens.minimum: 1

POST /v1/responses · glm-4.7: ctx: 1000000; max_out: 131072

POST /v1/chat/completions · glm-4.7: ctx: 1000000; max_out: 131072; messages.min_items: 1

POST /v1/messages · glm-5-turbo: ctx: 1000000; max_out: 131072; messages.min_items: 1; max_tokens.minimum: 1

POST /v1/responses · glm-5-turbo: ctx: 1000000; max_out: 131072

POST /v1/chat/completions · glm-5-turbo: ctx: 1000000; max_out: 131072; messages.min_items: 1

POST /v1/messages · glm-flash: ctx: 1000000; max_out: 131072; messages.min_items: 1; max_tokens.minimum: 1

POST /v1/responses · glm-flash: ctx: 1000000; max_out: 131072

POST /v1/chat/completions · glm-flash: ctx: 1000000; max_out: 131072; messages.min_items: 1

POST /v1/messages · glm-flash-latest: ctx: 1000000; max_out: 131072; messages.min_items: 1; max_tokens.minimum: 1

POST /v1/responses · glm-flash-latest: ctx: 1000000; max_out: 131072

POST /v1/chat/completions · glm-flash-latest: ctx: 1000000; max_out: 131072; messages.min_items: 1

POST /v1/messages · z-ai/glm-5.3-flash: ctx: 1048576; max_out: 32768; messages.min_items: 1; max_tokens.minimum: 1

POST /v1/chat/completions · z-ai/glm-5.3-flash: ctx: 4096; max_out: 1024; messages.min_items: 1

POST /v1/chat/completions · z-ai/glm-5.3-flash: messages.min_items: 1

POST /v1/chat/completions · ~z-ai/glm-flash-latest: messages.min_items: 1

รายละเอียดเพิ่มเติม

เชื่อม Ailoot กับ Claude Code, OpenCode, Hermes หรือแอปของคุณ

บริษัทและพอร์ตโฟลิโอโครงการของบริษัท

บริษัทและพอร์ตโฟลิโอโครงการของบริษัท: ลูกค้าหลายล้านราย; ยอดขายระดับหลายพันล้านต่อเดือน.

ซื้อโทเคนพร้อมส่วนลด

ส่วนลดสมาชิกสำหรับงานประจำ โค้ดโปรโมชั่นลดซื้อโทเคนสูงสุด 50%

สมาชิก
เลือกแพ็กเกจมีส่วนลดสำหรับคำขอประจำ
โค้ดลดสูงสุด 50%
ใส่โค้ดขณะซื้อ ราคาคำนวณใหม่ตามโปรโมชั่นที่ใช้
รายจ่ายในประวัติ
เก็บโมเดล โทเคน และยอดสำหรับทุกคำขอ

เลือกสมาชิก · ดูราคาโมเดล

เชื่อม API กับผลิตภัณฑ์ ที่คุณขาย

SaaS แอป และบอต ตามข้อเสนอและสัญญาอนุญาต Ailoot หากขายต่อให้ขอใบอนุญาตรีเซลเลอร์

แอปเชิงพาณิชย์
ใส่การสร้างข้อความ ภาพ วิดีโอ และเสียงในฟีเจอร์เสียเงินของบริการคุณ
ใบอนุญาตรีเซลเลอร์
ส่งคำอธิบายโครงการและรูปแบบการเข้าถึง ขอเงื่อนไขใช้และขายต่อเป็นลายลักษณ์อักษร
เอกสารบนเว็บไซต์
อ่านข้อเสนอ สัญญาอนุญาต และนโยบายประมวลผลข้อมูลก่อนเชื่อมได้

ขอใบอนุญาตขายต่อ · ข้อเสนอและสัญญาอนุญาต