Использование устаревшего инструмента
Этот формат использования инструмента устарел
Мы настоятельно рекомендуем вам как можно скорее перейти на наш улучшенный формат использования инструментов, который является более надежным и обеспечивает более высокое качество работы, особенно для более сложных задач с использованием инструментов.
Этот формат использования инструмента не оптимизирован для Claude 3 и может привести к более низкой производительности, чем наш обновленный формат использования инструмента.
Как работает устаревшее использование инструментов
При устаревшем использовании инструментов функции определяются непосредственно в самом промпте. Когда вы предоставляете Claude описания инструментов и функций, которые он может использовать, Claude может интеллектуально решать, когда и как использовать эти инструменты, чтобы помочь ответить на вопросы и выполнить задачи.
Например, предположим, вы предоставляете Claude (в промпте) функцию с названием get_weather(location)
, которая получает текущую погоду для заданного местоположения. Если пользователь затем спросит: “Какая сейчас погода в Лондоне?”, Claude поймет, что он может использовать функцию get_weather
, которую вы предоставили, чтобы найти ответ.
За кулисами это многоэтапный процесс:
- Определения функций и вопрос пользователя передаются Claude в одном промпте
- Claude не только нужны инструменты и их описания, чтобы успешно решить, следует ли использовать инструменты, но, вероятно, также сопутствующие примеры ситуаций, в которых такие инструменты должны использоваться, в зависимости от сложности варианта использования и инструментов.
- Claude оценивает вопрос пользователя и решает, какие функции вызвать и с какими аргументами
- Claude конструирует правильно отформатированный вызов функции
- Вызов функции перехватывается клиентским кодом с четкой
stop_sequence
, и фактическая функция выполняется на стороне клиента - Результат функции передается обратно в Claude
- Claude использует результат функции для формулирования своего окончательного ответа пользователю
Этот метод позволяет Claude использовать внешние знания и возможности, сохраняя при этом интерфейс диалога.
Определение функций
Функции определяются путем предоставления Claude описания функции, заключенного в XML-теги. Описание должно включать:
- Имя функции
- Текстовое объяснение того, что делает функция
- Ожидаемые параметры, их типы и описания
- Возвращаемые значения и типы
- Любые исключения, которые могут быть вызваны
Вот пример определения функции:
<tool_description>
<tool_name>get_weather</tool_name>
<description>
Получает текущую погоду для указанного местоположения.
Возвращает словарь с двумя полями:
- temperature: float, текущая температура в градусах Фаренгейта
- conditions: string, краткое описание текущих погодных условий
Вызывает ValueError, если указанное местоположение не может быть найдено.
</description>
<parameters>
<parameter>
<name>location</name>
<type>string</type>
<description>Город и штат, например, Сан-Франциско, Калифорния</description>
</parameter>
</parameters>
</tool_description>
Несколько советов по написанию хороших описаний функций:
- Будьте ясными и лаконичными, но предоставляйте достаточно деталей, чтобы Claude понимал, когда следует использовать функцию
- Укажите типы параметров и возвращаемых значений
- Упомяните любые соответствующие исключения, которые могут быть вызваны
- Используйте текстовые описания, а не синтаксис кода
Формат устаревшего использования инструмента
Для того чтобы Claude вызвал функцию, он должен вывести очень специфически отформатированный XML-блок. Формат выглядит следующим образом:
<function_calls>
<invoke>
<tool_name>function_name</tool_name>
<parameters>
<param1>value1</param1>
<param2>value2</param2>
</parameters>
</invoke>
</function_calls>
Блок <function_calls>
может содержать несколько блоков <invoke>
, если Claude вызывает более одной функции одновременно. Каждый <invoke>
содержит имя вызываемой функции и передаваемые параметры.
Вы должны передать
</function_calls>
в свой вызов API в качествеstop_sequence
, чтобы гарантировать, что Claude прекратит генерировать текст после вызова функции.
После блока <function_calls>
и при наличии правильной последовательности остановки Claude прекратит генерацию и будет ждать, пока результат функции не будет передан обратно в блоке <function_results>
, который выглядит следующим образом:
<function_results>
<result>
<tool_name>function_name</tool_name>
<stdout>
function result goes here
</stdout>
</result>
</function_results>
Результат функции должен быть помещен внутри тегов <stdout>
. Если функция вызвала исключение, оно должно быть возвращено следующим образом:
<function_results>
<error>
error message goes here
</error>
</function_results>
Полный результат функции должен быть передан обратно в Claude в виде сообщения, продолжающего разговор с предыдущего момента. После получения результатов функции Claude продолжит генерацию, чтобы включить результаты в свой ответ.
Пример промпта с устаревшим использованием инструмента
Вот полный пример промпта, который предоставляет Claude две функции и вопрос, требующий их использования:
Content | |
---|---|
System | В этой среде у вас есть доступ к набору инструментов, которые вы можете использовать для ответа на вопрос пользователя. Вы можете вызывать их следующим образом: <function_calls> <invoke> <tool_name>$TOOL_NAME</tool_name> <parameters> <$PARAMETER_NAME>$PARAMETER_VALUE</$PARAMETER_NAME> … </parameters> </invoke> </function_calls> Вот доступные инструменты: <tools> <tool_description> <tool_name>get_current_stock_price </tool_name><description>Получает текущую цену акций компании. Возвращает float: Текущая цена акции. Вызывает ValueError: если входной символ недействителен/неизвестен.</description> <parameters> <parameter> <name>symbol</name> <type>string</type> <description>Символ акции компании, для которой нужно получить цену.</description> </parameter> </parameters> </tool_description> <tool_description> <tool_name>get_ticker_symbol</tool_name> <description>Получает символ тикера акций для компании, найденной по названию. Возвращает str: Символ тикера для акции компании. Вызывает TickerNotFound: если соответствующий символ тикера не найден. </description> <parameters> <parameter> <name>company_name</name> <type>string</type> <description>Название компании.</description> </parameter> </parameters> </tool_description></tools> |
User | Какова текущая цена акций General Motors? |
Вот как Claude ответит:
Content | |
---|---|
Assistant | <scratchpad> Чтобы ответить на этот вопрос, мне нужно будет: 1. Получить символ тикера для General Motors с помощью функции get_ticker_symbol(). 2. Использовать возвращенный символ тикера, чтобы получить текущую цену акций с помощью функции get_current_stock_price().</scratchpad> <function_calls> <invoke> <tool_name>get_ticker_symbol</tool_name> <parameters> <company_name>General Motors</company_name> </parameters> </invoke> </function_calls> |
Сначала Claude вызывает get_ticker_symbol
, чтобы получить символ тикера для General Motors. Мы можем распознать, что Claude хочет вызвать функцию через последовательность остановки </function calls>
. Мы извлекаем соответствующие данные между соответствующими XML-тегами и запускаем функцию от имени Claude. Затем мы передаем результаты обратно в Claude в тегах <function_results>
.
Content | |
---|---|
User | <function_results> <result> <tool_name>get_ticker_symbol</tool_name> <stdout> GM </stdout> </result> </function_results> |
Теперь, зная символ тикера, Claude впоследствии решит, что ему нужно вызвать get_current_stock_price
и получить текущую цену.
Content | |
---|---|
Assistant | <function_calls> <invoke> <tool_name>get_current_stock_price</tool_name> <parameters> <symbol>GM</symbol> </parameters> </invoke> </function_calls> |
Мы также передаем обратно эти результаты.
Content | |
---|---|
User | <function_results> <result> <tool_name>get_current_stock_price</tool_name> <stdout> 38.50 </stdout> </result> </function_results> |
Имея всю эту цепочку разговора, предоставляющую Claude все необходимые детали, Claude сможет дать пользователю ответ в качестве своего окончательного вывода.
Content |
---|
<answer> Текущая цена акций General Motors составляет $38.50. </answer> |
Часто задаваемые вопросы по устаревшему использованию инструментов
Сколько инструментов я могу передать Claude в данном взаимодействии?
Вы можете определить любое количество инструментов и функций для использования Claude, хотя в настоящее время мы рекомендуем не превышать 3-5 для этой устаревшей структуры использования инструментов, в зависимости от сложности вашего варианта использования и рассматриваемых функций.
Есть ли у Claude какие-либо встроенные инструменты, которые он знает?
Нет. Любые инструменты, которые вы хотите, чтобы Claude использовал, вам придется определить самостоятельно в промпте использования инструмента. У Claude нет предопределенного списка функций и определений, которые работают лучше всего.
Когда новый формат использования инструмента появится на Vertex AI или Amazon Bedrock?
В ближайшем будущем!