# 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: 移除 ... / “思考:...” 等外显思考内容 # - 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 # 日志里每条摘要最多显示字符数(防止刷屏)