ym88659208ym87991671
Техники использования больших языковых моделей | Документация для разработчиков

Техники использования больших языковых моделей

Обновлено 6 августа 2024

Вызов функций/инструментов

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

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

Вызов инструмента включает название, словарь аргументов и необязательный идентификатор. Словарь аргументов имеет структуру {argument_name: argument_value}.

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

GigaChain предоставляет стандартизированный интерфейс для вызова инструментов, который не зависит от используемой модели.

Стандартный интерфейс включает:

  • ChatModel.bind_tools() — метод, который указывает, какие инструменты доступны модели для вызова.
  • AIMessage.tool_calls — атрибут в сообщении AIMessage, которое возвращает модель. Атрибут используется для доступа к вызовам инструментов, которые запрашивает модель.

Извлечение данных

В таблице представлены способы извлечения данных, которые поддерживает GigaChain. Таблица содержит столбцы:

  • Название — название алгоритма извлечения.
  • Тип индекса — тип индекса (если есть), на котором он основан.
  • Использует LLM — использует ли этот метод извлечения LLM.
  • Когда использовать — комментарии о том, когда можно использовать этот метода извлечения.
  • Описание — описание того, что делает этот алгоритм извлечения.
НазваниеТип индексаИспользует LLMКогда использоватьОписание
VectorstoreВекторное хранилищеНетЕсли вы только начинаете и ищете что-то быстрое и простое.Самый простой метод и наиболее подходящий для начала работы. Он включает создание эмбеддингов для каждого фрагмента текста
ParentDocumentВекторное хранилище + Хранилище документовНетЕсли ваши страницы содержат много мелких фрагментов разной информации, которые лучше индексируются по отдельности, но лучше извлекаются вместе.Метод включает индексирование нескольких фрагментов для каждого документа. После чего вы ищете фрагменты, которые наиболее похожи в пространстве эмбеддинга, но извлекаете и возвращаете весь родительский документ вместо отдельных фрагментов
Multi VectorВекторное хранилище + Хранилище документовИногда во время индексированияЕсли вы можете извлечь из документов информацию, которую считаете более релевантной для индексирования, чем сам текст.Метод включает создание нескольких векторов для каждого документа. Каждый вектор может быть создан множеством способов — примеры включают суммаризацию текста и гипотетические вопросы
Self QueryВекторное хранилищеДаЕсли пользователи задают вопросы, на которые лучше отвечать, извлекая документы на основе метаданных, а не на основе схожести с текстом.Метод использует LLM для преобразования ввода пользователя в: (1) строку для семантического поиска, (2) фильтр по метаданным. Это полезно, так как часто вопросы касаются именно метаданных документов, а не самого их содержания
Contextual CompressionЛюбойИногдаЕсли вы обнаруживаете, что извлеченные документы содержат слишком много нерелевантной информации и отвлекают LLM.Метод добавляет этап постобработки поверх другого ретривера и извлекает только наиболее релевантную информацию из документов, которые вернул ретривер. Это можно сделать с помощью эмбеддингов или LLM
Time-Weighted VectorstoreВекторное хранилищеНетЕсли у вас есть временные метки, связанные с вашими документами, и вы хотите извлекать самые последние из них.Метод извлекает документы на основе комбинации семантической схожести (как в обычном векторном извлечении) и актуальности (учитывая временные метки индексированных документов)
Multi-Query RetrieverЛюбойДаЕсли пользователи задают сложные вопросы, требующие нескольких отдельных фрагментов информации для ответа.Метод использует LLM для генерации нескольких запросов из исходного. Это полезно, когда исходный запрос требует фрагментов информации по нескольким темам для правильного ответа. Генерируя несколько запросов, можно затем извлечь документы для каждой из тем
EnsembleЛюбойНетЕсли у вас есть несколько методов извлечения и вы хотите попробовать их комбинацию.Метод извлекает документы из нескольких ретриверов и затем комбинирует их

Разделение текста

GigaChain предлагает множество различных типов разделителей текста. Все они содержатся в пакете gigachain-text-splitters.

Колонки таблицы:

  • Название — название разделителя текста.
  • Классы — классы, которые реализуют разделитель.
  • Разделяет по — как разделитель делит текст.
  • Добавляет метаданные — добавляет ли этот разделитель метаданные о том, откуда взят каждый фрагмент.
  • Описание — описание разделителя, включая рекомендации по его использованию.
НазваниеКлассыРазделяет поДобавляет метаданныеОписание
РекурсивныйRecursiveCharacterTextSplitter, RecursiveJsonSplitterСписок символов, заданных пользователемРекурсивно разделяет текст, стараясь сохранить связанные части текста рядом друг с другом. Рекомендуется начинать разделение текста с этого способа
HTMLHTMLHeaderTextSplitter, HTMLSectionSplitterHTML-специфические символыРазделяет текст на основе специфических для HTML символов. В частности, на основе HTML добавляет данные о том, откуда взят каждый фрагмент
MarkdownMarkdownHeaderTextSplitterСимволы, специфические для MarkdownРазделяет текст на основе символов, специфических для Markdown. В частности, на основе Markdown добавляет данные о том, откуда взят каждый фрагмент
Кодмножество языковСимволы, специфические для языков программирования (Python, JS)Разделяет текст на основе символов, специфичных для языков программирования. Доступно 15 языков
Токенымножество классовТокеныРазделяет текст на основе токенов. Существует несколько различных способов измерения количества токенов
СимволыCharacterTextSplitterСимвол, заданный пользователемРазделяет текст на основе символа, заданного пользователем. Один из простейших методов
Семантический Chunker (экспериментальный)SemanticChunkerПредложенияСначала разделяет по предложениям. Затем объединяет соседние предложения, если они достаточно семантически похожи. Взято из Greg Kamradt
Интеграция: AI21 SemanticAI21SemanticTextSplitterОпределяет различные темы, формирующие цельные фрагменты текста, и разделяет по ним
ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей.
Вы можете запретить сохранение cookie в настройках своего браузера.