mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
172 lines
4.7 KiB
Python
172 lines
4.7 KiB
Python
|
|
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
|