#python-3.x #ibm-cloud #watson-assistant
Вопрос:
Я пытаюсь использовать Watson Assistant из интерфейса командной строки со сценарием на Python, похожим на демонстрационное создание пользовательского клиента. Скрипт на Python:
from ibm_watson import AssistantV2
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator
# Create Assistant service object.
authenticator = IAMAuthenticator(api_key_for_wa_service) # replace with API key
assistant = AssistantV2(
version = '2020-09-24',
authenticator = authenticator
)
assistant.set_service_url('https://api.au-syd.assistant.watson.cloud.ibm.com')
assistant_id = '00965b15-eb3f-4d83-8983-3df0c7da9c4f'
# Start conversation with empty message:
response = assistant.message_stateless(assistant_id,
).get_result()
Я думаю, что это нормально, но запрос не выполняется с кодом состояния 422:
c:Runnable>python create_watson_assistant_service_object.py
Method failed with status code 422: Unknown error
Я попытался передать входной аргумент после аргумента assistant_id в запросе:
input = {'message_type': 'text', 'text': 'Hello'}
Это дает тот же результат (код 422).
Я не знаю, что делать дальше.
Комментарии:
1. Можно ли добавить полное сообщение об ошибке в стек вызовов? Не могли бы вы добавить обработку ошибок, как описано здесь? cloud.ibm.com/apidocs/assistant/…
2. Теперь отображается новый вывод (из нового кода обработки исключений).
3. Можете ли вы подтвердить, что это именно тот код, который указан выше (я не вижу никакой обработки исключений)? Напечатана только эта единственная строка сообщения об ошибке? Ваш API-ключ является текущим ключом для Watson Assistant? Ваш идентификатор помощника совпадает с тем, который указан для вашего помощника? Ваш SDK обновлен?
4. @data_henrik Я изменил
create_session
вызов следующим образом:response = assistant.create_session(assistant_id = assistant_id).get_result()
и последовал за нимprint(json.dumps(response, indent=2))
. Теперь он отвечает идентификатором сеанса, так что это прогресс. Однако ответ не включает поле «вывод» (или любое другое). Это работает не так, как показано в документации. Есть ли что-то в API Python версии 2, что изменилось?5. Нет ли выхода, если помощник создан по облегченному плану?
Ответ №1:
Неясно, для чего assistant_id
устанавливается значение. my_assistant_id
нигде в вашем фрагменте кода не инициализируется.
assistant_id = my_assistant_id
Вы также не предоставляете никакой информации. Из документации по API — https://cloud.ibm.com/apidocs/assistant/assistant-v2?code=python#messagestateless
import json
from ibm_watson import AssistantV2
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator
authenticator = IAMAuthenticator('{apikey}')
assistant = AssistantV2(
version='2020-04-01',
authenticator = authenticator
)
assistant.set_service_url('{url}')
response = assistant.message_stateless(
assistant_id='{assistant_id}',
input={
'message_type': 'text',
'text': 'Hello'
}
).get_result()
print(json.dumps(response, indent=2))
Комментарии:
1. Спасибо. Я использовал
my_assistant_id
в качестве манекена в примере кода. На самом деле, перед запросом установлено значение ‘00965b15-eb3f-4d83-8983-3df0c7da9c4f’. Сейчас я смотрю на ваш 2-й комментарий.2. Хорошо, значит, я уже основывал свой код на этой ссылке. Я использовал тот же фрагмент, что и вы, и получил тот же результат: 422.