【问题标题】:Watson assistant deployment on Flask+WSGI server (gunicorn or wsgi)在 Flask+WSGI 服务器(gunicorn 或 wsgi)上部署 Watson 助手
【发布时间】:2019-12-09 16:21:44
【问题描述】:

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

我能够成功 dockerize 并运行,但有些东西破坏了我的代码。在我将消息发送到 watson 服务时,正在创建多个 watson 助手会话。当我尝试回复一个意图时,我得到另一个意图或插槽的答案或不理解消息

我已经查看了有关数字海洋和 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')

wsgi.py

from app import app

if __name__ == "__main__":
    app.run()

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

【问题讨论】:

  • 格式,标题

标签: flask ibm-cloud gunicorn wsgi watson-assistant


【解决方案1】:

使用IBM Watson Assistant with the V2 API 时,您需要注意以下对象:

  • 首先,您创建一个Assistant。它管理与 Watson Assistant 的连接。
  • 接下来,Session 是每个用户在聊天中的互动。
  • 最后,消息在会话中流向 Watson,并返回 Response

您可能已经看过这个simple code sample in the docs,您自己的代码 - 在一般层面上 - 类似。要使其工作,您需要为每个用户会话创建 Watson 会话,然后将消息作为相应会话的一部分发送。这样,聊天上下文就可以正确保存。您的代码当前初始化 Watson 并创建一次会话。您需要为每个用户创建一个会话。查看会话管理。

【讨论】:

  • 在我的 app.py 对话 = AssistantV2( iam_apikey = 'key', url='gateway.watsonplatform.net/assistant/api', version='2019-05-19') 创建一个助手和 session = conversation.create_session ("someid").get_result() 创建会话
  • 没错,但是您有多少用户与 Watson 互动?一段时间后会话超时cloud.ibm.com/docs/services/…
  • 我期待这个应用程序为每次连接的使用创建一个新的用户会话。我知道 WSGI 和 Nginx,但不是为每个用户创建新会话,并且在 NGINX 上部署后我从 IBM 获得无效会话。所以我强烈怀疑我处理对话的方式有问题。
  • 我添加到我的答案中。您的代码仅在启动时和初始化 Watson 后创建一次会话。您需要针对每个用户单独执行此操作,例如,在第一次显示聊天窗口时。
  • 您可以对输入字符串进行后处理,您可以定义基于模式的实体等等。
猜你喜欢
  • 2021-06-23
  • 1970-01-01
  • 2012-02-29
  • 2017-07-08
  • 2015-11-15
  • 2020-12-04
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
相关资源
最近更新 更多