You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Prompt-Engineering-Guide/pages/applications/function_calling.ru.mdx

145 lines
11 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Вызов функций с помощью LLM
import {Cards, Card} from 'nextra-theme-docs'
import {CodeIcon} from 'components/icons'
## Начало работы с вызовом функций
Вызов функций — это возможность надежно подключать LLM к внешним инструментам, чтобы обеспечить эффективное использование инструментов и взаимодействие с внешними API.
LLM, такие как GPT-4 и GPT-3.5, были точно настроены, чтобы определять, когда необходимо вызвать функцию, а затем выводить JSON, содержащий аргументы для вызова функции. Функции, вызываемые при вызове, будут действовать как инструменты в вашем ИИ приложении, и вы можете определить более одной функции в одном запросе.
Вызов функций — это важная возможность для создания чат-ботов или агентов на базе LLM, которым необходимо получать контекст для LLM или взаимодействовать с внешними инструментами путем преобразования естественного языка в вызовы API.
Вызов функций позволяет разработчикам создавать:
- диалоговые агенты, которые могут эффективно использовать внешние инструменты для ответов на вопросы. Например, запрос «Какая погода в Белизе?» будет преобразовано в вызов функции, такой как `get_current_weather(location: string, unit: 'celsius' | 'fahrenheit')`
- Решения на базе LLM для извлечения и маркировки данных (например, извлечение имен людей из статьи в Википедии).)
- приложения, которые могут помочь преобразовать естественный язык в вызовы API или запросы к базе данных.
- диалоговые механизмы поиска знаний, которые взаимодействуют с базой знаний
В этом руководстве мы покажем, как предлагать моделям, таким как GPT-4, и моделям с открытым исходным кодом, выполнять вызов функций для различных сценариев использования.
## Вызов функций с помощью GPT-4
В качестве простого примера предположим, что мы попросили модель проверить погоду в данном месте.
Один только LLM не сможет ответить на этот запрос, поскольку он был обучен на наборе данных. Способ решения этой проблемы — объединить LLM с внешним инструментом. Вы можете использовать возможности вызова функций модели, чтобы определить функцию для вызова вместе с ее аргументами, а затем вернуть ответ. Ниже приведен простой пример того, как этого можно добиться с помощью API OpenAI.
Допустим, пользователь задает модели следующий вопрос:
```
What is the weather like in London?
```
Чтобы обработать этот запрос с помощью вызова функции, первым шагом является определение функции погоды или набора функций, которые вы будете передавать как часть запроса API OpenAI:
```python
tools = [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Get the current weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA",
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]},
},
"required": ["location"],
},
},
}
]
```
Функция `get_current_weather` возвращает текущую погоду в заданном месте. Когда вы передаете это определение функции как часть запроса, оно фактически не выполняет функцию, а просто возвращает JSON объект, содержащий аргументы, необходимые для вызова функции. Вот несколько фрагментов кода, как этого добиться.
Вы могли бы определить функцию завершения следующим образом:
```python
def get_completion(messages, model="gpt-3.5-turbo-1106", temperature=0, max_tokens=300, tools=None):
response = openai.chat.completions.create(
model=model,
messages=messages,
temperature=temperature,
max_tokens=max_tokens,
tools=tools
)
return response.choices[0].message
```
Вот как вы могли бы составить вопрос пользователя:
```python
messages = [
{
"role": "user",
"content": "What is the weather like in London?"
}
]
```
Наконец, вы можете вызвать метод `get_completion` выше и передать как `сообщения`, так и `инструменты`:
```python
response = get_completion(messages, tools=tools)
```
Объект `response` содержит следующее:
```python
ChatCompletionMessage(content=None, role='assistant', function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='...', function=Function(arguments='{"location":"London","unit":"celsius"}', name='get_current_weather'), type='function')])
```
В частности, объект `аргументы` содержит важные аргументы, извлеченные моделью и необходимые для выполнения запроса.
Затем вы можете вызвать внешний API погоды для получения фактической погоды. Получив информацию о погоде, вы можете передать ее обратно в модель, чтобы обобщить окончательный ответ с учетом исходного вопроса пользователя
## Блокноты
Вот блокнот с простым примером, демонстрирующим, как использовать вызов функций с OpenAI API:
<Cards>
<Card
icon={<CodeIcon />}
title="Function Calling with OpenAI APIs"
href="https://github.com/dair-ai/Prompt-Engineering-Guide/blob/main/notebooks/pe-function-calling.ipynb"
/>
</Cards>
## Вызов функций с помощью LLM с открытым исходным кодом
Дополнительные заметки о вызове функций с помощью LLM с открытым исходным кодом появятся скоро.
## Варианты использования вызова функций
Ниже приведен список случаев использования, которые могут извлечь выгоду из возможности вызова функций LLM:
- **Диалоговые агенты**: вызов функций можно использовать для создания сложных диалоговых агентов или чат-ботов, которые отвечают на сложные вопросы, вызывая внешние API или внешнюю базу знаний и предоставляя более релевантные и полезные ответы.
- **Понимание естественного языка**: он может преобразовывать естественный язык в структурированные данные JSON, извлекать структурированные данные из текста и выполнять такие задачи, как распознавание именованных объектов, анализ настроений и извлечение ключевых слов.
- **Решение математических задач**: вызовы функций можно использовать для определения пользовательских функций для решения сложных математических задач, требующих нескольких шагов и различных типов сложных вычислений.
- **Интеграция API**: его можно использовать для эффективной интеграции LLM с внешними API для получения данных или выполнения действий на основе входных данных. Это может быть полезно для создания системы контроля качества или творческого помощника. В общем, вызов функций может преобразовать естественный язык в действительные вызовы API.
- **Извлечение информации**: вызовы функций можно эффективно использовать для извлечения конкретной информации из заданных входных данных, например для получения соответствующих новостей или ссылок из статьи.
## Использованная литература
- [Fireworks Raises the Quality Bar with Function Calling Model and API Release](https://blog.fireworks.ai/fireworks-raises-the-quality-bar-with-function-calling-model-and-api-release-e7f49d1e98e9)
- [Benchmarking Agent Tool Use and Function Calling](https://blog.langchain.dev/benchmarking-agent-tool-use/)
- [Function Calling](https://ai.google.dev/docs/function_calling)
- [Interacting with APIs](https://python.langchain.com/docs/use_cases/apis)
- [OpenAI's Function Calling](https://platform.openai.com/docs/guides/function-calling)
- [How to call functions with chat models](https://cookbook.openai.com/examples/how_to_call_functions_with_chat_models)
- [Pushing ChatGPT's Structured Data Support To Its Limits](https://minimaxir.com/2023/12/chatgpt-structured-data/)
- [Math Problem Solving with Function Calling](https://github.com/svpino/openai-function-calling/blob/main/sample.ipynb)