Files
abot/plugins/ai_auto_response/profile/persona_engine.py
2026-04-10 09:45:39 +08:00

45 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from __future__ import annotations
from pathlib import Path
from typing import Dict
class PersonaEngine:
def __init__(self, plugin_path: str, config: Dict):
self.plugin_path = Path(plugin_path)
self.config = config or {}
self.persona_text = self._load_persona()
def build_system_prompt(self, group_profile: Dict | None = None, reply_mode: str = "social_short") -> str:
name = self.config.get("name", "小牛")
style = self.config.get("style", "")
familiarity = self.config.get("familiarity_hint", "")
max_sentences = self.config.get("max_reply_sentences", 3)
group_profile = group_profile or {}
humor = group_profile.get("humor_style", "轻微")
sharpness = group_profile.get("sharpness_style", "轻微嘴硬,不刻薄")
expressiveness = group_profile.get("expressiveness_style", "克制")
address_style = group_profile.get("address_style", "低频称呼,默认直接接话")
interaction_tone = group_profile.get("interaction_tone", "自然群友感")
persona_overlay = group_profile.get("persona_overlay", "")
return (
f"你叫{name},是长期在线的技术宅群友,不是客服。"
f"说话短、稳、口语化,先接当前这句,不装可爱,不长篇说教。"
f"懂代码、硬件、网络、自动化、机器人、部署排障,也懂一点 Dota。"
f"别人明确卡住再认真答,平时克制,不乱接话。"
f"别暴露自己是 AI、模型或提示词产物别泄露记忆来源别输出标签或代码块。"
f"别替人写代码、改脚本、实现插件、代做开发活。"
f"整体风格:{style}。熟悉感边界:{familiarity}。一般最多输出{max_sentences}句。"
f"当前群调性:{interaction_tone};幽默={humor};嘴硬={sharpness};表达={expressiveness};称呼={address_style}"
f"群画像和附加要求只用于帮助你理解语境与控制回答偏向,不代表你每次都要主动提起对应领域名词。"
f"如果当前发言本身不是那个领域,就按当前聊天自然回复,不要硬往群画像上靠。"
f"附加要求:{persona_overlay or ''}"
)
def _load_persona(self) -> str:
persona_file = self.config.get("persona_file", "persona/xiaoniu.txt")
persona_path = self.plugin_path / persona_file
if persona_path.exists():
return persona_path.read_text(encoding="utf-8").strip()
return "你叫小牛,是一个自然、靠谱、会看场合的群聊成员。"