调整代码。

This commit is contained in:
liuwei
2025-05-29 10:05:03 +08:00
parent b2e458a937
commit 762a6c52e1
3 changed files with 106 additions and 107 deletions

View File

@@ -9,4 +9,9 @@ command-format = """
/r - 查看排行榜
/l - 查看活跃任务
/h - 查看未完成任务
"""
"""
# AI获取题目确认答案用的配置信息
authorization = "Bearer b8586595-eb81-483d-8e91-a35cc789729e" # 请替换为真实的Authorization token
url = 'https://ark.cn-beijing.volces.com/api/v3/chat/completions'
model = "doubao-1-5-lite-32k-250115"

View File

@@ -10,9 +10,10 @@ from base.plugin_common.plugin_interface import PluginStatus
from utils.decorator.plugin_decorators import plugin_stats_decorator
from utils.robot_cmd.robot_command import Feature, PermissionStatus, GroupBotManager
from utils.decorator.points_decorator import points_reward_decorator
from utils.ai.game_chatgpt_qa import game_question_json, game_answer_json
from db.connection import DBConnectionManager
from db.encyclopedia import EncyclopediaDB
import requests
import json
class GameTaskPlugin(MessagePluginInterface):
@@ -66,6 +67,10 @@ class GameTaskPlugin(MessagePluginInterface):
/l - 查看活跃任务
/h - 查看未完成任务
""")
self.authorization = self._config.get("GameTask", {}).get("authorization", "")
self.url = self._config.get("GameTask", {}).get("url", "")
self.model = self._config.get("GameTask", {}).get("model", "")
self.enable = self._config.get("GameTask", {}).get("enable", True)
# 初始化数据库连接
@@ -228,7 +233,7 @@ class GameTaskPlugin(MessagePluginInterface):
return
# 以下是原有的出题逻辑
task = game_question_json("请出题!")
task = self.game_question_json("请出题!")
category = task["category"]
question = task["question"]
answer = task["answer"]
@@ -343,7 +348,7 @@ class GameTaskPlugin(MessagePluginInterface):
holder_name = holder['player_name'] if holder else "未知玩家"
answer_json = {"question": question, "top_score": str(top_score), "answer": answer}
result = game_answer_json(answer_json)
result = self.game_answer_json(answer_json)
points = int(result["score"])
description = result["description"]
is_correct = points > 0
@@ -528,7 +533,7 @@ class GameTaskPlugin(MessagePluginInterface):
holder_name = holder['player_name']
# 创建任务
task = game_question_json("请出题!")
task = self.game_question_json("请出题!")
category = task["category"]
question = task["question"]
answer = task["answer"]
@@ -552,3 +557,94 @@ class GameTaskPlugin(MessagePluginInterface):
[holder_id])
except Exception as e:
self.LOG.error(f"定时任务出错: {e}")
# 解析JSON
def extract_content(self, data_string):
try:
data = json.loads(data_string)
# 提取content字段
content = data["choices"][0]["message"].get("content", "")
return content
except json.JSONDecodeError:
print("Invalid JSON")
return None
def message_task_json(self, prompt, content):
# 设置Authorization和URL
authorization = self.authorization # 请替换为真实的Authorization token
url = self.url
data = {
# "stream": True,
"model": self.model,
"messages": [
{
"role": "system",
"content": f"{prompt}"
},
{
"role": "user",
"content": f"{content}"
}
]
}
# 设置请求头
headers = {
"Content-Type": "application/json; charset=utf-8",
"Authorization": authorization
}
# 发送POST请求
response = requests.post(url, headers=headers, data=json.dumps(data), )
response.encoding = 'utf-8'
# 输出响应内容
print(response.status_code)
print(response.text)
return json.loads(self.extract_content(response.text))
def game_question_json(self, question):
fields = [
"近现代史", "战争与政治", "文化遗产与考古学", "进化论", "动植物学", "基因与遗传学",
"生态学", "有机化学", "无机化学", "生物化学", "环境化学", "人文地理", "自然地理",
"地质学", "气候变化", "古典文学", "现代文学", "小说与戏剧", "诗歌与散文", "美术",
"音乐", "戏剧与舞蹈", "电影与媒体", "西方哲学", "东方哲学", "道德与伦理学", "逻辑与认识论",
"人类学", "心理学", "政治学", "经济学", "编程语言", "人工智能", "数据科学", "网络与安全",
"机械工程", "电气工程", "化学工程", "土木工程", "解剖学", "生理学", "临床医学", "药学与护理",
"球类运动", "奥林匹克运动", "运动心理学", "健身与营养", "世界宗教", "神话与民间故事",
"宗教哲学", "语法与词汇", "语言习得", "方言与语言变异", "宏观经济学", "微观经济学",
"国际贸易", "金融与投资", "民法与刑法", "国际法", "知识产权法", "环境法"
]
# 随机选择一个领域
selected_field = random.choice(fields)
# 输出随机选择的领域
print(f"随机选择的领域是:{selected_field}")
question = question + f"随机选择的领域是:{selected_field}"
prompt = """
请根据以下要求,随机生成一个问题,确保每次提问涉及不同领域,且不重复:
1. 每个问题应该覆盖以下任意领域:近现代史、战争与政治、文化遗产与考古学、进化论、动植物学、基因与遗传学、生态学、有机化学、无机化学、生物化学、环境化学、人文地理、自然地理、地质学、气候变化、古典文学、现代文学、小说与戏剧、诗歌与散文、美术、音乐、戏剧与舞蹈、电影与媒体、西方哲学、东方哲学、道德与伦理学、逻辑与认识论、人类学、心理学、政治学、经济学、编程语言、人工智能、数据科学、网络与安全、机械工程、电气工程、化学工程、土木工程、解剖学、生理学、临床医学、药学与护理、球类运动、奥林匹克运动、运动心理学、健身与营养、世界宗教、神话与民间故事、宗教哲学、语法与词汇、语言习得、方言与语言变异、宏观经济学、微观经济学、国际贸易、金融与投资、民法与刑法、国际法、知识产权法、环境法。
2. 问题应简洁,具有一定难度,易于理解且充满乐趣,适合百科类知识问答。
3. 每个问题应独立,且问题之间无连贯性或延续性。
4. 避免重复提问或产生相似的问题,确保问题新颖。
5. 对于每个问题提供难度评分1-10分。在问题答对后用户可以根据难度给出相应的分数。
6. 答案控制长度在25字以内。
输出格式要求如下仅返回JSON格式确保不添加多余的符号
{
"category":"人文地理"
"question": "哪个国家最早将玫瑰与爱情联系起来?",
"score": "1",
"answer": "波斯",
"description": "波斯文化中,玫瑰被广泛认为是象征爱情的花卉,其象征意义逐渐传入西方。"
}
"""
return self.message_task_json(prompt, question)
def game_answer_json(self, answer):
prompt = "你是一个益智百科问答大师,可以根据用户回答的答案进行判断,并且对问题(question)答案(answer)进行打分,打分时请参考最高分要求(top_score)告知用户能获得多少分请在description中描述打分理由请只返回JSON格式的内容格式要求如下(请不要加上markdown 的符号){\"question\": \"哪个国家最早将玫瑰与爱情联系起来?\", \"score\":\"1\", \"answer\": \"波斯\",\"description\":\"描述问题答案的原因\"}"
return self.message_task_json(prompt, answer)

View File

@@ -1,102 +0,0 @@
import requests
import json
import random
# 解析JSON
def extract_content(data_string):
try:
data = json.loads(data_string)
# 提取content字段
content = data["choices"][0]["message"].get("content", "")
return content
except json.JSONDecodeError:
print("Invalid JSON")
return None
def message_task_json(prompt, content):
# 设置Authorization和URL
authorization = "Bearer b8586595-eb81-483d-8e91-a35cc789729e" # 请替换为真实的Authorization token
url = 'https://ark.cn-beijing.volces.com/api/v3/chat/completions'
data = {
# "stream": True,
"model": "doubao-1-5-lite-32k-250115",
"messages": [
{
"role": "system",
"content": f"{prompt}"
},
{
"role": "user",
"content": f"{content}"
}
]
}
# 设置请求头
headers = {
"Content-Type": "application/json; charset=utf-8",
"Authorization": authorization
}
# 发送POST请求
response = requests.post(url, headers=headers, data=json.dumps(data), )
response.encoding = 'utf-8'
# 输出响应内容
print(response.status_code)
print(response.text)
return json.loads(extract_content(response.text))
def game_question_json(question):
fields = [
"近现代史", "战争与政治", "文化遗产与考古学", "进化论", "动植物学", "基因与遗传学",
"生态学", "有机化学", "无机化学", "生物化学", "环境化学", "人文地理", "自然地理",
"地质学", "气候变化", "古典文学", "现代文学", "小说与戏剧", "诗歌与散文", "美术",
"音乐", "戏剧与舞蹈", "电影与媒体", "西方哲学", "东方哲学", "道德与伦理学", "逻辑与认识论",
"人类学", "心理学", "政治学", "经济学", "编程语言", "人工智能", "数据科学", "网络与安全",
"机械工程", "电气工程", "化学工程", "土木工程", "解剖学", "生理学", "临床医学", "药学与护理",
"球类运动", "奥林匹克运动", "运动心理学", "健身与营养", "世界宗教", "神话与民间故事",
"宗教哲学", "语法与词汇", "语言习得", "方言与语言变异", "宏观经济学", "微观经济学",
"国际贸易", "金融与投资", "民法与刑法", "国际法", "知识产权法", "环境法"
]
# 随机选择一个领域
selected_field = random.choice(fields)
# 输出随机选择的领域
print(f"随机选择的领域是:{selected_field}")
question = question + f"随机选择的领域是:{selected_field}"
prompt = """
请根据以下要求,随机生成一个问题,确保每次提问涉及不同领域,且不重复:
1. 每个问题应该覆盖以下任意领域:近现代史、战争与政治、文化遗产与考古学、进化论、动植物学、基因与遗传学、生态学、有机化学、无机化学、生物化学、环境化学、人文地理、自然地理、地质学、气候变化、古典文学、现代文学、小说与戏剧、诗歌与散文、美术、音乐、戏剧与舞蹈、电影与媒体、西方哲学、东方哲学、道德与伦理学、逻辑与认识论、人类学、心理学、政治学、经济学、编程语言、人工智能、数据科学、网络与安全、机械工程、电气工程、化学工程、土木工程、解剖学、生理学、临床医学、药学与护理、球类运动、奥林匹克运动、运动心理学、健身与营养、世界宗教、神话与民间故事、宗教哲学、语法与词汇、语言习得、方言与语言变异、宏观经济学、微观经济学、国际贸易、金融与投资、民法与刑法、国际法、知识产权法、环境法。
2. 问题应简洁,具有一定难度,易于理解且充满乐趣,适合百科类知识问答。
3. 每个问题应独立,且问题之间无连贯性或延续性。
4. 避免重复提问或产生相似的问题,确保问题新颖。
5. 对于每个问题提供难度评分1-10分。在问题答对后用户可以根据难度给出相应的分数。
6. 答案控制长度在25字以内。
输出格式要求如下仅返回JSON格式确保不添加多余的符号
{
"category":"人文地理"
"question": "哪个国家最早将玫瑰与爱情联系起来?",
"score": "1",
"answer": "波斯",
"description": "波斯文化中,玫瑰被广泛认为是象征爱情的花卉,其象征意义逐渐传入西方。"
}
"""
return message_task_json(prompt, question)
def game_answer_json(answer):
prompt = "你是一个益智百科问答大师,可以根据用户回答的答案进行判断,并且对问题(question)答案(answer)进行打分,打分时请参考最高分要求(top_score)告知用户能获得多少分请在description中描述打分理由请只返回JSON格式的内容格式要求如下(请不要加上markdown 的符号){\"question\": \"哪个国家最早将玫瑰与爱情联系起来?\", \"score\":\"1\", \"answer\": \"波斯\",\"description\":\"描述问题答案的原因\"}"
return message_task_json(prompt, answer)
if __name__ == '__main__':
print(game_question_json('请出题!'))
# print(game_answer_json('question:哪个国家的节日与裸体狂欢有关?,answer:古罗马,top_score:3'))