从零开始构建智能聊天机器人:Rasa与ChatGPT API实战教程
引言:AI对话系统的时代机遇
在数字化转型浪潮中,聊天机器人已成为连接用户与服务的关键纽带。无论是客服系统中的7×24小时即时响应,还是智能家居中的语音交互,聊天机器人正在重塑人机交互方式。本文将通过详细教程,手把手教你使用Rasa框架和ChatGPT API构建可交互的Web端聊天机器人,涵盖环境搭建、模型训练、API调用到部署运维的全流程。
一、技术选型:Rasa与ChatGPT的核心优势
Rasa框架:开源对话系统的瑞士军刀
- 模块化架构:NLU(自然语言理解)+ Core(对话管理)+ X(可视化工具);
- 数据可控性:支持本地化训练,敏感数据无需上传云端;
- 定制灵活性:通过YAML文件定义对话流程,Python代码实现业务逻辑;
- 典型场景:需要复杂多轮对话、领域知识库集成的企业级应用。
ChatGPT API:生成式AI的终极武器
- 大模型能力:基于GPT-3.5-turbo引擎,擅长开放式对话与创意生成;
- 快速迭代:通过API调用即可获得最新模型能力,无需本地训练;
- 成本效益:按需付费模式($0.002/1000 tokens),适合流量波动大的场景;
- 典型场景:客服问答、内容创作、教育辅导等泛场景对话。
二、基于Rasa的聊天机器人开发实战
2.1 环境搭建:Python生态的魔法启动
# 创建虚拟环境(推荐Python 3.8+)
python -m venv rasa_env
source rasa_env/bin/activate # Linux/Mac
rasa_env\Scripts\activate # Windows# 安装Rasa核心库
pip install rasa# 初始化项目(自动生成示例文件)
rasa init --no-prompt
2.2 领域建模:对话系统的DNA设计
domain.yml示例:
version: "3.0"
intents:- greet- ask_weather- goodbyeentities:- cityresponses:utter_greet:- text: "你好!我是天气查询机器人,请输入城市名称查询天气"utter_weather:- text: "🌦️ {city}今天天气:晴,温度25℃"actions:- action_fetch_weather
2.3 训练数据准备:NLU的粮食
nlu.yml示例:
version: "3.0"
nlu:- intent: greetexamples: |- 你好- 早上好- 在吗- intent: ask_weatherexamples: |- [北京](city)天气怎么样- 查[上海](city)的天气预报
stories.yml示例:
version: "3.0"
stories:- story: 简单查询steps:- intent: greet- action: utter_greet- intent: ask_weather- action: action_fetch_weather- intent: goodbye- action: utter_goodbye
2.4 模型训练与优化
# 训练NLU模型
rasa train nlu# 训练对话模型
rasa train core# 交叉验证测试
rasa test
2.5 部署与Web集成
app.py(使用Flask-SocketIO实现实时通信):
from flask import Flask, render_template
from flask_socketio import SocketIO, send
import rasaapp = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'
socketio = SocketIO(app)# 加载训练好的Rasa模型
interpreter = rasa.model.get_model('models').interpreter@app.route('/')
def index():return render_template('chat.html')@socketio.on('message')
def handle_message(msg):# 获取用户输入user_input = msg['message']# Rasa模型处理result = interpreter.parse(user_input)response = result['text']# 返回响应send({'message': response}, broadcast=True)if __name__ == '__main__':socketio.run(app, debug=True)
chat.html前端界面:
<!DOCTYPE html>
<html>
<head><title>Rasa聊天机器人</title><style>.chat-container { height: 400px; overflow-y: auto; border: 1px solid #ccc; }.message { padding: 8px; margin: 5px; border-radius: 4px; }.user { background-color: #e3f2fd; text-align: right; }.bot { background-color: #f0f4c3; text-align: left; }</style>
</head>
<body><div class="chat-container" id="chatbox"></div><input type="text" id="userInput" placeholder="输入消息..."><button onclick="sendMessage()">发送</button><script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.js"></script><script>const socket = io();function sendMessage() {const message = document.getElementById('userInput').value;const chatbox = document.getElementById('chatbox');// 添加用户消息chatbox.innerHTML += `<div class="message user">${message}</div>`;// 发送消息到后端socket.emit('message', { message });// 清空输入框document.getElementById('userInput').value = '';// 自动滚动到底部chatbox.scrollTop = chatbox.scrollHeight;}// 接收机器人响应socket.on('message', (data) => {const chatbox = document.getElementById('chatbox');chatbox.innerHTML += `<div class="message bot">${data.message}</div>`;chatbox.scrollTop = chatbox.scrollHeight;});</script>
</body>
</html>
三、ChatGPT API快速集成方案
3.1 API密钥获取
- 访问https://www.openai.com/注册账号;
- 进入控制台生成API密钥(妥善保管)。
3.2 Python调用示例
import openai
import os# 从环境变量加载API密钥
openai.api_key = os.getenv("OPENAI_API_KEY")def chat_with_gpt(prompt, max_tokens=50, temperature=0.7):response = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=[{"role": "user", "content": prompt}])return response.choices[0].text.strip()# 测试对话
user_input = "帮我写一首关于秋天的诗"
bot_response = chat_with_gpt(user_input)
print(f"用户: {user_input}\n机器人: {bot_response}")
3.3 Web端集成(Flask示例)
from flask import Flask, request, jsonifyapp = Flask(__name__)@app.route('/chat', methods=['POST'])
def chat():user_message = request.json['message']bot_response = chat_with_gpt(user_message)return jsonify({'response': bot_response})if __name__ == '__main__':app.run(port=5000)
四、混合架构:Rasa + ChatGPT的协同进化
4.1 架构设计
Rasa + ChatGPT协同进化。
4.2 实现步骤
- Rasa处理结构化请求:
# actions.py
from rasa_sdk import Action
import openaiclass ActionQueryWeather(Action):def name(self):return "action_query_weather"def run(self, dispatcher, tracker, domain):city = tracker.get_slot("city")prompt = f"查询{city}的实时天气"response = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=[{"role": "user", "content": prompt}])dispatcher.utter_message(text=response.choices[0].text)return []
2.配置Rasa调用外部API:
# endpoints.yml
action_endpoint:url: "http://localhost:5055/webhook"
五、部署与运维最佳实践
5.1 部署方案选择
| 方案 | 适用场景 | 成本 | 灵活性 |
|---|---|---|---|
| 本地服务器 | 小型项目/测试环境 | 低 | 中 |
| 云函数(AWS Lambda) | 流量波动大 | 中 | 高 |
| 容器化(Docker+K8s) | 企业级生产环境 | 较高 | 极高 |
5.2 性能优化技巧
- 请求批处理:合并多个用户请求减少API调用次数;
- 缓存机制:对高频问题(如天气查询)设置缓存过期时间;
- 负载均衡:使用Nginx分发请求到多个Rasa实例。
六、业务场景深度定制
6.1 物流供应链案例
需求:优化多式联运调度决策。
实现:
def analyze_logistics_data(data):# 使用ChatGPT解析非结构化物流数据prompt = f"分析以下物流数据:\n{data}"response = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=[{"role": "user", "content": prompt}])return response.choices[0].text
6.2 教育平台案例
需求:个性化学习路径推荐。
实现:
def generate_study_plan(student_data):prompt = f"根据以下学生数据生成学习计划:\n{student_data}"response = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=[{"role": "user", "content": prompt}])return response.choices[0].text
七、总结与展望
本文通过Rasa框架和ChatGPT API的组合拳,展示了从基础聊天机器人到企业级智能对话系统的完整开发流程。未来,随着大模型能力的持续进化,以下方向值得关注:
- 多模态交互:集成语音识别、图像理解等能力;
- 强化学习:通过用户反馈优化对话策略;
- 边缘计算:在本地设备实现低延迟响应。
立即动手实践,构建属于你的智能对话系统吧!
相关文章:
从零开始构建智能聊天机器人:Rasa与ChatGPT API实战教程
引言:AI对话系统的时代机遇 在数字化转型浪潮中,聊天机器人已成为连接用户与服务的关键纽带。无论是客服系统中的724小时即时响应,还是智能家居中的语音交互,聊天机器人正在重塑人机交互方式。本文将通过详细教程,手把…...
编码常见的 3类 23种设计模式——学习笔记
一、创建型(用于方便创建实例) 1. 单例模式 优点: 确保系统中只有一个实例存在,避免多个实例导致的资源冲突或数据不一致问题。例如,数据库连接池、线程池等全局资源管理器适合用单例实现。 减少频繁创建和销毁对象的开销,尤其适…...
# 实时人脸性别与年龄识别:基于OpenCV与深度学习模型的实现
实时人脸性别与年龄识别:基于OpenCV与深度学习模型的实现 在当今数字化时代,计算机视觉技术正以前所未有的速度改变着我们的生活与工作方式。其中,人脸检测与分析作为计算机视觉领域的重要分支,已广泛应用于安防监控、智能交互、…...
x-cmd install | Slumber - 告别繁琐,拥抱高效的终端 HTTP 客户端
目录 核心优势,一览无遗安装应用场景,无限可能示例告别 GUI,拥抱终端 还在为调试 API 接口,发送 HTTP 请求而苦恼吗?还在各种 GUI 工具之间切换,只为了发送一个简单的请求吗?现在,有…...
apijson 快速上手
apijson是强大的工具,简化了CRUD的操作,只要有数据库表,就能自动生成RESTFUL接口。但初次上手也是摸索了很长时间,尤其是部署与使用上,这里尝试以初学者角度来说下: 一、好处 1、对于简单的应用ÿ…...
3D激光轮廓仪知识整理
文章目录 1.原理和应用场景1.1 相机原理1.1.1 测量原理1.1.2 相机激光器1.1.3 沙姆镜头1.1.4 相机标定1.1.5 中心线提取 1.2 应用场景1.2.1 测量相关应用1.2.2 缺陷检测相关应用 2.相机参数介绍及选型介绍2.1 成像原理2.2 原始图成像2.3 生成轮廓图2.4 相机规格参数2.4.1 单轮廓…...
Stable Diffusion+Pyqt5: 实现图像生成与管理界面(带保存 + 历史记录 + 删除功能)——我的实验记录(结尾附系统效果图)
目录 🧠 前言 🧾 我的需求 🔧 实现过程(按功能一步步来) 🚶♂️ Step 1:基本图像生成界面 🗃️ Step 2:保存图片并显示历史记录 📏 Step 3:…...
使用WasmEdge将InternLM集成到Obsidian,打造本地智能笔记助手
本文来自社区投稿,作者Miley Fu,WasmEdge Runtime 创始成员。 本文将介绍如何通过 WasmEdge 将书生浦语(InternLM)大模型部署在本地,并与 Obsidian 笔记软件集成,从而在笔记软件中直接利用大模型实现文本总…...
深入理解Softmax函数及其在PyTorch中的实现
Softmax函数简介 Softmax函数在机器学习和深度学习中,被广泛用于多分类问题的输出层。它将一个实数向量转换为概率分布,使得每个元素介于0和1之间,且所有元素之和为1。 Softmax函数的定义 给定一个长度为 K K K的输入向量 z [ z 1 , z 2 …...
JGraphT 在 Spring Boot 中的应用实践
1. 引言 1.1 什么是 JGraphT JGraphT 是一个用于处理图数据结构和算法的 Java 库,提供了丰富的图类型和算法实现。 1.2 为什么使用 JGraphT 丰富的图类型:支持简单图、多重图、伪图等多种图类型。强大的算法库:提供最短路径、最小生成树、拓扑排序等多种算法。易于集成:…...
java导入excel更新设备经纬度度数或者度分秒
文章目录 一、背景介绍二、页面效果三、代码0.pom.xml1.ImportDevice.vue2.ImportDeviceError.vue3.system.js4.DeviceManageControl5.DeviceManageUserControl6.Repeater7.FileUtils8.ResponseModel9.EnumLongitudeLatitude10.词条 四、注意点本人其他相关文章链接 一、背景介…...
视频设备轨迹回放平台EasyCVR远程监控体系落地筑牢国土监管防线
一、背景概述 我国土地资源遭违法滥用的现象愈发严峻,各类土地不合理利用问题频发。不当的土地开发不仅加剧了地质危害风险,导致良田受损、森林资源的滥伐,还引发了煤矿无序开采、城市开发区违建等乱象,给国家宝贵的土地资源造成…...
tree-sitter 的 grammar.js 编写方法
tree-sitter 的 grammar.js 编写方法 一、grammar.js 的作用是什么?二、基本结构三、关键词解释四、编写小技巧1. 起点是 source_file2. 所有规则名(如 identifier, number)都是 $ > ...3. 正则表达式用于定义词法规则(终结符&…...
Git 实践笔记
这里写自定义目录标题 一、将当前改动追加到某次commit上二、git 强制修改分支位置 一、将当前改动追加到某次commit上 stash工作区中的当前改动 git stash假设需要修改的commit是 f744c32,将HEAD移动到需要改动的commit的父提交上 git rebase f744c32^ --interact…...
【特权FPGA】之数码管
case语句的用法: 计数器不断的计数,每一个num对应数码管一种数据的输出。实例通俗易懂,一目了然。 timescale 1ns / 1ps// Company: // Engineer: // // Create Date: // Design Name: // Module Name: // Project Name: //…...
Stable Diffusion 四重调参优化——项目学习记录
学习记录还原:在本次实验中,我基于 Stable Diffusion v1.5模型,通过一系列优化方法提升生成图像的质量,最终实现了图像质量的显著提升。实验从基础的 Img2Img 技术入手,逐步推进到参数微调、DreamShaper 模型和 Contro…...
遇到git提交报错:413
是因为提交文件过大导致内存溢出。 解决方法: 假设您的提交历史如下: Apply to .gitignore abcd123 当前提交 efgh456 包含node_modules的提交 ijkl789 较早的正常提交 您可以: 回退到添加node_modules之前的提交: bash App…...
关于nacos注册的服务的ip异常导致网关路由失败的问题
文章目录 关于nacos注册的服务的ip异常导致网关路由失败的问题相关处理方案为方案一:手动指定服务注册的 IP 地址方法二:设置优先使用的网络段方法三:指定网络接口方法四:忽略特定的网卡 备注 关于nacos注册的服务的ip异常导致网关路由失败的…...
大模型在初治CLL成人患者诊疗全流程风险预测与方案制定中的应用研究
目录 一、绪论 1.1 研究背景与意义 1.2 国内外研究现状 1.3 研究目的与内容 二、大模型技术与慢性淋巴细胞白血病相关知识 2.1 大模型技术原理与特点 2.2 慢性淋巴细胞白血病的病理生理与诊疗现状 三、术前风险预测与手术方案制定 3.1 术前数据收集与预处理 3.2 大模…...
【C++游戏引擎开发】第9篇:数学计算库GLM(线性代数)、CGAL(几何计算)的安装与使用指南
写在前面 两天都没手搓实现可用的凸包生成算法相关的代码,自觉无法手搓相关数学库,遂改为使用成熟数学库。 一、GLM库安装与介绍 1.1 vcpkg安装GLM 跨平台C包管理利器vcpkg完全指南 在PowerShell中执行命令: vcpkg install glm# 集成到系…...
408 计算机网络 知识点记忆(8)
前言 本文基于王道考研课程与湖科大计算机网络课程教学内容,系统梳理核心知识记忆点和框架,既为个人复习沉淀思考,亦希望能与同行者互助共进。(PS:后续将持续迭代优化细节) 往期内容 408 计算机网络 知识…...
基于Python脚本实现Flink on YARN任务批量触发Savepoint的实践指南
基于Python脚本实现Flink on YARN任务批量触发Savepoint的实践指南 一、背景与价值 在流计算生产环境中,Flink on YARN的部署方式凭借其资源管理优势被广泛采用。Savepoint作为Flink任务状态的一致性快照,承载着故障恢复、版本升级、作业暂停等重要场景…...
我可能用到的网站和软件
我可能用到的网站和软件 程序员交流的网站代码管理工具前端组件库前端框架在线工具人工智能问答工具学习的网站Windows系统电脑的常用工具 程序员交流的网站 csdn博客博客园 - 开发者的网上家园InfoQ - 软件开发及相关领域-极客邦掘金 (juejin.cn) 代码管理工具 GitHub 有时…...
FPGA状态机设计:流水灯实现、Modelsim仿真、HDLBits练习
一、状态机思想 1.概念 状态机(Finite State Machine, FSM)是计算机科学和工程领域中的一种抽象模型,用于描述系统在不同状态之间的转换逻辑。其核心思想是将复杂的行为拆解为有限的状态,并通过事件触发状态间的转移。 2.状态机…...
2024年第十五届蓝桥杯CC++大学A组--成绩统计
2024年第十五届蓝桥杯C&C大学A组--成绩统计 题目: 动态规划, 对于该题,考虑动态规划解法,先取前k个人的成绩计算其方差,并将成绩记录在数组中,记录当前均值,设小蓝已检查前i-1个人的成绩&…...
WinForm真入门(13)——ListBox控件详解
WinForm ListBox 详解与案例 一、核心概念 ListBox 是 Windows 窗体中用于展示可滚动列表项的控件,支持单选或多选操作,适用于需要用户从固定数据集中选择一项或多项的场景。 二、核心属性 属性说明Items管理列表项的集合,支持动…...
Kotlin 学习-集合
/*** kotlin 集合* List:是一个有序列表,可通过索引(下标)访问元素。元素可以在list中出现多次、元素可重复* Set:是元素唯一的集合。一般来说 set中的元素顺序并不重要、无序集合* Map:(字典)是一组键值对。键是唯一的…...
解决java使用easyexcel填充模版后,高度不一致问题
自定义工具,可以通过获取上一行行高设置后面所以行的高度 package org.springblade.modules.api.utils;import com.alibaba.excel.write.handler.RowWriteHandler; import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; import com.alibaba.excel.wr…...
数据结构与算法之ACM Fellow-算法4.3 最小生成树
数据结构与算法之ACM Fellow-算法4.3 最小生成树 加权图 是一种为每条边关联一个 权值 或是 成本 的图模型。这种图能够自然地表示许多应用。在一幅航空图中,边表示航线,权值则可以表示距离或是费用。在一幅电路图中,边表示导线,…...
使用POCO库进行ZIP压缩和解压
使用POCO库进行ZIP压缩和解压 POCO C Libraries提供了一个ZIP模块,可以方便地进行文件和数据流的压缩与解压操作。下面我将介绍如何使用POCO的ZIP模块进行这些操作。 1. 基本ZIP文件操作 压缩文件/目录到ZIP #include <Poco/Zip/Compress.h> #include <…...
