Гайд за интеграция на API на DeepSeek: Отпращане на OpenAI-совместителни запроси чрез ECAIX
Гайд за интеграция на API на DeepSeek: Отпращане на OpenAI-совместителни запроси чрез ECAIX
Този гайд показва как да тествате идентификатор на модел на DeepSeek чрез ECAIX с помощта на OpenAI-совместим API. Той включва най-малкия рабоч поредица от запроси, примери с Python и curl, проверка на идентификатори на модели, стриминг, структуриран отговор и инструменти, както и диагностичен път за общото разбиране на грешки.
Гайдът описва достъп до ECAIX като портал към модели, които са изложени в текущия каталог на ECAIX. Не се претендира, че ECAIX е официалният краище на API на DeepSeek или че всички функции на DeepSeek са доступни през всички маршрути на портала. Проверте живата страница на модела и документацията на поставщика преди да преместите работата в продукция.
Чето което този гайд потвърждава
Примерите използват OpenAI-совместим път на ECAIX и идентификатор на модел, който е видим в публичния каталог на ECAIX при публикуването на статията. Достъпността, маршрутизацията, ограниченията, цените и поддръжаните функции могат да се променят. Посветите се към каталога и документацията на API като източник на истината.
Бързо стартиране
Исполнете този ред на команди, ако вече имате приложение с OpenAI SDK:
- Откройте страницата на DeepSeek v4.1 Flash модел и потвърдете, че идентификаторът е доступен.
- Создайте ключ на API на ECAIX.
- Настройте основната URL на OpenAI-совместим на
https://ecaix.com/api/ai/v1. - Запазвайте SDK и код на приложението без промени, където е възможно.
- Изпълнете минималния запрос по-долу.
- Добавете стриминг, JSON изход или инструменти само след като базовият запрос работи.
Краище и идентификатор на модел
За OpenAI-совместими клиенти използвайте:
Base URL: https://ecaix.com/api/ai/v1
Model: deepseek-v4.1-flash
Идентификаторът на модел не е гаранция за постоянно в статията. Потвърдете го на живата страница на модела преди всяка нова интеграция или разпространение. Ако нуждаете друг модел от семейството на DeepSeek, копирайте точното име на идентификатора от страницата на детайла на модела, а не гадаете суфикс.
Важността на формата на краището също е важна. SDK трябва да получи основния път, който завършва с /v1; клиентът добавя /chat/completions или друг операционен път. Не добавяйте /chat/completions към base_url, ако SDK вече го добавя.
Python с OpenAI SDK
Установите или обновите Python SDK на OpenAI в виртуалното окружение:
python -m pip install --upgrade openai
Започнете с основната URL на ECAIX и 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);
Исполнете серверна кода за отпращане на API-запроса. Приложение в браузър трябва да извиква собствения си backend, а не да излага ключ на ECAIX в JavaScript на клиент.
Диагностичен запрос с curl
Ако SDK не работи, извадите SDK от уравнението и тествайте краището директно. Запазвайте заглавните и тялото на запроса по отделно, за да можете да различите проблем с HTTP от проблем с формат на отговор.
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
}'
Не копирайте запазените заглавни или отговори в публично съобщение без да изтриете API ключовете, идентификатори на запроси, промтове, пътища в репозитория и данни на клиенти.
Как да диагностицирате отговора
Исполнете следните стъпки в този ред:
- Статус на HTTP: определете дали запросът стигнал до валидно краище.
- Тяло на отговора: прочетете код на грешка на поставщика или портала.
- Идентификатор на модел: копирайте точното име на идентификатора от текущата страница на модела.
- Авторизация: проверите заглавното поле за ключ, сметката и разрешенията.
- Формат на тялото на запроса: намалете тялото на запрос до
model,messagesи малко ограничение на изход. - Полета на функция: добавете стриминг, JSON или инструменти по един по един.
- Поведение на SDK: сравнете запросът на SDK с директния curl запрос.
Тази последователност предотвратява проблеми с библиотеката на клиента да бъдат плутащи като проблеми с маршрутизацията на модела или разрешенията на сметката.
Отговори с стриминг
Ако приложението нуждае от инкрементен изход, добавете стриминг само след като обикновения запрос успее:
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)
Поведението на събитията зависи от краището и SDK. Проверте как ваш фреймворк обработва празен delta, финално събитие на изчисление, прекъсване на съединение и стили на завершаване като [DONE]. Не разглеждайте реализация на стриминг като готова за продукция, докато не сте тестовали прекъсвания и повтаряне.
Структуриран изход и JSON
Ако нуждаете от машиночитаем изход, започнете с обикновен запрос и добавете най-малката опция за структуриран изход, поддържана от краището и модела. Валидирайте връщанията с реална JSON парсер. Запрос, който казва „върнете JSON“, не е същото като отговор, който е принуден от схема.
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"])
Приемането на response_format може да зависи от модела и маршрута. Ако краището връща грешка за неподдържани параметри, извадите полето и проверте документацията на краището преди да опитате друг формат.
Наричане на функции и инструменти
Наричане на функции изисква отделен тест от генериране на текст. Започнете с една безвредна функция и разгледайте връщаните име и аргументи преди да изпълните нищо.
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)
Моделът може да връща валиден текст отговор, докато наричане на функции не работи поради несовместимост на схемата, неподдържани параметри или специфично поведение на клиента. Не изпълнявайте връщаните аргументи на инструментите срещу продукционна система преди да потвърдите схемата и да добавите проверки за авторизация.
OpenAI-совместими и Anthropic-совместими пътища
ECAIX излага различни повърхности на съвместимост за различни клиенти:
| Клиент или работен процес | Путь на документация | Ще се потвърди |
|---|---|---|
| OpenAI Python/Node SDK | /api/ai/v1 | Chat Completions, Отговори, стриминг, инструменти |
| Клиент на Anthropic-стил | /api/ai/v1/anthropic | Полета на съобщенията, заглавни, блокове на съдържание |
| Работен процес на Claude Code от трети страна | /api/ai/v1/anthropic | Поведение на поставщика; не е официална поддръжка на Anthropic |
Прочетете Документацията за Chat Completions, Документацията за Отговори и Документацията за Anthropic Messages преди да изберете път. Идентичният идентификатор на модел може да не излага идентични полета или поведение на всяка съвместима повърхност.
Детайли на текущи модели
Использвайте живите страни на детайли за проверка на възможностите и достъпността:
Тези страни са по-надеждни от статична статия за текущи идентификатори на модели, информация за контекст и връзки за цени.
Общи грешки
| Статус или симптом | Вероятна причина | Действие за диагностика |
|---|---|---|
401 | Отсъстващ или невалиден токен | Проверте Authorization, переменната на окружение и статус на ключа |
403 | Ключът или сметката няма разрешения | Проверте достъп до сметката и възможността на модела |
404 | Неправилен основен URL или суфикс на маршрут | Исполне |