PyCharm中如何格式化Watson Conversation响应,仅展示回答内容?
搞定Watson Conversation的响应展示问题
我明白你的需求啦——就是想和Watson聊的时候,只看到它的回答,不用被一堆无关的JSON数据干扰,还能反复提问对吧?我帮你把代码调整一下,直接实现这个功能:
首先,你原来的代码缺了几个关键部分(比如workspace_id和完整的版本号),我先给你补全,然后重点处理响应的提取逻辑:
import json from watson_developer_cloud import ConversationV1 # 初始化Watson Conversation客户端 conversation = ConversationV1( username='你的用户名', # 替换成你的Watson用户名 password='你的密码', # 替换成你的Watson密码 version='2018-09-20' # 用一个有效的版本号,这个是常用的稳定版本 ) # 替换成你的Workspace ID,在Watson控制台里能找到 WORKSPACE_ID = '你的工作空间ID' # 初始化上下文,用来维持对话状态 context = {} print("嗨!我是Watson机器人,有什么问题尽管问我~输入'退出'可以结束对话。") while True: # 获取用户输入 user_input = input("\n你:") if user_input.lower() == '退出': print("Watson:再见啦!") break # 调用Watson服务获取响应 try: response = conversation.message( workspace_id=WORKSPACE_ID, input={'text': user_input}, context=context ) # 更新对话上下文,维持对话连贯性 context = response['context'] # 提取Watson的回答文本(只取有用的部分) watson_answers = response['output']['text'] # 打印回答,多个回答的话逐行显示 print("Watson:") for answer in watson_answers: print(f"- {answer}") except Exception as e: print(f"出错啦:{str(e)}")
关键说明:
- 提取有效响应:Watson返回的完整响应里,真正的回答内容存在
response['output']['text']这个列表里,我们直接提取这个部分就可以,不用管其他上下文、输入记录等信息。 - 对话上下文维持:
context变量用来保存对话状态,比如你之前问过的问题,Watson会记住,这样多轮对话更自然。 - 循环交互:用
while True实现持续提问,直到用户输入“退出”才结束。 - 异常处理:加了
try-except,避免调用Watson出错时程序直接崩溃。
你只需要把代码里的你的用户名、你的密码、你的工作空间ID替换成你自己的Watson账号信息就行啦,运行之后就能和Watson清爽对话了!
内容的提问来源于stack exchange,提问作者user9463268
相关产品推荐
相关产品推荐

