当前位置:首页>python>3python之合并数据库表与配置文件及处理层级

3python之合并数据库表与配置文件及处理层级

  • 2026-10-11 06:35:21
3python之合并数据库表与配置文件及处理层级

写在前面的话

何必呢。最近,看视频,周星驰没火之前,带周星驰拍电影的李修贤在直播间说了一段话,瞬间被网友骂惨了。李说:他一个人,出门戴口罩,戴帽子,没儿没女、没有朋友、出门鬼鬼祟祟。一顿阴阳周星驰,周没回应,结果网友不干了,人家没儿没女没结婚咋了,你这样搞人身攻击人家不好吧,把他的评论区推到爆炸,自己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错误。

第二步:处理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中没有获取到,需要追踪一下。

第六步:追踪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

《本文完》

最新文章

随机文章