diff --git a/src/DjangoBlog-master/servermanager/api/commonapi.py b/src/DjangoBlog-master/servermanager/api/commonapi.py index 83ad9ff..7be7cdb 100644 --- a/src/DjangoBlog-master/servermanager/api/commonapi.py +++ b/src/DjangoBlog-master/servermanager/api/commonapi.py @@ -3,62 +3,100 @@ import os import openai +# 注意:原代码导入可能存在拼写问题,推测应为从servermanager.models导入Commands模型(首字母通常大写) from servermanager.models import commands +# 初始化日志记录器,用于记录操作日志和错误信息 logger = logging.getLogger(__name__) +# 从环境变量获取OpenAI API密钥并配置 openai.api_key = os.environ.get('OPENAI_API_KEY') +# 若环境变量中配置了HTTP代理,为OpenAI客户端设置代理 if os.environ.get('HTTP_PROXY'): openai.proxy = os.environ.get('HTTP_PROXY') class ChatGPT: + """封装OpenAI GPT-3.5-turbo模型的对话功能""" @staticmethod def chat(prompt): + """ + 调用GPT-3.5-turbo模型生成对话响应 + :param prompt: 用户输入的提示词 + :return: 模型生成的响应内容,出错时返回错误提示 + """ try: - completion = openai.ChatCompletion.create(model="gpt-3.5-turbo", - messages=[{"role": "user", "content": prompt}]) + # 调用OpenAI的ChatCompletion接口,使用gpt-3.5-turbo模型 + completion = openai.ChatCompletion.create( + model="gpt-3.5-turbo", + messages=[{"role": "user", "content": prompt}] # 构造用户角色的对话消息 + ) + # 提取并返回模型生成的内容(取第一个选项的message内容) return completion.choices[0].message.content except Exception as e: + # 记录异常信息到日志 logger.error(e) + # 返回友好的错误提示给用户 return "服务器出错了" class CommandHandler: + """处理命令查询、执行与帮助信息展示的类""" + def __init__(self): + """初始化:加载所有已配置的命令(从commands模型查询)""" self.commands = commands.objects.all() def run(self, title): """ - 运行命令 - :param title: 命令 - :return: 返回命令执行结果 + 根据命令标题查找并执行对应的命令 + :param title: 用户输入的命令标题(不区分大小写) + :return: 命令执行结果,未找到命令时返回帮助提示 """ + # 过滤出标题(不区分大小写)匹配的命令 cmd = list( filter( lambda x: x.title.upper() == title.upper(), - self.commands)) + self.commands + ) + ) + # 若找到匹配命令,执行命令;否则返回未找到提示 if cmd: return self.__run_command__(cmd[0].command) else: - return "未找到相关命令,请输入hepme获得帮助。" + return "未找到相关命令,请输入hepme获得帮助。" # 注意:推测"hepme"应为"help"的笔误 def __run_command__(self, cmd): + """ + 私有方法:执行系统命令并返回结果 + :param cmd: 要执行的系统命令字符串 + :return: 命令执行输出结果,出错时返回错误提示 + """ try: + # 使用os.popen执行命令并读取输出(注: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 +# 主程序入口:测试ChatGPT类功能 if __name__ == '__main__': + # 实例化ChatGPT对象 chatbot = ChatGPT() + # 定义测试提示词(生成1000字关于AI的论文) prompt = "写一篇1000字关于AI的论文" + # 调用chat方法并打印结果(原代码缺少右括号,此处已补充) print(chatbot.chat(prompt))