Jika anda ingin membina satu aplikasi AI dengan GPT, Claude, Gemini, DeepSeek dan Grok, gunakan API bersatu untuk laluan permintaan umum dan kekalkan dasar penghalaan dalam aplikasi anda. CometAPI menyediakan base URL yang serasi dengan OpenAI dan katalog model bersama, jadi perkhidmatan Python boleh memanggil ID model berbeza melalui satu klien. Kod anda masih menentukan model yang digunakan, alat yang dibenarkan, dan bila fallback adalah selamat.
Tutorial ini membina agen Grok 4.7 yang boleh meminta dua alat perniagaan baca sahaja, menolak alat yang tidak dikenal dan argumen yang tidak sah sebelum pelaksanaan, serta bertukar kepada model lain yang telah diuji kontrak hanya selepas kegagalan sementara terpilih. Matlamatnya bukan sistem autonomi ajaib. Ia ialah gelung kecil yang boleh diperiksa, boleh diuji, dan dioperasikan dalam produksi.
Apa Yang Anda Bina
Agen ini mempunyai lima bahagian yang jelas:
- Satu klien CometAPI. OpenAI Python SDK menggunakan base URL API CometAPI seperti dalam tetapan di bawah.
- Grok 4.7 sebagai model utama. ID model CometAPI semasa ialah
grok-4.7. - Daftar alat. Model mungkin mencadangkan panggilan fungsi, tetapi hanya kod aplikasi boleh melaksanakan fungsi yang berada dalam senarai dibenarkan.
- Gelung agen terikat. Gelung berhenti selepas bilangan giliran model yang tetap dan tidak berjalan tanpa henti.
- Dasar fallback tersusun. ID model GPT, Claude, Gemini atau DeepSeek yang serasi hanya dicuba selepas kegagalan model/API yang boleh diulangi.
Grok 4.7 menyokong pemanggilan fungsi, dan CometAPI pada masa ini mendokumenkan kedua-dua laluan /v1/chat/completions dan /v1/responses untuk model tersebut. Tutorial ini menggunakan Chat Completions kerana tools, panggilan alat pembantu, dan mesej hasil tool yang sepadan memetakan terus kepada gelung Python yang padat dan boleh diperiksa. Keserasian pengangkutan tidak membuktikan kesetaraan ciri merentas setiap model, jadi setiap fallback yang dikonfigurasi mesti lulus ujian kontrak yang sama sebelum masuk ke pengeluaran.
Keadaan Penaakulan dalam Agen Grok 4.7 Berbilang Giliran
Grok 4.7 menerima usaha penaakulan low, medium, high atau xhigh, dengan high sebagai lalai. Pada Responses API milik xAI, setiap respons Grok 4.7 menyertakan reasoning.encrypted_content; gelung berbilang giliran yang diurus klien harus menghantar semula item penaakulan yang dipulangkan tanpa perubahan dalam permintaan seterusnya. Gelung panjang juga boleh menggunakan pemadatan konteks: kekalkan item pemadatan yang dipulangkan sebagai keadaan legap dan tambah giliran baharu selepasnya. Memandangkan medan respons ini berkeadaan dan khusus penyedia, sahkan laluan CometAPI yang dipilih mengembalikannya secara menyeluruh sebelum menjadikannya kebergantungan produksi.
Seni Bina Agen: Model Mencadangkan, Aplikasi Anda Menentukan
Aliran pemanggilan alat yang selamat adalah mudah:
User request → model response → validate tool call → execute allowlisted tool → append tool result → model response
Model tidak pernah menerima kelayakan pangkalan data dan tidak pernah melaksanakan Python secara langsung. Ia menghasilkan permintaan berstruktur seperti “panggil get_order_status dengan ID pesanan ini.” Aplikasi anda menyemak nama alat, menghurai argumen, menerapkan kebenaran dan peraturan perniagaan, menjalankan fungsi, dan mengembalikan hasil bersiri.
Pemisahan ini lebih penting daripada pemilihan model. Model fallback harus mewarisi sempadan alat yang sama—bukan yang lebih luas—dan hasil alat harus dianggap sebagai data tidak dipercayai apabila ia mengandungi kandungan luaran.
Cara Membina Agen AI Grok 4.7 dengan Python
Langkah 1: Konfigurasikan OpenAI Python SDK untuk CometAPI
Pasang OpenAI SDK:
pip install openai
Tetapkan konfigurasi melalui pembolehubah persekitaran:
export COMETAPI_KEY="your-cometapi-key"
export PRIMARY_MODEL="grok-4.7"
export FALLBACK_MODEL_1="your-compatible-gpt-model-id"
export FALLBACK_MODEL_2="your-compatible-claude-model-id"
export FALLBACK_MODEL_3="your-compatible-gemini-model-id"
export FALLBACK_MODEL_4="your-compatible-deepseek-model-id"
Tutorial ini menggunakan Chat Completions kerana panggilan alat pembantu yang eksplisit dan mesej hasil alat yang sepadan memudahkan aliran kawalan untuk diperiksa dalam contoh Python yang padat. Untuk gelung berkeadaan yang lebih panjang, nilaikan Responses API seperti dinyatakan di atas. Juga, jangan salin ID model lama daripada catatan blog ke produksi: dapatkan katalog awam GET /api/models CometAPI semasa penerapan atau permulaan, kemudian sahkan keupayaan dan harga dalam direktori model.
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["COMETAPI_KEY"],
base_url="https://api.cometapi.com/v1",
max_retries=0,
timeout=30.0,
)
Timeout yang eksplisit dan percubaan semula SDK yang dinyahdayakan adalah sengaja. Aplikasi akan mengelaskan kegagalan dan memutuskan sama ada untuk mengulangi permintaan atau beralih ke model seterusnya. Percubaan semula tersembunyi menjadikan kependaman, kesan sampingan berganda, dan kelakuan fallback lebih sukar difahami.
Langkah 2: Takrifkan Alat yang Sempit dan Baca Sahaja Dahulu
Mulakan dengan alat yang membaca data dan bukannya mengubahnya. Definisi berikut membolehkan agen menyemak pesanan dan melihat inventori. Pelaksanaan ini mengembalikan data demo; gantikan dengan panggilan yang disahkan kepada perkhidmatan anda sendiri.
import json
TOOLS = [
{
"type": "function",
"function": {
"name": "get_order_status",
"description": "Read the current status of one order.",
"parameters": {
"type": "object",
"properties": {
"order_id": {"type": "string"}
},
"required": ["order_id"],
"additionalProperties": False,
},
},
},
{
"type": "function",
"function": {
"name": "check_inventory",
"description": "Read available inventory for one SKU.",
"parameters": {
"type": "object",
"properties": {
"sku": {"type": "string"}
},
"required": ["sku"],
"additionalProperties": False,
},
},
},
]
def get_order_status(order_id: str) -> dict:
# Replace this demo with an authenticated, read-only service call.
return {"order_id": order_id, "status": "in_transit"}
def check_inventory(sku: str) -> dict:
# Replace this demo with an authenticated, read-only service call.
return {"sku": sku, "available_units": 12}
TOOL_REGISTRY = {
"get_order_status": get_order_status,
"check_inventory": check_inventory,
}
Skema JSON menambah baik bentuk permintaan, tetapi ia bukan kebenaran. Sahkan panjang dan format argumen, pastikan pengguna semasa boleh mengakses pesanan atau SKU yang diminta, dan hadkan saiz setiap hasil alat sebelum mengembalikannya kepada model.
Langkah 3: Tambah Dasar Fallback Berbilang Model yang Sempit
Fallback seharusnya memulihkan kegagalan laluan sementara, bukan menyembunyikan permintaan yang rosak. Panduan fallback rasmi CometAPI mengesyorkan beralih ke laluan yang ditetapkan seterusnya untuk ralat sambungan, timeout, HTTP 408, HTTP 429, dan respons 5xx sementara. Kelayakan tidak sah, parameter tidak disokong, dan permintaan tidak sah perlu gagal serta-merta.
from openai import APIConnectionError, APIStatusError, APITimeoutError
def configured_models() -> list[str]:
names = [
os.getenv("PRIMARY_MODEL", "grok-4.7"),
os.getenv("FALLBACK_MODEL_1"),
os.getenv("FALLBACK_MODEL_2"),
os.getenv("FALLBACK_MODEL_3"),
os.getenv("FALLBACK_MODEL_4"),
]
return [name for name in names if name]
def is_retryable(error: Exception) -> bool:
if isinstance(error, (APIConnectionError, APITimeoutError)):
return True
if isinstance(error, APIStatusError):
return error.status_code in {408, 429} or error.status_code >= 500
return False
def complete_with_fallback(messages: list[dict], tools: list[dict]):
models = configured_models()
last_error = None
for index, model in enumerate(models):
try:
response = client.chat.completions.create(
model=model,
messages=messages,
tools=tools,
tool_choice="auto",
)
return response, model
except Exception as error:
last_error = error
final_route = index == len(models) - 1
if final_route or not is_retryable(error):
raise
raise RuntimeError("No configured model completed the request") from last_error
Senarai model ialah konfigurasi, bukan pemeringkatan kualiti. Pilih fallback yang menyokong peranan mesej, skema alat, kaedah input, keperluan konteks, dan kelakuan respons yang sama seperti yang diperlukan oleh agen ini. Log laluan yang dipilih dan kegagalan yang menyebabkan setiap peralihan.
Langkah 4: Jalankan Gelung Agen Grok 4.7 yang Terikat
Gelung di bawah menghantar perbualan, melaksanakan sebarang panggilan alat yang dibenarkan, menambah hasil dengan tool_call_id yang sepadan, dan meminta model yang dipilih untuk menamatkan jawapan.
def execute_tool_call(tool_call) -> str:
name = tool_call.function.name
if name not in TOOL_REGISTRY:
return json.dumps({"error": f"Tool not allowed: {name}"})
try:
arguments = json.loads(tool_call.function.arguments)
result = TOOL_REGISTRY[name](**arguments)
return json.dumps(result)
except (json.JSONDecodeError, TypeError, ValueError) as error:
return json.dumps({"error": f"Invalid tool arguments: {error}"})
def run_agent(user_text: str, max_turns: int = 4) -> dict:
messages = [
{
"role": "system",
"content": (
"You are a support agent. Use tools only when needed. "
"Never invent order or inventory data."
),
},
{"role": "user", "content": user_text},
]
route_log = []
for turn in range(max_turns):
response, model = complete_with_fallback(messages, TOOLS)
route_log.append({"turn": turn + 1, "model": model})
assistant = response.choices[0].message
messages.append(assistant.model_dump(exclude_none=True))
if not assistant.tool_calls:
return {
"answer": assistant.content,
"routes": route_log,
"usage": response.usage.model_dump() if response.usage else None,
}
for tool_call in assistant.tool_calls:
messages.append(
{
"role": "tool",
"tool_call_id": tool_call.id,
"content": execute_tool_call(tool_call),
}
)
raise RuntimeError("Agent stopped after reaching max_turns")
result = run_agent("Where is order A-104, and is SKU BLUE-42 in stock?")
print(result["answer"])
print(result["routes"])
Kod menyokong berbilang panggilan alat dalam satu respons model kerana ia menambah hasil untuk setiap panggilan yang dipulangkan. Jika alat mengubah keadaan—menghantar e-mel, membuat pesanan, atau mengeluarkan bayaran balik—tambahkan kunci idempotensi dan langkah pengesahan manusia. Jangan mulakan semula keseluruhan giliran agen secara membuta tuli selepas timeout jika kesan sampingan mungkin telah berlaku.
Bagaimana GPT, Claude, Gemini dan DeepSeek Sesuai dalam Aplikasi yang Sama
CometAPI boleh mengurangkan pendua pada lapisan sambungan: satu akaun, satu base URL yang serasi dengan OpenAI untuk laluan umum, dan ID model dipilih oleh kod aplikasi. Ini menjadikan GPT, Claude, Gemini, DeepSeek dan Grok sebagai calon di belakang satu antara muka dalaman.
Ini tidak menjadikan model boleh saling diganti. Sebelum menambah fallback, sahkan:
- ID model semasa dipulangkan oleh katalog CometAPI;
- laluan menyokong skema alat dan peranan mesej yang diperlukan;
- argumen panggilan alat dan kelakuan berbilang panggilan sepadan dengan kontrak agen;
- tetingkap konteks dan kaedah input sesuai dengan permintaan;
- respons boleh disahkan sebelum sampai kepada pengguna;
- kependaman dan kos kekal dalam bajet produk.
Ciri asli penyedia mungkin memerlukan titik akhir asli atau penyesuai berasingan. Kekalkan pengecualian tersebut secara eksplisit dan jangan memaksa setiap keupayaan melalui antara muka umum.
Fallback Berbilang Model Grok 4.7 Bukan Sistem Berbilang Agen
Rantai fallback berbilang model memilih model lain apabila laluan gagal. Sistem berbilang agen menetapkan tanggungjawab berbeza kepada agen berasingan—contohnya, perancang, penyelidik, dan penyemak. Kedua-dua corak menyelesaikan masalah yang berbeza.
Jika anda mengembangkan agen Grok 4.7 ini kepada aliran kerja berbilang agen, berikan setiap pekerja peranan yang sempit, senarai alat dibenarkan yang berasingan, bajet terikat, dan serahan berstruktur. Jangan benarkan setiap agen memanggil setiap alat atau meneruskan transkrip tanpa had. Mulakan dengan satu agen sehingga data penilaian membuktikan bahawa pemisahan peranan menambah baik hasil.
Pengawal Selia Pengeluaran untuk Agen AI Grok 4.7
Sahkan Sebelum Pelaksanaan Alat
Semak nama alat, skema argumen, pemilikan penyewa, kebenaran pengguna, dan had kadar dalam kod aplikasi. Anggap penerangan alat sebagai panduan untuk model, bukan kawalan keselamatan.
Pisahkan Alat Baca daripada Alat Tulis
Alat baca sahaja selalunya boleh dijalankan secara automatik selepas kebenaran. Alat tulis perlu semakan lebih ketat, idempotensi, dan pengesahan bagi tindakan berakibat.
Tetapkan Had bagi Setiap Gelung
Tetapkan maksimum giliran model, panggilan alat, masa jam dinding, saiz prompt, dan bajet token. Pulangkan ralat terkawal atau laluan eskalasi apabila had dicapai.
Rekod Jejak Keputusan
Log tugas yang diminta, versi dasar, ID model yang dipilih, sebab fallback, nama alat, kependaman alat, hasil pengesahan, penggunaan token, dan status akhir. Jangan log rahsia atau kandungan pelanggan yang tidak perlu.
Gunakan Ujian Kontrak, Bukan Andaian
Jalankan fiikstur yang sama terhadap setiap model yang dikonfigurasi. Suite minimum yang berguna meliputi jawapan normal, satu panggilan alat, berbilang panggilan alat, argumen tidak sah, alat tidak diketahui, timeout alat, 429 model utama, dan kunci API tidak sah yang tidak boleh mencetuskan fallback.
Senarai Semak Penerapan
- Dapatkan ID model semasa dan sahkan laluan Grok 4.7 sebelum penerapan.
- Simpan kunci CometAPI dalam pengurus rahsia, bukan dalam kod sumber atau prompt.
- Mulakan dengan alat baca sahaja dan skema JSON yang eksplisit.
- Terapkan pengesahan dan kebenaran penyewa sebelum setiap panggilan alat.
- Benarkan fallback hanya untuk ralat sementara yang dikelaskan.
- Uji setiap fallback terhadap kontrak pemanggilan alat yang sama.
- Tambah idempotensi dan pengesahan sebelum mengaktifkan alat tulis.
- Tetapkan had gelung, kependaman, konteks, dan kos.
- Ukur kejayaan tugas, bukan hanya ketersediaan API.
Mengapa Membina Agen Ini melalui CometAPI?
CometAPI berguna di sini kerana integrasi umum kekal kecil. OpenAI Python SDK menghala ke satu base URL, Grok 4.7 dipilih melalui ID model, dan model serasi daripada penyedia lain boleh diletakkan di belakang dasar laluan milik aplikasi yang sama.
Itu memberi pasukan ruang untuk menilai GPT, Claude, Gemini, dan DeepSeek tanpa menyebarkan kod sambungan khusus penyedia ke seluruh produk. Ia juga mengekalkan sempadan penting: CometAPI membekalkan akses, sementara aplikasi anda memegang semakan keupayaan, pelaksanaan alat, dasar fallback, penilaian, dan kelakuan berhadapan pengguna.
Tinjau halaman model Grok 4.7, konfigurasikan klien daripada CometAPI quickstart, dan dapatkan ID model semasa sebelum memilih fallback produksi.
Soalan Lazim
API apa yang patut saya gunakan untuk aplikasi dengan GPT, Claude, Gemini dan DeepSeek?
Untuk laluan chat dan pemanggilan alat yang umum, API bersatu yang serasi dengan OpenAI seperti CometAPI boleh mengurangkan kerja integrasi. Kekalkan pemilihan model dan dasar fallback dalam aplikasi anda, dan gunakan penyesuai asli penyedia apabila ciri yang diperlukan tidak sesuai dengan kontrak bersama.
Bolehkah Grok 4.7 memanggil fungsi Python secara langsung?
Grok 4.7 boleh mengembalikan permintaan panggilan fungsi berstruktur. Aplikasi Python anda menghurai permintaan, mengesahkannya, melaksanakan fungsi yang dibenarkan, dan menghantar semula hasil kepada model. Model itu sendiri tidak melaksanakan Python tempatan.
Patutkah setiap ralat mencetuskan model yang berbeza?
Tidak. Gunakan fallback untuk ralat sambungan terpilih, timeout, 408, 429, dan respons 5xx sementara. Permintaan tidak sah, kegagalan pengesahan, dan parameter tidak disokong harus diperbaiki dan bukan dihantar kepada model lain.
Bolehkah saya menggunakan satu skema alat dengan setiap model?
Hanya selepas pengujian. Pengangkutan bersama tidak menjamin kelakuan alat yang sama, kualiti argumen, kelakuan panggilan selari, atau penguatkuasaan skema. Tambah model kepada rantaian hanya selepas ia lulus ujian kontrak agen.
Adakah sistem fallback berbilang model sama dengan sistem berbilang agen?
Tidak. Fallback mengubah model yang digunakan untuk permintaan selepas kegagalan laluan. Seni bina berbilang agen menetapkan tugas berbeza kepada agen berasingan. Bina kedua-duanya sebagai lapisan berbeza dengan ujian dan kawalan yang berasingan.
