如何为Flask ChatterBot聊天机器人添加消息反馈功能?
给Flask ChatterBot添加点赞/点踩反馈功能
下面是基于常见Flask ChatterBot示例代码结构的修改步骤,帮你实现用户反馈功能:
1. 扩展数据库存储反馈记录
首先需要把用户的点赞/点踩数据存起来,这里以SQLAlchemy(ChatterBot默认支持的ORM)为例提供两种方案:
方案一:直接扩展对话模型
找到项目中的数据库模型文件(比如models.py),给Conversation类新增反馈字段:
from sqlalchemy import Column, Integer, Text, DateTime, Enum from datetime import datetime class Conversation(db.Model): id = Column(Integer, primary_key=True) user_input = Column(Text) bot_response = Column(Text) created_at = Column(DateTime, default=datetime.utcnow) # 新增反馈字段,默认无反馈,可选值为like/dislike feedback = Column(Enum('like', 'dislike', 'none'), default='none')
执行数据库迁移(如果用Flask-Migrate):
flask db migrate -m "Add feedback field to Conversation" flask db upgrade
方案二:新建独立反馈表
如果不想修改原有对话表,可创建关联表单独存储反馈:
class Feedback(db.Model): id = Column(Integer, primary_key=True) conversation_id = Column(Integer, db.ForeignKey('conversation.id')) feedback_type = Column(Enum('like', 'dislike')) created_at = Column(DateTime, default=datetime.utcnow) # 关联对话表,方便查询 conversation = db.relationship('Conversation', backref=db.backref('feedbacks', lazy=True))
2. 修改前端添加反馈按钮
在聊天页面模板(比如templates/index.html)中,给每条机器人回复追加点赞/点踩按钮,并通过AJAX发送反馈请求:
<div class="chat-box"> {% for msg in conversation_history %} <div class="user-message">{{ msg.user_input }}</div> <div class="bot-message"> {{ msg.bot_response }} <div class="feedback-actions"> <button class="feedback-btn" data-id="{{ msg.id }}" data-type="like">👍</button> <button class="feedback-btn" data-id="{{ msg.id }}" data-type="dislike">👎</button> </div> </div> {% endfor %} </div> <script> // 绑定按钮点击事件 document.querySelectorAll('.feedback-btn').forEach(btn => { btn.addEventListener('click', function() { const convId = this.dataset.id; const type = this.dataset.type; fetch('/submit-feedback', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRFToken': '{{ csrf_token() }}' // 启用CSRF保护时需要 }, body: JSON.stringify({ conversation_id: convId, feedback_type: type }) }).then(res => res.json()).then(data => { if (data.success) { // 反馈成功后禁用按钮,避免重复提交 this.disabled = true; this.style.opacity = '0.6'; } }); }); }); </script>
3. 后端添加反馈处理路由
在Flask主文件(比如app.py)中新增POST路由,接收并处理前端的反馈请求:
from flask import request, jsonify from models import Conversation, Feedback # 导入你的模型 @app.route('/submit-feedback', methods=['POST']) def submit_feedback(): req_data = request.get_json() conv_id = req_data.get('conversation_id') feedback_type = req_data.get('feedback_type') # 参数校验 if not conv_id or feedback_type not in ['like', 'dislike']: return jsonify({'success': False, 'msg': '参数无效'}) # 方案一:更新对话表的反馈字段 conversation = Conversation.query.get(conv_id) if conversation: conversation.feedback = feedback_type db.session.commit() return jsonify({'success': True}) # 方案二:新增反馈记录到独立表 # new_feedback = Feedback(conversation_id=conv_id, feedback_type=feedback_type) # db.session.add(new_feedback) # db.session.commit() # return jsonify({'success': True}) return jsonify({'success': False, 'msg': '对话记录不存在'})
4. 可选:用反馈优化机器人回复
收集到反馈后,你可以定期利用这些数据优化机器人的回复质量:
# 示例:提取所有用户点赞的对话对,加入训练集 liked_convs = Conversation.query.filter_by(feedback='like').all() training_data = [(conv.user_input, conv.bot_response) for conv in liked_convs] # 重新训练机器人 bot.train(training_data)
内容的提问来源于stack exchange,提问作者Maria
相关产品推荐
相关产品推荐

