Применение LLM: размышления о диалоге с агентом (с инструментальными вызовами)

Такие продукты Q&A, как ChatGPT и Kimi, используют диалоги агента (возможность вызывать различные инструменты для взаимодействия с пользователем), например, в Kimi есть инструменты для диалогов LLM, Link Dialogues, File Dialogues и Networking Dialogues. Например, ChatGPT, Wenxin Yiyin и Xunfei Starfire также были дополнены такими инструментами, как Wensheng Diagram, Code Writer и Maths Calculator.

 

LLM应用:Agent对话(附工具调用)的思考

 

LLM应用:Agent对话(附工具调用)的思考

Диалог агента для ChatGPT4

 

 

Доминирующим фреймворком для достижения диалоговых возможностей агентов в настоящее время является ReAct (предложенный Принстонским университетом и Google в 2022 году). ReAct [1] - это подход, основанный на использовании слов с подсказками, который объединяет мышление и действия. Его историческая эволюция показана ниже:

 

LLM应用:Agent对话(附工具调用)的思考

 

В таблице выше представлены 3 метода:

 

Только повод:Используйте цепочку размышлений для многоэтапного мышления, добавьте подсказку "Давайте думать шаг за шагом" перед вводом вопроса в Prompt, чтобы направить многоэтапное мышление, не давайте ответ напрямую, но недостаток очевиден: Причина Только закрытая дверь просто думать, чтобы не делать, не будет выходить, чтобы увидеть внешний мир, чтобы понять мир, прежде чем думать, поэтому он будет производить галлюцинации, смена династий не знаю;

 

Только для актеров:Получение наблюдения с помощью одношагового действияОбзор, Недостаток: если делать это сразу, не задумываясь, то ответ, который я получу в конце, может не совпадать с тем, что я хочу;

 

ReAct:Сочетание мышления и действия, то есть мышление перед действием, возвращение результатов действия, затем размышление о том, что делать дальше, затем действие, и повторение процесса снова и снова, зная, что окончательный ответ уже получен.

 

Продолжение: в 2023 году также выйдет самоанализ (Рефлексия) рамок, присоединился к отражению, как показано ниже, не в глубине здесь. Кроме того, заинтересованные друзья могут посмотреть на большой Taobao технологии общественности номер "Агент исследования - 19 типов агента сравнения рамки", эта часть для того, чтобы отправить бумагу действительно, чем больше вы играете, тем больше цветов.

 

LLM应用:Agent对话(附工具调用)的思考

 

Примеры, приведенные в документе ReAct, лучше иллюстрируют вышеупомянутую логику, преимущества и недостатки:

 

LLM应用:Agent对话(附工具调用)的思考

 

Промпт ReAct - это:

"""
Объяснение входных переменных для Agent Prompt:
- tools: Описание набора инструментов, в форме "{tool.name}: {tool.description}".
- toool_names: список названий инструментов
- история: история диалога между пользователем и агентом (обратите внимание, что многочисленные раунды ReAct в середине чата агента не учитываются в истории диалога)
- ввод: вопросы пользователя
- agent_scratchpad: промежуточные процессы действия и наблюдения.
будет выглядеть как "\nОбзор: {наблюдение}\nМысль: {действие}".
Затем передайте agent_scratchpad (запись мыслей агента).
"""
agent_prompt = """
Ответьте на следующие вопросы как можно лучше. Если все в порядке, вы можете использовать некоторые инструменты соответствующим образом. У вас есть доступ к следующим инструментам.

{инструменты}

Используйте следующий формат.
Вопрос: входной вопрос, на который вы должны ответить1
Мысль: всегда нужно думать о том, что делать и какие инструменты использовать.
Действие: действие, которое необходимо предпринять, должно быть одним из {toool_names}
Вход действия: вход действия
Наблюдение: результат действия
... (эта Мысль/Действие/Ввод/Наблюдение может повторяться ноль или более раз)
Теперь я знаю окончательный ответ.
Окончательный ответ: окончательный ответ на исходный входной вопрос
Начинайте!

история: {история}

Вопрос: {ввод}

Мысль: {agent_scratchpad}""""

 

Ниже показана блок-схема приложения ReAct:

LLM应用:Agent对话(附工具调用)的思考

 

 

В Интернете есть хороший пример, на который мы ссылаемся в качестве иллюстрации [2]:

 

Предположим, что у нас есть:

 

Вопросы пользователей: "Какова средняя цена роз на рынке сегодня? Какую цену я должен назначить, если буду продавать ее за 151 TP3T сверх того?"

 

Инструменты:: {'bing web search': инструмент для поиска в Интернете информации из открытых источников с помощью Bing Search; 'llm-math': инструмент для выполнения математических расчетов с использованием больших моделей и Python}

 

Тогда входные данные для первого раунда диалога таковы:

Ответьте на следующие вопросы как можно лучше. Если все в порядке, вы можете использовать некоторые инструменты соответствующим образом. У вас есть доступ к следующим инструментам.
bing-web-search: инструмент Bing Search для поиска в Интернете информации с открытым исходным кодом
llm-math: инструменты для выполнения математических расчетов с помощью больших моделей и Python
Используйте следующий формат.
Вопрос: входной вопрос, на который вы должны ответить1
Мысль: всегда нужно думать о том, что делать и какие инструменты использовать.
Действие: действие, которое нужно предпринять, должно быть одним из [bing-web-search, llm-math]Action Input: входные данные для действия
Наблюдение: результат действия
... (эта Мысль/Действие/Ввод/Наблюдение может повторяться ноль или более раз)
Теперь я знаю окончательный ответ.
Окончательный ответ: окончательный ответ на исходный входной вопрос
Начинайте!
история.
Вопрос: Какова средняя цена роз на текущем рынке? Какую цену я должен установить на розы, если я продаю их с наценкой 15%?
Мысль.

 

Получите выходной сигнал и разберите его, чтобы получить данные о мыслях, действиях и входных действиях:

Мысль: я должен использовать инструмент поиска ответов, чтобы быстро найти нужную информацию.
Действие: bing-web-search
Действие Исходные данные: средняя цена роз

 

Вызовите инструмент bing-web-поиска, введите "средняя цена роз" и получите в ответ контент Observation: "По данным сайта, каждый букет роз в США стоит 80,16 доллара". После этого поместите вышеуказанный контент, организуйте его и поместите на веб-сайт. После этого поместите вышеуказанный контент в шаблон слова подсказки ReAct и начните второй раунд ввода диалога:

Ответьте на следующие вопросы как можно лучше. Если все в порядке, вы можете использовать некоторые инструменты соответствующим образом. У вас есть доступ к следующим инструментам.
bing-web-search: инструмент Bing Search для поиска в Интернете информации с открытым исходным кодом
llm-math: инструменты для выполнения математических расчетов с помощью больших моделей и Python
Используйте следующий формат.
Вопрос: входной вопрос, на который вы должны ответить1
Мысль: всегда нужно думать о том, что делать и какие инструменты использовать.
Действие: действие, которое нужно предпринять, должно быть одним из [bing-web-search, llm-math]Action Input: входные данные для действия
Наблюдение: результат действия
... (эта Мысль/Действие/Ввод/Наблюдение может повторяться ноль или более раз)
Теперь я знаю окончательный ответ.
Окончательный ответ: окончательный ответ на исходный входной вопрос
Начинайте!
история.
Вопрос: Какова средняя цена роз на текущем рынке? Какую цену я должен установить на розы, если я продаю их с наценкой 15%?
Мысль: я должен использовать инструмент поиска ответов, чтобы быстро найти нужную информацию.
Действие: bing-web-search
Действие Исходные данные: средняя цена роз
Наблюдение: По данным онлайн-источников, каждый букет роз в США стоит $80,16.
Мысль.

 

Получите выходной сигнал и разберите его, чтобы получить данные о мыслях, действиях и входных действиях:

Подумал: мне нужны математические вычисления, чтобы понять, во что выльется наценка в 15%.
Действие: llm-math
Вход действия: 80.16*1.15

 

Вызовите инструмент llm-math, введите "80.16*1.15", получите в ответ содержимое Наблюдение: "92.184". После этого поместите вышеуказанное содержимое в шаблон ReAct prompt word и откройте третий раунд ввода диалога:

Ответьте на следующие вопросы как можно лучше. Если все в порядке, вы можете использовать некоторые инструменты соответствующим образом. У вас есть доступ к следующим инструментам.
bing-web-search: инструмент Bing Search для поиска в Интернете информации с открытым исходным кодом
llm-math: инструменты для выполнения математических расчетов с помощью больших моделей и Python
Используйте следующий формат.
Вопрос: входной вопрос, на который вы должны ответить1
Мысль: всегда нужно думать о том, что делать и какие инструменты использовать.
Действие: действие, которое нужно предпринять, должно быть одним из [bing-web-search, llm-math]Action Input: входные данные для действия
Наблюдение: результат действия
... (эта Мысль/Действие/Ввод/Наблюдение может повторяться ноль или более раз)
Теперь я знаю окончательный ответ.
Окончательный ответ: окончательный ответ на исходный входной вопрос
Начинайте!
история.
Вопрос: Какова средняя цена роз на текущем рынке? Какую цену я должен установить на розы, если я продаю их с наценкой 15%?
Мысль: я должен использовать инструмент поиска ответов, чтобы быстро найти нужную информацию.
Действие: bing-web-search
Действие Исходные данные: средняя цена роз
Наблюдение: По данным онлайн-источников, каждый букет роз в США стоит $80,16.
Мысль: мне нужны данные, чтобы рассчитать, какова будет цена с наценкой 15 сверху.
Действие: llm-math
Вход действия: 80.16*1.15
Наблюдение: 92.184
Мысль.

 

Получите выходной сигнал и разберите его, чтобы получить данные о мыслях, действиях и входных действиях:

Мысль: я знаю окончательный ответ.
Окончательный ответ: Если вы хотите добавить 15% в продажу, его цена должна составлять $92,184.

 

В Langchain реализован вызов ReAct [3], который требует создания ReAct Agent, AgentExecutor и инструментов. С помощью ReAct Agent мы можем реализовать то, о чем мы говорили ранее, подключаться к различным инструментам и вызывать различные инструменты в соответствии с потребностями пользователя и мыслями LLM, чтобы улучшить производительность Q&A. Если вы самостоятельно переписываете чат агента на основе ReAct, вам следует обратить особое внимание на некоторые граничные условия, такие как выбор несуществующего инструмента, невозможность вызова инструмента, зацикливание вызова инструмента и т. д., поскольку это в конечном итоге повлияет на эффективность взаимодействия. Лично у меня есть несколько открытий, когда я практикую эффект ReAct Agent Chat:

  • Выбирайте LLM, которые уже провели выравнивание способностей к диалогу с агентами, и желательно, чтобы ReAct Prompt можно было адаптировать для LLM;
  • Четкое описание хороших введений инструментов уменьшает неоднозначность описания инструментов и позволяет избежать использования неправильного инструмента;
  • Остерегайтесь многократных раундов "думать-действовать-наблюдать", которые приводят к слишком большому количеству входного контекста, и многие LLM становятся плохими в понимании длинных контекстных входных данных.
  • Если есть только один раунд мыслить-действовать-наблюдать, то набор процессов вниз, вам нужно пройти через 2 раза LLM и 1 раз вызов инструмента, это повлияет на время ответа, если вы хотите упростить процесс этого ReAct, вы можете напрямую использовать распознавание намерений + вызов инструмента, с помощью инструмента непосредственно вывести окончательный результат, не нужно возвращаться к LLM, чтобы сделать сводный ответ, недостаток в том, что это не так идеально.

 

LangChain предоставляет несколько стартовых наборов, которые можно найти в [4].

 

Через фронт, мы можем найти Action и Action Input являются имя инструмента и вход инструмента, если мы хотим иметь диалог с временным файлом загрузки, мы можем просто добавить инструменты напрямую? На самом деле, это не так уж и хорошо, потому что Action Input - это вход инструмента, основанный на разборе запроса LLM, в то время как функция "Диалог с временно загруженными файлами" нуждается в местоположении файла или его содержимом, по этой причине, на самом деле, вы можете следовать моему рисунку ниже, и поместить функцию "Диалог с временно загруженными файлами" в поле "Action Input" отдельно. По этой причине вы можете отделить функцию "Диалог с временно загруженными файлами" от функции "Диалог с временно загруженными файлами", как я нарисовал на рисунке ниже.

 

LLM应用:Agent对话(附工具调用)的思考

 

Конкретный процесс взаимодействия фронт-энда и бэк-энда выглядит следующим образом:

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

2, при каждом последующем раунде диалога, имя базы знаний передается в Agent Chat, в соответствии с вышеуказанным потоком go, после каждого раунда диалога, обновляются данные о количестве раундов диалога по документу;

3、Когда количество раундов диалога с документами превышает количество раундов хранения документов или пользователь вручную очищает контекст, фронт-энд удаляет временную базу знаний и очищает имя переменной временной базы знаний.

 

библиография

[1] ReAct: Synergising Reasoning and Acting in Language Models, официальная презентация: https://react-lm.github.io/.

[2] LangChain dry run (1): как именно AgentExecutor управляет моделями и инструментами для выполнения задач? - Статья Хуан Цзя - 知乎https://zhuanlan.zhihu.com/p/661244337

[3] ReAct, документация Langchain: https://python.langchain.com/docs/modules/agents/agent_types/react/

[4] Agent Toolkit, документация Langchain: https://python.langchain.com/docs/integrations/toolkits/

[5] "LLM+Search Rewrite" 10 Papers at Glance - Essays by Obsessed with Searching and Pushing - Knowledge: https://zhuanlan.zhihu.com/p/672357196

[6] MultiQueryRetriever, документация Langchain: https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever/

[7] HypotheticalDocumentEmbedder, документация Langchain: https://github.com/langchain-ai/langchain/blob/master/cookbook/hypothetical_document_ embeddings.ipynb

[8] Разработка приложений для больших моделей, Must-See RAG Advanced Tips - Статьи Rainfly - Knowledge: https://zhuanlan.zhihu.com/p/680232507

© заявление об авторских правах

Похожие статьи

Нет комментариев

Вы должны войти в систему, чтобы участвовать в комментариях!
Войти сейчас
нет
Нет комментариев...