当前位置:首页>python>4后端之聊天时间耗费追踪及python基本语法研究

4后端之聊天时间耗费追踪及python基本语法研究

  • 2026-08-23 10:10:20
4后端之聊天时间耗费追踪及python基本语法研究

写在前面的话

手持电脑。昨天是假期的第四天,这几天除了偶尔写点公众号号,啥也没干。二宝三岁多,一直缠着我,陪他打蛋仔派对,打僵尸,出去玩。大宝八岁多,也是一点话不听,让陪他出去玩,去买吃的,不吃家里做的饭,陪他遛弯,打僵尸,陪他睡觉,讲故事,我但凡去阳台上抽支烟,也是三番五次的催我,很多次一支烟刚抽了两口就要扔掉,好几次想动手都放弃了,大过年的打孩子毕竟不好。不过,我发现了一个事情,就是不管多忙,每天还能刷几个或几十个视频,这个时间从哪里来的?我分析了一下,是在手机上刷的,就是说,我拿着手机的情况下,是能抽出时间搞点事情的。所以,我接下来,要放下手机,时刻手持电脑,争取插空做点事情。手机用的地方,全换成电脑,这样,我相信,时间会被充分利用一点,加油! 

[316]-----底部有张生活照片和昨日花销

【关键词】聊天、python、小程序、耗费时间

一、python相关

1.聊天时间耗费追踪

描述:今天主要追踪下,一次聊天耗费时间中,哪些模块用时太多,看能不能优化一下。

开工:

第一步:时间耗费清单

a.一次测试看效果
20241226周四时间段:1015-1020

效果如下:

图4a-1

注:这个返回用了4分钟,查下具体的时间耗费。

b.时间耗费
20241226周四时间段:1023-1040
20241226周四时间段:1040-1100

聊天用时4分钟,时间耗费如下:

chat_api.py--------- websocket_endpoint-----

注:把日志打的长的去掉。可以看出如下这段用时最长,截图如下:

图4a-2

注:这个用时一分钟多,如下:

图4a-3

注:接下来,要对这个chat函数进行追踪。

c.追踪chat方法
20241226周四时间段:1121-1140

chat_sev中的chat方法,对应ragflow里的completion方法,如下:

url = f"{RAG.BASE_URL}/api/completion"
d.追踪ragflow里的completion方法
20241226周四时间段:1124-1140
20241226周四时间段:1429-1440

修改日志输出格式,如下:

format="{time} | {level} | {file} {name} {function}:{line} - {message}"

找到了消耗时间的因素,代码如下:

    if len(questions) > 1 and prompt_config.get("refine_multiturn"):
        questions = [full_question(dialog.tenant_id, dialog.llm_id, messages)]
    else:
        questions = questions[-1:]

注:这个配置prompt_config,如下:

{
"empty_response": "",
"prologue": "你好! 我是专业宠物医生,有什么可以帮到你的吗?",
"quote": true,
"tts": false,
"system": "你是一个宠物医生,请依据知识库中的的内容来详细地回答用户问题。罗列出所有可能的疾病,不要给出和症状不相关的疾病,不要仅仅考虑用户描述中猜测的疾病判断。对每种可能的疾病给出恰当的治疗方法和用药建议。用药建议要给出药物名称、用法、用量。 当所有知识库内容都与问题无关时,你的回答必须包括“我认为:”这句话。回答需要考虑聊天历史。回答内容限制在500字以内,不要截断输出。\n        以下是知识库:\n        {knowledge}\n        以上是知识库。",
"refine_multiturn": true,
"parameters": [{
"key": "knowledge",
"optional": false
}]
}

注:由配置可知,refine_multiturn为true,所以会走:

questions = [full_question(dialog.tenant_id, dialog.llm_id, messages)]

注:也就是说full_question()方法耗费了时间,做下进一步的确认。

第二步:full_question()方法

a.追踪full_question方法
20241226周四时间段:1432-1440

看下full_question()方法是干什么的,并且为什么耗费了时间。先在方法里打下日志。

日志打完之后,看下效果如下:

图4a-4

注:本次聊天回复消耗2分钟10秒,看下消耗在了哪里。找到了,如下:

图4a-5

注:这里一下子用了约40秒,看看干了啥。

b.又是40秒
20241226周四时间段:1456-1500

注:接下来,再进行测试。

2.耗时测试一

描述:对耗时进行测试,看出现在哪些地方。

开工:

第一步:测试结果

测试结果如下:

图4a-6

分析:耗时1分55秒

分布:

1.请求通义千问---47秒

图4a-7

注:相关代码如下:

图4a-8

2.组装问题耗时-------------23s

图4a-9

注:相关代码如下:

图4a-10

3.装饰答案耗时-------------5s

图4a-11

注:相关代码如下:

图4a-12

 注:对上述三项进行分析。看能不能优化。

第二步:分析

20241226周四时间段:1555-1600
20241226周四时间段:1902-1920

 现在发现代码看不懂,不知道都干啥呢,需要写个测试用例,测一下。

测试用例书写如下,先暂停吧,上传代码到线上看看效果。

a.先同步chat_sev
20241227周五时间段:0004-0020

代码完成,服务器上拉下代码,看怎么样。还可以,没遇到卡点,截图如下:

图4a-13

注:接下来,搞下ragflow代码。

b.先同步ragflow
20241227周五时间段:0016-0020
20241227周五时间段:0020-0040
20241227周五时间段:0910-1000

代码上传完成,接下来,拉下代码,重启下服务。拉代码完成,截图如下:

图4a-14

注:接下来,重启下服务,命令如下:

bash build_pub.sh

注:接下来,改下本地请求,等待服务器重启完成,修改本地请求如下:

    // WebSocket URL (请根据实际情况修改)
    //const wsUrl = 'ws://127.0.0.1:6789/ws';  // 假设你的 WebSocket 服务器运行在本地端口 8080
    const wsUrl = 'ws://39.101.69.172:6789/ws';  // 假设你的 WebSocket 服务器运行在本地端口 8080

注:运行发现,报错,截图如下:

图4a-15

注:这说明chat_sev没有启动成功,搞一下。测试结果并不理想,服务器用了3分钟35秒。

截图如下:

图4a-16

注:看下是耗费时间点在哪里。没找到日志,先这样,后面再说,今天主要任务是研究代码,看一些操作是干什么的,还是要本地来搞这个事。

二、python教程相关

1.基本语法

描述:要把python菜鸟教程过一遍,或者说过几遍,以打牢基础。

开工:

第一步:基础语法

a.字符串切片
20241226周四时间段:1130-1140

给出一个字符串,如下:

my_str = 'abcde'

注:这个字符串要输出ace该怎么做。

做法为:

my_str = 'abcde'
print(my_str[0::2]) ##
#输出ace

注:最后一个2是步长。

第二步:true false

20241227周五时间段:0051-0100

Python3 中,bool 是 int 的子类,True 和 False 可以和数字相加,True==1、False==0会返回True*,但可以通过* is来判断类型。

>>> issubclass(bool, int) 
True
>>> True==1
True
>>> False==0
True
>>> True+1
2
>>> False+1
1
>>> 1 is True
False
>>> 0 is False
False

三、生活照片

拍摄于2024‎年‎3‎月‎17‎日,‏‎16:26:03,带二宝在地下广场玩,当时二宝一岁五个月。弱者抱怨环境,说自己不成功,这个影响了,那个影响了。强者适应环境,并做出改变,最后做出成绩。我虽说不是强者,但偶尔学一招,也许能产生不错的效果,加油!

图4c-1

《本文完》

最新文章

随机文章