93ee7aea1c
Введен единый JSON-контракт для success/failed с общими полями, добавлен трекинг step status (queued/running/success/failed) и output_summary, а сборка run-ответа централизована через общий helper.
5.3 KiB
5.3 KiB
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/docshttp://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 трассировка (локально)
- Установите зависимости:
pip install -r requirements.txt
- Поднимите Phoenix (см.
docker-service/docker-compose.yml) и включите трассировку в.env:
PHOENIX_TRACING_ENABLED=true
PHOENIX_COLLECTOR_ENDPOINT=http://localhost:6006
PHOENIX_PROJECT_NAME=prisma-platform
- Запустите приложение как обычно (
python -m src.agent_os).