|
|
|
@ -1,3 +1,144 @@
|
|
|
|
|
# Function Calling with LLMs
|
|
|
|
|
# Вызов функций с помощью 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)
|
|
|
|
|
|
|
|
|
|
This page needs a translation! Feel free to contribute a translation by clicking the `Edit this page` button on the right.
|