# Prisma Platform MVP Минимальный чат-агент на Agno + Ollama с рантаймом AgentOS. В этом проекте AgentOS работает как HTTP API сервер (FastAPI + Uvicorn). ## Требования - Python 3.10+ - Запущенный Ollama endpoint (по умолчанию: `http://localhost:11435`) - Доступная модель в Ollama (по умолчанию: `gemma4:31b`) ## Текущая структура ```text prisma_platform/ ├── .env ├── .env.example ├── requirements.txt ├── scenarios/ │ ├── index.json │ └── news_source_discovery/ │ └── v1.json └── src/ ├── __init__.py ├── api_routes.py ├── agent_os.py ├── agent_runner.py ├── observability.py ├── scenario_store.py ├── schemas.py ├── stub_tools.py └── workflow_runner.py ``` ## Установка ```bash python -m venv .venv source .venv/bin/activate pip install -r requirements.txt cp .env.example .env ``` ## Запуск Запуск сервера AgentOS: ```bash python -m src.agent_os ``` По умолчанию AgentOS работает на `http://127.0.0.1:7777`. Документация API доступна по адресам: - `http://127.0.0.1:7777/docs` - `http://127.0.0.1:7777/redoc` Верхний слой сервиса реализован как кастомные FastAPI роуты (`src/api_routes.py`), подключенные через `AgentOS(base_app=...)`. ### Запуск сценария через HTTP - `POST http://127.0.0.1:7777/api/runs` - Тело запроса (JSON): ```json { "scenario_id": "news_source_discovery_v1", "input": { "url": "https://example.com/news" } } ``` Пример запроса: ```bash curl -X POST "http://127.0.0.1:7777/api/runs" \ -H "Content-Type: application/json" \ -d '{ "scenario_id": "news_source_discovery_v1", "input": { "url": "https://example.com/news" } }' ``` Endpoint возвращает единый JSON-контракт. Поля одинаковые для `success` и `failed`, а в неактуальных полях приходит `null`. Пример успешного ответа: ```json { "scenario_id": "news_source_discovery_v1", "status": "success", "input": { "url": "https://example.com/news" }, "steps": [ { "node_id": "search_news_sources", "status": "success", "started_at": "2026-04-22T10:00:00+00:00", "finished_at": "2026-04-22T10:00:00+00:00", "error": null } ], "output_summary": "По заглушечным данным самым ранним источником считается https://news-a.example/article-1", "workflow_name": "news_source_discovery_v1", "scenario_name": "News Source Discovery V1", "result": { "tool_name": "generate_summary", "ok": true, "payload": { "input_count": 3, "summary": "По заглушечным данным самым ранним источником считается https://news-a.example/article-1" }, "received_at": "2026-04-22T10:00:00+00:00" }, "error": null, "run_id": "run_xxx", "session_id": "session_xxx" } ``` Пример ответа с ошибкой валидации: ```json { "scenario_id": "news_source_discovery_v1", "status": "failed", "input": {}, "steps": [ { "node_id": "search_news_sources", "status": "queued", "started_at": null, "finished_at": null, "error": null } ], "output_summary": null, "workflow_name": null, "scenario_name": "News Source Discovery V1", "result": null, "error": { "code": "invalid_input", "message": "Input does not match scenario input_schema: ..." }, "run_id": null, "session_id": null } ``` Проверка, что сервер поднят: ```bash curl -s "http://127.0.0.1:7777/docs" | grep -n "Swagger UI" ``` ## Переменные окружения Основные переменные: - `AGENT_ID` (по умолчанию: `prisma-agent`) - `OLLAMA_MODEL_ID` (по умолчанию: `gemma4:31b`) - `OLLAMA_HOST` (по умолчанию: `http://localhost:11435`) - `OLLAMA_TEMPERATURE` (по умолчанию: `0`) - `AGENT_MARKDOWN` (по умолчанию: `false`) - `AGENT_DEBUG_MODE` (по умолчанию: `true`) - `AGENT_INSTRUCTIONS` (по умолчанию: `You are a helpful assistant. Answer briefly and clearly.`) - `AGENT_OS_HOST` (по умолчанию: `127.0.0.1`) - `AGENT_OS_PORT` (по умолчанию: `7777`) - `PHOENIX_TRACING_ENABLED` (по умолчанию: `false`) - `PHOENIX_COLLECTOR_ENDPOINT` (по умолчанию: `http://localhost:6006`) - `PHOENIX_PROJECT_NAME` (по умолчанию: `prisma-platform`) ## Phoenix трассировка (локально) 1. Установите зависимости: ```bash pip install -r requirements.txt ``` 2. Поднимите Phoenix (см. `docker-service/docker-compose.yml`) и включите трассировку в `.env`: ```dotenv PHOENIX_TRACING_ENABLED=true PHOENIX_COLLECTOR_ENDPOINT=http://localhost:6006 PHOENIX_PROJECT_NAME=prisma-platform ``` 3. Запустите приложение как обычно (`python -m src.agent_os`).