Итак, Griptape. Фреймворк для построения AI приложений, предлагающий чистый питонячий API для тех, кто устал от уровней абстракции LangChain. Предлагает примитивы для построения ассистентов, RAG-систем, и интеграции с внешними инструментами. Честно говоря, по моему опыту, большинство людей, уставших от langchain, уходит на самописные обертки над более низкоуровневыми библиотеками, вроде openai или litellm. Но кто, знает, может быть зря. Разберемся.

Немного истории

Лично я про Griptape слышу уже года полтора, и начинал он как этакий конкурент LangChain с довольно похожими примитивами, но постепенно их пути разошлись. На момент написания этого поста у него 2.3k звезд на гитхабе, что несколько меньше, чем 109k лангчейна, но все же достаточно, чтобы считать проект достаточно взрослым. Кроме открытого фреймворка, он обзавелся своим облаком, в котором можно запускать свои приложения, ETLки и RAGи, и графический конструктор Griptape Nodes, позволяющий непрофессионалам накликивать приложения мышкой за считанные минуты. 1

Фреймворк

Перейдем, собственно, к самому фреймворку. Он представляет несколько примитивов, в которых было бы неплохо разбираться, прежде чем приступать к работе.

  • Драйверы/Drivers: по сути, главный инструмент, абстрагирующий конкретные имплементации чего-бы то ни было и позволяющий их менять на ходу, не ломая бизнес-логику. Существуют движки почти-что для всего, будь то ассистенты, промпты, модели, системы эмбеддинга или базы данных. По сути, абстрактные классы и их реализации.

  • Движки/Engine: предоставляют готовые реализации основных задач, таких как RAG и суммаризация.

  • Структуры/Structures: Базовые блоки для построения приложений. Среди них можно найти:

    • задачи (tasks): абстракция над неким действием, например, запрос к модели, обработка ответа, загрузка данных из файла и прочее.

    • агентов (agents): немного странная обертка над одной задачей 2. Позволяет передать этой задаче ввод и список инструментов, которые она может использовать.

    • пайплайны (pipelines): как агент, но может запускать несколько задач последовательно, передавая вывод одной на ввод другой.

    • workflows: ациклические направленные графы (DAGs), состоящие из задач. Позволяет оптимальным планировать и запускать параллельные задачи. Документация указывает, что они non-sequential, хотя в дальнейшем дает примеры вполне последовательных workflows. В этом случае, несколько не ясно, а зачем вообще нужны пайплайны.

      DAG

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

  • Инструменты/Tools: Функции, доступные LLM. Эти функции можно передавать в примитивы, указанные выше, и давать таким образом LLM возможность генерировать последовательность вызовов этих функций для выполнения каких-либо действий. Griptape предоставляет довольно много таких инструментов, но можно добавлять и свои.

  • Память/Task Memory: Одна из интересных фич Griptape. Зачастую данные, которые нужно обработать, либо очень чувствительные, либо очень большие, и отправлять их в LLM напрямую может быть непрактично. В таком случае, можно попросить инструмент не предоставлять эти данные в LLM, а отдавать некий дескриптор этих данных, который позволит LLM ссылаться на эти данные для использования в других тулах.

  • Conversation Memory: Включена по умолчанию, и передается в модель между запусками одного и того же workflow.4 Можно отключить в случае, если это не требуется. По сути, полезна только для чатботов и откровенно вредна для всего остального.

  • Rulesets: Настройки поведения LLM, которые передаются в каждый промпт. Что-то вроде system prompts, но чтобы точно понять, они ли это, надо копать вглубь.

На этом основные примитивы закончились, есть еще несколько концептов, которые на данном этапе не слишком важны, поэтому их я пропущу.

Что дальше?

А дальше я думаю копнуть поглубже:

  • в то, а когда и зачем использовать агенты, пайплайны и workflows
  • в возможности фреймворка для ETL и RAG
  • в то, как работает Off Prompt Memory
  • в интеграцию и кастомизацию
  • в то, что можно делать в их облаке
  • а также на что пригоден Griptape nodes

Ну и позапускать всякие примеры, которые они предоставляют, естественно. Буду описывать по мере прогресса.


  1. на самом деле нет ↩︎

  2. хотя есть API для создания агента вокруг списка задач, оно валится при попытке передать туда больше одной задачи, что весьма странно ↩︎

  3. насколько это возможно с вероятностными LLM ↩︎

  4. или агента, или пайплайна ↩︎