簡體   English   中英

延長 gpt api 調用的 dialogflow webhook 截止時間

[英]extend dialogflow webhook deadline time for gpt api call

我正在嘗試使用我在 inte.net 上找到的腳本來延長通過 Google Dialogflow 進行 webhook 請求的最長時間(最多 5 秒超時)。 我需要延長時間,因為我對 openai 進行了 API 調用,有時需要超過 5 秒。 我的想法是並行啟動這兩個功能。 broadbridge_webhook_results() function 可以通過在 3.5 秒后在 Dialogflow 觸發 followupEventInput 來延長時間,因此新的呼叫通過 Dialogflow 來,5 秒從新開始。 這顯然高達 2 倍。 同時,應向 openai 撥打 API。 一旦 API 調用成功,應立即將答案發送回 Dialogflow。 不幸的是,我目前沒有取得任何進展,我認為我錯誤地設置或理解了線程功能。

到目前為止我有以下代碼:

import os
import openai
import time
import backoff
from datetime import datetime, timedelta
from flask import Flask, request, render_template
from threading import Thread
import asyncio

app = Flask(__name__)

conversation_History = ""
user_Input = ""
reply=''
answer = ""

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

@backoff.on_exception(backoff.expo, openai.error.RateLimitError)
def ask(question):
  global conversation_History
  global answer
  global reply
  openai.api_key = os.getenv("gtp_Secret_Key")  
  #start_sequence = "\nAI:"
  #restart_sequence = "\nHuman: "
  response = openai.Completion.create(
    model="text-davinci-003",
    prompt="I am a chatbot from OpenAI. I'm happy to answer your questions.\nHuman:" + conversation_History + " "+ question +"\nAI: ",    
    temperature=0.9,
    max_tokens=500,
    top_p=1,
    frequency_penalty=0,
    presence_penalty=0.6,
    stop=[" Human:", " AI:"]
    )
  conversation_History = conversation_History + question + "\nAI" + answer + "\nHuman:"
  answer = response.choices[0].text  

def broadbridge_webhook_results():
  global answer
  
  now = datetime.now()
  current_time = now.strftime("%H:%M:%S")
  print("Current Time =", current_time)

  extended_time = now + timedelta(seconds=3)
  print("extended Time =", extended_time.time())

  req = request.get_json(force=True)

  action = req.get('queryResult').get('action')
  reply=''

  if action=='input.unknown' or action=='input.welcome':
    time.sleep(3.5)

    if now<=extended_time and not len(answer) == 0:
      reply={
              "fulfillmentText": answer,
              "source": "webhookdata"
            }

    reply={      
      "followupEventInput": {        
        "name": "extent_webhook_deadline",        
        "languageCode": "en-US"
        }
      }

  if action=='followupevent':
    print("enter into first followup event")
    time.sleep(3.5)

    if now<=extended_time and not len(answer) == 0:
      reply={
        "fulfillmentText": answer,
        "source": "webhookdata"
      }

    reply={      
      "followupEventInput": {        
        "name": "extent_webhook_deadline_2",        
        "languageCode": "en-US"
        }
      }
    
  if action=='followupevent_2':
    print("enter into second followup event")
    time.sleep(3.5)

    reply={
      "fulfillmentText": answer,
      "source": "webhookdata"
    }
        
    print("Final time of execution:=>", now.strftime("%H:%M:%S"))

@app.route('/webhook', methods=['GET', 'POST'])
def webhook():
  global answer
  global reply

  answer=""
  req = request.get_json(silent=True, force=True)
  user_Input = req.get('queryResult').get('queryText')
  Thread(target=broadbridge_webhook_results()).start()
  Thread(target=ask(user_Input)).start()
  
  return reply

#conversation_History = conversation_History + user_Input + "\nAI" + answer + "\nHuman:"
#if now<=extended_time and not len(answer) == 0:
  
if __name__ == '__main__':
  app.run(host='0.0.0.0', port=8080)

Dialogflow 支持通過增加 webhook 執行時間限制將 webhook 執行時間限制增加到最多 30 秒。 這是通過 Dialogflow 代理配置文件中的“extend_webhook_deadline”設置完成的。

要啟用此設置,您需要執行以下操作:

  1. 訪問 Dialogflow 控制台
  2. Select 想要開啟設置的座席
  3. 點擊左側邊欄的“設置”
  4. 點擊“導出和導入”
  5. Select “導出為 ZIP”
  6. 在下載的 ZIP 文件中找到“agent.json”文件
  7. 使用文本編輯器打開“agent.json”文件
  8. 找到“問候語”部分
  9. 添加以下行“extend_webhook_deadline”:true
  10. 保存更改並將“agent.json”文件導入回 Dialogflow

請記住,通過啟用此設置,Dialogflow 將收取額外費用以增加 webhook 的持續時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM