Внутренний API
Контракт NEURO CORE Service — /v1/chat и /v1/health для WEB PORTAL.
Внутренний API доступен только Go-сервису WEB PORTAL по внутренней сети. Из интернета этих endpoint'ов не существует.
Чат
/v1/chatОдин вызов = одно сообщение в чате. Принимает вопрос и контекст, возвращает поток ответа. Соединение long-lived; отмена со стороны портала прерывает генерацию в vLLM.
Идентификатор диалога — по нему сервис поднимает историю.
Обезличенный идентификатор пользователя. Не сопоставим с ПДн внутри NEURO CORE.
Сценарий диалога, например career. Влияет на промпт и подбор контекста.
Сообщения диалога: объекты { role, content }.
В запросе не бывает ПДн: портал обезличивает данные до вызова. Если в
messages встречаются ФИО или контакты — это баг портала.
Что происходит внутри:
- Фильтрация входа (модерация, антисаботаж).
- Embedding вопроса (Qwen3-Embedding).
- Векторный поиск в Qdrant (top-K).
- Rerank (bge-reranker-v2-m3, top-N).
- Генерация Qwen3-32B — stream наружу.
- Сохранение диалога и тегов в MongoDB.
Детали шагов — в RAG-пайплайне.
{
"session_id": "s-3f9a…",
"anonymous_user_id": "u-71bc…",
"scenario": "career",
"messages": [
{ "role": "user", "content": "Какие профессии связаны с морем?" }
]
}Судовождение — одна из ключевых профессий региона…Проба живости
/v1/healthПроба живости для портала.
| Ответ | Значение | Реакция портала |
|---|---|---|
200 OK | Сервис и модели доступны | Чат работает |
| Ошибка / таймаут | NEURO CORE недоступен | Circuit breaker: портал без чата |
{
"status": "ok",
"models": {
"llm": "qwen3-32b",
"embedding": "qwen3-embedding",
"reranker": "bge-reranker-v2-m3"
}
}Расширение контракта
Новые внутренние endpoint'ы (например, чтение рекомендаций или статусов ingest)
добавляются в этот же сервис под /v1/.... Правило неизменно: только
внутренняя сеть, только вызовы от Go-сервиса портала.