补充注释

pull/11/head
马莹 4 months ago
parent de7ab44806
commit 97580a9a0e

@ -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的论文"

Loading…
Cancel
Save