不白忙活。这次天津蓟州之行,总体还算不错,不完美的是大宝一直牙疼,买的套票没怎么玩。这次开车去,让我有点挠头,因为拐进山里,有七八公里盘山道,无数个陡弯,开的手心冒汗。我们9点从北京出发,到景点12点半,景区人员热情的说,里面项目比较多,现在进去也可以,但建议明天再来,一个项目要排一个多小时,5点半关门,最多玩两三个项目,不划算。能设身处地的为游客着想,还是挺感动的,第二天进去之后,排队时,工作人员端着盘子送水,送遮阳伞,感觉挺好。尤其,晚上十点多在旅店睡,大宝牙疼,房东大哥开车带着我跑了七八个药店买药,虽说都关门了没买到,但给我的体验特别好。本来想给房东买盒烟,想想算了,下次来了还住他这里就好了,让他不白忙活。我相信,没有白忙活的事,这里得不到回报,会在未来某个节点以回馈,我真的这么认为。
[240+100]--------底部有张生活照(
我现在做头条号运营:大家想全托管挂号的联系我哦,每天让你得个汉堡包钱,wx: qhz198607
)
【关键词】python、ragflow、本地模型、分科
描述:现在本地模型分科,基本做出来了,需要把它引入到问询程序中,并且和之前的分科对齐。
开工:
20250328周五时间段:11:58-12:00现在跑测试用例,效果如下:

图2a-1
注:两个问题,一是怎么取出数据【消化道科】,二是能不能把科室的embedding向量存起来,不要每次都计算,因为数据是不变的。
20250328周五时间段:12:11-13:00对embedding向量实行预计算,程序如下:
# 类变量,所有实例共享
_precomputed_departments = None
_precomputed_descriptions = None
_precomputed_embeddings = None
def __init__(self):
self.model = SentenceTransformer('all-MiniLM-L6-v2')
if self.__class__._precomputed_departments is None or \
self.__class__._precomputed_descriptions is None or \
self.__class__._precomputed_embeddings is None:
self._precompute_embeddings()
else:
# 直接使用已计算的结果
self.departments = self.__class__._precomputed_departments
self.department_descriptions = self.__class__._precomputed_descriptions
self.department_embeddings = self.__class__._precomputed_embeddings
注:这个进行事先计算,如果不存在重新计算,并保存到类变量中,_precompute_embeddings函数如下:
def _precompute_embeddings(self):
# 定义科室及其典型症状描述
self.departments = {"消化道科": ["腹泻", "呕吐", "拉稀", "食欲不振", "消化不良", "便秘", "便血"],
"呼吸科": ["咳嗽", "打喷嚏", "呼吸困难", "喘息", "流鼻涕", "呼吸急促"],
"五官科": ["眼睛发红", "耳朵流脓", "耳螨", "眼屎多", "牙龈出血", "口腔溃疡"],
"皮肤科": ["皮肤瘙痒", "掉毛", "皮疹", "皮肤红肿", "皮屑", "皮肤溃烂"],
"泌尿科": ["尿频", "尿血", "排尿困难", "尿失禁", "尿量异常"],
"骨科": ["跛行", "关节肿胀", "不愿走动", "骨折", "关节疼痛"]
}
# 为每个科室生成描述语句
self.department_descriptions = {
dept: f"宠物{dept}相关问题,包括但不限于:{', '.join(symptoms)}"
for dept, symptoms in self.departments.items()
}
# 预先计算所有科室描述的嵌入向量(保持为2D张量)
self.department_embeddings = {
dept: self.model.encode(desc, convert_to_tensor=True).unsqueeze(0)
for dept, desc in self.department_descriptions.items()
}
# 保存到类变量
self.__class__._precomputed_departments = self.departments
self.__class__._precomputed_descriptions = self.department_descriptions
self.__class__._precomputed_embeddings = self.department_embeddings
注:接下来,看下怎么取值。
20250328周五时间段:15:18-16:00返回的值,很奇怪,像集合似的,看下怎么取,数据如下:
[('消化道科', 0.7293846011161804)]修改程序如下:

图2a-2
注:接下来,就是把数据与分科对齐。
20250328周五时间段:15:29-16:00对齐数据修改如下:

图2a-3
注:接下来,这个数据是分科的,要再来一个意图识别的。通过参数作区分。
20250328周五时间段:15:37-16:00这个主要是选关键词,看下大模型能不能生成。需要生成关键词的如下:
res_res = [
'疾病问诊',
'疫苗接种',
'用药咨询',
'在线复诊',
'驱虫选药',
'科学养宠',
'行为异常',
'检测报告',
"其它"
]
注:问下大模型,结果如下:

图2a-4
注:把这个搞到程序里,后期不准确再优化。速度是第一位的,别墨迹。
接下来,就是根据传的参数不同,把数据进行分开。
20250328周五时间段:16:33-17:00根据接口传参是意图识别还是分科,把向量数据分开,修改程序如下:

图2a-5
注:先设两个变量,再根据参数传参数,来决定用哪一个,如下:
def predict_department(self, user_query, top_k=3,ask_type=1):
# 编码用户查询(确保是2D张量)
query_embedding = self.model.encode(user_query, convert_to_tensor=True).unsqueeze(0)
similarities = {}
#1:科室 2:意图
if ask_type==1:
for dept, dept_embedding in self.department_embeddings.items():
# 计算相似度矩阵
sim_matrix = util.pytorch_cos_sim(query_embedding, dept_embedding)
# 提取标量相似度值
similarities[dept] = sim_matrix[0][0].item()
elif ask_type==2:
for dept, dept_embedding in self.intention_embeddings.items():
# 计算相似度矩阵
sim_matrix = util.pytorch_cos_sim(query_embedding, dept_embedding)
# 提取标量相似度值
similarities[dept] = sim_matrix[0][0].item()
result = sorted(similarities.items(), key=lambda x: x[1], reverse=True)[:top_k]
return result[0][0]
注:这样一来就可以兼容分科和意图识别了,意图识别结果如下:

图2a-6
注:接下来,把这个搞到程序里,代替deepseek问询。
描述:把已经写好的deepseek方法,放到程序里,代替deepseek,实现意图识别与分科。
开工:
20250328周五时间段:19:54-20:00先代替意图识别,如下:

图2a-7
注:把这个方法替换一下就可以了,针对意图识别。修改程序如下:
def user_intension_congnition(conversation_id,dialog,messages,question):
"""
用户意图识别
返回:不要给出解释性话语,只给出以下分类的一种
疾病问诊
疫苗接种
用药咨询
在线复诊
驱虫选药
科学养宠
行为异常
检测报告
其它
"""
# question_prompt = user_intension_reconition_prompt.format(input_text=question)
# specify_type = 100 ##指定类型,这个类型表示意图识别,主要为了前端不显示
# res_chat = chat_direct(dialog,question_prompt,messages,specify_type)
#本地模型
res_chat = classifier.predict_department(question, top_k=1,ask_type=2)
if '其它' not in res_chat:
ConversationService.update_by_id(conversation_id, {"intention":res_chat})
return res_chat
注:接下来,就是做替换分科。
20250328周五时间段:20:14-21:00修改程序如下:

图2a-8
注:接下来,就是进行测试了,看看效果怎么样。
昨日总播放:528.6万,总收入:228.28,累计收入:3850.85块,可提现:1806.66,软件截图如下:

图2c-1
注:想要全脱管运营头条号的联系我,你出账号,我来运营,收益四六分成(你六我四),你当甩手掌柜,每天都能得几块零花钱,财富wx: 17701328814
拍摄于2025年9月14日,17:04:20,带大宝去买文具,当时大宝七岁九个月。很多事,事在人为,就比如这次蓟州之行,我的体验虽说开车挺劲费,到处都是山路,堵车也很严重,800米的小道能堵半个多小时,但人家服务好,我下次有机会了还会去。很多事都是不自觉的,房东带我买药了,虽说我没给他买烟,但我使用房间物品时,都是轻拿轻放,走时房间收拾干净,不留垃圾,减少他的劳动也算是一种报偿,下次来了首选是他家,长远来看,他是有收益的。所以,多做好事,将来必有好事发生,加油!

图2d-1
《本文完》