Використання API Асистентів Azure OpenAI для SQL баз даних

Робота з API Azure OpenAI Assistants для SQL баз даних

API Azure OpenAI Assistants пропонує зручний спосіб інтеграції моделей OpenAI з вашими застосунками. Використовуючи інструменти, зовнішні функції та інтерпретатори коду, ви можете надати AI-асистентам можливість виконувати динамічні завдання, такі як запити до баз даних, обробка наборів даних або управління складними робочими процесами. Цей блог допоможе вам налаштувати та використовувати API Assistants для SQL баз даних із покроковими поясненнями.

Вступ до API Azure OpenAI Assistants

API Assistants дозволяє розробникам створювати AI-асистентів, здатних виконувати різні завдання, такі як відповіді на запити користувачів, обробка наборів даних або генерація результатів за конкретними інструкціями. Ці асистенти можуть інтегруватися із зовнішніми інструментами, що робить їх універсальними та потужними для різних застосувань.

Основні можливості:

  1. Виклик функцій: Дозволяє асистенту викликати зовнішні Python-функції для виконання конкретних завдань.
  2. Інтерпретатор коду: Підвищує здатність асистента обробляти та аналізувати набори даних динамічно.
  3. Взаємодія через потоки: Підтримка контексту та структури в розмовах через використання потоків.

pic

Крок 1: Налаштування середовища

Імпорт бібліотек

Першим кроком є імпорт необхідних бібліотек:

from openai import AzureOpenAI  
import json  
import os
  • AzureOpenAI: Використовується для взаємодії з API Assistants.
  • json: Для обробки даних у форматі JSON для введення та виведення функцій.
  • os: Для безпечного керування змінними середовища.

Імпорт допоміжних функцій

helper.py

## Функція виклику в Azure OpenAI  
## Налаштування  

import os  
from openai import AzureOpenAI  
import json  

client = AzureOpenAI(  
 azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),  
 api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
 api_version="2023-05-15"  
)  
## 1. Використання ілюстративного прикладу  
def get_current_weather(location, unit="fahrenheit"):  
 """Отримати поточну погоду в заданому місці.   
 За замовчуванням одиниця вимірювання — фаренгейт"""  
 if "new york" in location.lower():  
 return json.dumps(  
 {"location": "New York", "temperature": "40", "unit": unit}  
 )  
 elif "san francisco" in location.lower():  
 return json.dumps(  
 {"location": "San Francisco", "temperature": "50", "unit": unit}  
 )  
 elif "las vegas" in location.lower():  
 return json.dumps(  
 {"location": "Las Vegas", "temperature": "70", "unit": unit}  
 )  
 else:  
 return json.dumps(  
 {"location": location, "temperature": "unknown"}  
 )  

get_current_weather("New York")  
### Визначення інструментів  
messages = [  
 {"role": "user",  
 "content": """Яка погода в Сан-Франциско,  
 Нью-Йорку та Лас-Вегасі?"""  
 }  
]  

tools = [  
 {  
 "type": "function",  
 "function": {  
 "name": "get_current_weather",  
 "description": """Отримати поточну погоду в заданому  
 місці. За замовчуванням одиниця вимірювання — фаренгейт""",  
 "parameters": {  
 "type": "object",  
 "properties": {  
 "location": {  
 "type": "string",  
 "description": """Місто та штат,  
 наприклад, Сан-Франциско, Каліфорнія""",  
 },  
 "unit": {  
 "type": "string",  
 "default":"fahrenheit",  
 "enum": ["fahrenheit", "celsius"],  
 "description": """Одиниця вимірювання  
 температури."""  
 }  
 }  
 }  
 }  
 }  
 }  
]

Якщо не вказано явно,  
то одиниця вимірювання за замовчуванням —  
фаренгейт"""  
 },  
 },  
 "required": ["location"],  
 },  
 },  
 }  
]  
### Використання виклику функції  
response = client.chat.completions.create(  
 model="gpt-4-1106",  
 messages=messages,  
 tools=tools,  
 tool_choice="auto",   
)  

response_message = response.choices[0].message  
tool_calls = response_message.tool_calls  

if tool_calls:  
 print (tool_calls)  

 available_functions = {  
 "get_current_weather": get_current_weather,  
 }   
 messages.append(response_message)   

 for tool_call in tool_calls:  
 function_name = tool_call.function.name  
 function_to_call = available_functions[function_name]  
 function_args = json.loads(tool_call.function.arguments)  
 function_response = function_to_call(  
 location=function_args.get("location"),  
 unit=function_args.get("unit"),  
 )  
 messages.append(  
 {  
 "tool_call_id": tool_call.id,  
 "role": "tool",  
 "name": function_name,  
 "content": function_response,  
 }  
 )   
 print (messages)  
second_response = client.chat.completions.create(  
 model="gpt-4-1106",  
 messages=messages,  
 )  
print (second_response)  
## 2.
Використання нашої SQL бази даних  
Щоб отримати доступ до даних локально, використовуйте наступний код:  


from sqlalchemy import create_engine  
import pandas as pd  

df = pd.read_csv("./data/all-states-history.csv").fillna(value = 0)  
database_file_path = "./db/test.db"  

engine = create_engine(f'sqlite:///{database_file_path}')  

df.to_sql(  
 'all_states_history',  
 con=engine,  
 if_exists='replace',  
 index=False)  
### Створіть дві функції  
import numpy as np  
from sqlalchemy import text  

def get_hospitalized_increase_for_state_on_date(state_abbr, specific_date):  
 try:  
 query = f"""  
 SELECT date, hospitalizedIncrease  
 FROM all_states_history  
 WHERE state = '{state_abbr}' AND date = '{specific_date}';  
 """  
 query = text(query)  

 with engine.connect() as connection:  
 result = pd.read_sql_query(query, connection)  
 if not result.empty:  
 return result.to_dict('records')[0]  
 else:  
 return np.nan  
 except Exception as e:  
 print(e)  
 return np.nan  
def get_positive_cases_for_state_on_date(state_abbr, specific_date):  
 try:  
 query = f"""  
 SELECT date, state, positiveIncrease AS positive_cases  
 FROM all_states_history  
 WHERE state = '{state_abbr}' AND date = '{specific_date}';  
 """  
 query = text(query)  

 with engine.connect() as connection:  
 result = pd.read_sql_query(query, connection)  
 if not result.empty:  
 return result.to_dict('records')[0]  
 else:  
 return np.nan  
 except Exception as e:  
 print(e)  
 return np.nan  
get_hospitalized_increase_for_state_on_date("AK","2021-03-05")  
### Виконання виклику функцій на SQL базі даних  
messages = [  
 {"role": "user",  
 "content": """ скільки госпіталізованих осіб було в Алясці  
 5 березня 2021 року?"""  
 }  
]  
tools_sql = [  
 {  
 "type": "function",  
 "function": {  
 "name": "get_hospitalized_increase_for_state_on_date",  
 "description": """Отримує денне збільшення госпіталізацій  
 для конкретного штату  
 на конкретну дату.""",  
 "parameters": {  
 "type": "object",  
 "properties": {  
 "state_abbr": {  
 "type": "string",  
 "description": """Скорочення назви штату  
 (наприклад, 'NY', 'CA')."""  
 },  
 "specific_date": {  
 "type": "string",  
 "description": """Конкретна дата для  
 запиту в форматі 'YYYY-MM-DD'  
."""  
 }  
 },  
 "required": ["state_abbr", "specific_date"]  
 }  
 }  
 },  
 {  
 "type": "function",  
 "function": {  
 "name": "get_positive_cases_for_state_on_date",  
 "description": """Отримує денне збільшення   
 позитивних випадків для конкретного штату  
 на конкретну дату.""",  
 "parameters": {  
 "type": "object",  
 "properties": {  
 "state_abbr": {  
 "type": "string",  
 "description": """Скорочення назви  
 штату (наприклад, 'NY', 'CA')."""  
 },  
 "specific_date": {  
 "type": "string",  
 "description": """Конкретна дата для  
 запиту в форматі 'YYYY-MM-DD'  
."""  
 }  
 },  
 "required": ["state_abbr", "specific_date"]  
 }  
 }  
 }  
]  
response = client.chat.completions.create(  
 model="gpt-4-1106",  
 messages=messages,  
 tools=tools_sql,  
 tool_choice="auto",  
)  

response_message = response.choices[0].message  
tool_calls = response_message.tool_calls  

if tool_calls:  
 print (tool_calls)  

 available_functions = {  
 "get_positive_cases_for_state_on_date": get_positive_cases_for_state_on_date,  
 "get_hospitalized_increase_for_state_on_date":get_hospitalized_increase_for_state_on_date  
 }   
 messages.append(response_message)   

 for tool_call in tool_calls:  
 function_name = tool_call.function.name  
 function_to_call = available_functions[function_name]  
 function_args = json.loads(tool_call.function.arguments)  
 function_response = function_to_call(  
 state_abbr=function_args.get("state_abbr"),  
 specific_date=function_args.get("specific_date"),  
 )  
 messages.append(  
 {  
 "tool_call_id": tool_call.id,  
 "role": "tool",  
 "name": function_name,  
 "content": str(function_response),  
 }  
 )
print(messages)  
second_response = client.chat.completions.create(  
 model="gpt-4-1106",  
 messages=messages,  
)  
print (second_response)

Файл Helper.py містить попередньо визначені функції, які асистент буде використовувати для запитів до SQL бази даних.
Імпортуйте ці функції наступним чином:

import Helper  
from Helper import get_positive_cases_for_state_on_date  
from Helper import get_hospitalized_increase_for_state_on_date

Ці функції спеціально призначені для:

  • Запиту кількості позитивних випадків на конкретну дату для вказаного штату.
  • Отримання збільшення кількості госпіталізованих випадків на конкретну дату для штату.

Крок 2: Ініціалізація Azure OpenAI клієнта

Щоб почати використовувати Assistants API, налаштуйте Azure OpenAI клієнта з вашим API ключем та кінцевою точкою:

client = AzureOpenAI(  
 api_key=os.getenv("AZURE_OPENAI_KEY"),  
 api_version="2024-02-15-preview",  
 azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT")  
)
  • api_key і azure_endpoint зберігаються безпечно як змінні середовища.

Крок 3: Створення асистента

Створіть асистента з конкретними інструкціями та інструментами:

assistant = client.beta.assistants.create(  
 instructions="""You are an assistant answering questions about a Covid dataset.""",  
 model="gpt-4-1106",  
 tools=Helper.tools_sql  
)
  • instructions: визначає мету асистента.
  • model: вказує модель Azure OpenAI для використання.
  • tools: надає доступ до попередньо визначених допоміжних функцій.

Крок 4: Керування потоками

Потоки дозволяють структуровані та контекстуальні розмови з асистентом.

Створення потоку:

thread = client.beta.threads.create()

Додавання запиту користувача:

message = client.beta.threads.messages.create(  
 thread_id=thread.id,  
 role="user",  
 content="""how many hospitalized people we had in Alaska the 2021-03-05?"""  
)

Це додає запит користувача в потік.

Крок 5: Запуск асистента

Ініціалізація виконання:

run = client.beta.threads.runs.create(  
 thread_id=thread.id,  
 assistant_id=assistant.id,  
)

Це запускає обробку потоку асистентом.

Крок 6: Моніторинг статусу виконання

import time
start_time = time.time()  
status = run.statuswhile status not in ["completed", "cancelled", "expired", "failed"]:  
 time.sleep(5)  
 run = client.beta.threads.runs.retrieve(  
 thread_id=thread.id,  
 run_id=run.id  
 )  
 print("Elapsed time: {} minutes {} seconds".format(  
 int((time.time() - start_time) // 60),  
 int((time.time() - start_time) % 60))  
 )  
 status = run.status  
 print(f'Status: {status}')

Цей цикл перевіряє статус виконання кожні 5 секунд і виводить оновлення прогресу.

Крок 7: Обробка викликів функцій

Якщо асистент потребує зовнішніх функцій, обробіть виклики інструментів наступним чином:

  1. Ідентифікуйте потрібну функцію:
available_functions = {  
 "get_positive_cases_for_state_on_date": get_positive_cases_for_state_on_date,  
 "get_hospitalized_increase_for_state_on_date":get_hospitalized_increase_for_state_on_date  
}
  1. Виконайте функцію та зафіксуйте результат:
tool_outputs = []  
for tool_call in run.required_action.submit_tool_outputs.tool_calls:  
 function_name = tool_call.function.name  
 function_to_call = available_functions[function_name]  
 function_args = json.loads(tool_call.function.arguments)  
 function_response = function_to_call(  
 state_abbr=function_args.get("state_abbr"),  
 specific_date=function_args.get("specific_date"),  
 )  
 tool_outputs.append(  
 { "tool_call_id": tool_call.id,  
 "output": str(function_response)  
 }  
 )
  1. Надішліть результати назад асистенту:
run = client.beta.threads.runs.submit_tool_outputs(  
 thread_id=thread.id,  
 run_id=run.id,  
 tool_outputs=tool_outputs  
)

Крок 8: Увімкнення інструменту інтерпретатора коду

Інструмент Code Interpreter дозволяє асистенту динамічно обробляти набори даних.
Наприклад, для аналізу CSV набору даних:

Завантаження набору даних:

file = client.files.create(  
 file=open("./data/all-states-history.csv", "rb"),  
 purpose='assistants'  
)

Налаштування асистента з інструментом інтерпретатора коду:

assistant = client.beta.assistants.create(  
 instructions="""You are an assistant answering questions about a Covid dataset.""",  
 model="gpt-4-1106",  
 tools=[{"type": "code_interpreter"}],  
 file_ids=[file.id]  
)

Тепер асистент має доступ до завантаженого набору даних для динамічних запитів.

Крок 8: Запитання до асистента

Запитайте у асистента питання, пов'язані з набором даних, і він використає завантажений файл та свої інструменти для надання відповідей. Наприклад:

message = client.beta.threads.messages.create(  
 thread_id=thread.id,  
 role="user",  
 content="""how many hospitalized people we had in Alaska the 2021-03-05?"""  
)

Моніторьте прогрес, як раніше, і отримуйте результати з потоку після того, як статус буде completed.

Покрокове пояснення коду:

Взаємодія з даними CSV:

import os  
import pandas as pd  
from IPython.display import Markdown, HTML, display  
from langchain.schema import HumanMessage  
from langchain_openai import AzureChatOpenAI
  • os: Використовується для керування змінними середовища та каталогами.
  • pandas: Надає інструменти для роботи з табличними даними.
  • IPython.display: Використовується для відображення вмісту Markdown та HTML у Jupyter Notebooks.
  • langchain.schema.HumanMessage: Представляє запит користувача в рамках LangChain.
  • langchain_openai.AzureChatOpenAI: Надає інтерфейс для взаємодії з Azure OpenAI GPT.

Ініціалізація моделі GPT:

model = AzureChatOpenAI(  
 openai_api_version="2023-05-15",  
 azure_deployment="gpt-4-1106",  
 azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"),  
)
  • Це створює екземпляр моделі AzureChatOpenAI, використовуючи кінцеву точку та параметри розгортання.

Завантаження набору даних

  • Завантаження та читання даних:
os.makedirs("data", exist_ok=True)  
!wget https://covidtracking.com/data/download/all-states-history.csv -P ./data/  
file_url = "./data/all-states-history.csv"  
df = pd.read_csv(file_url).fillna(value=0)
  • Створюється каталог data, якщо він не існує.
  • Завантажується набір даних (all-states-history.csv) з віддаленого URL в каталог data.
  • Читається файл CSV в Pandas DataFrame (df) та заповнюються відсутні значення (NaN) значенням 0.

Концепція:

  • DataFrame — це двовимірна таблична структура даних у Pandas, схожа на електронну таблицю або таблицю SQL.
  • Заповнення відсутніх значень гарантує відсутність помилок під час числових операцій.

Підготовка агента LangChain для роботи з DataFrame

  • Створення агента:
from langchain.agents.agent_types import AgentType  
from langchain_experimental.agents.agent_toolkits import create_pandas_dataframe_agent  

agent = create_pandas_dataframe_agent(llm=model, df=df, verbose=True)
  • create_pandas_dataframe_agent: Утиліта LangChain, яка створює агента, здатного запитувати Pandas DataFrame.
  • llm: Мовна модель, що використовується для генерації відповідей (у цьому випадку AzureChatOpenAI).
  • df: Pandas DataFrame, що містить набір даних.
  • verbose=True: Включає детальне логування операцій агента.
  • Концепція:
    Агент LangChain діє як посередник між запитом користувача та підлеглими даними/моделями. Він використовує підказки та інструменти (як-от Pandas), щоб інтерпретувати запит і отримати точні результати.

Запитання до агента

  • Початковий запит:
agent.invoke("how many rows are there?")
  • Це надсилає запит агенту, просячи його порахувати кількість рядків у DataFrame.
  • Агент використовує об'єкт df та модель для обчислення та повернення результату.

Проектування підказки для агента

  • Структура підказки:
CSV_PROMPT_PREFIX = """  
First set the pandas display options to show all the columns,  
get the column names, then answer the question."""

"""
  • Встановлює контекст для агента, щоб використовувати Pandas для перевірки даних.
  • Інструктує агента перевірити назви колонок та інші деталі перед відповіддю.
CSV_PROMPT_SUFFIX = """  
- **Завжди** перед тим, як дати остаточну відповідь, спробуйте інший метод.  
Потім порівняйте відповіді двох методів і запитайте себе,  
чи правильно вони відповідають на оригінальне питання.  
Якщо ви не впевнені, спробуйте інший метод.  
- Якщо методи дають різні результати, відрефлексуйте і  
спробуйте знову, поки не отримаєте два методи з однаковим результатом.  
- Якщо ви все ще не можете отримати консистентний результат, скажіть,  
що ви не впевнені в відповіді.  
- Якщо ви впевнені в правильній відповіді, створіть красиву  
і детальну відповідь, використовуючи Markdown.  
- **НЕ ВИНУКАЙТЕ ВІДПОВІДЬ І НЕ ВИКОРИСТОВУЙТЕ ПРЕДИДУЮЧІ ЗНАННЯ,  
ТІЛЬКИ ВИКОРИСТОВУЙТЕ РЕЗУЛЬТАТИ РОЗРАХУНКІВ, ЯКІ ВИ ЗРОБИЛИ**.  
- **ЗАВЖДИ**, як частина вашої "Остаточної відповіді", пояснюйте, як ви отримали  
відповідь в розділі, який починається з: "\n\nПояснення:\n".  
У поясненні вкажіть назви колонок, які ви використовували для отримання  
остання відповіді.  
"""
  • Встановлює інструкції для суворої перевірки відповіді агента крок за кроком:
  1. Використовуйте два методи для перевірки результатів.
  2. Відрефлексуйте на розбіжностях та спробуйте знову, якщо необхідно.
  3. Надати відповідь у форматі Markdown, включаючи детальне пояснення.

Приклад запиту

  • Запит
QUESTION = "How many patients were hospitalized during July 2020 "   
"in Texas, and nationwide as the total of all states?"  
"Use the hospitalizedIncrease column"
  • Цей запит просить агента обчислити загальну кількість госпіталізацій в Техасі та по всіх штатах США за липень 2020 року, використовуючи стовпець hospitalizedIncrease.

Виклик агента

agent.invoke(CSV_PROMPT_PREFIX + QUESTION + CSV_PROMPT_SUFFIX)
  • Об'єднує префікс, запит користувача та суфікс в одну підказку.
  • Агент виконує обчислення на основі вказаного стовпця та перевіряє результати за допомогою кількох методів.

  • Потік даних: CSV → Pandas → SQLite → LangChain Agent.

  • Запити на природній мові: Використовуйте LangChain з GPT моделями для об'єднання SQL і природної мови.

  • Проектування підказок: Спеціальні підказки забезпечують точне та консистентне виконання запитів.

  • Безпека SQL: Обмежте запити лише операціями для читання для безпеки.

Функція виклику Azure OpenAI

Функція виклику Azure OpenAI дозволяє визначити конкретні функції (API або власну логіку), які модель GPT може використовувати під час розмови. Ця можливість дозволяє моделі викликати зовнішні інструменти або взаємодіяти із зовнішніми системами даних динамічно, повертаючи результати, що покращують корисність і релевантність розмови.

import os  
from openai import AzureOpenAI  
import json  

client = AzureOpenAI(  
 azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"),  
 api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
 api_version="2023-05-15"  
)
  • Мета: Ініціалізація клієнта Azure OpenAI, використовуючи змінні середовища для кінцевої точки та API ключа.
  • Змінні середовища:
  • AZURE_OPENAI_ENDPOINT: URL кінцевої точки для вашого ресурсу Azure OpenAI.
  • AZURE_OPENAI_API_KEY: API ключ для аутентифікації запитів.

Приклад 1: Функція погоди

Опис функції

def get_current_weather(location, unit="fahrenheit"):  
 """Отримати поточну погоду в заданому місці."""
"""
  • Мета: Симулює API погоди, яке повертає жорстко закодовану інформацію про погоду для конкретних міст.

Опис інструментів

tools = [  
 {  
 "type": "function",  
 "function": {  
 "name": "get_current_weather",  
 "description": """Отримати поточну погоду в заданому місці."""  
 }  
 }  
]

"""
  • За замовчуванням: Одиниця вимірювання — фаренгейти, якщо не вказано інше.

Опис інструментів

tools = [  
 {  
 "type": "function",  
 "function": {  
 "name": "get_current_weather",  
 "description": """Отримати поточну погоду в заданому місці."""  
 }  
 }  
]

python
- Ключові поля:
- type: Вказує, що інструмент є функцією.
- name: Назва функції (get_current_weather).
- parameters: Визначає очікувані аргументи (location та unit) і їх обмеження.

Генерація відповіді за допомогою виклику функцій

response = client.chat.completions.create(  
 model="gpt-4-1106",  
 messages=messages,  
 tools=tools,  
 tool_choice="auto",   
)

Ключові параметри:

  • model: Вказує модель, яка використовується (наприклад, gpt-4-1106).
  • messages: Містить запит користувача та відповіді асистента.
  • tools: Надання доступу до визначених функцій для виклику моделлю.
  • tool_choice="auto": Дозволяє моделі вирішити, який інструмент використовувати.

Обробка викликів інструментів та відповідей:

if tool_calls:  
 available_functions = {"get_current_weather": get_current_weather}  
 for tool_call in tool_calls:  
 function_name = tool_call.function.name  
 function_to_call = available_functions[function_name]  
 function_args = json.loads(tool_call.function.arguments)  
 function_response = function_to_call(  
 location=function_args.get("location"),  
 unit=function_args.get("unit"),  
 )  
 messages.append(  
 {  
 "tool_call_id": tool_call.id,  
 "role": "tool",  
 "name": function_name,  
 "content": function_response,  
 }  
 )
  • Виклики інструментів: Відповідь містить поле tool_calls, коли модель вирішує викликати функцію.
  • Виконання функції: Витягує назву функції та аргументи, виконує функцію та додає результат до розмови.

Приклад 2: Запит до SQL бази даних

Підготовка даних SQL

df = pd.read_csv("./data/all-states-history.csv").fillna(value=0)  
engine = create_engine(f'sqlite:///{database_file_path}')  

df.to_sql(  
 'all_states_history',  
 con=engine,  
 if_exists='replace',  
 index=False)

Користувацькі функції запитів SQL

Збільшення госпіталізацій:

def get_hospitalized_increase_for_state_on_date(state_abbr, specific_date):  
 query = f"""  
 SELECT date, hospitalizedIncrease  
 FROM all_states_history  
 WHERE state = '{state_abbr}' AND date = '{specific_date}';  
 """  
 with engine.connect() as connection:  
 result = pd.read_sql_query(text(query), connection)  
 return result.to_dict('records')[0] if not result.empty else np.nan
  • Запитує базу даних для отримання збільшення госпіталізацій для конкретного штату на зазначену дату.

Позитивні випадки:

def get_positive_cases_for_state_on_date(state_abbr, specific_date):  
 query = f"""  
 SELECT date, state, positiveIncrease AS positive_cases  
 FROM all_states_history  
 WHERE state = '{state_abbr}' AND date = '{specific_date}';  
 """  
 with engine.connect() as connection:  
 result = pd.read_sql_query(text(query), connection)  
 return result.to_dict('records')[0] if not result.empty else np.nan
  • Отримує збільшення кількості позитивних випадків для конкретного штату та дати.

Опис інструментів для SQL:

tools_sql = [  
 {  
 "type": "function",  
 "function": {  
 "name": "get_hospitalized_increase_for_state_on_date",  
 "description": "Отримує щоденне збільшення госпіталізацій.",  
 "parameters": {...},  
 }  
 },  
 {  
 "type": "function",  
 "function": {  
 "name": "get_positive_cases_for_state_on_date",  
 "description": "Отримує щоденне збільшення позитивних випадків.",  
 "parameters": {...},  
 }  
 }  
]

Виконання виклику функції для SQL:

response = client.chat.completions.create(  
 model="gpt-4-1106",  
 messages=messages,  
 tools=tools_sql,  
 tool_choice="auto",  
)

- Процес схожий на приклад з погодою:

1.
Модель визначає необхідний інструмент.
2. Видобуває аргументи та виконує функцію.
3. Додає результати до історії розмови.

## Основні переваги виклику функцій

**Динамічна інтеграція**:

- Дозволяє моделям GPT взаємодіяти з зовнішніми системами та API в режимі реального часу.

**Контекстуальні відповіді**:

- Надає користувачам точні, засновані на даних відповіді, отримуючи відповідну інформацію в реальному часі.

**Розширюваність**:

- Легко додавати нові інструменти або API для спеціалізованих функцій.

## Висновок

Інтегруючи API Асистента з інструментами та наборами даних, ви можете створювати потужні системи, які використовують AI для взаємодії з вашими SQL базами даних або наборами даних в динамічному режимі. Цей покроковий посібник дає вам знання для створення таких систем, що забезпечує ефективну та інтелектуальну обробку даних у реальних застосунках.



Перекладено з: [Leveraging Azure OpenAI Assistants API for SQL Databases](https://medium.com/@danushidk507/leveraging-azure-openai-assistants-api-for-sql-databases-4cfed63b84d4)

Leave a Reply

Your email address will not be published. Required fields are marked *