You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 14:37:40