#python #dialogflow-es #agent
#python #dialogflow-es #агент
Вопрос:
я использую dialogflow v2 с python sdk.
Все работает нормально, за исключением того, что я добавляю новое намерение с его обучающими фразами. Бот не распознает фразы, пока я не введу их через веб-консоль и не сохраню намерение, когда начнется обучение, после этого бот работает нормально.
Я попытался обучить intent с использованием python sdk:
agent_client = dialogflow.AgentsClient(credentials=self.credentials)
response = agent_client.train_agent('projects/' self.project_id)
Ответ равен 200, но агент не был обучен.
Спасибо за любую подсказку, как заставить это работать.
Комментарии:
1. Как вы определили, что ответ был 200?
2. В отвечающем объекте.
3. Я спрашиваю, потому что методы SDKs являются асинхронными,
train_agent
возвращает future, который изначально не содержит никакой информации о результате операции обучения.
Ответ №1:
Может быть, это помогает:
def train_agent(project_id):
from google.cloud import dialogflow
agents_client = dialogflow.AgentsClient()
parent = dialogflow.AgentsClient.common_project_path(project_id)
response = agents_client.train_agent(
request={"parent": parent}
)
print(response.done())
PS: GOOGLE_APPLICATION_CREDENTIALS
в моем .env
Ответ №2:
У меня это работает. В настоящее время я использую FastApi. Секрет в том, чтобы добавить функцию done(). Это вернет true или false, если операция завершится успешно.
@router.post("/chatbot/train/{project_id}", response_model=IGetResponseBase)
async def train_agent(
project_id: str,
) -> Any:
# Create a client
agent_client = AgentsAsyncClient()
parent = agent_client.common_project_path(project_id)
# Initialize request argument(s)
request = TrainAgentRequest(
parent=parent,
)
# Make the request
operation = await agent_client.train_agent(request=request)
print("Waiting for operation to complete...")
response = await operation.done()
# Handle the response
print('operation', response)