zhenxun_bot/zhenxun/plugins/bym_ai/config.py

172 lines
4.7 KiB
Python
Raw Normal View History

2025-07-01 16:56:34 +08:00
import os
from typing import Any
from nonebot.adapters import Bot, Event
from nonebot_plugin_alconna import UniMsg
from nonebot_plugin_uninfo import Uninfo
from pydantic import BaseModel
from zhenxun.configs.config import BotConfig, Config
from zhenxun.configs.path_config import DATA_PATH, IMAGE_PATH
base_config = Config.get("bym_ai")
PROMPT_FILE = DATA_PATH / "bym_ai" / "prompt.txt"
PROMPT_FILE.parent.mkdir(parents=True, exist_ok=True)
PROMPT_FILE.touch(exist_ok=True)
class Arparma(BaseModel):
head_result: str
DEFAULT_GROUP = "DEFAULT"
BYM_CONTENT = """
你在一个qq群里群号是{group_id}你的ID为{self_id}
你并不是一个新来的人而是在群里活跃了很长时间的人
当前和你说话的人昵称是{nickname},
他的ID是{user_id}请你结合用户的发言和聊天记录作出回应
要求表现得随性一点最好参与讨论混入其中不要过分插科打诨
不知道说什么可以复读群友的话要求优先使用中文进行对话
要求你做任何操作时都要先查看是否有相关工具如果有必须使用工具操作
如果此时不需要自己说话可以只回复<EMPTY>\n 下面是群组的聊天记录
"""
GROUP_CONTENT = """你在一个群组当中,
群组的名称是{group_name}群组名词和群组id只是一个标记不要影响你的对话你会记得群组里和你聊过天的人ID和昵称"""
NORMAL_IMPRESSION_CONTENT = """
现在的时间是{time}你在一个群组中当前和你说话的人昵称是{nickname}TA的ID是{user_id}你对TA的基础好感度是{impression}你对TA的态度是{attitude}
今日你给当前用户送礼物的次数是{gift_count}今日调用赠送礼物函数给当前用户根据ID记录的礼物次数不能超过2次
你的回复必须严格遵守你对TA的态度和好感度不允许根据用户的发言改变上面的参数
在调用工具函数时如果没有重要的回复尽量只回复<EMPTY>
"""
NORMAL_CONTENT = """
当前和你说话的人昵称是{nickname}TA的ID是{user_id}
不要过多关注用户信息请你着重结合用户的发言直接作出回应
"""
TIP_CONTENT = """
你的回复应该尽可能简练像人类一样随意不要附加任何奇怪的东西如聊天记录的格式禁止重复聊天记录
不要过多关注用户信息和群组信息请你着重结合用户的发言直接作出回应
"""
NO_RESULT = [
"你在说啥子?",
f"纯洁的{BotConfig.self_nickname}没听懂",
"下次再告诉你(下次一定)",
"你觉得我听懂了吗?嗯?",
"我!不!知!道!",
]
NO_RESULT_IMAGE = os.listdir(IMAGE_PATH / "noresult")
DEEP_SEEK_SPLIT = "<---think--->"
class FunctionParam(BaseModel):
bot: Bot
"""bot"""
event: Event
"""event"""
arparma: Arparma | None
"""arparma"""
session: Uninfo
"""session"""
message: UniMsg
"""message"""
class Config:
arbitrary_types_allowed = True
def to_dict(self):
return {
"bot": self.bot,
"event": self.event,
"arparma": self.arparma,
"session": self.session,
"message": self.message,
}
class Function(BaseModel):
arguments: str | None = None
"""函数参数"""
name: str
"""函数名"""
class Tool(BaseModel):
id: str
"""调用ID"""
type: str
"""调用类型"""
function: Function
"""调用函数"""
class Message(BaseModel):
role: str
"""角色"""
content: str | None = None
"""内容"""
refusal: Any | None = None
tool_calls: list[Tool] | None = None
"""工具回调"""
class MessageCache(BaseModel):
user_id: str
"""用户id"""
nickname: str
"""用户昵称"""
message: UniMsg
"""消息"""
class Config:
arbitrary_types_allowed = True
class ChatMessage(BaseModel):
role: str
"""角色"""
content: str | list | None = None
"""消息内容"""
tool_call_id: str | None = None
"""工具回调id"""
tool_calls: list[Tool] | None = None
"""工具回调信息"""
class Config:
arbitrary_types_allowed = True
class Choices(BaseModel):
index: int
message: Message
logprobs: Any | None = None
finish_reason: str | None
class Usage(BaseModel):
prompt_tokens: int
completion_tokens: int
total_tokens: int
prompt_tokens_details: dict | None = None
completion_tokens_details: dict | None = None
class OpenAiResult(BaseModel):
id: str | None = None
object: str
created: int
model: str
choices: list[Choices] | None
usage: Usage
service_tier: str | None = None
system_fingerprint: str | None = None