chore: sync current WechatHookBot workspace

This commit is contained in:
2026-03-09 15:48:45 +08:00
parent 4016c1e6eb
commit 9119e2307d
195 changed files with 24438 additions and 17498 deletions

216
plugins/AIChat/config.toml Normal file
View File

@@ -0,0 +1,216 @@
# AI 聊天插件配置
[plugin]
enabled = true
name = "AIChat"
description = "AI 聊天插件,支持自定义模型和人设"
[api]
# API 配置
# 接口模式:
# - auto自动识别 URL
# - openai_chat_completions/v1/chat/completions
# - openai_responses/v1/responses
# - openai_completions/v1/completions
# - gemini_generate_content/v1beta/models/...:generateContent
# - claude_messages/v1/messages
mode = "auto"
url = "https://freeapi.dgbmc.top/v1/chat/completions"
model = "gpt-5.2"
api_key = "sk-vtr56l4f1VIiTqiT8DDihq11U5Fs92SOS3FTgBKu5WIFjce8"
timeout = 1200
max_tokens = 8192 # 最大输出 token 数(防止回复被截断)
context_limit = 200000 # 模型上下文窗口大小(用于 /context 统计)
[proxy]
# 代理配置(可选)
enabled = false # 是否启用代理
type = "socks5" # 代理类型socks5, http, https
host = "38.55.107.103" # 代理服务器地址
port = 53054 # 代理服务器端口
# username = "" # 代理用户名(可选)
# password = "" # 代理密码(可选)
[prompt]
# 人设文件名(放在 prompts 文件夹下)
system_prompt_file = "瑞依.txt"
[output]
# 输出后处理(用于强制满足提示词约束)
# - strip_thinking: 移除 <think>...</think> / “思考:...” 等外显思考内容
# - strip_markdown: 移除常见 Markdown 标记(保留正文内容)
strip_thinking = true
strip_markdown = true
[behavior]
# 触发方式all=所有消息, mention=@机器人, keyword=关键词触发
trigger_mode = "mention"
# 串行回复:同一会话内一次只处理一条 AI 回复,避免多人同时@导致串线
serial_reply = true
# 关键词列表trigger_mode=keyword 时生效)
keywords = ["ai", "问问"]
# 是否回复群聊
reply_group = true
# 是否回复私聊
reply_private = true
[memory]
# 记忆功能配置
enabled = true # 是否启用记忆功能
max_messages = 1000 # 每个会话最大记忆消息数
clear_command = "/清空记忆" # 清空记忆的命令
[history]
# 群组历史记录配置
enabled = true # 是否启用群组历史记录
max_history = 2000 # 每个群组最多保存多少条历史消息
max_context = 100 # 发送给 AI 的最大上下文消息数(推荐 10-30避免超时
history_dir = "history" # 历史记录存储目录
sync_bot_messages = true # 将机器人发出的消息同步写入群聊 history用于避免上下文缺失导致的工具误触/重复)
[image_description]
# 图片描述配置(用于自动描述用户发送的图片)
enabled = true # 是否启用自动图片描述
api_url = "https://freeapi.dgbmc.top/v1/chat/completions" # 图片描述专用接口(留空则复用 [api].url
api_key = "sk-akZaABoONVyr951SAm6lzcj3Qhyc4XE5MorX3KNmZCJpYqom" # 图片描述专用密钥(留空则复用 [api].api_key
model = "gpt-5.2" # 用于图片描述的模型(可以用便宜的模型)
prompt = "请以客观、中立的方式,用中文非常详细地描述这张图片的全部可见内容:包括整体场景和背景(地点、环境、光线、时间、氛围等)、画面构图(前景/中景/背景中的元素及其相对位置)、所有人物或角色的外观特征(大致年龄、性别、体型、肤色、发型、服装、表情)、姿势和具体动作、与物体或其他人物的互动、所有重要物体与细节(颜色、形状、材质、状态),以及画面中的全部文字(逐字抄写并说明位置、字体样式和颜色,如标语、招牌、屏幕内容、图标等);不要加入主观评价或推测,不要说多余的话,只输出对画面本身全面、细致、准确的客观描述。" # 图片描述提示词
max_tokens = 8192 # 最大输出 token 数1000 约等于 500-700 中文字)
[video_recognition]
# 视频识别配置用于引用视频消息时的AI理解
enabled = true # 是否启用视频识别
model = "gemini-3-pro-preview" # 视频识别模型Gemini 系列)
max_tokens = 8192 # 最大输出 token 数
timeout = 1200 # API 超时时间(秒),视频处理较慢
max_size_mb = 40 # 最大视频文件大小MB超过则跳过
# Gemini 原生 API 配置(视频识别专用)
api_url = "https://freeapi.dgbmc.top/v1beta/models" # Gemini API 地址
api_key = "sk-akZaABoONVyr951SAm6lzcj3Qhyc4XE5MorX3KNmZCJpYqom" # Gemini API Key
[rate_limit]
# 限流配置防止消息轰炸和API滥用
enabled = true # 是否启用限流
# AI 聊天限流
ai_chat_limit = 20 # 每用户每分钟最多触发 AI 聊天次数
ai_chat_window = 60 # 时间窗口(秒)
# 超限提示消息
rate_limit_message = "⚠️ 消息太频繁了,请 {seconds} 秒后再试~"
[redis]
# Redis 存储配置(用于对话历史持久化)
# 注意Redis 连接由 MessageLogger 插件初始化,这里只是配置存储参数
use_redis_history = true # 是否使用 Redis 存储对话历史false 则使用 JSON 文件)
chat_history_ttl = 86400 # 对话历史过期时间默认24小时
group_history_ttl = 172800 # 群聊历史过期时间默认48小时
[tools]
# LLM 工具过滤配置
# 过滤模式: "all" = 启用所有工具, "whitelist" = 仅启用白名单, "blacklist" = 禁用黑名单
mode = "blacklist"
# 工具智能选择:仅在当前消息明显需要时才把工具提供给模型,减少误触函数工具
smart_select = true
# 放宽绘图工具触发:允许模型输出文本 JSON 工具调用时触发绘图
loose_image_tool = true
# 是否异步执行工具true=后台执行false=前台等待)
async_execute = false
# 工具执行后是否让 AI 基于工具结果再回复一条自然语言总结Eridanus 风格)
followup_ai_reply = true
# 是否注入函数调用规则提示词(建议开启,减少误触发/JSON泄露
rule_prompt_enabled = true
whitelist = [
"flow2_ai_image_generation",
"sora_video_generation",
"search_music",
"search_playlet",
"web_search",
"get_daily_news",
"get_epic_free_games",
"user_signin",
"check_profile",
"deer_checkin",
]
blacklist = [
"generate_image",
"jimeng_ai_image_generation",
"kiira2_ai_image_generation",
]
# 工具执行超时配置(秒)
[tools.timeout]
default = 1200 # 默认超时时间
# === 图片生成类工具(需要较长时间)===
generate_image = 1200 # ZImageTurbo 绘图
nano_ai_image_generation = 1200 # NanoImage 绘图
flow2_ai_image_generation = 1200 # Flow2API 绘图
# === 视频生成类工具(需要更长时间)===
sora_video_generation = 1200 # Sora2API 视频生成
grok_video_generation = 1200 # GrokVideo 视频生成
get_random_video = 1200 # 随机视频
# === 搜索类工具 ===
web_search = 1200 # 网页搜索
tavily_web_search = 1200 # Tavily 搜索
search_music = 1200 # 音乐搜索
search_playlet = 1200 # 短剧搜索
get_random_image = 1200 # 随机图片
# === 新闻类工具 ===
get_daily_news = 1200 # 每日新闻
get_epic_free_games = 1200 # Epic 免费游戏
get_kfc = 1200 # KFC 文案
# === 签到和打卡类工具 ===
user_signin = 1200 # 用户签到
check_profile = 1200 # 查看资料
deer_checkin = 1200 # 鹿打卡
view_calendar = 1200 # 查看日历
makeup_checkin = 1200 # 补签
# === 旅行规划类工具 ===
search_location = 1200 # 搜索地点
search_poi = 1200 # 搜索 POI
search_nearby = 1200 # 搜索附近
plan_route = 1200 # 规划路线
get_travel_info = 1200 # 获取旅行信息
plan_detailed_trip = 1200 # 详细行程规划调用多个API需要较长时间
# === 群聊总结(需要较长时间)===
generate_summary = 1200 # 群聊总结
# 工具并发控制
[tools.concurrency]
max_concurrent = 5 # 最大并发执行工具数
# 完整工具清单请参考: plugins/AIChat/LLM_TOOLS.md
# 向量长期记忆配置(基于 Chroma 向量数据库)
# 每 N 条群聊消息自动用 LLM 总结存入向量库AI 回复时检索相关历史摘要注入上下文
# 注意:此功能与【持久记忆】(用户手动添加)互不干扰
[vector_memory]
enabled = true # 是否启用向量记忆
chroma_db_path = "data/chroma_db" # Chroma 持久化存储路径(相对于插件目录)
# SiliconFlow Embedding API 配置
embedding_url = "https://api.siliconflow.cn/v1/embeddings"
embedding_model = "BAAI/bge-m3"
embedding_api_key = "sk-dlqrblcqtmgnnnppjtmftiogysoeynzytgqemuomjnzvjzva" # 硅基流动 API Key
# 摘要配置
summarize_every = 80 # 每多少条群聊消息触发一次摘要
summary_model = "" # 摘要用的模型(留空则复用 [api].model
summary_max_tokens = 8192 # 摘要最大输出 token 数
# 检索配置
retrieval_top_k = 5 # 每次检索返回的最大摘要数
retrieval_min_score = 0.55 # 最低相似度阈值cosine distance越小越相似
max_inject_chars = 32768 # 注入到 system prompt 的最大字符数
retrieval_log_candidates = true # 是否在控制台打印每条候选摘要(命中/过滤/距离)
retrieval_log_injected = true # 是否打印最终注入给 AI 的摘要预览
retrieval_log_max_chars = 220 # 日志里每条摘要最多显示字符数(防止刷屏)