更新.gitignore文件以忽略日志文件,新增api_key.txt文件以管理API密钥,并在对话转工单和查询完整性判断模块中添加日志记录和堆栈跟踪功能,提升错误处理和调试能力。
This commit is contained in:
+45
-111
@@ -17,104 +17,6 @@ import requests
|
||||
# sk-bdagppigfxexcofiossccywvcqggbpywjapkdbtqycbgvqpz
|
||||
# sk-dvbaktabkdwdpjgxyoozlwnejosjyhdgqwllfeborqahndxs
|
||||
|
||||
API_KEY_LIST=[
|
||||
"sk-kvgfuqeqvpmfsccykyoohheshclcrtvjlnewratvrjpkpbkc",
|
||||
"sk-kzhxlqvqcxlnbdgnpalqnzumkmspepkttkgbophnkqanainw",
|
||||
"sk-tovmogiablsoeabwgqyvevpcfichyjpuzqdymmvksspdrtqt",
|
||||
"sk-yvyvoiegjrdlgihnxlaaznzdhnvpmfowtwmofomcodaoeaqs",
|
||||
"sk-vccwuaomxhjcszjhheipoqqmsnuetasiveombkyrptstesbi",
|
||||
"sk-mxbapcczwjsyrictwgigxgcvdgptyfrlynrewqioegqwrggv",
|
||||
"sk-dujjzxrknevesbagqgqmuffxsosjoueviubnmodoormlmlzt",
|
||||
"sk-rpptsvdeifcnyfkkrwnphgkrlchrqrbkglxrmztdzvfutdor",
|
||||
"sk-lsukfggzghmdhtfhqcbmlfqabbtapwpuxnvtwshqqqlaesie",
|
||||
"sk-aulumxzhvaladchcwgmsxidtdsvzytbpvzqgfuvcxlwbwcgl",
|
||||
"sk-tzdqzroakecvseclcmrbhdnepveatybhhzxfpzxzgirpqcdy",
|
||||
"sk-otxxemniwhxkdvroszmmkitswwuykosnqoldrkzdoflqpgvw",
|
||||
"sk-zlruqobfdbjebyyvkmehakpcvfgnlfbdlbfrepusazzckbnv",
|
||||
"sk-zryimztrlkgvcaiolarhvbcewmhwruhqfcndbylonzlqvdox",
|
||||
"sk-rczjqufgdisqplkrmvhaxmdgcboluvxympvzljlreuqeeviq",
|
||||
"sk-xfnvcksdgwufsktvmhpqrwpgovsxxtaeehtxnaqjtxmubqzl",
|
||||
"sk-gcostftlutooxzsnqefcgyfxqytidvfjpxhbuxppgatwczoq",
|
||||
"sk-wwonvjnowbcxmoyoluynnkjwerghspzdulyidskunkordaft",
|
||||
"sk-rbuykocecbdoqteveeggwzvrhbvisgaerffexjsnyvjefhdk",
|
||||
"sk-qmrkfvvbbfssuoreyvwqawoveyowuvxviqzqknotyweqmuog",
|
||||
"sk-nprpuknjmikvoaxnwgyshwwwtnifvixpuqtzkzmcacdnvoib",
|
||||
"sk-xanwnicepdxfqrfejzuxjcrhdsglfypkoxlcmmtamrtjkork",
|
||||
"sk-lvtdgodiaurqyiwdxtdrgxifguychhccqlqkhqctscvqbfgi",
|
||||
"sk-aedlbtlmqcttxwnvlfmxzaysamocamqxjceoyqjfgpcowybw",
|
||||
"sk-fahdvndjblyjlizamvwcrxnilsgmbgbvwssxgquhkezgpqne",
|
||||
"sk-tzludgttzxvpvwayazdbppbauvathdtccafjrhojpemucgyi",
|
||||
"sk-hrbroidbfusidwnsmxenuzljxgdzzxiimlezygxplavnxjik",
|
||||
"sk-ylgoiqxmtxeojdnonthxtweungyzldaqarvjxlqyztlvyrff",
|
||||
"sk-asuqbqwdhjcqnvtjlwufyrkrwkobnrbmukzarvcctsgjipdp",
|
||||
"sk-dpgpymiydutoexgvkajwgahagnfmcqzafwulccudnzvleifz",
|
||||
"sk-nbksjgcngsayoumnsdbkcpnqivnvxjenwpzuazzrkhnsgeoo",
|
||||
"sk-iaafvpjyqiocgzchbdldbkgcffqniahkcbgoviuevuogulcm",
|
||||
"sk-muvjguqeshyimzowqnqgxwpsgujlpkqgrisxsimthtyrpypx",
|
||||
"sk-jgybgyayxlwoxeijgrjcneqlyusleohgbliuwpsuhocrjsmk",
|
||||
"sk-wzjsmwxcbbpcrqivqfzjwufqqjtlwejtncnvbpeicznkwiuh",
|
||||
"sk-izdjicdoyillktsihkiapuvwebisehtlgykozrvzfkgncwsc",
|
||||
"sk-fcsfmyivfuojsqsditvobfqprdpeunukycpcfnoxkraqevpx",
|
||||
"sk-szyjgyxrcvyxpvzfwgmbxnflxngxvcplitcctsdvvrqjgftk",
|
||||
"sk-jzbodthsnvjwbyrnynsxrudtqfnbdbrcxebjwjgajocnzqse",
|
||||
"sk-fxepossfzpmccibfwqpkluorzqlbtcaplepeugtfzfsctcbl",
|
||||
"sk-ympnflocrkxjrbubsxqdjqwicuyavvvysctlpfhunkcrzxjx",
|
||||
"sk-flhqvziknntednkcgjaxlyzzsrfzjhrzrmteqonajpbiinni",
|
||||
"sk-xfregpbbquqbxpiobjzanydsjivrjrnbokzxcqtnhxhyghhe",
|
||||
"sk-jrdzerhmvrtvzawkksowbgkggkubwfquplmrxbdhespqgtis",
|
||||
"sk-jjbpnkbeupsxyclcivbhizcfpfjrppddunbqynyjkqhtmpwu",
|
||||
"sk-oqehupcveovkjqqtxypqyifidcdissuyehwrkdwgruoyjkpq",
|
||||
"sk-jnnmltwtqwuoyagoogzzeraczmyfxhoairiddgayksqdfnbr",
|
||||
"sk-eghuepxnbcollzrjwbzqvbnhiiwagkejaclyhvaodeqgwrog",
|
||||
"sk-poszkbjdmamimconjustnrxxqusuzlryxkrzkpronlenrmen",
|
||||
"sk-zolvcegarsrwqhwgvwzgtqupodsdmckjiocyvoyldbkusbzc",
|
||||
"sk-ywfafulcniaqdgdcsnbtqquaqeuiqlkcnknkaflwxyuemcow",
|
||||
"sk-hhedmocgtfpywbbpwamgfkygrahiqsuurntlbqqbmjwfipmm",
|
||||
"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",
|
||||
]
|
||||
|
||||
class APIKeyManager:
|
||||
"""
|
||||
@@ -129,6 +31,8 @@ class APIKeyManager:
|
||||
_key_usage: Dict[str, Dict] = {}
|
||||
# 当前正在使用的密钥索引
|
||||
_current_index = 0
|
||||
|
||||
api_file_path = "api_key.txt"
|
||||
|
||||
@classmethod
|
||||
def get_instance(cls, env_var_name: str = "OPENAI_API_KEY", separator: str = ";"):
|
||||
@@ -193,7 +97,8 @@ class APIKeyManager:
|
||||
],
|
||||
"max_tokens": 1
|
||||
}
|
||||
for key in API_KEY_LIST:
|
||||
instance = cls.get_instance()
|
||||
for key in instance.api_keys:
|
||||
headers = headers_template.copy()
|
||||
headers["Authorization"] = f"Bearer {key}"
|
||||
try:
|
||||
@@ -233,6 +138,24 @@ class APIKeyManager:
|
||||
|
||||
return response.json()
|
||||
|
||||
@classmethod
|
||||
def remove_invalid_api_keys(cls, api_keys: List[str]):
|
||||
"""
|
||||
移除无效的API密钥
|
||||
"""
|
||||
instance = cls.get_instance()
|
||||
for key in api_keys:
|
||||
instance.api_keys.remove(key)
|
||||
|
||||
@classmethod
|
||||
def save_api_keys(cls):
|
||||
"""
|
||||
保存API密钥到文件
|
||||
"""
|
||||
instance = cls.get_instance()
|
||||
with open(cls.api_file_path, "w") as f:
|
||||
f.write("\n".join(instance.api_keys))
|
||||
|
||||
def __init__(self, env_var_name: str = "OPENAI_API_KEY", separator: str = ";"):
|
||||
"""
|
||||
初始化API密钥管理器
|
||||
@@ -260,17 +183,15 @@ class APIKeyManager:
|
||||
Returns:
|
||||
API密钥列表
|
||||
"""
|
||||
# api_keys = []
|
||||
# env_value = os.environ.get(self.env_var_name)
|
||||
|
||||
# if env_value:
|
||||
# # 分割环境变量并移除空白字符
|
||||
# keys = [key.strip() for key in env_value.split(self.separator)]
|
||||
# # 过滤掉空字符串
|
||||
# api_keys = [key for key in keys if key]
|
||||
|
||||
# return api_keys
|
||||
return API_KEY_LIST
|
||||
|
||||
# 从文件中读取api_key
|
||||
with open(self.api_file_path, "r") as f:
|
||||
api_keys = f.readlines()
|
||||
|
||||
# 移除空白字符
|
||||
api_keys = [key.strip() for key in api_keys if key.strip()]
|
||||
|
||||
return api_keys
|
||||
|
||||
def _get_next_api_key(self) -> Optional[str]:
|
||||
"""
|
||||
@@ -349,6 +270,19 @@ if __name__ == "__main__":
|
||||
# 获取实例并查看使用统计
|
||||
instance = APIKeyManager.get_instance()
|
||||
stats = instance.get_usage_stats()
|
||||
all_balance=0.0
|
||||
buy_balance=16 * 10 * 14 # 购买16次,一次10条api_key,每个api_key有14元
|
||||
invalid_api_keys = []
|
||||
for key, data in stats.items():
|
||||
usage_stats = APIKeyManager.get_key_usage_stats(key)
|
||||
print(f"api key:{key}---赠送余额:{usage_stats['data']['balance']}元")
|
||||
all_balance+=float(usage_stats['data']['balance'])
|
||||
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}")
|
||||
print(f"开始移除无效的API密钥,并重新保存")
|
||||
APIKeyManager.remove_invalid_api_keys(invalid_api_keys)
|
||||
APIKeyManager.save_api_keys()
|
||||
print(f"移除无效的API密钥,并重新保存完成")
|
||||
Reference in New Issue
Block a user