何必呢。最近,看视频,周星驰没火之前,带周星驰拍电影的李修贤在直播间说了一段话,瞬间被网友骂惨了。李说:他一个人,出门戴口罩,戴帽子,没儿没女、没有朋友、出门鬼鬼祟祟。一顿阴阳周星驰,周没回应,结果网友不干了,人家没儿没女没结婚咋了,你这样搞人身攻击人家不好吧,把他的评论区推到爆炸,自己74岁了,不得不向公众道歉,网友说你不应该向我们道歉,应该向周星驰道歉。其实,李比周大十来岁,当年周入行时,帮过周,让其出演自己导的电影,后面由于分属不同的公司,合作就少了。李的意思是我帮助你,你得记我一辈子,现在不主动联系,不年年上贡,就是忘恩负义之徒,借这次直播故意搞人身攻击。其实,完全没必要,李帮了周,也借周使自己更火,这是相互成就的事,即使完全是李的功劳,也没必要一直让别人报答,合作完了,就结束了,何必要攻击周呢?
[148+200]-------底部有张生活照片
【关键词】python、ragflow、数据库表、配置文件
描述:现在配置来自两个部分,一部分是数据库表,一部分是配置文件,需要将两个合并,处理一下。
开工:
20250627周五时间段:11:33-13:00按照AI反馈,修改函数,先从表里取数据如下:
mysql_data ={
'domain':['pet.com','pet2.com']
}
注:先写个假函数如下:
图3a-1
注:优化后的函数如下:
def get_dynaconf(base_dir: str = "conf",
files: list = ['service_conf.yaml',
'app_conf.yaml',
'vision_models_conf.yaml'],
mysql_config: Dict[str, Any] = None,
**kwargs) -> Dynaconf:
"""
获取conf 目录下的配置文件:service_conf.yaml,app_conf.yaml
如果定义了环境变量 RAG_CUSTOM_TAG,则访问此变量目录下的所有配置文件
"""
# 1. 加载文件配置
settings_files = [f"{base_dir}/{f}" for f in files]
# 处理自定义标签配置
custom_tag = os.environ.get('RAG_CUSTOM')
if custom_tag:
dir = Path(base_dir) / custom_tag
if not dir.exists():
raise ValueError(f"{custom_tag=} not valid")
settings_files += glob(f'{dir}/*.yaml')
# 2. 从MySQL获取租户配置
tenant_config = {}
if mysql_config:
try:
tenant_config = fetch_tenant_config_from_mysql(
host=mysql_config.get('host'),
port=mysql_config.get('port', 3306),
user=mysql_config.get('user'),
password=mysql_config.get('password'),
database=mysql_config.get('database'),
table=mysql_config.get('table', 'tenant_config')
)
except Exception as e:
logger.error(f"Failed to load tenant config from MySQL: {e}")
raise
# 3. 创建Dynaconf实例
settings = Dynaconf(
settings_files=settings_files,
merge_enabled=True, # 启用深度合并
**kwargs
)
# 4. 合并MySQL配置
if tenant_config:
settings.update(tenant_config)
logging.info(f"{settings=}")
return settings
注:运行看下效果,如下:
图3a-2
注:处理tenants错误。
20250627周五时间段:15:00-17:00处理了一下,加了一个配置文件,如下:
图3a-3
注:这个加了之后,最起码testing模块出东东了,接下来,就是跑测试用例。
20250627周五时间段:16:14-17:00要用的测试用例(multi_chat_choose)发现没有找到,截图如下:
图3a-4
注:还是要把这个错误解决一下。运行uv sync竟然可以了,截图如下:
图3a-5
注:接下来,跑下测试用例,测试用例如下:
def test_multi_chat_choose(client,login_header):
log.info("test_multi_chat_choose-108")
'''
测试多轮对话-包括三轮对话场景====加入了模拟登录
主要测新版意图识别
'''
########调用接口
json_data = {
"conversation_id": '605f2736370511f0bf8e75026f04980c',
"question": '我有售后问题要解决,心情很烦躁',
}
#############小租户:
json_data = {
"conversation_id": '4cbbfc624d8111f08be70ac66fac3d9b',
"question": '我家狗拉肚子',
}
# ###测试专家诊断中的深度思考
# json_data = {
# "conversation_id": '4cbbfc624d8111f08be70ac66fac3d9b',
# "question": '结束基础问询,请直接给出结果',
# "deep_think": True, # 是否深度思考
# "enable_search": False, # 是否启用联网搜索
# }
##### 调用多轮对话接口
url = f"/v1/conversation/multi_chat_choose"
resp = client.post(
url,
json=json_data,
headers={
**login_header # 携带 JWT(如果有)
}
)
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()
log.info(f"\n\n answer: {answer} \n\n")
注:运行,看一下效果,效果没看出变化,加一点东西,如下:
{
"tenants": {
"user_intention": {
"enabled": true,
"llm_prompts": {
"role": "宠物医生",
"force_complete_flag": "结束基础问询,请直接给出结果",
"finish_flag": "question_finished",
"wait_expert_reply": "您已回复完成临床问询,正在分析病情..."
}
}
}
}
注:改下,看下会不会覆盖配置文件里的内容。修改函数如下:
def fetch_tenant_config_from_mysql()-> Dict[str, Any]:
result = {
"tenants": {
"user_intention": {
"enabled": True,
"llm_prompts": {
"role": "宠物医生1",
"force_complete_flag": "结束基础问询,请直接给出结果2",
"finish_flag": "question_finished3",
"wait_expert_reply": "您已回复完成临床问询,正在分析病情4..."
}
}
}
}
return result
注:调用一下,看看效果。
20250627周五时间段:17:36-19:00我知道了,要更新得全更新,要不然,会有变量找不到,改个名字即可,如下:
图3a-6
注:这个运行之后,还是不行,在conf里没有,截图如下:
图3a-7
注:是不是多一层呢,处理一下。
20250627周五时间段:18:22-19:00修改代码,修改一下代码,改变更新方式,如下:
图3a-8
注:这样改了之后,发现settings中是有那个user_intention2的,但后面intention_service中没有获取到,需要追踪一下。
20250627周五时间段:18:43-19:00打断点看一下,效果如下:
图3a-9
注:找到地方了,是这里,加载了全部的tenants,所以,数据库函数也要改成这样。
20250627周五时间段:19:42-21:00修改函数如下:
def fetch_tenant_config_from_mysql()-> Dict[str, Any]:
result = {
"tenants": [{
"domain": "pet.bitzero.cn",
"tenant_name": "ragflow‘s Kingdom",
"app": {
"welcome": "我是您的专业宠物医生,很高兴为您服务",
"background_image": "/static/login-background.117236ea.webp",
"logo": "/static/logos1.76a7cb8a.png",
"is_open_pet_archives": 1
},
"user_intention": {
"enabled": True,
"llm_prompts": {
"role": "宠物医生",
"force_complete_flag": "结束基础问询,请直接给出结果",
"finish_flag": "question_finished",
"wait_expert_reply": "您已回复完成临床问询,正在分析病情..."
},
"intention_file": "conf/test_pet/test_pet_intention.yaml"
}
}, {
"domain": "baili.bitzero.cn",
"tenant_name": "baili@baili.com‘s Kingdom",
"app": {
"welcome": "我是您的专业宠粮助手,很高兴为您服务",
"background_image": "/static/login-background.117236ea.webp",
"logo": "/static/logos1.76a7cb8a.png",
"is_open_pet_archives": 0,
"chat_title": "知识问答"
},
"llm": {
"role_setting": ""
},
"kb": {
"extract_extend_entities": True,
"invalid_types": []
},
"dialog": {
"intention_llm": "qwen-plus",
"online_search_llm": "qwen-plus"
},
"user_intention": {
"enabled": True,
"role": "宠粮专家",
"intention_file": "conf/baili/baili_intention.yaml"
}
}, {
"domain": "heyi.bitzero.cn",
"tenant_name": "heyi@baili.com‘s Kingdom",
"app": {
"welcome": "我是您的专业宠粮助手,很高兴为您服务",
"background_image": "/static/login-background.117236ea.webp",
"logo": "/static/logos1.76a7cb8a.png",
"is_open_pet_archives": 0,
"chat_title": "知识问答"
},
"llm": {
"role_setting": ""
},
"kb": {
"extract_extend_entities": True,
"invalid_types": []
},
"dialog": {
"intention_llm": "qwen-plus",
"online_search_llm": "qwen-plus"
},
"user_intention": {
"enabled": False,
"role": "宠粮专家"
}
}]
}
return result
注:把tenant_conf.yaml中的数据完全加进行,试试效果。接下来,先研究一下,输出截断的问题,主要是提高tokens,减少每次输出的题量。
拍摄于2026年3月22日,18:39:04,带媳妇孩子出去玩,当时大宝八岁三个月,二宝三岁五个月。其实,帮助别人,这个词本身就有争议,如果帮助别人有目的性,就不能算帮助,比如:我接公司领导孩子放学,这叫帮助吗,我可能是为了讨好领导。即使是纯帮助,自己也获得了成就感,也可以说是相互成就,即使自己啥也获取不到,那也不能攻击别人,别人本来还记得你的好,帮助过他,你一攻击人家,人家可能只有恨了。记得,考研时,我帮助过一个女孩,她大学四年数学基本没上过课,高数、线性代数,概率论与数理统计,基本的都不会,天天问我题,我给她解答,那一年,她考上研了,我英语差没考上,此后,再无联系。后来有一段时间,我想,她太绝情了,连个电话都不打。参加工作以后,我想明白了,做事本来就应该不求回报,事先求回报,干脆别做,就像借别人钱,借之前,要做好要不回来的准备,如果怕要不回来,干脆别借。所以,李修贤阴阳周星驰是不对的,怪不得网友骂他。

图3b-1
《本文完》