当前位置:首页>python>3python之同步新的聊天记录及分科处理

3python之同步新的聊天记录及分科处理

  • 2026-09-09 20:09:04
3python之同步新的聊天记录及分科处理

写在前面的话

前行之路。昨天,侄子给我打电话,聊了会天。侄子今年高三,我感觉他很礼貌,说话也有方式,我上高三时,根本说不出来这么有水平的话。侄子说了下规划,先把英语拿下,3月份考完,成绩满意,再把英语放下,再攻其它科,思路很清晰。我当时就是跟着老师的计划走,侄子有自己的计划,比较主动。加上侄子属于新疆内高班特招计划,有这个优势,会好很多。哥说,上个一本没问题,但985,211有点费劲,侄子去年说上985是没问题的,看来还是过于自信了。也可能是在天津读书这三年,有一段时间玩游戏,耽误了学习,但这也是没办法的事,就像我当年,明明知道考上好大学,一切光明,但上课就是胡思乱想,影响了学习。一个人在前行的路上时,总会遇到阻碍,有些阻碍,父母干着急帮不上忙,只能靠自己,祝愿侄子超常发挥,考上好大学吧。

[324]-------底部有张生活照片

关键词:python、chat_sev、同步聊天记录、分科处理

一、chat_serve相关

1.同步新的聊天记录

描述:现在当新的聊天进来时,要同步到chat_sev中的conversation表里,先看下代码。

开工:

第一步:查看接口代码

a.看新聊天代码-19
20241216时间段:1532-1551

现在想到一个方法,在新的生成搞完的时候,更新下消息记录。

b.条件更新
20241216时间段:1551-1600

条件更新先不做,现在做一个增加返回,截图如下:

图3a-1

注:这个改成增量返回 ,先做保存吧,如下:

def sync_memssages_rag(conversation_id:str) ->str:
    """
    生成新的会话,返回会话id
    """
    data = get_conversation(conversation_id)
    log.info(f"data {data}")
    log.info(f"data-message {data['message']}")
    if data :
        ConversationService.update_by_id(conversation_id, {"message":json.dumps(data['message'],ensure_ascii=False)})

    return 'success'    

这是后端代码,前端控制器代码如下:

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
    await websocket.accept()
    try:
        data = await websocket.receive_text()
        req = json.loads(data)
        response = chat(req['conversation_id'],req['question'])
        res_str = ''
        for msg in response:
            if res_str:
                res_str = res_str + msg
            else:
                res_str = msg
            if msg.endswith(b'\n\n'): 
                json_str = res_str.decode('utf-8')
                if 'data:{"retcode": 666' in json_str:
                    sync_memssages_rag(req['conversation_id'])
                    break
                else:
                    await websocket.send_json(json_str)
                    res_str = ''
    except WebSocketDisconnect:
        print("Client disconnected")   

注:服务端最后改成retcode:666了,测试没有问题。接下来,上线。

c.代码上线
20241216时间段:1837-1840

先上线chat_sev

上线没问题,接下来,研究下怎么分段返回。

d.分段返回
20241216时间段:1900-1920

先不做,不是这个影响的,是第一次返回速度慢。

并不是中间返回速度慢。接下来,做分科。

第二步:测试

测试还可以

2.分科处理

描述:要根据用户提供的病情或者让用户选择一个科室。 

分析:这个龙哥写了一部分,可以参考下。

开工:

第一步:查看代码

看了下,现在有个思路是:在数据库里加字段,比如是否分科,如果没分科,就分下科。先进行用户意图识别,如下:

图3a-2

注:这个可以根据用户的提问进行识别,识别不准确的话,可以问几个内制的问题。这里加个字段,是否进行了用户意图识别,及用户意图识别的结果。后期还要做一个东西,就是进行了用户意图识别后,是否需要重新识别,因为用户的意图可能发生改变。前期先做一次用户意图识别,不进行重新识别。

先加两个字段,是否进行了用户意图识别,以及意图识别别后的内容是什么。

第二步:加字段-15

20241217周二时间段:1124-1139

加字段如下:

ALTER TABLE `rag_flow`.`api_4_conversation` 
ADD COLUMN `is_intent` tinyint(1) NULL DEFAULT 0 COMMENT '是否对用户意图进行识别 0没有 1已识别' AFTER `name`,
ADD COLUMN `intention` varchar(50) NULL COMMENT '对用户进行意图识别的内容' AFTER `is_intent`

接下来,在用户问题时,对其意图进行识别。

第三步:意图识别

a.找到提示词
20241217周二时间段:1139-1200

看下代码,在回答用户问题之前,对用户意图进行识别。

先找到提示词,另外,模拟的前端能不能改变发送的问题,找提示词,需要打印一下日志。

现在我看龙哥已经写了一部分,如下:

def user_intension_congnition(conversation_id:str,question:str):
    """
    用户意图识别
    返回:以下分类的一种
        疾病问诊
        疫苗接种
        用药咨询
        在线复诊
        驱虫选药
        科学养宠
        行为异常
        检测报告
    """
    question = user_intension_reconition_prompt.format(input_text=question)
    return chat(conversation_id, question,stream=False)

注:这个应该返回一种,比如:【驱虫选药】,上述代码user_intension_reconition_prompt函数,表示的是对用户的问题进行加工,以便大模型知道,要返回一种,具体程序如下:

user_intension_reconition_prompt = """
    你是一个宠物医生,擅长对用户的问题进行有效分类,分类内容必须是以下分类的中的一种:
    疾病问诊
    疫苗接种
    用药咨询
    在线复诊
    驱虫选药
    科学养宠
    行为异常
    检测报告

    ######################
    -Examples-
    ######################
    Example 1:

    Question:
    你好,医生。我的狗狗最近总是打喷嚏,特别是早上和晚上,偶尔还会流鼻涕。家里没有太多灰尘,也没有发现其他异常。我想知道这可能是过敏还是别的问题?我该怎么处理?
    ################
    Output:
    疾病问诊
    #############################

    Example 2:

    你好,医生。我家的狗狗最近好像感冒了,流鼻涕、有点咳嗽,精神状态也不太好。我家里有一些人类用的感冒药,请问可以给它吃吗?如果可以,剂量怎么控制?
    ################
    Output:
    用药咨询
    #############################

    Example 3:

    你好,医生。您帮我看下我家狗狗的血常规检测报告,是否感染流感了?
    ################
    Output:
    检测报告
    #############################

    Example 4:
    你好,医生。我家猫咪最近总是频繁上厕所,但每次尿量都很少,有时甚至没有尿出来。我很担心,这是不是泌尿系统的问题?请问该如何治疗?
    ################
    Output:
    行为异常
    #############################


    -Real Data-
    ######################
    Question:{input_text}
    ######################
    Output:
"""

注:这个不算是函数,应该算是一种提示词的组装。接下来,进行

b.写个接口测试下
20241217周二时间段:1213-1220

写个接口测试下,看能不能正确返回。

写接口程序如下:

先来一行,引入类库:

from service.pet_doctor import user_intension_congnition

写接口如下:

#####测试意图识别
#####20241217    
@router.post('/intention')
async def intention(request:Request):
    req = await request.body()
    req = json.loads(req.decode("utf-8"))
    conversation_id = ''
    if 'conversation_id' in req:
        conversation_id = req['conversation_id']  
    if not conversation_id:
        return error('1001','conversation_id-是必传参数')   

    question = ''
    if 'question' in req:
        question = req['question']  
    if not conversation_id:
        return error('1002','question-是必传参数')     

    response = user_intension_congnition(conversation_id,question)
    log.info(f"response{get_caller_line_number()}   {response}")
    res_str = ''
    for msg in response:
        log.info(f"msg{get_caller_line_number()}   {msg}")
        if res_str:
            res_str = res_str + msg
        else:
            res_str = msg
        if msg.endswith(b'\n\n'): 
            json_str = res_str.decode('utf-8')

            log.info(f"json_str{get_caller_line_number()}   {json_str}")
            if 'data:{"retcode": 666' in json_str:
                # sync_memssages_rag(req['conversation_id'])
                break
            else:
                res_str = ''    
    return 'dddd'

注:用这个程序测试一下,测试报错,如下:

图3a-3

注:接下来,找找错误原因。

二、生活照片

拍摄于‎2025‎年‎6‎月‎1‎日,‏‎13:15:50,带二宝在小区里玩,二宝当时两岁八个月。很多时候,自己心里很明白,有些事这样做是错的,但就是没办法。我读高三那会,明明知道自己坐教室里啥也不干都冒汗,想到父母在地里除草,给羊割草,很辛苦,自己应该好好学习,但老师讲课,我就不自觉的想父母的辛苦,自己的畜生,常进入幻境,下了课,找个没人的地方,卡卡扇自己嘴巴子,下节课还是走神。就像侄子,明明知道自己有这个内高班的优势,也知道自己无比聪明,也能理解父母的辛苦,可能游戏太有诱惑力了,实在控制不住自己,打完游戏我相信他也后悔,但自己不受控制。不过,好在侄子已经意识到自己落后了,接下来的四个多月准备拼一把,大力出奇迹,相信一定会成功的,加油!

图3b-1

三、昨日花销

昨日花销截图如下:

图3c-1

《本文完》

最新文章

随机文章