如何实现IBM Watson对话循环交互,支持回复后重复提问?
实现IBM Watson Conversation持续对话循环的解决方案
嘿,别担心,刚接触Watson Conversation遇到这个问题太正常了!我来帮你把单次对话改成可以持续聊天的循环模式,一步步来,很简单的~
问题根源
你原来的代码只执行了一次提问和回复逻辑,所以程序运行一次就结束了。要实现持续对话,我们需要加一个循环结构,同时还要注意传递对话上下文(Context),这样Watson才能记住之前的对话内容,理解上下文相关的问题。
修改后的完整代码
import json import watson_developer_cloud # 初始化Watson Conversation客户端 conversation = watson_developer_cloud.ConversationV1( username='你的Watson用户名', # 替换成你的用户名 password='你的Watson密码', # 替换成你的密码 version='2018-03-16' ) # 初始化对话上下文,用来维持对话状态 context = None print("你好!可以开始和Watson聊天啦~输入 'quit' 或 'exit' 结束对话\n") # 对话循环 while True: # 获取用户输入(Python3用input,Python2用raw_input,根据你的版本调整) question = input("你: ") # 退出条件:输入quit或exit就结束对话 if question.lower() in ['quit', 'exit']: print("再见!") break # 调用Watson的message接口,传递上下文 response = conversation.message( workspace_id='你的工作区ID', # 替换成你的workspace ID input={'text': question}, context=context # 传递上一次的对话上下文 ) # 更新上下文,用于下一次对话 context = response.get('context', {}) # 打印Watson的回复 print("Watson:") for text in response['output']['text']: print(f" {text}")
关键部分解释
- 循环结构:
while True会让程序一直运行,直到你触发退出条件(输入quit/exit)。 - 上下文传递:
context变量存储每次对话的状态,每次调用conversation.message()时传入,这样Watson能记住之前的对话内容(比如你说过的名字、偏好等)。 - 退出逻辑:判断用户输入是否是退出指令,是的话就用
break跳出循环,结束程序。 - 回复提取:Watson的回复内容在
response['output']['text']里,我们用循环把所有回复文本打印出来。
新手必备提示
- 先安装依赖包:如果还没装
watson-developer-cloud,打开终端执行pip install watson-developer-cloud。 - 填写正确的凭证:
username、password和workspace_id都要从IBM Cloud的Watson Conversation服务控制台获取,别留空或填错哦! - 测试上下文:可以试试先问“我叫小明”,再问“我叫什么名字”,Watson应该能正确回答,这就是上下文的作用~
内容的提问来源于stack exchange,提问作者user9463268
相关产品推荐
相关产品推荐

