使用Flask和Conversation 做一个小的对话程序
使用Flask做一个对话程序
事前准备
- 做成一个conversation的workspace
示例代码
- 1 初始化conversation对象
username和password是api的用户名密码,version是api的版本号
def __init__(self):
self.cvsn = ConversationV1(
username=CVSN.USERNAME,
password=CVSN.PASSWORD,
version='2017-05-26'
)
- 2 封装一个对话方法
text是对话文本,context是上下文。返回值是conversation的回答文本
注意如果想进行连续的对话,则需要把前次对话取得的response中的context作为参数传入本次对话中,如果context为空,则视为一个新的对话开始。
def message(self,text,context):
response = self.cvsn.message(workspace_id=CVSN.WORKSPACE, message_input={
'text': text},context=context)
self.infos = json.dumps(response,ensure_ascii=False, indent=2)
self.context = response['context']
return response['output']['text'][0]
- 3 画面入口方法
作为入口,在用户使用之前先调用一次conversation取得context
将context放入session中。
这里需要注意一点,想使用session 需要在flask对象中注册secret_key
app = Flask(__name__)
app.config['SECRET_KEY'] = 'atp_secret_key'
@app.route('/', methods=['GET'])
def conversation():
#初始页面
question = ''
answer = cvsn.message(question, None)
debugInfo = cvsn.debugInfo()
session['cvsn_context'] = cvsn.context
return render_template('cvsn.html',question = question, answer = answer, debugInfo = debugInfo)
- 4 对话方法
将画面上输入的问题发送给conversation
@app.route('/question', methods=['GET'])
def question():
#从画面获取文本信息
question = request.args.get('qTxt', '')
context = session['cvsn_context']
answer = cvsn.message(question, context)
session['cvsn_context'] = cvsn.context
debugInfo = cvsn.debugInfo()
question = ''
return render_template('cvsn.html',question = question, answer = answer, debugInfo = debugInfo)