Перейти к содержимому
Phronesis v0.1.0 alpha доступнаПрочитать анонс
Phronesis

Open source · Apache 2.0 · Python 3.11+

Практическая мудрость для систем ИИ-агентов.

Phronesis (φρόνησις): для Аристотеля - практическая мудрость - способность хорошо рассуждать и действовать с рассудительностью в конкретных ситуациях. У LLM есть episteme (знание). Агенту нужна phronesis.

hello_phronesis.py
from phronesis.agents import agent
from phronesis.providers import anthropic


@agent(
    model=anthropic(model="claude-sonnet-4-6"),
    system_prompt="You investigate questions thoroughly and cite sources.",
)
def researcher() -> str:
    """Investigate a question and synthesize a cited answer."""


result = await researcher.run("What is phronesis in Aristotelian ethics?")
print(result.output)

Зачем Phronesis

Агент - это не чат-бот с инструментами.

LLM знают вещи - это эпистеме. Но агенты должны решать и действовать с рассудительностью в конкретных ситуациях. Это фронесис. Большинство фреймворков агентов рассматривают агентов как улучшенных чат-ботов, приклеенных к циклу использования инструментов. Phronesis трактует их как делиберативные системы с явными контрактами: типизированные входы, объявленные эффекты, ограниченная память, именованные паттерны исполнения.

Существующие фреймворки навязывают выбор. С одной стороны - произвольный поток управления в виде кода: максимум выразительности и мультиагентная система, которую через полгода никто не сможет отладить. С другой - всё описано в YAML или конструкторах графов: понятно с первого взгляда, невозможно как только нужно что-то нетривиальное. Phronesis отделяет декларативную спецификацию от исполнения. Агенты, инструменты, память и конвейеры - это типизированные, неизменяемые, сериализуемые в JSON спецификации. Паттерны исполнения берутся из замкнутого, чётко определённого каталога - выразительность без хаоса.

Каждый запуск наблюдаем через OpenTelemetry, каждая спецификация версионируется, каждый контракт - это рантайм-проверка, а не комментарий в промпте. В этом разница между фреймворком, который рождает демо, и тем, который рождает системы, которые можно эксплуатировать.

By the numbers

Built like infrastructure, not a demo.

Phronesis is early, but it is not thin. The surface is small on purpose - and every layer carries its own tests, types, and observability.
19

Execution modes

A closed, named catalog - from Sequence and Parallel to Reflexion and Tree Search.

22

Runnable examples

Every mode with a deterministic cassette, plus a full multi-agent mini-app.

1,600+

Tests

Branch coverage gated at 90% - the build fails below the floor.

14

Stable modules

Agents, tools, memory, providers, MCP, pipelines, observability and more.

100%

Typed surface

mypy --strict across the entire source tree, no escape hatches.

Apache 2.0

Open source

Permissive license, public roadmap, no enterprise gates.

Обзор кода

API в четырёх фрагментах.

Настоящий Python. Настоящая форма. Фреймворк ниже в ранней альфе - поверхность будет расти, но дизайн останется таким же лаконичным.

Агент связывает модель, инструменты и память под одной декларативной спецификацией.

agent.py
from phronesis import ToolEffect
from phronesis.agents import agent
from phronesis.providers import anthropic
from phronesis.tools import tool


@tool(effects=(ToolEffect.NETWORK,))
async def search_web(query: str, limit: int = 5) -> list[str]:
    """Search the web and return ranked snippets."""
    ...


@agent(
    model=anthropic(model="claude-sonnet-4-6"),
    tools=(search_web,),
    system_prompt="You are a careful research assistant.",
    max_iterations=8,
)
def assistant() -> str:
    """Answer questions grounded in live search results."""

Принципы

Шесть выборов, применённых везде.

  • Композиция вместо наследования

    Агенты конфигурируются из частей - модель, инструменты, память, промпты - а не наследуются. Вы собираете; вы не переопределяете.

  • Сначала async

    Потоковая передача, конкурентность и отмена - базовые предположения. Никакого синхронного теневого API поддерживать не нужно.

  • Строго типизировано

    Pydantic v2 повсюду. Типы - не документация, а рантайм-контракты, которые фреймворк обеспечивает.

  • Неизменяемые спеки, изменяемые запуски

    Определения сериализуемы в JSON и воспроизводимы. Состояние исполнения живёт отдельно, наблюдаемо и запросимо.

  • Встроенная наблюдаемость

    Спаны OpenTelemetry для каждого запуска агента, вызова инструмента и этапа конвейера - с первого коммита, а не прикручено потом.

  • Закрытый каталог паттернов исполнения

    Sequence, Parallel, ReActLoop, Consensus, Debate, Handoff. Именованные режимы, о которых можно рассуждать, - а не произвольный поток управления.

Что внутри

Маленькая, принципиальная поверхность.

Фреймворк намеренно узкий. Каждый слой заслуживает место либо тем, что делает систему безопаснее в эксплуатации, либо тем, что упрощает чтение кода через полгода.

Ядро

Примитивы, из которых строится каждый агент.

  • Агенты
  • Инструменты
  • Интеграция MCP
  • Providers (Anthropic, OpenAI, Ollama, vLLM)
  • Context builders

Состояние и контекст

Как агенты помнят и что они делят.

  • Память (эпизодическая, семантическая, рабочая, общая)
  • Checkpoints (pause and resume)
  • Сессии

Оркестрация

Как агенты складываются в системы.

  • Конвейеры
  • Режимы исполнения
  • Provider middleware
  • Record / replay cassettes
  • Наблюдаемость

Engineering

The guarantees, not the promises.

An agent framework is only as trustworthy as the discipline behind it. These are the gates every change passes before it lands.
  • Typed end to end

    mypy --strict and Pydantic v2 specs across the whole source tree. No untyped escape hatches.

  • Tested to a floor

    1,600+ tests with branch coverage gated at 90% - the build fails below it, never above it on paper.

  • Deterministic replay

    Record once, replay forever: cassette-backed runs make agent behavior reproducible in tests and CI without a network.

  • Observable by construction

    OpenTelemetry spans for every agent run, tool call, pipeline stage, and MCP session - correlated by stable ids.

  • Immutable specs

    Agents, tools, and pipelines are frozen, JSON-serializable dataclasses - versionable, diffable, reproducible.

  • Lint-clean

    ruff format and a strict ruff check gate every commit, alongside the type and test suites.

Установка

Одна команда. Python 3.11 или новее.

$pip install phronesis-framework

Статус проекта

Phronesis в ранней альфа-версии.

API будет меняться. Мы работаем публично, чтобы построить фреймворк, который относится к системам агентов серьёзно - типизированный, компонуемый, наблюдаемый. Никаких заявлений о продакшене, никаких выдуманных кейсов, никаких корпоративных барьеров. Только код и честная приверженность его дизайну.

Обратная связь, идеи и вклад приветствуются через GitHub Discussions и Issues. Дорожная карта, шероховатости и открытые вопросы - всё в репозитории.