From 97580a9a0e6a021e72d7ee1d56a52cfe4d7941c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E8=8E=B9?= <1765557195@qq.com> Date: Sun, 19 Oct 2025 20:03:23 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- servermanager/api/commonapi.py | 57 ++++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/servermanager/api/commonapi.py b/servermanager/api/commonapi.py index 83ad9ff..5897095 100644 --- a/servermanager/api/commonapi.py +++ b/servermanager/api/commonapi.py @@ -1,32 +1,52 @@ -import logging -import os +import logging # 导入日志模块,用于记录程序运行过程中的日志信息 +import os # 导入os模块,用于与操作系统交互,如获取环境变量、执行系统命令等 -import openai +import openai # 导入openai模块,用于调用OpenAI的API服务 -from servermanager.models import commands +from servermanager.models import commands # 从servermanager应用的models模块中导入commands模型,用于操作命令相关的数据 -logger = logging.getLogger(__name__) +logger = logging.getLogger(__name__) # 创建日志记录器,名称为当前模块名,用于记录该模块的日志 -openai.api_key = os.environ.get('OPENAI_API_KEY') -if os.environ.get('HTTP_PROXY'): +openai.api_key = os.environ.get('OPENAI_API_KEY') # 从环境变量中获取OpenAI的API密钥,并设置为openai模块的API密钥 +if os.environ.get('HTTP_PROXY'): # 检查环境变量中是否设置了HTTP代理,如果有则为openai模块设置代理 openai.proxy = os.environ.get('HTTP_PROXY') class ChatGPT: - + """ + ChatGPT类,用于与OpenAI的GPT模型进行交互,实现聊天功能 + """ @staticmethod def chat(prompt): + """ + 静态方法,发送提示信息给GPT模型并获取回复 + + :param prompt: 用户输入的提示信息(字符串) + :return: GPT模型的回复内容(字符串),若出错则返回"服务器出错了" + """ try: + # 调用OpenAI的ChatCompletion接口,使用gpt-3.5-turbo模型 + # messages参数为消息列表,包含用户角色和对应的内容 completion = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}]) + # 从返回结果中提取第一个选择的消息内容并返回 return completion.choices[0].message.content except Exception as e: + # 捕获异常并记录错误日志 logger.error(e) + # 返回错误提示信息 return "服务器出错了" class CommandHandler: + """ + 命令处理器类,用于处理和执行系统命令,以及提供命令帮助信息 + """ def __init__(self): + """ + 初始化方法,加载所有的命令数据 + 从commands模型中查询所有命令记录并存储在实例变量self.commands中 + """ self.commands = commands.objects.all() def run(self, title): @@ -35,29 +55,48 @@ class CommandHandler: :param title: 命令 :return: 返回命令执行结果 """ + # 使用filter函数筛选出标题(不区分大小写)与输入title匹配的命令 + # 将筛选结果转换为列表 cmd = list( filter( lambda x: x.title.upper() == title.upper(), self.commands)) + # 如果找到匹配的命令 if cmd: + # 调用私有方法执行命令,传入命令的具体内容(cmd[0].command) return self.__run_command__(cmd[0].command) else: + # 未找到命令时,返回提示信息 return "未找到相关命令,请输入hepme获得帮助。" def __run_command__(self, cmd): + """ + 私有方法,用于执行具体的系统命令 + + :param cmd: 要执行的系统命令(字符串) + :return: 命令执行的输出结果(字符串);若执行出错,返回错误提示 + """ try: + # 使用os.popen执行命令,并读取命令的输出结果 res = os.popen(cmd).read() return res except BaseException: + # 捕获所有基本异常,返回命令执行出错的提示 return '命令执行出错!' def get_help(self): + """ + 获取所有命令的帮助信息 + + :return: 包含所有命令标题和描述的字符串,每条命令占一行 + """ rsp = '' + # 遍历所有命令,拼接命令标题和描述信息 for cmd in self.commands: rsp += '{c}:{d}\n'.format(c=cmd.title, d=cmd.describe) return rsp - +# 当该模块作为主程序运行时执行以下代码 if __name__ == '__main__': chatbot = ChatGPT() prompt = "写一篇1000字关于AI的论文" -- 2.34.1