Расшифровка подсказки Серия 12. LLM Парадигма тонкой настройки нулевого агента ReAct & Self Ask
Расшифровка подсказки Серия 12. LLM Парадигма тонкой настройки нулевого агента ReAct & Self Ask

В этой главе мы официально выходим на уровень приложения.,Давайте поговорим о том, как объединить цепочку мышления и использование инструментов для получения агентов искусственного интеллекта.

Чтобы ответить, зачем нам нужны агенты ИИ? Какие проблемы может решить агент? Есть две возможные точки зрения:

Во-первых, это наша модель расширения прав и возможностей.,Если мы скажемLLM — это мозг, а Агент обеспечивает руки, ноги и чувства.

  1. Чувства: собирайте информацию из реального мира, включая информацию в режиме реального времени, такую ​​​​как погодные условия, финансовые рынки, условия дорожного движения, включая личную информацию, такую ​​​​как персональные данные пользователя, включая мультимодальную информацию, такую ​​​​как звуки и изображения;
  2. Руки и ноги: получите возможность взаимодействовать с реальным миром, например запускать скрипты Python, вызывать поисковые системы и бронировать авиабилеты и отели.

Во-вторых, модель дает нам возможность,Большая модель, поддерживаемая агентом как лучшим посредником/агентом данных и задач, дает нам возможность взаимодействовать с любым типом данных.,Большие модели меняют способы обработки данных и информации. Переход от структурированных данных к более неструктурированным данным.

OpenAIприложение Директор по исследованиямLilianWengнаписаноLLM Powered Autonomous Agentsагент искусственного интеллекта(AI Агент) разделен на следующие три части: модуль планирования, модуль вызова инструмента и модуль памяти.

В следующих нескольких главах мы поговорим об основных различиях агентских решений ИИ в этих трех направлениях.

  1. Планирование: как разобрать проблему, чтобы найти путь решения, что является шагом рассуждения модели.
  2. Инструменты: какие инструменты поддерживаются, как выбирать инструменты и генерировать запросы на вызов инструментов.
  3. Память: кратковременная память включает возвращаемые значения инструмента, завершенные пути рассуждения, долговременная память включает доступное внешнее долговременное хранилище, такое как базы знаний.

В первой статье мы объединяем langchain, чтобы представить необходимость тонких настроек, Предложить сгенерировать шаблоны рассуждений и вызовов инструментов для двух решений ReAct и SelfASk. Лично у меня отношения любви и ненависти к langchain.,Что мне нравится, так это то, что он объединяет множество передовых приложений для больших моделей.,Ненавижу, что это кажется слишком инкапсулированным,Это похоже на сложный дизайн для простой проблемы. Поэтому рекомендуется использовать langchain, чтобы понять реализацию каждого принципа решения.,Тогда оторвитесь от langchain и напишите это сами,Или просто используйте базовые компоненты langchain для достижения,Не используйте его API высокого уровня.

Self Ask

Self-ask: MEASURING AND NARROWING THE COMPOSITIONALITY GAP IN LANGUAGE MODELS https://ofir.io/Self-ask-prompting/

принцип

Self Ask предлагает оперативную парадигму, которая разлагает проблему на подзадачи.,На каждом этапе модель будетСпросите себяМожно ли перефразировать вопрос?/Разбейте задачу на простую подзадачу,и ответь,При ответе вы можете использовать инструмент поиска, чтобы получить ответ,Затем верните результаты в соответствии с инструментом,Продолжить Спросите себя, пока не получишь окончательный ответ. На самом деле Спросите Инференциальная форма себя не является центральной,Суть заключается в том, чтобы направить модель на разборку проблемы.,Это способность планирования, упомянутая в начале.

В статье предлагается причина, по которой необходимо преобразовать исходную цепочку размышлений в пошаговую Спросите. себяформа,Это потому, что модель оказалась более эффективной при ответе на сложные вопросы.,Хотя модель может правильно ответить на подвопросы,Но он не может ответить на сложные вопросы, состоящие из подвопросов.,Автор называет этоCompositionality Gap。Дайте каштан:Модель может правильно ответить, в каком году родился Джастин Бибер? А кто был чемпионом Мастерса 1994 года? Но модель не смогла ответить, кто стал победителем «Мастерса» в год рождения Джастина Бибера? Эту проблему можно очень хорошо решить, внедрив метод рассуждения при разборе проблемы.

приложение

Давайте посмотрим на Self langchain Askвыполнить,Официальный сайт ДемоОн используется непосредственноinitialize_agentинициализировать прокси,Здесь мы разберем промежуточные этапы。Используется следующееSerpAPIизgoogleинструменты поиска иGPT3.5,Сначала вам необходимо зайти на официальный сайт, чтобы подать заявку на получение ключа.

Язык кода:python
кодКоличество запусков:0
копировать
import os
from langchain.agents.loading import AGENT_TO_CLASS
from langchain.agents.agent import AgentExecutor
from langchain.agents import AgentType, Tool
from langchain import OpenAI, SerpAPIWrapper
## Нужно выйти в интернет с научной точки зрения
os.environ["http_proxy"] = "http://127.0.0.1:7890"
os.environ["https_proxy"] = "http://127.0.0.1:7890"
## Определить большие модели и инструменты поиска
llm = OpenAI(temperature=0, openai_api_key=$yourKey)
search = SerpAPIWrapper(params={
    "engine": "google",
    "gl": "us",
    "hl": "zh-cn",
}, serpapi_api_key=$yourKey)

“”“
Следующий метод инициализации инструмента выравнивает Self Ask Шаблон запроса
”“”

tools = [
    Tool(
        name="Intermediate Answer",
        func=search.run,
        description="useful for when you need to ask with search"
    )
]
## Сборка: инициализация агента и цепочки
agent_cls = AGENT_TO_CLASS[AgentType.SELF_ASK_WITH_SEARCH]
agent = agent_cls.from_llm_and_tools(llm, tools)
chain = AgentExecutor.from_agent_and_tools(agent, tools, return_intermediate_steps=True)

AGENT_TO_CLASS определяет все типы агентов, среди которых SelfAskWithSearchAgent является реализацией Self Ask. Однако на самом деле разница между разными агентами заключается в основном в следующем кратком приглашении и соответствующем анализаторе.

Язык кода:python
кодКоличество запусков:0
копировать
from langchain.agents.self_ask_with_search.output_parser import SelfAskOutputParser
from langchain.agents.self_ask_with_search.prompt import PROMPT

Подсказка Self Ask в нескольких кадрах выглядит следующим образом. Помимо предоставления формата декодирования, несколько кадров также предлагают модели разобрать проблему.

Язык кода:txt
копировать
_DEFAULT_TEMPLATE = """Question: Who lived longer, Muhammad Ali or Alan Turing?
Are follow up questions needed here: Yes.
Follow up: How old was Muhammad Ali when he died?
Intermediate answer: Muhammad Ali was 74 years old when he died.
Follow up: How old was Alan Turing when he died?
Intermediate answer: Alan Turing was 41 years old when he died.
So the final answer is: Muhammad Ali

Question: When was the founder of craigslist born?
Are follow up questions needed here: Yes.
Follow up: Who was the founder of craigslist?
Intermediate answer: Craigslist was founded by Craig Newmark.
Follow up: When was Craig Newmark born?
Intermediate answer: Craig Newmark was born on December 6, 1952.
So the final answer is: December 6, 1952

Пропустить 2 кадра

Question: {input}
Are followup questions needed here:{agent_scratchpad}"""

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

Язык кода:python
кодКоличество запусков:0
копировать
# Chain.run используется для прямого возврата конечного результата. Непосредственный вызов callable может вернуть промежуточный процесс.
output =  Chain("Какой вчера был объем торгов в секторе с наибольшим ростом на рынке акций А?")

Ниже приводится возвращаемое значение с промежуточными результатами. Можно обнаружить, что модель подсказки с несколькими выстрелами разделяет вопрос «Каков объем торгов в секторе с самым высоким вчерашним ростом на рынке акций А» на «. В каком секторе вчера наблюдался самый высокий рост на рынке акций А?» После поиска в Google, чтобы найти брокерский сектор, продолжайте спрашивать «вчерашний объем торгов брокерского сектора», чтобы получить окончательный результат.

Здесь показан только один хороший случай, потому что плохих слишком много, ха-ха~ Две основные причины плохих результатов SelfAsk:

  • Поиск не возвращает действительные результаты: текущие результаты поиска не предназначены для ответов на большие модели, а предназначены для традиционных поисковых систем. Возвращенные результаты недоступны, поскольку извлеченное резюме статьи (фрагмент) является необоснованным или находится в топ-1. ответ, возвращаемый логикой сортировки, неверен, или неправильная своевременность ответа и т. д. Здесь есть много возможностей для оптимизации.
  • Проблема с разборкой модели неверна: в настоящее время Self Ask в основном нацелен на проблемы с комбинацией. Если у вас другой метод разборки проблемы, вам необходимо настроить приведенную выше подсказку с несколькими выстрелами или дополнительно внедрить метод разборки проблемы через тонкую настройку COT.

Self Ask — это самый простой тип шаблона вызова инструментов, который поддерживает использование только одного инструмента поиска и не поддерживает выбор инструмента. Давайте посмотрим на парадигму ReAct, которая поддерживает вызовы нескольких инструментов~

ReAct

ReAct: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS https://tsmatz.wordpress.com/2023/03/07/react-with-openai-gpt-and-langchain/

принцип

Как следует из названия, рассуждения модели ReAct разделены на две части: Причина и Действие. Reason генерирует шаги анализа, а Action генерирует запросы на вызов инструментов. Эти два действия выполняются поочередно до получения окончательного результата. По сравнению с Self Ask, ReAct еще больше отделяет рассуждения и вызов инструмента. В Self Ask самоанализ является одновременно шагом вывода и запросом для инструмента поиска. В ReAct запрос на вызов инструмента приходит после шага вывода, который может быть. более точный. Хорошая поддержка других инструментов, кроме поиска.

Шаблон рассуждения с несколькими выстрелами, предоставленный ReAct в документе «Вопросы и ответы», выглядит следующим образом.

приложение

То же самое и AGENT_TO_CLASS,ReActDocstoreAgent и ZeroShotAgent разработаны на основе ReAct. Для последовательности,Мы инициализируем следующих двух агентов так же, как и SelfAsk выше.,Более краткийизинициализациякод Подробности смотрите на официальном сайтеReAct, ReAct Document Store

  • ZeroShotAgent

Список инструментов, которые можно использовать, и описание каждого инструмента должны быть предоставлены. LLM полностью основан на контексте и выбирает инструменты на основе описания инструмента. Он подходит для сценариев, в которых нет фиксированной процедуры рассуждения. Чтобы сравнить с SelfAsk, здесь мы по-прежнему используем поиск Google и добавляем инструмент Wolfram Alpha. В части кода мы заменяем только часть, определенную инструментом и классом агента, а все остальное точно такое же.

Язык кода:python
кодКоличество запусков:0
копировать
"""
Необходимо предоставить описание инструмента: используется для выбора инструмента и формирования запроса на инструмент.
В то же время имя инструмента унифицировано с selfAsk на Intermediate. Ответьте, подкорректируйте имя самого инструмента, чтобы сгенерировать префикс для вызовов инструмента.
"""
import os
from langchain.agents.loading import AGENT_TO_CLASS
from langchain.agents.agent import AgentExecutor
from langchain.agents import AgentType, Tool
from langchain import OpenAI, SerpAPIWrapper
from langchain.utilities.wolfram_alpha import WolframAlphaAPIWrapper
## Нужно выйти в интернет с научной точки зрения
os.environ["http_proxy"] = "http://127.0.0.1:7890"
os.environ["https_proxy"] = "http://127.0.0.1:7890"
os.environ["WOLFRAM_ALPHA_APPID"] = «твой ключ»
## Определить большие модели и инструменты поиска
llm = OpenAI(temperature=0, openai_api_key=$ваш ключ)
search = SerpAPIWrapper(params={
    "engine": "google",
    "gl": "us",
    "hl": "zh-cn",
}, serpapi_api_key=$вашключ)
wolfram = WolframAlphaAPIWrapper()
tools = [
    Tool(
        имя="Поиск",
        описание="Поисковая система, вызывается, когда нужно ответить на текущий вопрос, входными данными является поисковый запрос",
        func=search.run
    ),
    Tool(
        name="Wolfram",
        description="Wolfram «Альфа», вызываемая, когда вам нужно ответить на вопросы, связанные с математикой, наукой, технологиями, культурой, обществом и повседневной жизнью, входными данными является поисковый запрос»,
        func=wolfram.run
    ),
]
agent_cls = AGENT_TO_CLASS[AgentType.ZERO_SHOT_REACT_DESCRIPTION ]
agent = agent_cls.from_llm_and_tools(llm, tools)
chain = AgentExecutor.from_agent_and_tools(agent, tools, return_intermediate_steps=True)
output = Chain("Сколько вчера был объем торгов сектора с наибольшим ростом на рынке акций А") #chain.run не может возвращать промежуточные результаты. Прямые вызовы могут возвращать промежуточные процессы.

После добавления инструментов поиска Google и Wolfram нулевой запрос выглядит следующим образом, включая описание инструмента и список инструментов, которые можно вызвать в части «Действие».

Продолжайте спрашивать: каков был вчера объем торгов в секторе с самым высоким ростом на рынке акций А? Поскольку не существует рекомендаций по разборке проблемы с помощью нескольких кадров, только приведенный выше нулевой снимок описывает выбор инструмента, поэтому модель не разбирает проблему правильно, но инструмент поиска выбран правильно.

Когда мы спрашиваем о проблемных областях, которые может решить Wolfram, например, о решении геометрических областей, большие модели предпочитают вызывать Wolfram для решения математических задач.

  • ReActDocstoreAgent

Фиксированный шаблон рассуждения + использование фиксированного инструмента, подходящего для вопросов и ответов по документу. В документе определены два инструмента: поиск и поиск для поиска предложений, содержащих ключевые слова в документах. Поскольку шаблон вывода DocStore фиксирован, а доступные сценарии относительно ограничены, мы не будем его тестировать. Вы можете перейти непосредственно к демо-версии, представленной на официальном сайте.

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

Подвести итог

Прочитав реализацию SelfAsk и React, нетрудно обнаружить, что в обоих есть некоторые ограничения.

  • Больше подходит для простых вызовов инструментов: здесь «Простой» означает, что ввод инструмента более соответствует текстовой семантике, указанной выше. Ввод инструмента осуществляется в стиле «естественного языка», например, при поиске. Высокоструктурированный и символический ввод инструментов осуществляется с помощью Prompt, а точность относительно ограничена.
  • Больше подходит для небольшого количества комбинаций инструментов: из-за длины приведенной выше подсказки в нее невозможно втиснуть десятки подсказок инструментов, поэтому она больше подходит для небольшого количества комбинаций инструментов, обычно от 3 до 5.
  • Способность к планированию: при решении проблем метод «несколько шагов» будет лучше, чем «нулевой», но для поддержки конкретной логики решения проблем требуется индивидуализированная область «несколько шагов». Если логика слишком сложна или имеет большое разнообразие, эффект от использования только фиксированных подсказок будет посредственным.
  • Высокая задержка последовательных вычислений: и SelfAsk, и React представляют собой последовательную логику рассуждений. Каждый шаг рассуждения и вызов инструмента зависит от результата рассуждения предыдущего шага, что приводит к тому, что общий расчет занимает слишком много времени. Чтобы решить эту проблему, вы можете взглянуть на решение «параллельное рассуждение + заполнение слотов», предложенное ReWOO~.

Для более сложных и разнообразных вызовов комбинаций инструментов и более целенаправленных/сложных возможностей планирования модели в нашей следующей главе представлено решение для вызова инструментов, основанное на точной настройке инструкций.

Если вы хотите увидеть более полный обзор статей, связанных с большими моделями · Точная настройка и предварительное обучение данных и фреймворков · Приложение AIGC, перейдите на Github. >> DecryPrompt


Reference

  1. https://towardsdatascience.com/all-you-need-to-know-to-build-your-first-llm-app-eb982c78ffac#d5e4
  2. https://lilianweng.github.io/posts/2023-06-23-agent/
  3. MRKL Systems. A modular, neuro-symbolic architecture that combines large language, models, external knowledge sources and discrete reasoning
  4. ReWOO: Decoupling Reasoning from Observations for Efficient Augmented Language Models
  5. Отчет об исследовании LLM Шисянского инвестиционно-исследовательского института (в статье есть две ссылки на приложения PPT)
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose