写在前面的话
会放弃吗。小孩有时很气人,过年这几天,二宝还行,大宝基本不吃家里饭,老爸老妈一直给我上强度,让我不胜其烦。抖哥那边想着让现有的一个项目,用小龙虾大改一下,让我俩解放出来,但里面涉及的业务问题比较复杂,人家是用java写的后端,vue写的前端,并且经过两三轮开发人员的手,里面很多关节不知道为啥要这样写,换语言开发风险很大,但一旦改成,后期将很轻松,不过两个孩子闹腾,让我一天一个小时都抽不出来,只能让抖哥自己先改。晚上,陪大宝睡觉我在想,大宝二宝这么磨人,我会放弃他俩吗,显然不会。哪怕以后他俩杀人放火,作为父母,也会无脑的救赎,不会从心底放弃两个孩子。那反过来呢,爸妈这一段,说的话有时让我接受不了,我多说一句话,指定闹僵,我会放弃父母吗,我想我不会。
[315]-------底部有张生活照片
【关键词】python、websocket、聊天、耗费时间、非AI模式
一、python相关
1.聊天时间耗费追踪
描述:今天主要追踪下,一次聊天耗费时间中,哪些模块用时太多,耗时模块都做了哪些事,能不能去掉。
开工:
第一步:打断点测试
a.先打第一个
20241227周五时间段:0947-1000
20241227周五时间段:1000-1020
先打第一个耗时模块断点,就是组装questions的。
先建一个新的会话
conversation_id为:6c0ca0f6c3f611ef94e1f020ff63f4c4
json:{'code': 0, 'data': {'id': '6c0ca0f6c3f611ef94e1f020ff63f4c4', 'dialog_id': '34bb8d02b30911ef9c3b0242ac120006', 'open_id': 'qhz1234567890', 'token': '1234567890qhz', 'is_intent': None, 'intention': None, 'dispatch': None, 'name': '狗狗感冒1227周五', 'message': [{'content': '你好! 我是专业宠物医生,有什么可以帮到你的吗?', 'role': 'assistant'}], 'reference': [], 'create_time': 1735264862328, 'create_date': '2024-12-27T10:01:02', 'update_time': 1735264862328, 'update_date': '2024-12-27T10:01:02'}, 'msg': 'success'}注:接下来,改下前端代码中的conversation_id,截图如下:
图5a-1
注:先跑一下,看看效果,决定在哪里打断点。
b.新的conversation_id跑一遍
20241227周五时间段:1019-1020
20241227周五时间段:1020-1040
第一次询问,截图如下:
图5a-2
注:用了11分钟。追踪一下。
先打断点,再把函数抽出来,写个测试进行局部验证。
c.局部验证
20241227周五时间段:1136-1140
20241227周五时间段:1449-1500
要验证的代码位置如下:
图5a-3
注:要验证的代码如下:
图5a-4
注:打断点看一下,以方便写测试用例。先看下completion需要传什么才能调用。
d.completion方法
20241227周五时间段:1533-1540
20241227周五时间段:1540-1600
20241227周五时间段:1600-1620
20241227周五时间段:1620-1640
这个需要传哪些参数呢,如下:
conversation_id、messages
注:把端口改为9380,保持一致,方便测试,all_in龙哥。学一些先进的方法。
写测试用例如下:
def test_completion(client):
conversation_ids = [
"6c0ca0f6c3f611ef94e1f020ff63f4c4"
]
question_list = [
"你好,医生。我家猫咪最近老是在挠耳朵,耳朵里好像还有黑色分泌物,带去看兽医后说是耳螨。请问用什么药可以治疗耳螨,效果会比较好?"
]
last_times = []
for conversation_id in conversation_ids:
for question in question_list:
start = time.time()
messages = [{"role":"user","content":question}]
url = f"/v1/api/completion"
resp = client.post(
url,
json = json.dumps({
"conversation_id": conversation_id,
"messages": messages
}),
headers = {
"Content-type": "application/json",
"Authorization": "Bearer ragflow-UxOGYzZjUwYjMwOTExZWZiODc0MDI0Mm"
}
)
if not 200 <= resp.status_code < 300:
raise Exception(f"GET {url} status_code {resp.status_code}.")
received_data = []
for chunk in resp.iter_encoded():
answer = chunk.decode('utf-8').strip()
if answer:
received_data.append(answer)
break
end = time.time()
last_times.append(end-start)
log.info(f"conversation:{conversation_id} \nquestion: {question} \n received_data: {received_data},last:{end - start:.2f}s")
log.info(f'question {len(last_times)} times, max:{max(last_times):.2f}s, min:{min(last_times):.2f}s, avg:{sum(last_times)/len(last_times):.2f}s')
测试结果如下:
图5a-5
注:这个还是定位到抽取知识的那个地方,如下:
if prompt_config.get("keyword", False):
log.info("\n\n chat--time trace-----------------------------------\n\n")
questions[-1] += keyword_extraction(chat_mdl, questions[-1])
kbinfos = retr.retrieval(" ".join(questions), embd_mdl, dialog.tenant_id, dialog.kb_ids, 1, dialog.top_n,
dialog.similarity_threshold,
dialog.vector_similarity_weight,
doc_ids=attachments,
top=dialog.top_k, aggs=False, rerank_mdl=rerank_mdl)注:这就说明测试用例也能找到问题的基本。接下来,就要看它是怎么影响的了。
e.测试影响
20241227周五时间段:1655-1700
先把无用的log.info去掉。之后,再跑一下,看看日志减少没有。如果没有问题,再打几个断点看下。无效日志去掉了,效果如下:
图5a-6
注:接下来,开始打断点。先找一个小点,这个小点解决了,提交下代码,再搞下一个小点。
第二步:打一个断点
20241227周五时间段:1943-2000
20241228周六时间段:0000-0040
先暂停,搞一个非ai的。
2.非AI的
描述:先搞一个非AI的,让前端进行测试。
分析:这个加个参数,传这个参数就进行非AI测试,否则,就接着搞三连。
开工:
第一步:加个参数
20241228周六时间段:0042-0100
加参数is_ai,默认true,自己测试时,is_ai传false即可。
先做个小事。把日志文件都改为chat_api。
a.改chat_api.log
20241228周六时间段:0046-0100
修改替换一下。
log_common_sevice.log------log_chat_api.log
log_pet_diagnos.log------log_chat_api.log
log_pet_doctor.log------log_chat_api.log
注:这样以来就统一了,不要在分着看日志文件了。上传下代码,一个小点就要上传一次,显示自己的工作,也能方便自己记忆,供日后查找方便。
现在报错了,如下:
图5a-7
注:这个最终破案了,是因为磁盘满了。接下来,能不能清下服务器上的磁盘,先暂时能用。
b.清下服务器磁盘
20241228周六时间段:1134-1140
查下,哪些日志可以清理,能不能给出10G的空间。现在空间情况如下:
图5a-8
注:数据盘的可用大小为0,现在有两种思路:一是admin文件夹下有230G的空间,能不能拿出30G给数据盘,另一种思路是,把data目录下,看一下,能不能清一些数据,先用着。
第二种思路是最佳的,因为啥也不用动.
第二步:清磁盘日志
20241228周六时间段:1142-1200
20241228周六时间段:1200-1220
20241228周六时间段:1306-1320
发现data下面文件夹很多进不去,想办法能不能把admin下的给它30G,发现不好搞,先这样吧,别把服务器搞崩了。
二、python教程相关
1.python中的字符串
描述:python中的字符串很常用,注意些什么。
开工:
第一步:截取注意一
my_str = 'abcd'
print(my_str[0:-1])//abc
print(my_str[0:])//abcd
print(my_str[0])//a
print(my_str)//abcd
注:-1表示最后一个,[0:-1]不包括最后一个。
第二步:测试
测试还可以
2.python试题
描述:看个python题,截图如下:
图5b-1
开工:
第一步:试题代码
代码如下:
下面代码运行后,屏幕输出的是:
list_1=[1,2,3,4]
if list_1.remove(4):
print("A")
elif list_1.pop() == 4:
print("B")
elif list_1.pop()== 3:
print("C")
else:
print("D")
A. A
B. B
C. C
D. D
注:这个用到了python列表中的remove方法及pop方法,remove是移除指定元素,pop是删除最后一个元素并返回删除的元素,所以结果为B,运行结果如下:
图5b-2
注:没想到这个代码输出D,先执行remove方法,把列表变为了[1,2,3],但执行完remove,结果为none,也就是假,所以不会是A选项。接着执行pop,此时list=[1,2,3]执行pop删除最后一个元素,并返回删除的元素,执行后list=[1,2],返回3,而不是4所以B选项错误,再执行C选项,返回2,所以C错,最终返回D,这个题好巧妙啊。
第二步:测试
测试还可以
三、生活照片
拍摄于2026年1月29日,18:31:41,媳妇去杭州出差拍摄。父母这些天,老是说媳妇去东北花多少钱,平时给她妈多少钱,说的好像媳妇付钱时他俩在旁边看着似的。我说,这些你们都没见,是你们自己想的,说的有鼻子有眼,像真的一样,咱们退一步来讲,即使给了,人家把女儿养这么大花点女儿的钱也是应该的,你们没必要这么嫉恶如仇。老妈说自己好辛苦,还不如回家。老妈说多少次,我忍多少次,因为老妈七十多了,如果前几年,老妈说回家,我指定让她回去了,现在回家,我也不放心,孩子那么闹,我都能忍,为什么不能忍七十多岁的老妈呢,老妈一个人回家,肯定会很失落,那是我不愿意看到的场景。
图5c-1
《本文完》