扩展Dialogflow聊天机器人的能力:连接到OpenAI GPT API
Dialogflow来自谷歌的是一个聊天机器人开发框架,可以帮助您快速开始开发一个机器人,而无需依赖复杂的代码或机器学习模型。在本文中,我将概述使用Dialogflow构建聊天机器人并使用Python建立webhook连接的逐步过程。
Webhooks使不同平台之间实现无缝集成,并允许我们在机器人上添加一层。与外部平台集成允许聊天机器人进行复杂操作,获取实时信息,并从各种来源访问数据。
我们在建造什么?
在这篇文章中,我们将创建一个聊天机器人,通过我们的webhook连接到OpenAI,并将响应发送给用户。通过阅读本文,您将了解如何将第三方平台与您的Dialogflow聊天机器人无缝集成。
我们将使用Python编写我们的Webhook功能,并使用Replit托管代码。Replit是一个集成开发环境,可以用来托管我们的功能逻辑。
Replit 可以是设置和尝试 Webhook 连接的有效选择。这将为我们提供一个 URL,我们可以将其连接到 Dialogflow。但是请记住,Replit 通常不推荐用于生产目的。
使用Dialogflow入门
要开始,请在Dialogflow中创建一个账户。代理程序负责与最终用户/客户进行对话。它会分析用户的输入/查询,并使用预建的回复进行回应。
创建一个代理: 在Dialogflow屏幕上,点击“+ 创建代理”按钮,然后您应该给代理取一个名字并保存。现在,您的代理已创建成功。
使用意图进行工作
意图用于将用户的意图分为不同的类别。Dialogflow的默认意图有两个。
- 默认欢迎意图:默认欢迎意图通常用于发送欢迎消息或介绍。
- 默认的回退意图:当代理程序无法将用户的输入与指定的意图匹配时,将触发此意图。它为意外查询提供一个通用的响应。
点击“创建意图”以创建您的第一个意图。
在那里,您需要提供
- 意图名称
- 训练短语:一组可能被聊天机器人最终用户提问的短语。
- 操作:操作是与意图匹配时可以执行的任务或操作,与履行或网络钩子功能相关联。
- 参数:参数用于从用户的输入中提取特定信息,并将其与意图匹配。允许聊天机器人只收集完成用户请求所必需的重要细节。
尽管动作和参数是可选组件,但它们在提高机器人的性能方面扮演着关键角色。
跟进意图:这些意图会自动设置上下文,继承自父意图的上下文。
使用OpenAPI和GPT API进行工作
让我们看看如何将这个聊天机器人与OpenAI集成起来。为此,您应该拥有一个OpenAI API密钥。要生成OpenAI API密钥,请按照以下步骤操作:
- 去OpenAI的网站注册一个账号,如果你还没有的话。
- 一旦您登录,您需要在“应用”页面上选择API。
- 在主页上,单击右上角的个人资料图标。从下拉菜单中选择“查看 API 密钥”。您可以在那里找到您的 API 密钥。
在Replit中设置逻辑
现在您已经获得了您的OpenAI API密钥,是时候设置开发环境了。
1. 创建一个新的Repl
去Replit并创建一个新的repl。选择Python作为模板语言,并给你的repl起一个名字。
2. 创建OpenAI助手
创建一个名为“helper”的文件夹,并添加一个名为openai_api.py的文件。我们需要以下库来使用OpenAI。
- 开放AI - 访问OpenAI SDK的库
- dotenv — 从环境文件中访问变量的库
创建一个名为text_completion的函数,该函数接收提示字符串并调用OpenAI API来使用openai.Completion.create方法。
import os
import openai
from dotenv import load_dotenv
load_dotenv()
openai.api_key = os.environ['OPENAI_KEY']
def text_completion(prompt: str) -> dict:
'''
Call Openai API for text completion
Parameters:
- prompt: user query (str)
Returns:
- dict
'''
try:
response = openai.Completion.create(model='text-davinci-003',
prompt=f'Human: {prompt}\nAI: ',
temperature=0.9,
max_tokens=150,
top_p=1,
frequency_penalty=0,
presence_penalty=0.6,
stop=['Human:', 'AI:'])
return {'status': 1, 'response': response['choices'][0]['text']}
except:
return {'status': 0, 'response': ''}
这个代码块使用了必要的模块 'os'、'openai' 和 'dotenv',从环境变量获取 API 密钥,与 OpenAI 进行交互并将返回值作为文本返回。
3. 设置 Webhook 的路由
创建一个名为"src"的新文件夹。在该文件夹中,创建一个名为app.py的文件。这个文件将包含与OpenAI API进行文本补全交互的路由。
- “/” - 此路由定义了Flask应用的主页路由。当访问时,返回字符串“OK”。
@app.route('/')
def home():
return 'OK'
@app.route('/dialogflow/es/receiveMessage', methods=['POST'])
def esReceiveMessage():
try:
data = request.get_json()
result = text_completion(query_text)
if result['status'] == 1:
return jsonify(
{
'fulfillmentText': result['response']
}
)
else:
return jsonify(
{
'fulfillmentText': "Couldn't fetch response for query: " + query_text
}
)
except:
print("an error occurred")
pass
return jsonify(
{
'fulfillmentText': 'Something went wrong.'
}
)
这是app.py的完整代码。
from flask import Flask, request,jsonify
from helper.openai_api import text_completion
app = Flask(__name__)
@app.route('/')
def home():
return 'OK'
@app.route('/dialogflow/es/receiveMessage', methods=['POST'])
def esReceiveMessage():
try:
data = request.get_json()
result = text_completion(query_text)
print(result)
if result['status'] == 1:
return jsonify(
{
'fulfillmentText': result['response']
}
)
else:
return jsonify(
{
'fulfillmentText': "Couldn't fetch response for query: " + query_text
}
)
except:
print("an error occurred")
pass
return jsonify(
{
'fulfillmentText': 'Something went wrong.'
}
)
4. 设置环境变量
现在,您需要将API密钥添加到秘密中。这样,它就不会被滥用。
- 在左侧边栏中,在“工具”栏下方,点击“秘密”图标以打开“秘密”页面。
- 从那里,选择 '新密码' 并在 '密钥' 字段中输入 API 名称(OPENAI_KEY),在 '值' 字段中输入相应的 API 密钥。
4. 运行Flask应用程序
创建一个main.py文件。在这里初始化一个简单的Flask应用并在端口5000上运行它。
from src.app import app
if __name__ =='__main__':
app.run(
host='0.0.0.0',
port=5000,
debug=True
)
上面的代码在指定的端口和主机上运行Flask应用程序,并启用调试模式用于开发。运行此代码后,所需的包将自动安装。
你会得到这样的回答。
在您的浏览器中打开此链接。然后,复制URL。
将URL粘贴到Dialogflow履行中,后面跟着"/dialogflow/es/receiveMessage"作为路径。
启用Fallback Intent上的Webhook。因此,当用户发送一条机器人无法理解的消息时,将触发Fallback Intent,并向Webhook发送一个请求。
现在,让我们检查它是否工作。在这里,用户说“你好”,响应将从默认欢迎意图触发。
当用户提出像“什么是人工智能?”这样不符合任何特定意图的问题时,它将落入回退意图,并触发 webhook 从 OpenAI 返回响应。
当Webhook成功执行时,您点击履行状态下的诊断信息,会出现如下情况。
我希望你现在已经对Webhook履行和聊天机器人如何与OpenAI集成有了扎实的理解。