Обучение агента Dialogflow с использованием Python SDK

#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)