Как создавать чат-ботов с искусственным интеллектом без маркировки намерений и создания бесконечных потоков чата.

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

Когда вы думаете о том, как это работает с человеческими агентами, это имеет смысл. Когда агенты поддержки присоединяются к новой группе обслуживания клиентов, им предоставляется набор инструментов (таких как база знаний, CRM, каналы связи и т. д.) и определенная политика (как работать с различными вариантами использования взаимодействия). Как только все это изучено, агент теперь готов начать взаимодействие с пользователями. Теоретически, почему это должно быть иначе для чат-ботов?

Как сегодня устроено большинство чат-ботов с искусственным интеллектом

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

  1. Определите список намерений, которые, скорее всего, будут вызваны пользователем при любом взаимодействии. Например, в путешествиях у вас могут быть такие намерения, как поиск рейсов или изменение существующих бронирований.
  2. Соберите различные высказывания, которые относятся к этим намерениям.
  3. Обучите модель NLU, чтобы лучше всего предсказывать намерения на основе высказываний пользователя.
  4. Повторить.

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

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

LLM спешат на помощь

С последним появлением LLM (больших языковых моделей) стало возможным создавать интеллектуальных, динамичных и способных контекстно-зависимых чат-ботов без необходимости в большинстве процессов, определенных выше. В то время как LLM продемонстрировали впечатляющую производительность при выполнении задач на понимание языка и интерактивное принятие решений, их способности к рассуждениям (например, подсказки по цепочке мыслей) и действиям (например, создание плана действий) в основном изучались как отдельные темы.

Недавняя статья под названием ReAct (Рассуждение и действие) направлена ​​именно на это. В документе исследуется использование LLM для генерации как следов рассуждений, так и действий, специфичных для задачи, чередующимся образом, что позволяет повысить производительность, интерпретируемость человеком и надежность в разнообразном наборе языков и задач принятия решений. ReAct, представленный подход, достигает впечатляющих результатов в ответах на вопросы, проверке фактов и интерактивном принятии решений, превосходя самые современные базовые стандарты с улучшенной интерпретируемостью и надежностью.

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

Будущее развития чат-ботов

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

  1. Определите набор инструментов, необходимых для выполнения задачи чат-бота (например, получение прогноза погоды на основе местоположения). Также опишите, как и когда следует использовать каждый инструмент.
  2. Определите политику поведения чат-бота. Например, чтобы быть вежливым, всегда отвечайте дополнительным вопросом и т. д.
  3. Отправьте его LLM в качестве подсказки для каждого пользовательского ввода.

Вот и все. Давайте посмотрим на это в действии, используя библиотеку Python под названием Langchain. Вы можете найти полную суть здесь. Обратите внимание, что для запуска вам понадобится действующий ключ OpenAI и SerpApi.

Сначала нам нужно определить наши инструменты. Для простоты мы будем использовать SerpApi (поиск Google) для получения информации о погоде, но предположим, что вместо этого можно использовать любой другой более конкретный API погоды.

search = SerpAPIWrapper()
tools = [
    Tool(
        name = "Weather Forecast Tool",
        func=search.run,
        description="useful for when you need to answer questions about current and future weather forecast"
    ),
]

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

Теперь мы можем определить политику взаимодействия, чтобы агент знал, как реагировать на различные сценарии. При использовании Langchain в настоящее время требуется передать файл JSON, содержащий метаданные агента, такие как политика. Элементы политики определяются в ключе «суффикс», как показано ниже.

{
  "load_from_llm_and_tools": true,
  "_type": "conversational-react-description",
  "prefix": "Assistant is a large language model trained for forecasting weather.\n\nAssistant is designed to be able to assist with a wide range of tasks, from answering simple questions to providing in-depth explanations and discussions on a wide range of topics. As a language model, Assistant is able to generate human-like text based on the input it receives.\nAssistant should only obtain knowledge and take actions from using tools and never on your own.\nTOOLS:\n------\n\nAssistant has access to the following tools: ",
  "suffix": "Please make decisions based on the following policy: \n- If the user is asking for a weather forecast use the Weather Forecast tool\n- If the user does not provide a location, ask before checking for weather\n- Apologize if the user is angry or showing frustration\n- Answer with a friendly and professional tone.\n- Always end a response with a follow up question like 'what else can i help you with?', unless the user shows gratitude.\nBegin!\n\nPrevious conversation history:\n{chat_history}\n\nNew input: {input}\n{agent_scratchpad}",
  "ai_prefix": "AI Agent",
  "human_prefix": "Human"
}

Давайте посмотрим на некоторые из интересных определенных элементов политики:

  • Если пользователь не указывает местоположение, спросите перед проверкой погоды.
  • Извинитесь, если пользователь зол или показывает разочарование
  • Всегда заканчивайте ответ дополнительным вопросом

Невероятно новаторским является то, что определить настроение и действовать в соответствии с ним так же просто, как написать его. Выявление тональности — довольно сложная задача, которая сегодня требует использования внешних инструментов и ресурсов. То же самое для отсутствующих объектов, таких как местоположение. Давайте двигаться дальше.

memory = ConversationBufferMemory(memory_key="chat_history")

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

llm=OpenAI(temperature=0)
agent_chain = initialize_agent(tools, llm, agent="conversational-react-description", verbose=True, memory=memory)

Наконец, мы инициализируем агент с помощью LLM (здесь мы используем OpenAI GPT3). Вот и все! Теперь мы можем запустить нашего агента. Давайте возьмем это за спину.

>> Hey, I am Assaf

Thought: Do I need to use a tool? No
AI Agent: Hi Assaf, how can I help you today?

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

>> What is my name?

Thought: Do I need to use a tool? No
AI Agent: That is a great question! Your name is Assaf, is there anything else I can help you with?

Хороший! Оно помнит мое имя. Давайте попробуем запросить погоду, не указывая местоположение.

>> What is the weather?

Thought: Do I need to use a tool? No
Observation: I need to ask for a location
AI Agent: It looks like you're asking about the weather. Can you provide me with a location so I can give you a more accurate forecast?

Невероятный! LLM принял правильное решение и попросил меня предоставить место. Посмотрим, контекст останется, если я просто отвечу «нью-йорк».

>> new york

Thought: Do I need to use a tool? Yes
Action: Weather Forecast Tool
Action Input: new york
Observation: New York City comprises 5 boroughs sitting where the Hudson River meets the Atlantic Ocean. At its core is Manhattan, a densely populated borough that’s among the world’s major commercial, financial and cultural centers. Its iconic sites include skyscrapers such as the Empire State Building and sprawling Central Park. Broadway theater is staged in neon-lit Times Square. ― Google
Thought: Do I need to use a tool? No
AI Agent: The current weather in New York is mostly cloudy with a high of 68°F and a low of 54°F. Is there anything else I can help you with?

И вот оно. LLM учитывал контекст и правильно собирал правильную информацию, запускал инструмент прогноза погоды и, наконец, возвращал правильный прогноз, за ​​которым следовал дополнительный вопрос, как определено в политике.

Полная суть доступна здесь.

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

Но не обманывайтесь, предстоит долгий путь, прежде чем этот подход станет достаточно детерминированным, чтобы автоматически работать в больших масштабах. С текущими ограничениями LLM может быть слишком сложно иметь дело с такими пограничными случаями, как быстрое введение, «галлюцинации» и ограничения памяти. Кроме того, в настоящее время очень сложно отслеживать качество ответов, не просматривая каждый из них вручную.

Учитывая простоту и характер этого подхода, легко поверить, что именно за ним, скорее всего, будущее разработки чат-ботов. О, подождите, это уже здесь.