Перейти до основного вмісту

Конфігурація

Простори імен і персони

Простір імен визначає персону та поведінку AI-асистента в межах відділу. Кожен простір імен може мати власний system prompt, шкалу формальності, правила ескалації та матрицю довіри.

Конфігурація персони

JSON-поле persona підтримує:

{
"language": "uk",
"style": {
"verbosity": "concise",
"citations": true,
"structure": "bullets",
"formality": 80
},
"boundaries": ["Do not provide legal advice", "Redirect medical questions to HR"],
"escalation": {
"triggers": ["lawsuit", "termination", "complaint"],
"defaultAssignee": "<user-id>",
"message": "This question has been escalated to a specialist."
},
"greeting": "Hello! How can I help you today?",
"fallback": "I'm not sure about that. Let me connect you with a specialist."
}

Шкала формальності

persona.style.formality — ціле число від 0 до 100.

  • 0-33 — неформальні відповіді простою мовою
  • 34-66 — збалансований професійний тон
  • 67-100 — формальна юридична мова

Legacy-поле persona.tone API більше не приймає.

System prompt

Поле systemPrompt вставляється як перше повідомлення в контекст LLM. Використовуйте його, щоб задати роль асистента, обмеження та межі знань.

API

Список просторів імен

GET /api/v1/namespaces

Створення простору імен

POST /api/v1/namespaces
Body: { "name": "legal", "departmentId": "<id>", "systemPrompt": "...", "persona": {...} }

Оновлення простору імен

PATCH /api/v1/namespaces/:id
Body: { "systemPrompt": "...", "persona": {...} }

Видалення простору імен

DELETE /api/v1/namespaces/:id

Конфігурація agent runner

Поле agentRunner у Namespace.config контролює, який адаптер обробляє завдання для цього простору імен.

PATCH /api/v1/namespaces/:id
{
"config": {
"agentRunner": {
"activeAdapter": "api",
"adapters": {
"api": { "model": "gpt-4o-mini", "apiKey": "$OPENAI_API_KEY" },
"claude_local": { "model": "claude-sonnet-4-6", "maxTokens": 4096, "timeoutMs": 300000 },
"codex_local": { "model": "codex-mini-latest", "timeoutMs": 300000 },
"ollama": { "baseUrl": "http://localhost:11434", "model": "llama3.1-70b", "temperature": 0.7 }
}
}
}
}
ПолеТипОпис
activeAdapterapi | claude_local | codex_local | ollamaЯкий адаптер використовує цей простір імен
adapters.<type>objectПараметри кожного адаптера (модель, timeout, ключі тощо)

Перемикайте адаптер простору імен одним оновленням конфігурації — правки коду не потрібні.

Звʼязок з іншими фічами

  • Agent runner: кожен простір імен вибирає свій адаптер через config.agentRunner.activeAdapter.
  • Intent trust: у кожного простору імен власна матриця довіри (записи IntentTrust scope-обмежені по namespaceId).
  • Intent examples: приклади для навчання класифікатора scope-обмежені простором імен.
  • Розмови: розмова може опційно належати простору імен.
  • RAG: system prompt простору імен вкладається в RAG-контекст.

Model routing

AgentCore використовує OpenAI-сумісні API для LLM-генерації та embeddings. Маршрутизація налаштовується через env-змінні.

LLM generation

ЗміннаЗа замовчуваннямОпис
OPENAI_API_KEYAPI-ключ (обовʼязково)
OPENAI_BASE_URLhttps://api.openai.com/v1Base URL для generation API
OPENAI_MODELgpt-4oМодель для RAG-генерації

Альтернативні провайдери

Будь-який OpenAI-сумісний API підключається через зміну OPENAI_BASE_URL:

# Azure OpenAI
OPENAI_BASE_URL=https://your-resource.openai.azure.com/openai/deployments/gpt-4o
OPENAI_API_KEY=your-azure-key

# Local model (Ollama, vLLM, etc.)
OPENAI_BASE_URL=http://localhost:11434/v1
OPENAI_API_KEY=not-needed
OPENAI_MODEL=llama3

Embeddings

ЗміннаЗа замовчуваннямОпис
OPENAI_EMBEDDING_MODELtext-embedding-3-smallEmbedding-модель (1536-dim)

Embedding-модель має генерувати 1536-вимірні вектори, щоб відповідати визначенню pgvector-колонки. Якщо міняєте модель — перевірте сумісність розмірності.

Змінні оточення

ЗміннаОбовʼязковаЗа замовчуваннямОпис
DATABASE_URLтакPostgreSQL connection string
OPENAI_API_KEYтакOpenAI API-ключ
JWT_SECRETтакСекрет підпису JWT, мін. 32 символи
NODE_ENVніdevelopmentRuntime-режим: development, production або test
PORTні3000Порт сервера
HOSTні0.0.0.0Bind-адреса
REDIS_URLніredis://localhost:6379Redis connection string
KB_UPLOAD_DIRні./tmp/knowledge_uploadsДиректорія аплоадів документів
OPENAI_BASE_URLніhttps://api.openai.com/v1Base URL LLM API
OPENAI_MODELніgpt-4oLLM-модель для генерації
OPENAI_EMBEDDING_MODELніtext-embedding-3-smallEmbedding-модель
ANTHROPIC_API_KEYніAnthropic API-ключ, зарезервовано під майбутню маршрутизацію
LANGFUSE_PUBLIC_KEYніPublic-ключ Langfuse-трейсингу
LANGFUSE_SECRET_KEYніSecret-ключ Langfuse-трейсингу
LANGFUSE_HOSTніURL сервера Langfuse
JWT_EXPIRES_INні7dTTL JWT-токена
PII_ENCRYPTION_KEYтак32-байтовий AES-GCM ключ у Base64
WHATSAPP_APP_IDніWhatsApp Cloud API app ID
WHATSAPP_APP_SECRETніWhatsApp Cloud API app secret
WHATSAPP_PHONE_NUMBER_IDніWhatsApp phone number ID
WHATSAPP_ACCESS_TOKENніWhatsApp API access token
WHATSAPP_WEBHOOK_VERIFY_TOKENніWebhook verify token
WA_PHONE_NUMBERні+380000000000Номер відправника WhatsApp
WA_RATE_LIMIT_PER_MINні60Повідомлень WhatsApp на хвилину
TG_BOT_TOKENніTelegram bot token
TG_RATE_LIMIT_PER_MINні30Повідомлень Telegram на хвилину
ALLOWED_ORIGINSніhttp://localhost:5173Точні дозволені CORS origin
MEMORY_EXTRACT_EVERY_N_MESSAGESні10Повідомлень між екстракціями памʼяті
MEMORY_EXTRACTION_MODELніgpt-4o-miniМодель для екстракції памʼяті
INTENT_TRIGGER_WORDSнідив. config.tsТригер-слова HITL через кому

Memory extraction

ЗміннаЗа замовчуваннямОпис
MEMORY_EXTRACTION_MODELgpt-4o-miniМодель для екстракції employee profile

За замовчуванням — менша модель з економічних міркувань. Екстракція профілів менш чутлива до якості, ніж RAG-генерація.

Anthropic (опційно)

ЗміннаЗа замовчуваннямОпис
ANTHROPIC_API_KEYAnthropic API-ключ

Зарезервовано під майбутню мультипровайдерну маршрутизацію. Наразі не використовується в основному pipeline.


RAG weights

Ваги retrieval налаштовуються для кожної бази знань окремо, щоб оптимізувати якість пошуку для різних типів контенту.

Дефолтні ваги

ПолеЗа замовчуваннямОпис
vector0.65Частка фінального score від векторного (embedding) пошуку
keyword0.35Частка фінального score від keyword full-text пошуку

У межах вектор-бюджету 85% іде на content chunk embeddings, 15% — на synthetic Q&A embeddings. Ці частки жорстко зашиті й не конфігуруються. vector + keyword має бути ≤ 1.0.

Конфігурація на рівні бази знань

Задайте кастомні ваги через конфігураційний ендпоінт бази знань:

PATCH /api/v1/knowledge/bases/:id/config
{
"ragWeights": {
"vector": 0.70,
"keyword": 0.30
}
}

Передайте "ragWeights": null, щоб зняти ваги на рівні бази знань і повернутись до глобальних дефолтів.

Поради з налаштування

Тип контентуРекомендація
Юридичні документи (структуровані)Вища keyword-вага (наприклад, keyword: 0.45) — юридичні терміни мають збігатись точно
FAQ / Q&A-париВища vector-вага (наприклад, vector: 0.80) — важливіший семантичний матч
Звичайний текстДефолт працює добре
Технічна документаціяЗбалансовано — і терміни важливі, і контекст

Як працює scoring

  1. Кожен шлях пошуку віддає кандидатів із сирими scores
  2. Scores нормалізуються по кожному шляху (діапазон 0-1)
  3. Фінальний score: (vector × 0.85) × vecScore + (vector × 0.15) × qScore + keyword × keyScore
  4. Вибирається top-6 кандидатів за фінальним score