当前位置:首页>python>6python之数据库表数据加到配置文件中及线上bug处理

6python之数据库表数据加到配置文件中及线上bug处理

  • 2026-09-08 03:16:40
6python之数据库表数据加到配置文件中及线上bug处理

写在前面的话

放平心态。最近,头条运营收益不太理想,做事有点懈怠。尤其,今天一位阿姨掉号了,联系上号时,各种不会,我说:阿姨,你这是第三次掉号了,不能说你每次掉号我都得教一遍吧。阿姨越发紧张,说:不好意思,阿姨年纪大了,老记不住,不怕你笑话,每次你教完我,我都记本上,但老是对不上,给你添麻烦了,老了不中用了。我突然觉得有点心疼,如果我妈在外面被别人说,我肯定会血充进脑子,找人拼命的。我赶紧笑着说,没事阿姨,您知道吗,很多比你年轻的,上十来次号了,还是每次都问,不知怎么扫码,您表现算是比较优秀的呢,刚才我说话语气不对,阿姨千万别放在心上,对不起了,阿姨。最终,阿姨再一次的掉线上号成功,耗费我将近半个小时。后面想想,我要放平心态,如果一个搓澡工嫌客户身体脏,一个牙医嫌客人口臭,那肯定不是客人的问题呀。

[138+200]-------->底部有张生活照片(头条号运营:大家想全托管上号的联系我哦,每天让你得个地铁钱,微信号: qhz_toutiao)

关键词:python、ragflow、数据库表、配置文件

一、数据库表数据加到配置文件中(三级)

描述:需要把库表中的配置数据,加到conf中,选择的时机,接口user/user_config。

开工:

第一步:找接口(四级)

20250703周四时间段:15:41-16:00

接口程序如下:

@manager.route("/user_config", methods=["POST","GET","OPTIONS"])   
# @login_required
def get_user_config():
    domain = get_domain(request)
    
#兼容 test* 和 api.* 情况,使用 end_with 而不是 ==
    res_tenant = next((t for t in conf.tenants if domain.endswith(t.domain)), {})
    # log.info(f"{request.headers=},{res_tenant=}")

    # 合并系统配置和租户配置,合并的时候同时合并子节点
    # 如果没有匹配到任何 res_tetant,那么使用默认app的配置。
    user_config = {
        t:deep_merge(dict(conf.get(t,{})),
                              dict(res_tenant.get(t,{})))
        for t in ['app','llm','dialog']
    }

    log.info(f"{user_config=}")
    return get_json_result(data=user_config)

写个测试用例,跑一下这个程序。

第二步:写测试用例(四级)

20250703周四时间段:16:03-18:00

测试用例如下:

###获取用户配置信息                
def test_user_config(client,login_header):


    ##1.调用接口
    response = client.post("/v1/user/user_config",
            headers={
                **login_header
            })
    assert response.status_code == 200
    # json =  response.json()
    #assert json['code'] == 0
    print(f"response:{response}")   
    # print(f"response.data:{response.data}")   
    json =  response.json
    print(f"json:{json}")
    # assert json['code'] == 0

注:跑一下,看看效果,效果如下:

图6a-1

注:接下来,看下为啥没展示测试的配置,而是展示的一体机配置。

第三步:展示测试配置(四级)

20250703周四时间段:16:32-18:00

发现,展示不了测试的配置,因为这个测试用例没有域名,所以,找不到测试配置,只能用默认的。

截图如下:

图6a-2

注:接着看到conf.tenants怎么加载的,替换下该怎么改。

修改了程序,把租户配置去掉了,运行还能拿到,神奇了,原因是去掉租户信息是改的备份函数,不是正在运行的函数。

再次运行,看看效果,发现conf.tenants确实是空的,接下来,是空的情况下,怎么获取这个conf.tenants。

第四步:获取conf.tenants(四级)

20250703周四时间段:18:44-20:00

写个获取方法,如下:

    @classmethod
    @DB.connection_context()
    def get_big_tenants_list(cls):
        """
        获取大租户列表
        """
        fields = [
            cls.model.id.alias("tenant_id"),
            cls.model.name.alias("tenant_name"),
            cls.model.domain,
            cls.model.app,
            cls.model.llm,
            cls.model.kb,
            cls.model.dialog,
            cls.model.use_kb
            ]
        return list(cls.model.select(*fields)
                    .where(cls.model.is_big_tenant == 1).dicts())

注:引入看下效果,效果如下:

图6a-3

注:接上来,上测试服看看效果。效果如下:

图6a-4

注:没有走基础问询,是不对的,需要排查下。

第五步:排查基础问询(四级)

20250703周四时间段:22:58-00:00

跑一个测试用例,发现需要改程序,修改如下:

图6a-5

注:加了个获取租户信息配置信息的程序,运行,效果如下:


 answer: data:{"retcode": 0, "retmsg": "", "data": {"answer": "\n**ERROR**: Error code: 400 - {'error': {'code': 'MissingParameter', 'message': 'The request failed because it is missing `messages.content` parameter. Request id: 021751557437353d4bf348bc0d6c878e089015bd6eda6fb649d7a', 'param': 'messages.content', 'type': 'BadRequest'}}"}} 

注:接下来,处理下这个报错。

第六步:处理MissingParameter(四级)

20250703周四时间段:23:48-00:00

排查下为啥会出现这个问题,打日志打了一圈,没找到原因,查下是不是欠费了。

这个先暂停,现在线上报错了。需要处理一下。

第七步:没走意图识别处理(四级)

20250703周四时间段:16:16-17:00

截图如下:

图6a-6

注:看下为啥没走,跑测试用例,打断点看看。

可能还是数据库的配置文件的问题,没有写入到conf中。

二、线上bug处理(三级)

描述:现在线上问一个问题,停住了,需要处理一下。

开工:

第一步:跑测试用例(四级)

20250703周四时间段:17:49-18:00

测试用例如下:

def test_multi_chat(client,login_header):
    log.info("test_multi_chat0034")
    '''
    测试多轮对话-包括三轮对话场景====加入了模拟登录
    '''
    ########调用接口
    json_data = {    
        "conversation_id": '605f2736370511f0bf8e75026f04980c',
        "question": '我家狗拉肚子',
    }

    ###测试专家诊断
    json_data = {    
        "conversation_id": 'd34e3194fe3c11ef9d070242ac120006',
        "question": '结束基础问询,请直接给出结果',
    }

    ###测试专家诊断
    json_data = {    
        "conversation_id": 'd34e3194fe3c11ef9d070242ac120006',
        "question": 'Ok, how to calculate the VHS ratio?',
    }

    ##### 调用多轮对话接口
    url = "/v1/conversation/multi_chat"
    resp = client.post(
        url,
        json=json_data,
        headers={
            **login_header
        }
    )
    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")

注:运行一下,看看效果,还是卡住,原因是少个else,修改程序如下:

图6b-1

注:这样改了之后,应该就有了。

第二步:线上max_tokens报错(四级)

20250704周五时间段:10:24-11:00

报错说max_tokens太大了,应该是没获取到配置中的8000,处理一下,修改程序如下:

图6b-2

注:运行效果如下:

图6b-3

注:还可以,接下来,遇到个小问题,就是is_base_query传参不对,需要处理一下。

第三步:is_base_query传参数(四级)

20250704周五时间段:11:19-13:00

接收到的参数应该是true,实际上接收到的是question_finish,追踪下原因。

图6b-4

注:是因为传参错误导致的,先这样,上线,全流程测一下。

第四步:全流程测试(四级)

20250704周五时间段:11:38-13:00

测试没有问题,接下来,搞一下测试服的问题,处理完之后,再搞一下文件引用问题。

三、头条战果汇报

昨日数据来啦,昨日总收入:605.10块,昨日总播放:367.57万次,软件截图如下:

图6c-1

注:想要全托管运营头条号的联系我,你出账号,我来运营,保你天天有钱花,咨询电话: 17701328814(微信同号),也可以加群先了解一下。

图6c-2

注:个人微信如下,欢迎骚扰。

图6c-3

四、生活照片

拍摄于‎2025‎年‎6‎月‎1‎日,‏‎13:15:48,带二宝在门口玩水气球,当时二宝两岁八个月。其实,为什么有句话是:干一行爱一行,实际上每个人对自己干的工作,很多都是厌恶的,所以,要提倡既然干了,就爱吧。我们老家有一种说法是:卖啥不吃啥,比如卖猪肉的,不喜欢吃猪肉,卖羊肉的很少吃羊肉,因为吃的多了,闻的多了,就腻了。之前,我看视频,感觉一个人驾车或者骑车甚至徒步去西藏,不可接受,我觉得这不是浪费生命吗,现在我的想法改变了,可能人家干一个工作几十年,太厌恶了,徒步去西藏,换换口味,陶冶一下情操,这是多好的事啊。也许我哪一天,突然放下所有工作,骑摩托车去西藏了,谁知道呢?

图6d-1

《本文完》

最新文章

随机文章