当前位置:首页>python>4python之搜索报错及单节点数据恢复

4python之搜索报错及单节点数据恢复

  • 2026-10-11 07:06:02
4python之搜索报错及单节点数据恢复

写在前面的话

怪我喽。昨天,有个已上号的小妹,推荐了一位朋友上号。我加了她朋友,很久才同意。说,你朋友说你要上号,我给你操作一下吧。她后来回我说:太忙了,有时间了再说。第二天,小妹联系我说:你不是在群里发,推荐人上号给15块钱吗,怎么还没发我。我把和她朋友的聊天截图发给她。她说:朋友推给你了,她不上号怪我喽。我说:没有怪你的意思,但这个说的很清楚,是成功上号发红包的。她说那就是白推了呗。我说:这个事怎么说呢,你带孩子去游乐场,人家说1米以下免费,你孩子1米1了,你会不会说,孩子长的高怪我喽,既然咱们定了规则,就要按规则执行。要不然,我们定的四成运营费,我收你五成,你乐意吗。她没回我,这件事算过去了。

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

【关键词】python、ragflow、搜索报错、数据恢复

一、搜索报错(三级)

描述:现在普通租户的模型数据正常了,为啥还报错。

开工:

第一步:排查数据库数据(四级)

20250527周二时间段:19:46-21:00

搜索报错截图如下:

图4a-1

注:先查下数据库。查了下,是没问题的,如下:

图4a-2

注:接下来,就是运行测试用例,查下代码了。

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

20250527周二时间段:20:07-21:00

重新看了一下,是另一个接口报的错,如下:

图4a-3

注:接下来,给这个接口写一个测试用例,参数如下:

{"kb_id": ["bf5b0a6eff1211ef94e1acde48001122"],"highlight": true,"question": "555","page": 1,"size": 10}

测试用例代码如下:

def test_conversation_retrieval_test(client):    log.info("test_conversation_retrieval_test")    '''    测试web页面搜索中的接口    '''    # 1. 登录并获取 session_cookie 和 authorization    login_resp = client.post('/v1/user/login',         headers={"Content-type": "application/json"},        json={            "email": "243127387@qq.com",            "password": "B/9AbuDh+IhtbDguIcT9YM1Qdj5eDmDaJhRHvP4VqRiyGZeMFd7vAI8hHiCJXtUNMlYGU/m1Zs5AUYC46Y89oOLiVR+okG1PIMLH+LADiAVy2Ef26ekZHKFe4k2O1DkntuDnopbR8w5bzzssIfjBwk1WIBXtxKeH5hcNzARvMqgAk5E/XIZI0hyMOuztkC9ck2oSF1YccWQaoerftjO7csSVKKAYEz2ape0J82tFlEys246infGuQwS9NVe4bvri1M+ZZH1eQtGj5gpLMc7KMaRPxRTymkRfzJy8rb57bYJ1NeNI8Rmk8WjiVKbnR/iAOLj8qsZaWqobtT1zr3uMHQ=="        }    )    log.info(f"login_resp.text:{login_resp.text}")    # 获取 Set-Cookie(服务器返回的 Cookie)    set_cookie_header = login_resp.headers.get('Set-Cookie')    print(f"Set-Cookie: {set_cookie_header}")  # 例如: "session=xxx; HttpOnly; Path=/"    # 提取纯 Cookie 值(去掉 "; HttpOnly; Path=/" 等部分)    session_cookie = set_cookie_header.split(';')[0] if set_cookie_header else None    print(f"Pure session cookie===========================================================: {session_cookie}")  # 例如: "session=xxx"    # 获取 Authorization    authorization = login_resp.headers.get('Authorization')    print(f"Authorization=================================================================: {authorization}")    ##调用接口    json_data = {        "kb_id": ["bf5b0a6eff1211ef94e1acde48001122"],        "highlight": True,        "question": "555",        "page": 1,        "size": 10    }    url = f"/v1/conversation/retrieval_test"    resp = client.post(        url,        json=json_data,            headers={                "Cookie": session_cookie,          # 携带 session cookie                "Authorization": authorization,    # 携带 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")    

注:给测试用例换下位置,因为是chunk下的,如下:

/v1/chunk/retrieval_test

运行结果如下:

图4c-2

注:本地没问题,但测试服上报错,需要处理一下。

第三步:测试服(四级)

20250528周三时间段:13:23-15:00

现在测试服,报错截图如下:

图4c-3

注:看下代码。我好像知道了,就是现在在zero3上运行,es-alone生效,在zero4上运行,es-alone不生效,接下来,在zero4上打开代码运行一下。

第三步:zero4上打开代码(四级)

20250528周三时间段:14:46-15:00

打开代码,运行如下:

图4c-4

注:发现只要es正确启动,搜索是没有问题的,虚惊一场。接下来,做意图识别分类。

二、单节点数据恢复(三级)

描述:龙哥指示,把zero2上的单数据数据恢复一下,处理一下。

开工:

第一步:复制文件(四级)

20250528周三时间段:00:15-01:00

命令如下:

sudo cp -r docker_esdata_single /data  

删除原来的文件夹:

sudo rm -rf  docker/volumes/docker_esdata01/ 

注:删除之前,先把节点关一下。

把数据复制过去,重启就好了。

第二步:测试

测试还可以

三、助手中的llm_id(三级)

描述:看下助手列表中的llm_id从哪里获取的,现在数据库中的数据改了,而它未变,研究一下。

开工:

第一步:看web(四级)

20250528周三时间段:10:36-11:00

看下请求的哪个接口,如下:

图4c-1

注:这个看了一下,tenant_id使用的是公共的tenant_id,要换成私有的tenant_id。

查询语句如下:

SELECT * from dialog where `name` like 'wx%' and tenant_id = '7d19a176807611efb0f80242ac120006'

注:把这几个换掉,之后,再跑一下脚本。

第二步:跑脚本(四级)

20250528周三时间段:10:49-11:00

脚本需要修改下,昨天之所以把公共租户的数据删除掉,原因是扫码用户dialog表中的tenant_id是公共租户的tenant_id,加个约束,如果是公共租户id,就不让删除tenant_llm表中的内部,修改如下:

def update_single_tenant_data(common_tenant_id:str,tenant_id2: str ):    """    根据公共租户id,更新tenant、tenant_llm中的配置数据    请求:    python rag/svr/update_tenant_svr.py --common-tenant-id 7d19a176807611efb0f80242ac120006 --tenant-id2 a9904fbcb2e711efb3e5f020ff63f4c4    """    log.info(f"开始更新tenant、tenant_llm中的数据")    log.info(f"common_tenant_id: {common_tenant_id}")    log.info(f"tenant_id2: {tenant_id2}")    if common_tenant_id == None :        log.error(f"common_tenant_id cannot be empty!")        return "common_tenant_id cannot be empty!"    if tenant_id2 == None:        log.error(f"tenant_id2 cannot be empty!")        return "tenant_id2 cannot be empty!"    if tenant_id2 == common_tenant_id:        log.error(f"tenant_id2 cannot be equal to common_tenant_id!")        return "tenant_id2 cannot be equal to common_tenant_id!"    try:        #1.更新tenant数据        common_tenant_info  = TenantService.get_info_by(common_tenant_id)[0]        tenant_data = common_tenant_info        tenant_data['id'] = tenant_id2        fields_to_remove = ["name", "role", "tenant_id"]  # 添加tenant_id到删除列表        for field in fields_to_remove:            if field in tenant_data:                del tenant_data[field]        if not TenantService.update_by_id(tenant_id2,tenant_data):            return "Fail to update a new tenant!"        ##2.更新tenant_llm数据,先删除,后添加        try:            TenantLLM.delete().where(TenantLLM.tenant_id == tenant_id2).execute()        except Exception as e:            print(f"删除失败: {str(e)}")  # 捕获并打印具体错误        ##查出common_tenant_id下的tenant_llm数据,并添加到tenant_id2下        tenant_llms = TenantLLMService.filter_scope_list(in_key="tenant_id",in_filters_list=[common_tenant_id],filters=None,cols=None)        for tenant_llm in tenant_llms:            tenant_llm = tenant_llm.to_dict()            tenant_llm["tenant_id"] = tenant_id2            if not TenantLLMService.insert2(**tenant_llm):                return "Fail to add data to tenantllm!"        ##3.更新dialog表        ##根据tenant_id查询dialog表        dialog_info = DialogService.filter_scope_list(in_key="tenant_id",in_filters_list=[tenant_id2],filters=None,cols=None)        dialog_id = None        if dialog_info:            dialog_info2 = dialog_info[0].to_dict()            dialog_id = dialog_info2['id']            req = {                "id": dialog_id,                "tenant_id": tenant_id2,                "llm_id": tenant_data['llm_id'],            }            DialogService.update_by_id(dialog_id, req)            log.info("update dialog info: %s" % req)        log.info(f"更新tenant、tenant_llm、dialog中的数据成功")    except Exception as e:        log.error(f"全局错误: {str(e)}", exc_info=True)        return jsonify({            "code": 500,            "message": f"Internal error: {str(e)}",            "data": None        }), 500     

注:这里边加了约束,不让两个tenant_id相等,因为相等的话,可能把公共租户的配置信息tanant_llm中的数据删了。不过,正常理论上来说,按照新逻辑的数据,他们两个的数据也不应该相等。

四、头条战果汇报

昨日数据来啦,昨日总收入:1125.5,昨日总播放:1121.6万,软件截图如下:

图4d-1

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

图4d-2

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

图4d-3

五、生活照片

拍摄于‎‎2026‎年‎5‎月‎3‎日,‏‎8:15:27,带二宝去天津玩,当时二宝三岁七个月。后面想了想,规则很重要,自己没看清规则,不能怪别人,或者说没达到条件想白嫖,主要看别人愿意不愿意或者看执行规则者的心情。之前看过一个故事:一位农民带两孩子去买票,售票员看农民可怜,穿的破旧,动了恻隐之心,明明看出两孩子过了1米2,问孩子妈妈:你两孩子看着挺小的,没到1米2吧。正常来说,妈妈会说:没到没到。这个事也就过去了,省下1个人的票,但妈妈说:孩子一个1米21,一个1米25,都过1米2了。那售票员没办法,只能开成人票。售票员说:也没让你量,你说没到不就行了。妈妈说:我说没到,但孩子自己知道呀,父母在孩子面前撒谎,孩子会学的。售票员肃然起敬,这个事说明,有规则要执行,既考验执行人又考验被执行人。

图4e-1

《本文完》

最新文章

随机文章