使用Flask和开源LLM(LLAMA3🤖)构建WhatsApp聊天机器人。我们将使用Flask、来自OpenAI的模型和来自AnyScale、Twilio和Ngrok的开源模型创建一个智能的WhatsApp聊天机器人。请按照我们的分步指南实现这些技术,并发现它们如何协同工作以构建一个互动且清晰的聊天体验,让技术变得易于使用且引人入胜。
我们将使用Ngrok和Flask作为我们的服务器,Twilio作为WhatsApp的代理,使用Anyscale API来调用开源模型生成答案,并用Flask应用来提供请求和响应的API。 🛠 #Ngrok #Flask #Twilio #AnyscaleAPI #开源 #API
但在我们深入讲解之前,让我们先看看它的实际演示。
展示一个简单的WhatsApp聊天助手原型,使用大模型来回答问题并提供活动建议
如果您有任何反馈想要提供给我们,请联系我。以下是一些关于我们如何制作这个原型的技术细节。
🛠️我们需要遵循的步骤:
1. 🆓 免费注册Anyscale上的开源LLM、Twilio和Ngrok账户
👉首先,访问AnyScale网站(https://www.anyscale.com/)并注册一个免费账户,这将为你提供50美元的信用;只需电子邮件即可;不需要信用卡或手机验证码。根据指引创建AnyScale的API密钥。记住你的API密钥,你将在代码中需要它。
接下来,访问Twilio网站,然后注册一个免费账号。
创建您的 Twilio 账户后,进入 Twilio 控制台。在侧边栏中找到并点击 发送 WhatsApp 消息
。这样就可以让 Twilio 代表您通过 WhatsApp 平台发送和接收消息了。📱
最后一步,创建一个 Ngrok 账户。Ngrok 是一个免费工具,允许我们将公共 URL 连接到本地的应用程序。Ngrok 很有用,可以为本地应用程序提供公共访问。
在 Ngrok 上创建一个账号很重要,因为我们需要一个认证 token 才能开始连接。对吧?🌟
2. ⚙️ 项目环境的设置:最佳做法和重要配置
从以下命令开始,在终端中使用这些命令来创建一个虚拟环境:
# 要创建一个虚拟环境,请在终端中使用以下命令
conda create -p venv python=3.8 -y
source ./venv/bin/activate
一个虚拟环境帮助隔离项目依赖项,保证开发环境干净且有条理,整洁有序。
📋 明确一下项目的要求
列出您的项目所需的包,通过创建一个 requirements.txt
文件来。使用如下命令安装它们:
pip install -r requirements.txt
该命令用于安装requirements.txt文件中列出的所有依赖包。
这就能保持包版本的一致性,这样一来,协作环境的设置就简单多了。
🔐 Ngrok 验证
将您的 Ngrok 认证令牌(Token)添加到本地环境中。请运行以下命令:
ngrok authtoken YOUR_AUTH_TOKEN
(这里,YOUR_AUTH_TOKEN 是你的认证令牌)
这条命令将您的本地 Ngrok 客户端程序绑定到您的 Ngrok 账号,使你可以将本地服务器链接到公共 URL 等功能。
保密事项及API密钥
为了安全,优先考虑将敏感信息(例如您的 AnuScale API 密钥)存储在专用环境文件(.env
)中。在项目目录中创建一个名为 .env
的新文件,并添加以下行:
添加 your_secrets_key
和实际的 API 密钥。在配置 AnyScale (https://www.anyscale.com/) 账号时得到这些密钥。使用专用的环境文件不仅增强了安全性,还隔离了配置详情与代码库。
3. 使用开源模型和Twilio实现WhatsApp聊天bot的Flask应用
我们将探讨一个负责处理收到的 WhatsApp 消息、使用 AnyScale 的开源模型 Llama3 生成回复并通过 Twilio 发送回复的 Flask 应用程序的实现细节。
🚀 启动 Flask 并加载环境配置变量
imp或者t openai from openai import OpenAI from flask import Flask, request from twilio.twiml.messaging_response import MessagingResponse from twilio.rest import Client from dotenv import load_dotenv import os import sys
加载环境变量配置。 创建一个Flask应用实例。
代码导入了必要的模块,包括 Flask 用于构建 web 应用,Twilio 用于处理消息,以及开源大语言模型,以利用 AnyScale 提供的 llama3 模型。load_dotenv()
函数从 .env
文件中加载环境变量,例如 Anyscale API Key。
🔑 检索密钥和API令牌
anyscale_api_key = os.getenv("ANY_SCALE_API_KEY") # 获取环境变量中的ANY_SCALE_API密钥 anyscale_base_url = os.getenv("ANY_SCALE_API_BASE") # 获取环境变量中的ANY_SCALE_API基础URL MODEL_NAME = 'meta-llama/Meta-Llama-3-8B-Instruct' # 模型名称 account_sid = os.getenv("TWILIO_ACCOUNT_SID") # 获取环境变量中的TWILIO账户SID auth_token = os.getenv("TWILIO_AUTH_TOKEN") # 获取环境变量中的TWILIO授权令牌
这一行代码从环境变量设置中获取AnyScale API密钥。把像API密钥这样的敏感信息存到环境变量里可以提高安全性。
💭 📬 定义接收消息的Flask路由,然后用AnyScale和LLAMA3生成回复
clientopenAi = OpenAI( base_url="https://api.endpoints.anyscale.com/v1", api_key=anyscale_api_key # 初始化一个OpenAI客户端 )
# 处理接收到的消息 @app.route('/sms', methods=['POST']) def handle_incoming_message(): try: incoming_message = request.form['Body'] print(f"收到的消息:: {incoming_message}") if incoming_message.lower() == 'restart': print('正在重启应用程序...') # 你可以用相应的命令来重启程序 os.execv(sys.executable, ['python'] + sys.argv) else: # 将新消息添加到历史记录中 history.append(f"用户查询: {incoming_message}") # 如果历史记录的大小大于10,则移除最早的那条消息 if len(history) > 10: history.pop(0) # 将历史记录传递给LLM模型,附带消息说明它们是之前的用户消息 prompt = incoming_message+"\n以下是你之前的对话:\n" + "\n".join(history) + "\n请在当前消息不够充分或需要更多信息时参考这些记录。\n" print(prompt) response = clientopenAi.chat.completions.create( model=MODEL_NAME, messages=[ {"role": "system", "content": "你是一个乐于助人的助手。"}, {"role": "user", "content": prompt} ] ).choices[0].message.content print(response) print("历史记录在追加前:",history) # 将模型回复添加到历史记录中 history.append(f"{MODEL_NAME} 回复: {response}") print("历史记录:\n",history) # 如果历史记录的大小大于10,则移除最早的那条消息 if len(history) > 10: history.pop(0)
# 创建一个Twilio MessagingResponse对象 twilio_response = MessagingResponse() # 在Twilio MessagingResponse对象中添加响应 msg = twilio_response.message() msg.body(response) # 将响应返回给用户 print("twilio_response :", twilio_response) # 返回Twilio MessagingResponse对象 return str(twilio_response) except: , pass return 'OK', 200 if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=5000)
这里定义了一个路径 /sms
,Twilio 将使用此路径转发收到的消息。sms
函数提取用户的问题,使用开源模型 Llama3 生成回复,创建 Twilio 的响应并发送回去。
4. 🚀 运行 Flask 应程序
🏃♂️ 开始跑 Flask 应用
运行 python app.py
运行这个命令会启动我们的Flask应用,并让它在本地5000端口上运行。
🌐 设置 Ngrok 隧道
运行命令 ngrok http 5000
来启动隧道。
Ngrok 允许您将本地服务器连接到互联网。通过执行此命令,可以创建一个安全的隧道,将 Ngrok 的公共 URL 与您正在 5000 端口运行的 Flask 应用连接起来。
🌐 访问您的:公共网址
运行 Ngrok 后,我们将收到一个公共 URL(例如 https://abcd1234.ngrok.io
)。我们将使用此 URL 作为 webhook 的地址,让像 Twilio 这样的服务将传入的消息内容转发到我们本地的 Flask 服务器。
⚙️ 配置 Twilio 使用 Ngrok URL
最后,复制这个公共URL,然后在末尾加上 /sms
路径,再粘贴到Twilio控制台中。将此URL输入到Twilio中,打开WhatsApp后,你就可以开始对话了。
5. 📱💬 发起 WhatsApp 对话
一旦您完成了与Twilio的集成并完成了配置,您就可以用这个号码在WhatsApp上开始聊天了。
你一发送消息,你就能无缝地与你的 Flask 应用程序进行交互。Twilio 会将你的消息转发到本地服务器,在那里由 AnyScale 驱动的 chatbot 会生成回复。
💭 小贴士 💬
后台运行的应用程序:
nohup python app.py
使用 nohup
命令可以让 Python 应用程序在后台运行,即使关闭终端也不会停止执行。
执行命令 nohup ngrok http 5000
找到那个进程然后把它终止掉
运行 lsof -i:5000
命令
or
运行 `ps aux | grep 'python app.py'`,这将列出所有包含 'python app.py' 的进程。
复制运行中的进程的PID,然后杀死该进程。
如果你想终止端口5000上的进程,你可以使用这个命令:kill -9 :5000
点击这里查看:https://www.linkedin.com/in/mchugh77
mayankchugh-learning (Mayank Chugh)AI & ML 爱好者(爱好者)huggingface.co🎉 最后,结束语,
在这篇教程中,我们演示了如何使用Flask、开源模型llama3(由AnyScale提供)、Twilio和Ngrok构建WhatsApp聊天机器人的步骤。通过这些步骤,我们创建了一个能实时响应用户查询的动态智能对话机器人。通过这些步骤,您已经成功构建了一个功能性的WhatsApp聊天机器人,并了解了如何集成多种技术来创建一个智能且响应迅速的聊天系统。🚀🤖💬