修复递归导致的栈溢出

This commit is contained in:
JianFeeeee
2026-01-21 22:43:23 +08:00
parent 85ca0e7589
commit f15fac8b14
2 changed files with 31 additions and 25 deletions

View File

@ -1,3 +1,5 @@
[base]
maxcount = 20
[siloconflow] [siloconflow]
api_key = "" api_key = ""
modules = ["Qwen/Qwen2.5-7B-Instruct", "Qwen/Qwen2.5-Coder-7B-Instruct"] modules = ["Qwen/Qwen2.5-7B-Instruct", "Qwen/Qwen2.5-Coder-7B-Instruct"]

View File

@ -6,44 +6,48 @@ import time
class SiloconFlowAPI: class SiloconFlowAPI:
def __init__(self, api_key,modules,base_url): def __init__(self, api_key,modules,base_url):
self.client = OpenAI(api_key=api_key, base_url=base_url)
self.api_key = api_key self.api_key = api_key
self.module = modules self.module = modules
self.url = base_url
def get_ai_message(self, message,i=0): self.count = 0
try: def get_ai_message(self, message,maxcount,i=0):
response = self.client.chat.completions.create( with OpenAI(api_key=self.api_key, base_url=self.base_url) as client:
model=self.module[i], try:
messages=message, response = client.chat.completions.create(
temperature=0.7, model=self.module[i],
max_tokens=4096 messages=message,
) temperature=0.7,
print("token usage {0}".format(response.usage.total_tokens)) max_tokens=4096
return response.choices[0].message.content )
except: print("token usage {0}".format(response.usage.total_tokens))
if i<len(self.module)-1: return response.choices[0].message.content
i+=1 except:
self.get_ai_message(message,i) if i<len(self.module)-1:
else: i+=1
print("server busy,waiting") self.count = self.count+1
time.sleep(10) return self.get_ai_message(message,i)
i = 0 else:
self.get_ai_message(message,i) print("server busy,waiting")
time.sleep(10)
i = 0
if(self.count>maxcount)
return self.get_ai_message(message,i)
class Ai_reply(BasePlugin): class Ai_reply(BasePlugin):
def after_save(self): def after_save(self):
config = self.config.get("siloconflow") config = self.config.get("siloconflow")
maxcount = self.config.get("base").get("maxcount")
ai_server = SiloconFlowAPI(base_url= config.get("base_url"), api_key= config.get("api_key"), modules= config.get("modules")) ai_server = SiloconFlowAPI(base_url= config.get("base_url"), api_key= config.get("api_key"), modules= config.get("modules"))
if self.ctx.group is None: if self.ctx.group is None:
self.ctx.user.messages.append({'role': 'user', self.ctx.user.messages.append({'role': 'user',
'content': f"当前用户为:{self.ctx.user.nickname},其uid为:{self.ctx.user.user_id},以上为背景信息,根据背景信息回复用户消息。用户消息:{self.ctx.raw_message}"}) 'content':
message = ai_server.get_ai_message(self.ctx.user.messages) f"当前用户为:{self.ctx.user.nickname},其uid为:{self.ctx.user.user_id},以上为背景信息,根据背景信息回复用户消息。用户消息:{self.ctx.raw_message}"})
typing_thread = threading.Thread(target=self.ctx.user.set_input_status, args=(1,)) typing_thread = threading.Thread(target=self.ctx.user.set_input_status, args=(1,))
typing_thread.start() typing_thread.start()
#获取ai返回值 #获取ai返回值
message = ai_server.get_ai_message(self.ctx.user.messages) message = ai_server.get_ai_message(self.ctx.user.messages,maxcount)
#结束刷新状态 #结束刷新状态
self.ctx.user.signal = False self.ctx.user.signal = False
#回收线程 #回收线程
@ -57,7 +61,7 @@ class Ai_reply(BasePlugin):
self.ctx.group.messages.append({'role': 'user', self.ctx.group.messages.append({'role': 'user',
'content': 'content':
f"群聊名称为:{self.ctx.group.nickname},用户在群中的近十条消息为:{self.ctx.group.current_user.messages},用户名叫:{self.ctx.group.current_user.nickname},以上为背景信息,根据背景信息回复消息。消息为:{self.ctx.raw_message}"}) f"群聊名称为:{self.ctx.group.nickname},用户在群中的近十条消息为:{self.ctx.group.current_user.messages},用户名叫:{self.ctx.group.current_user.nickname},以上为背景信息,根据背景信息回复消息。消息为:{self.ctx.raw_message}"})
message = ai_server.get_ai_message(self.ctx.group.messages) message = ai_server.get_ai_message(self.ctx.group.messages,maxcount)
self.ctx.group.send_message(message) self.ctx.group.send_message(message)
return "ok" return "ok"