AI assistant

Server obsahuje vlastní AI assistant podsystém (src/ai/). Umožňuje psát chatovat s libovolným LLM (Anthropic, Ollama, Gemini), volat nástroje z interních MCP toolů i uživatelem připojených MCP serverů a přepínat mezi modely a sessions přímo v admin UI.

Co umí

  • Chat s LLM — multi-turn konverzace s plnou historií. Provider i model se volí na úrovni session a uloží se ve snapshotu pro audit.
  • Nástroje (tool calling) — assistant má přístup ke stejným nástrojům jako Claude přes MCP (read_page, edit_page, …) plus libovolné externí MCP servery, které si uživatel přidá.
  • Web search — lokální nástroj web_search přes Serper API; aktivní jen pokud je nastaven SERPER_API_KEY.
  • Tool permissions — pravidla allow / deny / prompt per uživatel a per nástroj (s wildcard patterny a prioritou). Uživatel rozhoduje, co může assistant volat bez potvrzení.
  • Streamování odpovědíloop_driver zpracovává agentic loop (model → tool calls → výsledky → další iterace) a zprávy proudí do UI.

Komponenty (src/ai/)

ModulPopis
loop_driver.rsAgentic smyčka — volá LLM, zpracuje tool calls, ukládá zprávy, streamuje výstup
tool_registry.rsSjednocený registr lokálních nástrojů a všech aktivních MCP serverů
mcp_client/Klient pro uživatelem připojené MCP servery (HTTP transport, persistentní spojení)
tool_permissions.rsVyhodnocení pravidel allow/deny/prompt podle priority
local_tools/Vestavěné nástroje (web search)
llm/Adaptéry pro anthropic, ollama, gemini
handlers/API handlery pro /api/assistant/*
config.rsAiConfig (env, defaulty)

Datový model

TabulkaRole
llm_providersProvider (anthropic/ollama/gemini) + api_key + base_url
llm_modelsKonkrétní model pod providerem (např. claude-opus-4-7); jeden je is_default
assistant_sessionsSession se snapshotem provideru a modelu, plus enabled_mcp_server_ids (JSONB)
assistant_messagesZprávy v session (role + JSON content pro multi-modální obsah)
user_mcp_serversUživatelovy externí MCP servery (URL, hlavičky, forward_user_token)
tool_permissionsPravidla pro povolování nástrojů

Detail sloupců: about/blog/databaze.

API

CestaPopis
/api/assistant/*Sessions, zprávy, streaming odpovědí
/api/llm/providersCRUD providerů
/api/llm/modelsCRUD modelů
/api/tool-permissionsCRUD pravidel
(uživatelské MCP servery)Spravované přes /api/assistant/* (případně dedikovaný endpoint)

Frontend stránky v admin SPA: /admin/providers, /admin/models, /admin/assistant, /admin/mcp-servers, /admin/tool-permissions.

Konfigurace

  • Klíče k poskytovatelům (anthropic, gemini, …) se ukládají do llm_providers.api_key přes admin UI — nikdy v kódu ani v .env.
  • Self-hosted Ollama — nastav base_url providera (např. http://localhost:11434).
  • SERPER_API_KEY — env proměnná. Pokud není nastavena, web search nástroj se zaregistruje jako nedostupný.
  • MCP servery — přidává si je každý uživatel sám přes UI (URL + hlavičky); forward_user_token propisuje uživatelův session token do hlaviček MCP serveru.