Update commonapi.py

master
zxc 4 months ago
parent 4e8ad15d2f
commit ee81ca1a4d

@ -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))

Loading…
Cancel
Save