Files
WeChatHookBot/plugins/AIChat/config.toml

217 lines
10 KiB
TOML
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.
# 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 # 日志里每条摘要最多显示字符数(防止刷屏)