Comments 18
«Агент – это программа, которая способна взаимодействовать с внешней средой с помощью инструментов и корректировать своё поведение в зависимости от результатов взаимодействия (рефлексия).
Это память. Рефлексия - учёт себя как части среды. И учет учета. И учет учета учета. Возможно, условие возникновения сознания.
У вас случилась рекурсия в рефлексии.
У автора написано то же, что у вас, понятным языком, и это не память.
Там далее Без рефлексии агент превращается в цепочку вызовов модели». - вот это точно про память.
Агент может обладать памятью без рефлексии, при проходе лабиринта не надо рассматривать своё воздействие на лабиринт, а вот для торгового бота это может быть не так.
У вас случилась рекурсия в рефлексии.
И это намеренно, в контексте темы ИИ агентов рефлексия обладает потенциалом роста сложности через рекурсию. К примеру, в состязательных средах с неполной информацией, когда надо уходить от адаптации соперника к твоей тактике.
Это как раз то, что я искал! Больше спасибо. Как раз сейчас пытаюсь родить решение, которое будет использовать силу LLM поверх базы табличных документов. ChatGPT к сожалению не справляется с этим.
Можно ли чуть подробнее что где обрабатывается и можно ли настроить?
Установили gigachain, порезали документ, все красиво, все локально. И вдруг credentials
подавай. А я ведь не книжку из Интернета скормить хотел.
Можно ли полностью локально все обработать (на CPU, GPU)?
В моих примерах используется GigaChat - эта модель доступна исключительно в облаке по API. Если хочется локально работать, то нужно поднять свою модель, например маленькую версию llama или mixtral. Gigachain и Langchain позволяют это сделать, но это уже не так просто, как получить креды к API. Но в целом реально за вечерок всё настроить и поднять.
С этим примером про плащ явно что то не так. Роботы обычно буйно фантазируют а тут без всякой обработки выдал чуть ли не цитату из книги.
Так здесь вроде пример, когда ему скормили книгу. Т.е. в отличие от обычных данных из Интернета, которые хранятся не в виде полной копии без потерь, а в виде весов, здесь у робота был "перед глазами" оригинал.
Т.е. ему было нужно "понять", чем спрашивают и выдать подходящее. Это круто, но не слишком подозрительно.
Константин, спасибо за статью!
Можно вопросы )
1. "При этом первый прототип решения занимал 50 строк кода на python вместе с UI."
Как в несколько строк UI поднять? ) Он тоже в SDK есть?
2. Если хотим несколько книг загрузить, предусмотрена ли обработка списком?
Например:loader = TextLoader(["../мастер_и_маргарита.txt", "../война_и_мир.txt"])
3. Вы упоминаете, что можно сделать ссылки на страницы (а в моем случае, на страницы и книгу из загруженного списка книг). Как это сделать в принципе, я понимаю, если бы сам делал базу эмбендингов. А как это сделать инструментарием SDK?
Заранее благодарен за ответы.
Добрый день!
1. Не, UI был сделан на SDK streamlit. Очень крутая штука для тех, кто не умеет делать UI :) Примерчек можно глянуть тут (задача решается другая, но суть та же самая) - https://github.com/ai-forever/gigachain/blob/master/libs/streamlit_agent/gigachat_streaming.py
2. Посмотрите на DirectoryLoader, как раз для вашего случая!
loader = DirectoryLoader('../', glob="**/*.txt", show_progress=True)
docs = loader.load()
3. В txt номеров страниц обычно уже нет, поэтому TextSplitter'ы не умеют добавлять метаданные. Из коробки это умеют делать только сплиттеры для *.md и html. Обратите внимание на MarkdownHeaderTextSplitter , он умеет добавлять в мету заголовки и подзаголовки. Если сконвертировать нужную книгу в этот формат, то должно быть хорошо. Но я не пробовал.
Константин, спасибо за подробный ответ. Да, streamlit представляем как работает. Интересно )) Исходя из ответов 2 и 3, похоже придется писать свой лоадер, который будет грузить несколько книг в pdf и проставлять в мета название книги и номер страницы при разбиении на документы. В целом понятно, бесплатного сыра нет ))
можно как-то обученную модель сохранить в файл и потом вызывать его для запросов?
Какой плащ был у Понтия Пилата? Отвечает GigaChat