Новые паттерны для создания GenAI-продуктов
Один из уважаемых мной старых дедов классической разработки программного обеспечения — Мартин Фаулер (автор книг "Рефакторинг" и "Шаблоны корпоративных приложений", а еще соавтор Аджайл Манифеста и популяризатор кучи правильных вещей, за что ему низкий поклон), написал большую работу, где структурировал базовые новые паттерны разработки приложений на основе генеративного искусственного интеллекта
Читаю его труд и кайфую, как он приятно и наглядно излагает свои мысли. Очень советую всем, кто только начинает с разбираться с созданием приложений на GenAI:
- Direct Prompting, как базовый слой приложения
- Зачем нужен этап Evaluation
- Что такое Embedding'и
- RAG на дефолнтом векторном поиске
- Hybrid Retriever для дополнения векторного поиском по подстроке
- Query Rewriting для улучшения запросов от человека
- Reranking для отсечения мусора в результатах поиска
- Guardrails для безопасности — валидация инпута, верификация аутпута
- Fine Tuning, для крайних случаев, когда остальные не дают роста eval-метрик
А еще, как же он прав: LLM — это такой джун-исследователь: начитан, умеет красиво излагать, но в деталях плавает, а самоуверенности хоть отбавляй — вместо «не знаю» предпочитает с умным видом выдумать что-то правдоподобное. RAG в этой картине — это когда мы задаём этому джуну вопрос и при этом подсовываем ему папку с нужными документами, строго намекая: «Прочитай это, прежде чем снова начать фантазировать».
https://martinfowler.com/articles/gen-ai-patterns/
П.С. А дальше, поверх этих паттернов нужно делать когнитивную архитектуру, с планировщиками, постановщиками задач, сервисами вызова тулинга и рефлексией, но это — уже другая история)