对于watson chatbot的持续对话,我该怎么办?

时间:2017-09-14 09:02:50

标签: python django ibm-watson watson-conversation

我希望与watson chatbot进行持续对话。

现状: 聊天框不记得您之前发送的对话的状态。

我在服务器上安装了Django框架并创建了一个watson.py文件来加载工作区并使用韩文聊天应用程序KakaoTalk。

我想要的聊天机器人的对话流程如下。

用户:我想预约

Chatbot:会议日期是什么时候?

用户:明天

Chatbot:您的会议时间如何?

用户:14:00

我们非常需要你的帮助。

watson.py

import json
from watson_developer_cloud import ConversationV1
from .models import Test
from . import views
import simplejson

conversation = ConversationV1(
        username = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        password = "xxxxxxxxxxxxxxxxxxxxxx",
        version = '2017-05-26' )


workspace_id = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'           #workspace


def test(return_str):

        result = ''

        except Exception as err:
                pass

        response = conversation.message(
          workspace_id = workspace_id,
          message_input = {'text': return_str},
        )

        for i in range(len(response['output']['text'])):
                result += response['output']['text'][i] +'\n'

        return result

views.py

import json
from django.shortcuts import render
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from .models import Jidum, Test
from . import watson


# Create your views here.

def keyboard(request):
        return JsonResponse({
                'type':'text',
                })

@csrf_exempt
def message(request):
        message = ((request.body).decode('utf-8'))
        return_json_str = json.loads(message)
        return_str = return_json_str['content']    

        return JsonResponse({
                        'message': {

                                'text': watson.test(return_str),
                        },
                        'keyboard': {
                                'type':'text',
                        },
                })

2 个答案:

答案 0 :(得分:2)

正如您所看到的,Watson Developer Cloud中有很多examples用于使用来自IBM Developers的每个API。使用Watson Conversation查看一个示例。

如果您想为多个请求(消息)使用相同的对话,则需要包含上一个响应中的上下文对象。

但请记住,您需要在工作区内创建对话流。

例如:

import json
from watson_developer_cloud import ConversationV1

#########################
# message
#########################

conversation = ConversationV1(
    username='YOUR SERVICE USERNAME',
    password='YOUR SERVICE PASSWORD',
    version='2017-04-21')

# replace with your own workspace_id
workspace_id = '0a0c06c1-8e31-4655-9067-58fcac5134fc'
# this example don't include
response = conversation.message(workspace_id=workspace_id, message_input={
    'text': 'What\'s the weather like?'})
print(json.dumps(response, indent=2))

# This example include the context object from the previous response.
# response = conversation.message(workspace_id=workspace_id, message_input={
# 'text': 'turn the wipers on'},
#                                context=response['context']) //example
# print(json.dumps(response, indent=2))

答案 1 :(得分:1)

正如@SayuriMizuguchi所提到的,主要问题是没有维护context对象。

根据您的上述示例,您可以执行以下操作:

context = {}
def test(input_string):

    except Exception as err:
            pass

    response = conversation.message(
      workspace_id = workspace_id,
      message_input = {'text': return_str},
      context = context
    )

    result = '\n'.join(response['output']['text'])
    context = response['context']

    return result

然后以此为例运行:

response = test('I want to make a reservation')
print(response)
response = test('tomorrow')
print(response)