【问题标题】:IBM Cloud with Watson Assistant: "Unknown error, Code: 422" returned for API callIBM Cloud with Watson Assistant:API 调用返回“未知错误,代码:422”
【发布时间】:2021-07-03 02:44:17
【问题描述】:

我正在尝试通过 Python 脚本使用 CLI 中的 Watson Assistant,类似于演示 Building a custom client。 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)。

我不知道接下来该尝试什么。

【问题讨论】:

  • 可以在调用堆栈中添加完整的错误消息吗?您可以添加此处记录的错误处理吗? cloud.ibm.com/apidocs/assistant/…
  • 现在显示新的输出(来自新的异常处理代码)。
  • 你能确认它就是上面的代码吗(我没有看到任何异常处理)?是否只打印了那一行错误消息?您的 API 密钥是 Watson Assistant 的当前密钥吗?您的助手 ID 与显示的助手 ID 匹配吗?您的 SDK 是最新的吗?
  • @data_henrik 我将create_session 调用更改如下:response = assistant.create_session(assistant_id = assistant_id).get_result() 并在其后加上print(json.dumps(response, indent=2))。现在它以 session_id 响应,这就是进展。但是,响应不包括“输出”字段(或任何其他字段)。如文档中所示,这不起作用。 V2 Python API 有什么变化吗?
  • 如果在 Lite plan 上创建助手,是否没有输出?

标签: python-3.x ibm-cloud watson-assistant


【解决方案1】:

目前尚不清楚,assistant_id 的设置是什么。 my_assistant_id 未在您的代码 sn-p 中的任何位置初始化。

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

【讨论】:

  • 谢谢。在示例代码中,我使用 my_assistant_id 作为虚拟对象。实际上,它在请求之前设置为'00965b15-eb3f-4d83-8983-3df0c7da9c4f'。现在查看您的第二条评论。
  • 好的,所以我的代码已经基于该参考。我使用了与您显示的相同的 sn-p,并得到了相同的结果:422。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-25
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多