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