Ghid de integrare API-ul DeepSeek: Cereri compatibile cu OpenAI prin intermediul ECAIX
Ghid de integrare API-ul DeepSeek: Cereri compatibile cu OpenAI prin intermediul ECAIX
Acest ghid explică cum să verificați un ID de model DeepSeek prin intermediul ECAIX folosind un endpoint API compatibil cu OpenAI. Acoperă cererea minimă funcțională, exemple cu Python și curl, verificarea ID-ului modelului, streaming-ul, output-uri structurate, instrumente și o cale de diagnosticare pentru erori comune.
Ghidul descrie accesul la un gateway ECAIX către un ID de model expus în catalogul actual al ECAIX. Nu afirmăm că ECAIX este endpoint-ul oficial al API-ului DeepSeek sau că toate caracteristicile DeepSeek sunt disponibile prin toate rutele gateway-ului. Verificați pagina modelului live și documentația furnizorului înainte de a transfera o lucrare în producție.
Ce verifică acest ghid
Exemplele utilizează ruta compatibilă cu OpenAI a ECAIX și un ID de model vizibil public în catalogul actual la publicarea acestui articol. Disponibilitatea, rutele, limitele, prețurile și caracteristicile suportate pot schimba. Tratați catalogul și documentația API ca sursă de adevăr actuală.
Start rapid
Folosește această secvență dacă ai deja o aplicație cu SDK-ul OpenAI:
- Deschide pagina DeepSeek v4.1 Flash model și confirmă că ID-ul este disponibil.
- Creează o cheie API ECAIX.
- Setă URL-ul de bază compatibil cu OpenAI la
https://ecaix.com/api/ai/v1. - Menține SDK-ul și codul aplicației nemodificate în cât mai multe locuri posibil.
- Executați cererea minimă de mai jos.
- Adaugă streaming-ul, output-ul JSON sau instrumentele doar după ce cererea de bază funcționează corect.
Endpoint și ID-ul modelului
Pentru clienți compatibili cu OpenAI, folosește:
Base URL: https://ecaix.com/api/ai/v1
Model: deepseek-v4.1-flash
ID-ul modelului nu este o promisiune permanentă în acest articol. Confirmați-l în directoriul modelurilor live înainte de fiecare nouă integrare sau dezvoltare. Dacă ai nevoie de un alt membru al familiei DeepSeek, copiază exact ID-ul din pagina de detalii a modelului, nu faci presupuneri despre sufixe.
Formatul endpoint-ului contează de asemenea. SDK-ul trebuie să primească ruta de bază care se termină cu /v1; clientul adaugă /chat/completions sau o altă rută de operare. Nu adaugi /chat/completions la base_url dacă SDK-ul îl adaugă deja.
Python cu SDK-ul OpenAI
Instalează sau actualizează SDK-ul Python OpenAI în mediul virtual:
python -m pip install --upgrade openai
Apoi folosește URL-ul de bază ECAIX și cheia API:
const client = new OpenAI({
apiKey: process.env.ECAIX_API_KEY,
baseURL: "https://ecaix.com/api/ai/v1",
});
const response = await client.chat.completions.create({
model: "deepseek-v4.1-flash",
messages: [
{ role: "user", content: "Return one short sentence about API testing." },
],
max_tokens: 128,
});
console.log(response.choices[0].message.content);
Folosește codul server-side pentru cererea API. O aplicație browser ar trebui să apeleze propriul backend, nu să expună cheia ECAIX în JavaScript client-side.
Cerere diagnostică cu curl
Dacă SDK-ul eșuează, îndepărtează SDK-ul din ecuație și testază endpoint-ul direct. Salvează en-tête-urile și corpul cererii separat pentru a putea distinge un problemă HTTP de un problemă de format de răspuns.
curl -sS -D /tmp/ecaix-deepseek-headers.txt \
-o /tmp/ecaix-deepseek-response.json \
-w '\nHTTP %{http_code}\n' \
"https://ecaix.com/api/ai/v1/chat/completions" \
-H "Authorization: Bearer ${ECAIX_API_KEY}" \
-H "content-type: application/json" \
-d '{
"model": "deepseek-v4.1-flash",
"messages": [
{"role": "user", "content": "Reply with one short sentence."}
],
"max_tokens": 128
}'
Nu copiază en-tête-urile sau răspunsul într-un ticket public fără a elimina cheile API, ID-urile cererii, prompt-urile, căile de repozitoriu și datele clientului.
Diagnosticarea răspunsului
Urmează această ordine:
- Codul statusului HTTP: determină dacă cererea a ajuns la un endpoint valid.
- Corpul răspunsului: citeste codul de eroare al furnizorului sau gateway-ului.
- ID-ul modelului: copiează exact ID-ul din directorul modelului actual.
- Autentificarea: verifică en-tête-ul cu cheia, contul și permisiunile.
- Forma cererii: reduce corpul cererii la
model,messagesși un limită mică de output. - Campurile de caracteristică: adaugă streaming-ul, JSON-ul sau instrumentele una câte una.
- Comportamentul SDK-ului: compară cererea SDK-ului cu cererea directă cu curl.
Aceasta evită confuzia între un problemă de bibliotecă client și un problemă de rute de model sau permisiuni de cont.
Răspunsuri în streaming
Dacă aplicația are nevoie de output incremental, adaugă streaming-ul doar după ce o cerere normală reușește:
stream = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[{"role": "user", "content": "Summarize API retries in three points."}],
stream=True,
max_tokens=256,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
Comportamentul exact al evenimentelor depinde de endpoint și SDK. Verifica cum framework-ul tău gestionează un delta gol, un eveniment de utilizare final, întreruperea conexiunii și terminarea tipului [DONE]. Nu considera un implementare de streaming ca fiind gata pentru producție până nu ai testat întreruperile și reînceperea.
Output structurat și JSON
Dacă ai nevoie de output-uri citibile de către mașină, începe cu o cerere normală și adaugă apoi cea mai mică opțiune de output structurat suportată de endpoint și model. Validează conținutul înapoiat cu un parser JSON real. Un prompt care spune „returnează JSON” nu este același lucru ca un răspuns schema-enforțat.
import json
response = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[
{
"role": "user",
"content": "Return a JSON object with keys title and priority."
}
],
response_format={"type": "json_object"},
max_tokens=128,
)
payload = json.loads(response.choices[0].message.content)
print(payload["title"])
Dacă response_format este acceptat poate depinde de model și rută. Dacă endpoint-ul returnează un error de parametru nerecunoscut, îndepărtează câmpul și verifica documentația rutei înainte de a încercă un alt format.
Apelarea funcțiilor și instrumente
Apelarea funcțiilor necesită o testare separată față de generarea textului. Începe cu o funcție inofensivă și inspectează numele și argumentele înapoiate înainte de a executa nimic.
tools = [
{
"type": "function",
"function": {
"name": "get_demo_status",
"description": "Return a fixed status for a local compatibility test.",
"parameters": {
"type": "object",
"properties": {},
"additionalProperties": False,
},
},
}
]
response = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[{"role": "user", "content": "Check the demo status."}],
tools=tools,
tool_choice="auto",
max_tokens=128,
)
print(response.choices[0].message.tool_calls)
Un model poate returna un răspuns text valid în timp ce apelarea funcțiilor eșuează din cauza conversiei schema, parametrilor nerecunoștiți sau comportamentului specific clientului. Nu executa argumentele înapoiate împotriva unui sistem de producție fără a valida schema și a adăuga verificări de autorizare.
Rute compatibile cu OpenAI și Anthropic
ECAIX expune diferite suprafețe de compatibilitate pentru diferite clienți:
| Client sau flux de lucru | Calea documentației | Ce trebuie verificat |
|---|---|---|
| SDK-ul Python/Node OpenAI | /api/ai/v1 | Chat Completions, Răspunsuri, streaming, instrumente |
| Clientul compatibil cu Anthropic | /api/ai/v1/anthropic | Campurile de mesaje, en-tête-uri, blocuri de conținut |
| Fluxul de lucru third-party pentru Claude Code | /api/ai/v1/anthropic | Comportamentul specific furnizorului; nu sprijină oficial Anthropic |
Citește documentația Chat Completions, Răspunsuri și Mesaje Anthropic înainte de a alege o cale. Același ID de model nu poate expune câmpuri sau comportament identice pe fiecare suprafață de compatibilitate.
Detalii actuale ale modelului
Utilizează paginile detaliate live pentru verificarea capacităților și disponibilității:
Aceste pagini sunt mai fiabile decât un articol static pentru ID-uri actuale ale modelului, informații despre context și link-uri de prețuri.
Erori comune
| Cod sau simptom | Cauză probabilă | Acțiune diagnostică |
|---|---|---|
401 | Cheie lipsă sau invalidă | Verifică Authorization, variabila de mediu și starea cheii |
403 | Cheie sau cont lipsă de permisiuni | Verifică accesul contului și disponibilitatea modelului |
404 | URL-ul de bază sau sufixul rutei greșit | Folosește /api/ai/v1/chat/completions pentru testul curl direct |
400 | Corpul cererii invalid sau câmpuri nerecunoscute | Elimina câmpurile opționale și reîncearcă cu corpul minim |
429 | Limită de rată sau quotă | Registează en-tête-urile răspunsului, încetinește și verifică limitele contului |
5xx | Eșec al gateway-ului sau al furnizorului | Salvează timpul cererii și ID-ul răspunsului; reîncearcă conform politicii tale |
| Modelul nu este găsit | Eșec de tipare, modelul eliminat sau neconformitate de rute | Copiază exact ID-ul modelului din /models |
| Textul funcționează, instrumentele eșuează | Mismatch în schema instrumentei sau capacitatea modelului | Testă o singură funcție inofensivă și inspectează argumentele înapoiate |
| SDK-ul funcționează diferit față de curl | Setările default ale SDK-ului sau construcția rutei | Imprime configurația cererii SDK-ului și compară rutele |
Checklist de securitate și producție
Înainte de a trece peste un proiect de testare, verifica:
- Cheile API sunt stocate pe server și pot fi