写在前面的话
二百块钱。昨天过年,堂哥表哥他们打电话过来,给老爸拜年。其中二大爷的孩子,我喊堂哥的,打来电话,给老爸拜年,堂哥孩子出镜,和堂哥长的很像,如今上大二了应该,石河子大学,211名校,很有出息。我想着堂哥这几年生意不太好,侄子给我爸拜年了,给他发200的红包吧,二大爷二大娘都不在了,小辈们走动起来才会更亲。不料,没过一分钟,堂哥发过来四百块钱, 说是给我两个孩子的,这让我很为难,本想给堂哥孩子点小惊喜,反而让人家吃亏了,我想了想,向堂哥表示感谢,还是收下了。记得之前去东北,媳妇姑姑身体不好,家庭困难,办了低保,媳妇姑父也长年生病,问岳父买点啥呢,岳父说扔五百块钱最划算,他们需要什么自己买,结果刚从姑家回来一会,人家骑车送过来300,说是给孩子的,媳妇坚持收下。
[317]-------底部有张生活照片
【关键词】python、数据限制、提示词、时间花费
一、python相关
1.查询数据限制字段
描述:现在查询数据,有个字段message,占好几M,要把这个字段忽略掉。
开工:
第一步:修改sql
20241224周二时间段:1636-1640
20241224周二时间段:1851-1900
先在服务器上运行,看看效果。
a.线上运行
20241224周二时间段:1851-1900
运行看看效果,运行结果如下:
图3a-1
注:服务器上需要7分钟,比线下还慢,得追踪一下慢在哪里,提出优化方法。现在对于截断,点继续时,要跳过识别。
b.特殊识别
20241224周二时间段:1928-1940
20241225周三时间段:0925-0940
描述:特殊字段【继续】要跳过识别,修改程序如下:
先修改获取,如下:
@classmethod
@DB.connection_context()
def get_by_id(cls, pid, fields=None):
try:
obj = cls.model.query(id=pid)[0]
if fields:
# 使用字典推导提取指定的字段
limited_obj = {field: getattr(obj, field) for field in fields}
return True, limited_obj
return True, obj
except Exception as e:
return False, None
注:这个对输出字段做了限制。接下来,使用时,对判断进行控制,如下:
图3a-2
注:就是先对问题进行判断,有【继续】就查保存的intention,dispatch。并且,dispatch用到了专家里面,不再二次查询。截图如下:
图3a-3
注:这个截图中,应该把上面获取会话去掉,因为dispatch已获取过了。对于截断,有个新的思路,控制输出字数,比如500字,这样就会截断了。
第二步:控制字数
20241225周三时间段:0935-0940
先搞下chat方法,应该在ragflow里在最后的提示词(prompt)上加,这个要新建一个会话,但用postman新建会话,一直出错,最后用vscode的测试模块建成的。截图如下:
图3a-4
注:龙哥说这种方法比postman高效,正好postman也坏了,就用这种方法测试吧。
第三步:提示词
20241225周三时间段:0935-0940
找到提示词如下:
图3a-5
注:找一下这个提示词是怎么生成的,并且,怎么往里面加东西。这个是msg中的东西,msg生成代码如下:
msg = [{"role": "system", "content": prompt_config["system"].format(**kwargs)}]
log.info(f"\n\n\n\n msg: {get_caller_line_number()} {msg}\n\n\n\n")
msg.extend([{"role": m["role"], "content": re.sub(r"##\d+\$\$", "", m["content"])}
for m in messages if m["role"] != "system"])
log.info(f"\n\n\n\n msg: {get_caller_line_number()} {msg}\n\n\n\n")
used_token_count, msg = message_fit_in(msg, int(max_tokens * 0.97))
assert len(msg) >= 2, f"message_fit_in has bug: {msg}"
prompt = msg[0]["content"]注:加了一函数的开始与结束,截图如下:
图3a-6
注:搞了半天,提示词是在数据库中定义的,截图如下:
图3a-7
注:上述的prompt_config字段修改如下:
{
"empty_response": "",
"prologue": "你好! 我是专业宠物医生,有什么可以帮到你的吗?",
"quote": true,
"tts": false,
"system": "你是一个宠物医生,请依据知识库中的的内容来详细地回答用户问题。罗列出所有可能的疾病,不要给出和症状不相关的疾病,不要仅仅考虑用户描述中猜测的疾病判断。对每种可能的疾病给出恰当的治疗方法和用药建议。用药建议要给出药物名称、用法、用量。 当所有知识库内容都与问题无关时,你的回答必须包括“我认为:”这句话。回答需要考虑聊天历史并限制在600字以内。\n 以下是知识库:\n {knowledge}\n 以上是知识库。",
"refine_multiturn": true,
"parameters": [{
"key": "knowledge",
"optional": false
}]
}注:接下来,再次测试。
第四步:提示词测试
20241226周四时间段:0028-0040
测试结果来看没起作用,测试结果还是被截断,截图如下:
图3a-8
注:追踪下日志看看原因。修改提示词如下:
图3a-9
注:这里修改了系统提示词,具体如下:
{
"empty_response": "",
"prologue": "你好! 我是专业宠物医生,有什么可以帮到你的吗?",
"quote": true,
"tts": false,
"system": "你是一个宠物医生,请依据知识库中的的内容来详细地回答用户问题。罗列出所有可能的疾病,不要给出和症状不相关的疾病,不要仅仅考虑用户描述中猜测的疾病判断。对每种可能的疾病给出恰当的治疗方法和用药建议。用药建议要给出药物名称、用法、用量。 当所有知识库内容都与问题无关时,你的回答必须包括“我认为:”这句话。回答需要考虑聊天历史。回答内容限制在500字以内,不要截断输出。\n 以下是知识库:\n {knowledge}\n 以上是知识库。",
"refine_multiturn": true,
"parameters": [{
"key": "knowledge",
"optional": false
}]
}注:还是不行,看下数据库中存的聊天记录,如果是完整的,就输出给前端。
发现不是完整的,这个测试先这样,接下来,就是时间把控上。怎么控制在30s以内。接下来,排查下时间都花在哪里了,或者说哪个模块有优化的空间。
第五步:时间花费
20241226周四时间段:0053-0100
20241226周四时间段:0922-0940
主要看下一次聊天时间都花费在哪里了,列个清单出来,先打下日志。
a.先打下chat_sev日志
20241226周四时间段:0922-0940
chat_api.py----------------pet_doctor.py-------------------rag_llm.py,打日志如下:
图3a-10
注:接下来,打ragflow日志。
b.再打下ragflow日志
20241226周四时间段:0933-0940
api_app.py-------------------dialog_service.py-----------打日志如下:
图3a-11
注:先运行看看效果。
c.测试看效果
20241226周四时间段:1015-1020
效果如下:
图3a-12
注:这个返回用了4分钟。查下时间耗费。
二、wp相关
三、生活照片
拍摄于2025年7月6日,20:14:45,带媳妇孩子出去玩,大宝当时七岁七个月。去媳妇姑家的后续是,我问媳妇,人家生活那么困难,本来给的就不多,为啥人家送回来还要收呢,能力范围之内,帮助一下不行吗。媳妇说:是,你把钱给我姑了,你的扶贫之心得到了满足,你的面子达成了,人家虽穷,但人家不要面子的吗,人家又不是乞丐。我意识到了,媳妇说的对,每个人存世,都要面子的,都不希望被别人看扁,都希望过的好,让别人看的起。所以,自己多注意,就拿这次给堂哥孩子发红包来说,明年就不发了,因为我两个孩子,人家一个孩子,我发出去200,人家还400,明知道这样做让别人吃亏,那就不要做了。
图3c-1
《本文完》