Вызов функции Vertex AI (с использованием ответа)Python

Программы на Python
Ответить
Anonymous
 Вызов функции Vertex AI (с использованием ответа)

Сообщение Anonymous »

Мне нужно реализовать чат-бота, который будет использовать полезные функции для звонков и взаимодействия с базой данных. Это лабораторная задача в песочнице.
У меня возникла проблема с отправкой модели готового ответа API для форматирования пользователю.
Как только объявлены необходимые функции для вызовов базы данных:

Код: Выделить всё

list_tables_func = vertexai.generative_models.FunctionDeclaration.from_func(list_tables)
describe_table_func = vertexai.generative_models.FunctionDeclaration.from_func(describe_table)
execute_query_func = vertexai.generative_models.FunctionDeclaration.from_func(execute_query)
и упаковывался в инструмент, который затем передавался в модель, предоставленную vertexai Python SDK:

Код: Выделить всё

db_tool = vertexai.generative_models.Tool(
function_declarations = [list_tables_func, describe_table_func, execute_query_func]
)

instruction = ...
vertexai.init(project=..., location=...)

model = vertexai.generative_models.GenerativeModel(
"gemini-1.5-flash-001",
tools = [db_tool],
system_instruction = instruction)

chat = model.start_chat()
Я запросил модель и получил необходимые SQL-скрипты для определенных мной функций. На этом этапе модель генерирует только скрипты для запросов, а не реальные ответы из базы данных:

Код: Выделить всё

query = "What is the most expensive product?"
resp = chat.send_message(content=query,
tools=[db_tool])
function_calls = resp.candidates[0].function_calls
func = function_calls[-1] # the last query is a clue to retrieve user's answer
однако содержимое возвращаемого значения func неверно, так как в таблице продуктов нет столбца name:

Код: Выделить всё

name: "execute_query"
args {
fields {
key: "sql"
value {
string_value: "SELECT name FROM products ORDER BY price DESC LIMIT 1"
}
}
}
Итак, я проигнорировал эту проблему, полагая, что модель вернула правильное string_value . Я вручную заменил name на Product_name — я знаю, это звучит немного безумно. Но пока все хорошо:

Код: Выделить всё

sql_query = func.args["sql"].replace("name", "product_name")
чтобы сгенерировать удобочитаемый ответ от Gemini, мне нужно создать новый запрос в чат:

Код: Выделить всё

api_response = {"text": "; ".join([", ".join(items) for items in sql_query])}
user_response = chat.send_message(
Content(
role = "user",
parts = [vertexai.generative_models.Part.from_function_response(
name = func.name,
response = {"content": api_response})]
)
)
Здесь при выполнении send_message возникает ошибка _InactiveRpcError, указывающая:

Код: Выделить всё


Подробнее здесь: [url]https://stackoverflow.com/questions/79188754/vertex-ai-function-calling-using-response[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»