Files
prisma/README.md
T
Barabashka 93ee7aea1c Унифицировать ответ /api/runs и добавить статусы шагов workflow.
Введен единый JSON-контракт для success/failed с общими полями, добавлен трекинг step status (queued/running/success/failed) и output_summary, а сборка run-ответа централизована через общий helper.
2026-04-22 12:28:47 +03:00

5.3 KiB
Raw Blame History

Prisma Platform MVP

Минимальный чат-агент на Agno + Ollama с рантаймом AgentOS.

В этом проекте AgentOS работает как HTTP API сервер (FastAPI + Uvicorn).

Требования

  • Python 3.10+
  • Запущенный Ollama endpoint (по умолчанию: http://localhost:11435)
  • Доступная модель в Ollama (по умолчанию: gemma4:31b)

Текущая структура

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

Установка

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env

Запуск

Запуск сервера AgentOS:

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):
{
  "scenario_id": "news_source_discovery_v1",
  "input": {
    "url": "https://example.com/news"
  }
}

Пример запроса:

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.

Пример успешного ответа:

{
  "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"
}

Пример ответа с ошибкой валидации:

{
  "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
}

Проверка, что сервер поднят:

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. Установите зависимости:
pip install -r requirements.txt
  1. Поднимите Phoenix (см. docker-service/docker-compose.yml) и включите трассировку в .env:
PHOENIX_TRACING_ENABLED=true
PHOENIX_COLLECTOR_ENDPOINT=http://localhost:6006
PHOENIX_PROJECT_NAME=prisma-platform
  1. Запустите приложение как обычно (python -m src.agent_os).