[英]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”設置完成的。
要啟用此設置,您需要執行以下操作:
請記住,通過啟用此設置,Dialogflow 將收取額外費用以增加 webhook 的持續時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.