Watson assistant部署在Flask+上;WSGI服务器(gunicorn或WSGI)

Watson assistant部署在Flask+上;WSGI服务器(gunicorn或WSGI),flask,ibm-cloud,gunicorn,wsgi,watson-assistant,Flask,Ibm Cloud,Gunicorn,Wsgi,Watson Assistant,我正在Flask+Gunicorn+Nginx上部署我的watson助手聊天机器人 我能够成功地进行dockerize并运行,但有东西破坏了我的代码。在我向watson services发送消息时,正在创建多个watson assistant会话。当我试图回答一个意图时,我得到了另一个意图或槽的答案,或者不理解消息 我已经回顾了所有关于digital ocean和github的教程,但我认为创建聊天机器人会话应该以不同的方式处理 app.py from flask import Flask, r

我正在Flask+Gunicorn+Nginx上部署我的watson助手聊天机器人

我能够成功地进行dockerize并运行,但有东西破坏了我的代码。在我向watson services发送消息时,正在创建多个watson assistant会话。当我试图回答一个意图时,我得到了另一个意图或槽的答案,或者不理解消息

我已经回顾了所有关于digital ocean和github的教程,但我认为创建聊天机器人会话应该以不同的方式处理

app.py

from flask import Flask, render_template,Response,make_response,jsonify
import os
from ibm_watson import AssistantV2
import random
from random import randint
import json
#import report
from io import StringIO

app = Flask(__name__)

conversation = AssistantV2(
    iam_apikey = 'key',
    url='https://gateway.watsonplatform.net/assistant/api',
    version='2019-05-19')
session = conversation.create_session("someid").get_result()
variables  = None
#context_val = {}

@app.route('/')
@app.route('/index')
def chat():
    return render_template('chat.html')

@app.route('/send_message/<message>')
def send_mesage(message):
    text = ''
    response = conversation.message(
        assistant_id = 'id',
        session_id= session['session_id'],input={'text': str(message),'options': {
      'return_context': True}}
        ).get_result()
    variables =  response['output'].get('user_defined')
    #context = response['context']['skills']['main skill']['user_defined']

    for i in response['output']['generic']:
        text = text+ i['text']+'\n'
        return text
if __name__ == "__main__":
    app.run(host='0.0.0.0')
Dockerfile

FROM python:3.6
WORKDIR /app
ADD . /app
RUN chgrp -R 0 /app/app.log && chmod -R g=u /app/app.log
RUN pip install -r requirements.txt
EXPOSE 8080
CMD ["gunicorn", "-b", "0.0.0.0:8080", "app", "-p 8080:8080"]
RUN chmod 770 /app
USER 1001
使用时,需要注意以下对象:

  • 首先,创建一个助手。它管理与Watson Assistant的连接
  • 接下来,是聊天室中每个用户的交互
  • 最后,一条消息在会话中流向Watson,并返回响应

您可能已经看到了这一点,您自己的代码在一般级别上是类似的。要使其工作,您需要为每个用户会话创建Watson会话,然后将消息作为相应会话的一部分发送。这样,可以正确地保留聊天上下文。您的代码当前初始化Watson并创建一次会话。您需要为每个用户创建一个会话。查看会话管理。

格式化,titilein my app.py conversation=AssistantV2(iam_apikey='key',url='',version='2019-05-19')创建一个助手,会话=conversation。创建会话(“someid”)。获取会话结果()准确地创建会话,但您有多少用户与Watson交互?会话超时一段时间后,我希望这个应用程序为每次连接的使用创建一个新的用户会话。我知道WSGI和Nginx,但并不是为每个用户创建新会话,而且在Nginx上部署后,我从IBM获得了无效会话。所以我强烈怀疑我处理对话的方式有问题。我补充了我的答案。您的代码仅在会话启动和初始化Watson之后创建一次会话。您需要单独和按用户进行操作,例如,第一次显示聊天窗口时。您可以对输入字符串进行后期处理,您可以定义基于模式的实体等等。
FROM python:3.6
WORKDIR /app
ADD . /app
RUN chgrp -R 0 /app/app.log && chmod -R g=u /app/app.log
RUN pip install -r requirements.txt
EXPOSE 8080
CMD ["gunicorn", "-b", "0.0.0.0:8080", "app", "-p 8080:8080"]
RUN chmod 770 /app
USER 1001