山东大学软件学院项目实训纪实(七)

一、个人任务

本周我的任务主要有以下两个

  • 完善对话功能的后端接口
  • 讨论前端页面的改进

二、任务1——完善对话功能的后端接口

1.由于一开始会给用户提示推荐的问题,所以我们准备了一个存储常见问题的表,每次用其中随机选取5个问题展示给用户

具体的后端代码如下

@app.route('/api/front/getRandomQues', methods=['GET'])
def getRandomQues():
    """
    """
    db_conn = get_db_conn()
    try:
        # 从请求体中获取 user_id 和 new_password

            # 使用用户 ID, content 和 type 构建插入反馈的语句
            # 假设feedback表有user_id, content, type, created_at等字段
        sql_str = """  
                 SELECT   
                   question
                 FROM   
                   question
                ORDER BY RAND()  
                LIMIT 5 
                 """

        # 使用参数化查询来防止SQL注入

        results = db_conn.get_all(sql_str)
        data = []
        for i in results:
            data.append(i)
        if not results:
            return jsonify({'message': 'No records found for the given user_id'}), 200
        return jsonify(data),200

    except Exception as e:
        print(e)
        return msg(500, 'Internal Server Error')

2.由于侧边栏需要展示用户的历史问题,我们建立user_record表存储对应数据

后端代码逻辑如下:

@app.route('/api/front/get_PreRecords', methods=['GET'])
def getPreRecords():
    """
    """
    db_conn = get_db_conn()
    try:
        # 从请求体中获取 user_id 和 new_password
        user_id = request.args.get('user_id')
        #
        # if not user_id:
        #     return msg(400, 'User ID are required')
            # 使用用户 ID, content 和 type 构建插入反馈的语句
            # 假设feedback表有user_id, content, type, created_at等字段
        sql_str = """  
                 SELECT   
                   u.user_id,r.question,r.type,r.record_id
                 FROM   
                     user_record u
                 JOIN  
                     records r ON u.record_id = r.record_id  
                 WHERE  
                     u.user_id = %s  
                 """
        # u.user_id,u.record_id,question,type
        # 使用参数化查询来防止SQL注入
        args = (user_id,)
        results = db_conn.get_all(sql_str, args)
        marked_results1 = [
            {'record_id': r[3], 'question': r[1], 'user_id': r[0], 'type': r[2]}
            for r in results]
        if not results:
            return jsonify({'message': 'No records found for the given user_id'}), 200
        return jsonify(marked_results1),200

    except Exception as e:
        print(e)
        return msg(500, 'Internal Server Error')

前端效果如下:

3.对话效果,当用户输入病例X光图片并给出问题时,可以和模型进行对话,相应代码如下

@app.route('/api/front/setImageRecords', methods=['POST'])
def setImageRecords():
    """
    根据用户 ID 重置用户密码
    :param user_id: 用户的唯一标识符
    :param new_password: 新密码
    :return: JSON 格式的响应,包含操作结果
    """
    db_conn = get_db_conn()
    json_post_raw =request.json()
    print("Start to process request")

    json_post = json.dumps(json_post_raw)
    request_data = json.loads(json_post)
    try:
        # 从请求体中获取 user_id 和 new_password
        input_text = request.json.get('text')
        input_image = request.json.get('image')
        with open(input_image, 'rb') as image_file:
            input_image_encoded = base64.b64encode(image_file.read()).decode('utf-8')
        history = request.json.get('history')
        type = request.json.get('type')
        qtime = request.json.get('qtime')
        user_id = request.json.get('user_id')
        record_id =uuid.uuid4()
        input_para = {
            "max_length": 2048,
            "min_length": 50,
            "temperature": 0.8,
            "top_p": 0.4,
            "top_k": 100,
            "repetition_penalty": 1.2
        }
        input_para.update(request_data)

        is_zh = is_chinese(input_text)
        input_data = generate_input(input_text, input_image_encoded, history, input_para)
        input_image, gen_kwargs = input_data['input_image'], input_data['gen_kwargs']
        with torch.no_grad():
            answer, history, _ = chat(None, model, tokenizer, input_text, history=history, image=input_image, \
                                      max_length=gen_kwargs['max_length'], top_p=gen_kwargs['top_p'], \
                                      top_k=gen_kwargs['top_k'], temperature=gen_kwargs['temperature'],
                                      english=not is_zh)

        now = datetime.datetime.now()
        atime = now.strftime("%Y-%m-%d %H:%M:%S")
        num = db_conn.insert(
            "INSERT INTO records (record_id,user_id, question, image,answer,q_time,a_time,type) VALUES (%s, %s, %s, %s,%s,%s, %s, %s)",
            (record_id,user_id, input_text, input_image,answer,qtime,atime,type)
        )
        response = {
            "result": answer,
            "history": history,
            "status": 200,
            "time": atime
        }

    except Exception as e:
        print(e)
        return msg(500, 'Internal Server Error')
    return response

4.存储用户反馈信息

@app.route('/api/front/get_PreRecords', methods=['GET'])
def getPreRecords():
    """
    """
    db_conn = get_db_conn()
    try:
        # 从请求体中获取 user_id 和 new_password
        user_id = request.args.get('user_id')
        #
        # if not user_id:
        #     return msg(400, 'User ID are required')
            # 使用用户 ID, content 和 type 构建插入反馈的语句
            # 假设feedback表有user_id, content, type, created_at等字段
        sql_str = """  
                 SELECT   
                   u.user_id,r.question,r.type,r.record_id
                 FROM   
                     user_record u
                 JOIN  
                     records r ON u.record_id = r.record_id  
                 WHERE  
                     u.user_id = %s  
                 """
        # u.user_id,u.record_id,question,type
        # 使用参数化查询来防止SQL注入
        args = (user_id,)
        results = db_conn.get_all(sql_str, args)
        marked_results1 = [
            {'record_id': r[3], 'question': r[1], 'user_id': r[0], 'type': r[2]}
            for r in results]
        if not results:
            return jsonify({'message': 'No records found for the given user_id'}), 200
        return jsonify(marked_results1),200

    except Exception as e:
        print(e)
        return msg(500, 'Internal Server Error')

5.获取用户某条历史记录

@app.route('/api/front/getSpePreRecords', methods=['GET'])
def getSpecPreRecords():
    """
    """
    db_conn = get_db_conn()
    try:
        # 从请求体中获取 user_id 和 new_password
        user_id = request.args.get('user_id')
        type = request.args.get('type')

        if not user_id :
            return msg(400, 'User ID are required')
            # 使用用户 ID, content 和 type 构建插入反馈的语句
            # 假设feedback表有user_id, content, type, created_at等字段
        sql_str = """  
                 SELECT   
                   user_id,record_id,question,answer,type
                 FROM 
                     records 
                 WHERE
                     user_id = %s  and type = %s
                 order by q_time asc
                 """


        # 使用参数化查询来防止SQL注入
        args = (user_id,type)
        results = db_conn.get_all(sql_str, args)

        # 处理结果,为每个元组添加'question'和'answer'的标记(这里假设它们是字符串)
        marked_results1 = [
            {'record_id':r[1], 'question': r[2], 'answer': '', 'type': r[4]}
            for r in results]

        marked_results2 = [

             {'record_id': r[1], 'question': '', 'answer': r[3], 'type': r[4]}
            for r in results
        ]

        marked_results3=[]
        for r in marked_results1:
            marked_results3.append(r)
            for result in marked_results2:
                if result['record_id'] == r['record_id']:
                    marked_results3.append(result)



        if not marked_results3:
            return jsonify({'message': 'No records found for the given user_id'}), 200
        return jsonify(marked_results3),200

    except Exception as e:
        print(e)
        return msg(500, 'Internal Server Error')

三、任务2——讨论前端页面的改进

现阶段的前端页面如下:

经小组讨论,我们进一步优化的地方如下:

  • 修改反馈信息部分的颜色配色和布局
  • 统一全局字体为微软雅黑
  • 初始对话页面太空旷,考虑加入一些符合用户友好的提示语

四、总结

1.接口功能完善

  1. 根据业务需求,扩展了对话接口的功能,如支持多轮对话、上下文记忆等,提升了用户体验。
  2. 增加了对接口使用情况的监控和日志记录功能,方便后续对接口性能和使用情况进行分析和优化。

2、讨论前端页面的改进

除了后端工作,我还积极参与了前端页面改进的讨论。我们团队讨论了以下几个方面:

  • 用户体验:我们探讨了如何提升页面的加载速度、优化操作流程和增强交互性,以提升用户的整体体验。
  • 页面布局:我们讨论了页面布局的合理性,包括页面元素的排列、颜色的搭配和字体的选择等,以确保页面的一致性和美观性。
  • 功能需求:我们根据业务需求,讨论了前端页面需要增加或改进的功能点,并进行了初步的规划和设计。
  • 协作机制:我们建立了前端和后端的协作机制,确保双方能够及时了解对方的进度和需求,以便更好地配合工作。
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值