From d957b4374eef3c40d23729856fd06498fdb9ce6d Mon Sep 17 00:00:00 2001 From: ouyangyouzhang Date: Tue, 24 Jun 2025 09:47:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0API=E5=AF=86=E9=92=A5?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E9=80=BB=E8=BE=91=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=84=8F=E5=9B=BE=E8=AF=86=E5=88=AB=E7=A4=BA=E4=BE=8B=EF=BC=8C?= =?UTF-8?q?=E5=A2=9E=E5=BC=BAExcel=E6=95=B0=E6=8D=AE=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E7=A7=BB=E9=99=A4=E5=86=97=E4=BD=99?= =?UTF-8?q?=E5=90=8D=E8=AF=8D=E6=9D=A1=E7=9B=AE=EF=BC=8C=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E5=A4=9A=E4=B8=AA=E4=BA=8C=E8=BF=9B=E5=88=B6=E7=B4=A2=E5=BC=95?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api_key.txt | 138 ++++++------------ data/nouns/merged_nouns.json | 8 - .../professional_nouns_index/index.faiss | Bin 4022317 -> 4014125 bytes data/nouns/professional_nouns_index/index.pkl | Bin 204309 -> 203774 bytes rag2_0/demo/intent_recognition_example.py | 8 +- rag2_0/demo/validate_excel_data_batch.py | 2 +- rag2_0/tool/APIKeyManager.py | 48 +++--- rag2_0/tool/ModelTool.py | 25 ++-- 8 files changed, 91 insertions(+), 138 deletions(-) diff --git a/api_key.txt b/api_key.txt index 5ee6e0e..7b3d78d 100644 --- a/api_key.txt +++ b/api_key.txt @@ -1,31 +1,5 @@ -sk-kvgfuqeqvpmfsccykyoohheshclcrtvjlnewratvrjpkpbkc -sk-aulumxzhvaladchcwgmsxidtdsvzytbpvzqgfuvcxlwbwcgl -sk-otxxemniwhxkdvroszmmkitswwuykosnqoldrkzdoflqpgvw -sk-zlruqobfdbjebyyvkmehakpcvfgnlfbdlbfrepusazzckbnv -sk-rczjqufgdisqplkrmvhaxmdgcboluvxympvzljlreuqeeviq -sk-xfnvcksdgwufsktvmhpqrwpgovsxxtaeehtxnaqjtxmubqzl -sk-wwonvjnowbcxmoyoluynnkjwerghspzdulyidskunkordaft sk-qmrkfvvbbfssuoreyvwqawoveyowuvxviqzqknotyweqmuog -sk-nprpuknjmikvoaxnwgyshwwwtnifvixpuqtzkzmcacdnvoib -sk-xanwnicepdxfqrfejzuxjcrhdsglfypkoxlcmmtamrtjkork -sk-lvtdgodiaurqyiwdxtdrgxifguychhccqlqkhqctscvqbfgi -sk-aedlbtlmqcttxwnvlfmxzaysamocamqxjceoyqjfgpcowybw -sk-fahdvndjblyjlizamvwcrxnilsgmbgbvwssxgquhkezgpqne -sk-tzludgttzxvpvwayazdbppbauvathdtccafjrhojpemucgyi -sk-ylgoiqxmtxeojdnonthxtweungyzldaqarvjxlqyztlvyrff -sk-asuqbqwdhjcqnvtjlwufyrkrwkobnrbmukzarvcctsgjipdp -sk-nbksjgcngsayoumnsdbkcpnqivnvxjenwpzuazzrkhnsgeoo -sk-jgybgyayxlwoxeijgrjcneqlyusleohgbliuwpsuhocrjsmk -sk-wzjsmwxcbbpcrqivqfzjwufqqjtlwejtncnvbpeicznkwiuh -sk-izdjicdoyillktsihkiapuvwebisehtlgykozrvzfkgncwsc -sk-fcsfmyivfuojsqsditvobfqprdpeunukycpcfnoxkraqevpx -sk-szyjgyxrcvyxpvzfwgmbxnflxngxvcplitcctsdvvrqjgftk -sk-jzbodthsnvjwbyrnynsxrudtqfnbdbrcxebjwjgajocnzqse -sk-fxepossfzpmccibfwqpkluorzqlbtcaplepeugtfzfsctcbl -sk-flhqvziknntednkcgjaxlyzzsrfzjhrzrmteqonajpbiinni -sk-xfregpbbquqbxpiobjzanydsjivrjrnbokzxcqtnhxhyghhe sk-jrdzerhmvrtvzawkksowbgkggkubwfquplmrxbdhespqgtis -sk-oqehupcveovkjqqtxypqyifidcdissuyehwrkdwgruoyjkpq sk-jnnmltwtqwuoyagoogzzeraczmyfxhoairiddgayksqdfnbr sk-eghuepxnbcollzrjwbzqvbnhiiwagkejaclyhvaodeqgwrog sk-poszkbjdmamimconjustnrxxqusuzlryxkrzkpronlenrmen @@ -36,76 +10,6 @@ sk-gzdqfoyvulrqscdpjlwlufdecrsyjpmwpkknuhnjsvtyftox sk-bkcufidsebujopqqwexwxwpmevrpelmvxzdymncvllcyojce sk-olabhscekudzkyudypkcjvehwqunagubwdmtppugrjmcptwv sk-zpdqyocliebhqpkuwvebpgcnfjdkvavdltimllmgkthwnwph -sk-gvhchlfelocjniuydusyhhwacnomxnvucjonzkhtqoplnbcr -sk-lzneagvdxhisodndnxnpkntghpkimjmjsebiqdzaoqzuhbla -sk-xotcfdkigykevngedupitbcatjqppxmcibjtcebyoglykuxz -sk-ufydqsdqnwsegaqwtappzwdyzqnoblyunfvslomnnmykedgk -sk-jwasykftbkyjzdqlwcxuicrwzxsbhttilxfefbrozrznpwlv -sk-xngteojwkxmftyaabjdwwgyoadspsowmcpcqobteutdcfmnr -sk-akzkgniebruqrtuqskvlibkpcxjuazhcatysptkfyqivldfn -sk-vpqkxtmcgkggllexchzysuewyfaoexzasoumxngdplzgwksw -sk-fvcsqdbqmdlwxzjyofrilusqcypbfyczogaqwqrjrwvojmer -sk-htjprscvfgskjtjzpxxxjhyymshagogykpawxekrrfbgftyx -sk-vtlgznzanapdinnlpuuygdidejxvlvlziolumckxwntzvxcn -sk-npwaykpqovytxhihxepeaxuwgnzvqvscirwbiffudyebibwe -sk-kduozskjwsbxytajaedemqemimflzoqdrfbbuopuogbxptos -sk-cmyaaofqksxeccaiswwholizxtdhqoszpilbqhmwwablwtwl -sk-zltwpyvzodfszrvqcmjxycfshshmqmgtpghiaulcrtrilqup -sk-svpublkronxohqmjvtdemtyqopuwyknynmxvurkmmoqsfesk -sk-tindfeurhffenyetmblplxgytcgqnbbruatchpddtstnajvq -sk-ttwgosljnfdqbevvfkjewspoasountxeyiesuuwwpuoseatw -sk-ikzwjzfxxnocfqvkhbolmmnojdqfvdxzmlruynfoneahgraq -sk-zomatpdlatgtzvuoeabofeandiiespmsinosenjlmdigkvjk -sk-xypcnibvqgebhwvsudjuxlycwombofshifpltstezflountf -sk-vhtbtqsdyhwsrsitpppjpulbpnwlhjeeaujccggdjvjtucru -sk-ygqyapfsdpxxzihadttugvofrcgwlnsrqjvrqfrsrlgqidch -sk-cczurtilupwyrnqnjpdjltzamjbpyaxnwgzqoykvfwecezhs -sk-hsalsmvnzmvlknpzldciqligtjrvhcjdbjtcqhorptsgoisr -sk-ierjdccoycmipzflzvzjqdmjazmbczxhwejwrjmuouxpcqev -sk-rlthtjzrxkdlfsemijumxiwwsoxkwnjovobtqwprhnducsqi -sk-doocedvfjsmwysxyzpptojnwwuoucxvrknlrdsnomffljems -sk-tgxnplgtwawfnnetghvlzoinksickbynzsgovbrmlrkzzrsy -sk-aggkwzdteggbcgyzimiivphpzibnpmqfbkmgtwyggsjfdymg -sk-tzynazayiglcpzejedpfdftqvtuqynygluorjbbcvrnmsbfl -sk-mcaqucnscgznmtvtzhooxbdafzhcgjgpusnjfbftroedzujk -sk-mlfnxfmwwhturavnsbyedkgrhxfspbfitfyqkllezgdtzhwn -sk-meaqykzphtqqoiswdtbxfqndddmtgvwrdnzdxprozlumrojs -sk-vrtfrtioocmrylrrqpburhkgwmyxfipnissumgufmjpzjqoo -sk-rhknxievjjjzcmkvfwqosnaiglsoufytfkbhhgconiibwriy -sk-wzsvxjfnvpceeoapbzdimpwecckpmcsqmflocttnqyvqvrsr -sk-lflfajincbdljrfwkhrjunyolzuxtcfdbzmspyfizpbdwvvh -sk-siujvueppvhhokbofqlcdxudpswdfwpetvxyittpbarddhsu -sk-avpyhivanabvdyorypdmlqnfetivlwoovfvgsgklumxeqgzy -sk-fvmpnspfeleqrgumwnvzevbtgmdqvftlbvswoghrtxfengfa -sk-wxaeehghpdettyrsnhjrawddnqzxghfjbkkokbwtnbdocsmi -sk-yighqmadjhvixkhjpcknrkapqsyxmphcqvjhlbfzgigfghft -sk-orepiytzucdtxgnxuxhekaivcpzwnunpiauccujrhbkifodc -sk-qsfrireujzrpomdjcfcgbfqncnferyzfcsralnszvurfvkgz -sk-tjienchcxamgldtzjtigpitklsonwcuhyhltswwcnsfhmois -sk-gdtqulaciovvnzwklpckwyheysaplirhgimzreqzkhfxotjh -sk-rqhynqmafsydevjctxeuqizuiithschhiztmqnpawqjjbhyv -sk-idrdvmcgmjmoxowxswfcorfdjmprfukrumimaljjnlwqkazu -sk-hrrmqrhscocbzhpfkzuoptnubgfiedololapvyfftapaawdb -sk-rtqzxuylhryzqnotvkzelvhomuovmbvpxrytydvqevisciwg -sk-ttgsojzjchifbrpwfmcajfujbxexbyvlovgbgpfdvkzqjzpu -sk-tvclqjccfylijwcujuxpppvnumkvmxbctevfqfxjryyygoep -sk-qyazelyawtgyohimgbswwetajekuvmyteweviovvqsjybtwq -sk-zowapfiiqrpeuahmnkopcyccwiyzweigvekiusiuirtsfmbj -sk-qwanpokfsquwwrpxceavasxwmxjarfaxheraamqhsyegfgum -sk-smqpfdbcnhpifwsrpwutwzpscbkeinkmfeoabesztmnicvez -sk-cnvevlfppneiztcgayxiydukhexujtiqjajpdhbrtnenizxe -sk-jmjgjraheompbftegtdzrwcnlyxsfhtrjootwuqirgmodxdm -sk-tfkyyzbhdowskndsnqkniivwhmmfmhnjdzitgvwhmhfrobeh -sk-spjtulrgqkvepawufkloxktfmkyjjhffnmzcththdmnlqkwp -sk-xafrjoiwnundkubilpoxmzpmbsizljfgrerckqgpcnvguqma -sk-dtjwhkzhljzzmchfvoyywjbsdpvgtgnlpzdkgegwnjjnsesc -sk-lurglxyefchyowvybancbtxdavndwvcengfhcrzcdouqsdmp -sk-nckmscferrehepawtytvvzzcexsgbxszmrerkwvzsbvnwckq -sk-hpgusoznbejkugxugsstyezaihqatwmwiwelwjwudekoxlbq -sk-yyqtojpqfrtkyvmhbjvnzhuujzgvitqpuxkytgxspwqscptz -sk-vcwenoaiegiwqhdvalxrvttwqmcrudttpfqhlvtdocsxvvob -sk-npnyztbrdaqtbnldlvfelkfbfozykuwykkkfsrsisytusymj -sk-rjaadeqsgoskclkuqkkyjxdknngrdsjwlgucqutiskroprzk sk-uollmeyatyiwfzszvxkpyndmzfrbqjpyixewmrastbmaqbhy sk-xdlsjytiwilvodadkjxvwdgulhhdytkqvfpyrcnllclgzqkb sk-ffkltifkylutornjhwmnmfjsqsywrjibvujhjtjctzgnkvlp @@ -115,4 +19,44 @@ sk-duchutcxmygrnkhzmmlykvtzwaylqtdxfbbuhvfvzuapazii sk-nlddwexmjxqtgdvahwvlotnomrzcgskxeakxkxauicknzfkp sk-lopwluipwvilwpwztvaxfebueeyilefwgncgpeprqvwazxom sk-rgwrklpvhhrluokkbgavzukuhhpfhqzmozpjzoezfhkxyorc -sk-cdrpglnfmyeeqyhtvxvkpcpwscsbfouwkagjpphuksfzeipy \ No newline at end of file +sk-cdrpglnfmyeeqyhtvxvkpcpwscsbfouwkagjpphuksfzeipy +sk-eyktixexxjqvwufezcmdrazcedtsphyiunhqpamlkrcaxwtg +sk-euzbguamsxqspfdjnrpbchkjkouncqipjvhnkkbvoihgwspe +sk-qlpoqleqaodseswzqklbwjwwcdjrqthbmvweuablibiszpnw +sk-gqjtkwjmrupugviflhsffhkpzxxmjcewviqsneurxnlfqewy +sk-hkxgjpdyxuxjklksunfzaetrhveelucmrldfjnlztibxgjgl +sk-fqjkatqvpkmvlkbqhjfkzmiifmiodayututyprdtldszmacd +sk-wrybirbfwtbfdijjrfpdfxlxzmvcrhfgqqbhyuysibmcmcez +sk-vgkpsmbcchymktakjsheqnjlkopiqcvntqcvxuxmxlllifod +sk-afvrxowsmjmlhguhfpfhmefcldzsohmnyumjdwwkrvzwjrym +sk-jwfemfolekojghqwfwvjxwmzdvdnhaznngqeurvzgwqepddp +sk-vxzwcizvmykzwbxaypvshdkbgjymnmelryyqftkxzxnnpibr +sk-bwcbyczfakqkwrsvmmraeikjfpiurhhanflfqkunpzezvagv +sk-dicoheyoylocrtjsacbvwqzwwibnnasuwhnhsudoemieengi +sk-mvuzqvuqmryqrqolztwthhzcnzibygjycdbeplbbcnbxkncq +sk-qavyzqmnfjbhqhuesfkjcyszkzmjsykpnaebuwzcxhkitoir +sk-jhrbmqmzyrlrqyehkkachwhztkuisphqbmoyvchmaqrcfxtf +sk-mtcfttyljuzteasdjbcrtwwwmqxetmaonbwvojzfijzfiplq +sk-iooturknmbpxhbiulovovtzpyayovyidifzpzkjgqacroxjt +sk-jgjhasobxeuzfgutdyuhcejocwdiwonhkdithchkonhxnawc +sk-mvyqkciotllopyozsfzwtjeicuhnvoihnrrxadfsfiakperx +sk-wticrisyjehvnlrlhmmxhrnlzknqpnkfxowlzvnozskvtvzc +sk-hiniqrfvuqlsgmhrqlezlribsaqdefuhpxxfavoqtszxtasw +sk-zlfncovfrpzczmjquirolpogdrzfarkcwwqkluvifwcvrezq +sk-blhnvpenedysngftlghrkxhweoququkvduikziuypzilpyrp +sk-rynvudqktwvnjleiahwdpeqqdkncsvawvjyicyiojoviiges +sk-ncskqkwomgqpfnfnachehkeaczzgiiuripeyzjrpnuzeosnn +sk-ijqdmtyeuqrbndqjggxyicfjrmpsgbsjwwkitgsmxqvcjrri +sk-ajgisqnkpgoiwxigrnjachusupagqpukteuknemhmnxsasre +sk-zsskrhjnoepgjngcsseklxfpwpozhenurtrluxlstxujdsti +sk-lubrliuefgmrxpfafdwrhzletyvhemqkpvriuuqncivlewgx +sk-pavwfgrpftdtzeiiaoousmkdptwujoeocyzzoudeqkfyoxks +sk-jfwhzkhpgxacedwxzkbwrwvlfqvnlhxaeyghjcmtshogsqub +sk-sqmaankkcsqpbtktdfcmpuxjxgarfzgvygdgxgztlmyxfpkp +sk-xhlgjmwmtkahrpdncwoqynjdrkekmsyftwqmomsodbggvbdd +sk-ynqqptobbeazmjyrmaytsvyczsqwrukpezizrlcloncxtwvc +sk-wswttgfrxrwijvqhctfilhvlxgdkgogrjhvjkdbzvqrocofa +sk-jdijeubeygjmqtxwryrbwmrpvqawinzwpcxodpolhcupzmpa +sk-xbloemctsowwicjvrtrrewreosnfojoijtygsfxfnjntridv +sk-isovavcefvkzlbjewnumeqqevmnoucojsxwskkitfktkemtq +sk-vxrlvvdzgythgyycuqehdloubxcdwhgojpowgxvgxsstjtvk \ No newline at end of file diff --git a/data/nouns/merged_nouns.json b/data/nouns/merged_nouns.json index 47c7dd0..4acedef 100644 --- a/data/nouns/merged_nouns.json +++ b/data/nouns/merged_nouns.json @@ -26843,14 +26843,6 @@ "synonymous": [], "description": "" }, - { - "name": "zwzj工程", - "synonymous": [ - "博微电力建设计价通的概预算工程、建安预算工程或南网规约工程", - "18主网定额概预算工程、建安预算工程" - ], - "description": "博微电力建设计价通软件编制的定额计价的电力建设工程概预算工程、国网施工图预算综合单价法工程" - }, { "name": "其他费用的输出复选框", "synonymous": [ diff --git a/data/nouns/professional_nouns_index/index.faiss b/data/nouns/professional_nouns_index/index.faiss index a6877d9cc7f67d680484ffaf282b13dbef8f07ae..fe256ce1bfcdc5543f45852b479c48e299c43887 100644 GIT binary patch delta 8481 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 delta 16729 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 diff --git a/data/nouns/professional_nouns_index/index.pkl b/data/nouns/professional_nouns_index/index.pkl index e2936807e503fd66e726a352f402cb2b813c6ffb..df153a92ab3bb3ec9a282955b00df1338701f612 100644 GIT binary patch delta 60925 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 delta 61303 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 T2^W}OBV1^HGkC=<_aF3ML)Oh2 diff --git a/rag2_0/demo/intent_recognition_example.py b/rag2_0/demo/intent_recognition_example.py index 679fc89..1decac8 100755 --- a/rag2_0/demo/intent_recognition_example.py +++ b/rag2_0/demo/intent_recognition_example.py @@ -63,7 +63,11 @@ def process_query(recognizer: IntentRecognizer, query: str, conversation_context try: # 使用新的process_query_with_slots方法处理查询 # result = recognizer.process_query_with_slots(query) - result = recognizer.process_query(query, conversation_context=conversation_context, chat_history=chat_history, previous_slots=previous_slots) + result = recognizer.process_query(query, + conversation_context=conversation_context, + chat_history=chat_history, + previous_slots=previous_slots, + enable_query_expansion=True) # 提取分类信息 classification = result["classification"] @@ -176,7 +180,7 @@ def save_results_to_excel(results, output_file, is_final=False): logging.info(f"已保存{len(valid_results)}条结果至: {temp_output_file}") # 示例查询 -examples_query = """D3软件结算工程怎么解锁清单""" +examples_query = """主网电力建设计价通软件, 35kV的软件 土质比例不能一起设置吗""" conversation_context="" chat_history=[ { diff --git a/rag2_0/demo/validate_excel_data_batch.py b/rag2_0/demo/validate_excel_data_batch.py index dcb003b..33d1c55 100755 --- a/rag2_0/demo/validate_excel_data_batch.py +++ b/rag2_0/demo/validate_excel_data_batch.py @@ -98,7 +98,7 @@ class ExcelDataValidator: logging.error(f"读取Excel文件时出错: {e}") return None - def validate_classification(self, llm, query, vertical_class, sub_class): + def validate_classification(self, llm:OpenAiLLM , query:str, vertical_class:str, sub_class:str): """ 验证问题分类是否正确 diff --git a/rag2_0/tool/APIKeyManager.py b/rag2_0/tool/APIKeyManager.py index e506a18..3de3979 100755 --- a/rag2_0/tool/APIKeyManager.py +++ b/rag2_0/tool/APIKeyManager.py @@ -1,7 +1,7 @@ import os import random import time -from typing import List, Optional, Dict +from typing import List, Optional, Dict,Tuple from threading import Lock import requests @@ -75,11 +75,12 @@ class APIKeyManager: return instance._get_random_api_key() @classmethod - def get_valid_api_keys(cls) -> List[str]: + def get_valid_api_keys(cls,api_key:str) -> Tuple[bool,str]: """ 静态方法:获取有效的API密钥列表 Returns: + Tuple[bool,str]: 是否有效,报错信息 """ # 验证每一个apikey是否有效,无效则删除并打印日志。地址https://api.siliconflow.cn/v1/ import requests @@ -97,19 +98,17 @@ class APIKeyManager: ], "max_tokens": 1 } - instance = cls.get_instance() - for key in instance.api_keys: - headers = headers_template.copy() - headers["Authorization"] = f"Bearer {key}" - try: - resp = requests.post(url, headers=headers, json=data, timeout=8) - if resp.status_code == 200: - valid_api_keys.append(key) - else: - logging.warning(f"API密钥无效(被移除): {key}, 状态码: {resp.status_code}, 响应: {resp.text}") - except Exception as e: - logging.warning(f"API密钥验证异常(被移除): {key}, 错误: {e}") - return valid_api_keys + + headers = headers_template.copy() + headers["Authorization"] = f"Bearer {api_key}" + try: + resp = requests.post(url, headers=headers, json=data, timeout=8) + if resp.status_code == 200: + return True,"" + else: + return False,resp.text + except Exception as e: + return False,str(e) @classmethod def count(cls) -> int: @@ -269,19 +268,30 @@ if __name__ == "__main__": # 获取实例并查看使用统计 instance = APIKeyManager.get_instance() + + # 获取有效的API密钥列表 + # valid_api_keys = APIKeyManager.get_valid_api_keys() + # print(f"有效的API密钥列表:{valid_api_keys}") + stats = instance.get_usage_stats() all_balance=0.0 - buy_balance=17 * 10 * 14 # 购买16次,一次10条api_key,每个api_key有14元 + buy_balance=14 * 10 * 14 # 购买18次,一次10条api_key,每个api_key有14元 invalid_api_keys = [] for key, data in stats.items(): usage_stats = APIKeyManager.get_key_usage_stats(key) all_balance+=float(usage_stats['data']['balance']) - print(f"api key:{key}---赠送余额:{usage_stats['data']['balance']}元") + valid,err_info = APIKeyManager.get_valid_api_keys(key) + if not valid: + print(f"api_key:{key}---赠送余额:{usage_stats['data']['balance']}元---报错信息:{err_info}") + # invalid_api_keys.append(key) + else: + print(f"api_key:{key}---赠送余额:{usage_stats['data']['balance']}元") if float(usage_stats['data']['balance']) == 0: invalid_api_keys.append(key) - print(f"剩余总赠送余额:{all_balance}元,累计消耗:{buy_balance-all_balance}元") - print(f"无效的API密钥:{invalid_api_keys}") + invalid_api_keys = list(set(invalid_api_keys)) + print(f"剩余总赠送余额:{all_balance}元,累计消耗:{buy_balance-all_balance}元") + print(f"无效的API密钥,数量:{len(invalid_api_keys)},列表:{invalid_api_keys}") print(f"开始移除无效的API密钥,并重新保存") APIKeyManager.remove_invalid_api_keys(invalid_api_keys) APIKeyManager.save_api_keys() diff --git a/rag2_0/tool/ModelTool.py b/rag2_0/tool/ModelTool.py index c0ade81..3af2004 100755 --- a/rag2_0/tool/ModelTool.py +++ b/rag2_0/tool/ModelTool.py @@ -165,20 +165,23 @@ class OpenAiLLM: except Exception as e: retry_count += 1 if retry_count == max_retries: - raise RuntimeError(f"调用LLM失败,已重试{max_retries}次: {str(e)}") + raise RuntimeError(f"OpenAiLLM:invoke:error:{str(e)}.api_key:{api_key}") from e else: time.sleep(5*retry_count) # 重试前等待5秒*重试次数 else: - # 创建 Completion 请求. 超时120s - api_key = APIKeyManager.get_api_key() - # 使用with语句创建客户端,确保资源会被正确释放 - with OpenAI(api_key=api_key, base_url=self._url) as client: - completion = client.chat.completions.create( - model=self._model, - messages=[{'role': 'user', 'content': user_prompt}], - **self._kwargs - ) - return completion.choices[0].message + try: + # 创建 Completion 请求. 超时120s + api_key = APIKeyManager.get_api_key() + # 使用with语句创建客户端,确保资源会被正确释放 + with OpenAI(api_key=api_key, base_url=self._url) as client: + completion = client.chat.completions.create( + model=self._model, + messages=[{'role': 'user', 'content': user_prompt}], + **self._kwargs + ) + return completion.choices[0].message + except Exception as e: + raise RuntimeError(f"OpenAiLLM:invoke:error:{str(e)}.api_key:{api_key}") from e if __name__ == "__main__": # 测试重排模型