dokumentasi
Sambungan

Google GenAI SDK

Markdown

Format asal Gemini: SDK Google GenAI untuk Python dan JavaScript, serta permintaan REST secara langsung.

Panduan lengkap

Pemasangan

pip install google-genai

Sambungan

Alamat ialah https://api.ailoot.ai tanpa /v1beta: SDK membina laluan /v1beta/models/<model>:generateContent secara automatik. Dalam Python, alamat ditetapkan melalui HttpOptions(base_url=…), dalam JavaScript — melalui httpOptions.baseUrl. SDK menghantar kunci dalam pengepala x-goog-api-key.

from google import genai
from google.genai import types
import os

client = genai.Client(
    api_key=os.environ["AILOOT_API_KEY"],
    http_options=types.HttpOptions(base_url="https://api.ailoot.ai"),  # tanpa /v1beta
)

resp = client.models.generate_content(
    model="gemini-3.8-flash",
    contents="Cadangkan tiga nama untuk kedai kopi.",
)
print(resp.text)

Input yang boleh dihantar

  • Medan peringkat teratas: contents, systemInstruction, generationConfig, safetySettings, tools dan toolConfig.
  • generationConfig menerima temperature, topP, topK, maxOutputTokens, thinkingConfig, responseMimeType (text/plain atau application/json), responseSchema atau responseJsonSchema (objek JSON), stopSequences (tatasusunan rentetan), candidateCount: 1, integer seed, nilai berangka presencePenalty dan frequencyPenalty. Julat dan keupayaan yang dibenarkan bergantung pada model tepat; untuk respons JSON, pilih satu bentuk skema yang disokong dan application/json. Bagi model teks responseModalities — hanya ["TEXT"].
  • safetySettings — tatasusunan objek dengan category, threshold dan medan pilihan method; pilih nilai berdasarkan dokumentasi model tepat.
  • Bagi model Gemini yang menyokong input berkenaan parts[].inlineData mengandungi mimeType dan data base64 yang tidak kosong; PDF mestilah fail PDF sebenar. fileData mengandungi alamat awam berprotokol httpsdalam fileUri dan jenis MIME fail. Untuk YouTube, MIME boleh diabaikan. http, alamat peribadi, gs:// dan objek Google Files API tidak disokong, begitu juga muat naik melalui Google Files API. Untuk video, anda boleh menambah videoMetadata: startOffset/endOffset sebagai rentetan dalam saat (contohnya, 1.5s) dan fps lebih daripada 0 dan tidak melebihi 24. Saiz badan permintaan, konteks, input yang dibenarkan dan had respons diperiksa mengikut model dan format.
  • Fungsi klien functionDeclarations dilaksanakan oleh aplikasi anda. Model teks juga menerima {"googleSearch": {}} dan {"urlContext": {}}: secara berasingan atau bersama-sama dalam tatasusunan tools. Google Search dan URL context tidak boleh digabungkan dengan functionDeclarations dalam permintaan yang sama. Untuk output imej, hanya fungsi klien tersedia. Alat terbina dalam lain dan explicit cache tidak disokong. Search/URL context mungkin memerlukan rizab berdasarkan had penuh input; nilai sebenar toolUsePromptTokenCount dikira sebagai token input.
  • Jika model tidak menyokong medan, lampiran atau gabungan alat, permintaan ditolak sebelum rizab dibuat — tiada caj dikenakan. HTTP yang diterima ialah 400 dengan status INVALID_ARGUMENT dan kelas invalid_request (dalam ErrorInfo.reason — INVALID_REQUEST). JSON tidak sah, ralat parameter laluan dan kegagalan semakan lain juga mengembalikan 400; baca mesej ralat dan Request ID. Keupayaan bergantung pada model: semak format dan inputnya dalam katalog.
InputMIME yang disokong
Imej inlineimage/png, image/jpeg, image/webp
Dokumenapplication/pdf; text/plain, text/html, text/css, text/csv, text/xml, text/rtf, text/markdown, text/javascript, application/x-javascript, text/x-python, application/x-python
Audioaudio/wav, audio/mp3, audio/mpeg, audio/aiff, audio/aac, audio/ogg, audio/flac
Videovideo/mp4, video/mpeg, video/mov, video/quicktime, video/avi, video/x-flv, video/mpg, video/webm, video/wmv, video/3gpp
import json, os, urllib.request

def generate(model, payload):
    req = urllib.request.Request(
        "https://api.ailoot.ai/v1beta/models/" + model + ":generateContent",
        data=json.dumps(payload).encode(),
        headers={"x-goog-api-key": os.environ["AILOOT_API_KEY"],
                 "Content-Type": "application/json"},
    )
    # Hantar sekali sahaja. Selepas tamat masa, semak Request ID dalam sejarah penggunaan anda sebelum mencuba semula.
    with urllib.request.urlopen(req, timeout=300) as response:
        print("Request ID:", response.headers.get("X-Request-ID"))
        return json.load(response)

import base64, pathlib, sys

# Sediakan fail PDF, audio atau video setempat yang sebenar berserta jenis MIME yang disokong.
path, mime = pathlib.Path(sys.argv[1]), sys.argv[2]
payload = {"contents": [{"role": "user", "parts": [
    {"text": "Huraikan kandungan fail secara ringkas."},
    {"inlineData": {"mimeType": mime,
                    "data": base64.b64encode(path.read_bytes()).decode()}},
]}]}
print(generate("gemini-3.8-flash", payload))
# Lampiran alternatif: {"fileData": {"mimeType": mime, "fileUri": public_https_url}}
# Untuk URL YouTube sebenar: {"fileData": {"fileUri": youtube_url}}

Kitaran penuh fungsi

Hantar pengisytiharan fungsi, terima functionCall, jalankan fungsi anda, kembalikan functionResponse dan minta respons seterusnya. Kekalkan keseluruhan content model, termasuk thoughtSignature; jangan cipta tandatangan sendiri.

import json, os, urllib.request

def generate(model, payload):
    req = urllib.request.Request(
        "https://api.ailoot.ai/v1beta/models/" + model + ":generateContent",
        data=json.dumps(payload).encode(),
        headers={"x-goog-api-key": os.environ["AILOOT_API_KEY"],
                 "Content-Type": "application/json"},
    )
    # Hantar sekali sahaja. Selepas tamat masa, semak Request ID dalam sejarah penggunaan anda sebelum mencuba semula.
    with urllib.request.urlopen(req, timeout=300) as response:
        print("Request ID:", response.headers.get("X-Request-ID"))
        return json.load(response)

tools = [{"functionDeclarations": [{
    "name": "multiply", "description": "Mendarab dua nombor",
    "parameters": {"type": "object", "properties": {
        "a": {"type": "number"}, "b": {"type": "number"}},
        "required": ["a", "b"]},
}]}]
contents = [{"role": "user", "parts": [{"text": "Darabkan 7 dengan 8 menggunakan fungsi"}]}]
for turn in range(4):  # Hadkan gelung alat; jangan hantar semula permintaan yang hasilnya tidak jelas.
    reply = generate("gemini-3.8-flash", {"contents": contents, "tools": tools})
    content = reply["candidates"][0]["content"]
    contents.append(content)  # Kekalkan SEMUA (ALL) bahagian asal dan thoughtSignature tanpa perubahan.
    results = []
    for part in content.get("parts", []):
        call = part.get("functionCall")
        if not call:
            continue
        if call["name"] != "multiply":
            raise ValueError("Unexpected function")
        args = call["args"]
        result = {"name": call["name"], "response": {"value": args["a"] * args["b"]}}
        if "id" in call:
            result["id"] = call["id"]
        results.append({"functionResponse": result})
    if not results:
        print(content)
        break
    contents.append({"role": "user", "parts": results})
else:
    raise RuntimeError("Tool loop limit reached")

Respons penstriman

for chunk in client.models.generate_content_stream(
    model="gemini-3.8-flash",
    contents="Huraikan matahari terbenam di laut",
):
    print(chunk.text, end="", flush=True)

Model yang tersedia

Dalam format Gemini, terdapat 27 pengecam: gemini-3.8-flash, gemini-3.1-pro, gemini-pro-agent, gemini-3.8-flash-tiered, gemini-3.8-flash-medium, gemini-3.8-flash-low, gemini-3.8-flash-high, gemini-3.7-flash, gemini-3.7-flash-tiered, gemini-3.7-flash-medium, gemini-3.7-flash-low, gemini-3.7-flash-high, gemini-3.6-flash, gemini-3.6-flash-tiered, gemini-3.6-flash-medium, gemini-3.6-flash-low, gemini-3.6-flash-high, gemini-3.5-flash-lite, gemini-3.1-pro-preview, gemini-3.1-pro-low, gemini-3.1-pro-high, gemini-3.1-flash-lite, gemini-3-flash, gemini-2.5-pro, gemini-2.5-flash, gemini-2.5-flash-thinking, gemini-2.5-flash-lite.

Model Gemini juga tersedia dalam format Anthropic Messages — memudahkan klien yang hanya menyokong format tersebut: Anthropic SDK.

Masih ada soalan? Hantar Request ID dan penerangannya — kami akan membantu menyiasatnya.Hubungi sokongan