- 增加全局智能助手设置,开启后所有消息通过智能助手回答而无需使用 `/ai` 指令
- 问题修复与细节优化
This commit is contained in:
jxxghp
2025-11-23 13:55:16 +08:00
parent fd422d7446
commit 9b5f863832
6 changed files with 338 additions and 331 deletions
+1 -2
View File
@@ -1,7 +1,7 @@
"""查询媒体库工具""" """查询媒体库工具"""
import json import json
from typing import Optional, List, Type from typing import Optional, Type
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
@@ -9,7 +9,6 @@ from app.agent.tools.base import MoviePilotTool
from app.chain.mediaserver import MediaServerChain from app.chain.mediaserver import MediaServerChain
from app.core.context import MediaInfo from app.core.context import MediaInfo
from app.log import logger from app.log import logger
from app.schemas import MediaServerItem
from app.schemas.types import MediaType from app.schemas.types import MediaType
@@ -35,8 +35,6 @@ class SearchPersonCreditsTool(MoviePilotTool):
logger.info(f"执行工具: {self.name}, 参数: person_id={person_id}, source={source}, page={page}") logger.info(f"执行工具: {self.name}, 参数: person_id={person_id}, source={source}, page={page}")
try: try:
medias = None
# 根据source选择相应的chain # 根据source选择相应的chain
if source.lower() == "tmdb": if source.lower() == "tmdb":
tmdb_chain = TmdbChain() tmdb_chain = TmdbChain()
+4 -2
View File
@@ -64,7 +64,8 @@ class SearchWebTool(MoviePilotTool):
logger.error(f"搜索网络内容失败: {e}", exc_info=True) logger.error(f"搜索网络内容失败: {e}", exc_info=True)
return error_message return error_message
async def _search_duckduckgo_api(self, query: str, max_results: int) -> list: @staticmethod
async def _search_duckduckgo_api(query: str, max_results: int) -> list:
""" """
使用DuckDuckGo API进行搜索 使用DuckDuckGo API进行搜索
@@ -143,7 +144,8 @@ class SearchWebTool(MoviePilotTool):
logger.warning(f"DuckDuckGo API搜索失败: {e}") logger.warning(f"DuckDuckGo API搜索失败: {e}")
return [] return []
def _format_and_truncate_results(self, results: list, max_results: int) -> dict: @staticmethod
def _format_and_truncate_results(results: list, max_results: int) -> dict:
""" """
格式化并裁剪搜索结果以避免占用过多上下文 格式化并裁剪搜索结果以避免占用过多上下文
+14 -8
View File
@@ -164,19 +164,15 @@ class MessageChain(ChainBase):
) )
# 处理消息 # 处理消息
if text.startswith('CALLBACK:'): if text.startswith('CALLBACK:'):
# 处理按钮回调(适配支持回调的渠 # 处理按钮回调(适配支持回调的渠),优先级最高
if ChannelCapabilityManager.supports_callbacks(channel): if ChannelCapabilityManager.supports_callbacks(channel):
self._handle_callback(text=text, channel=channel, source=source, self._handle_callback(text=text, channel=channel, source=source,
userid=userid, username=username, userid=userid, username=username,
original_message_id=original_message_id, original_chat_id=original_chat_id) original_message_id=original_message_id, original_chat_id=original_chat_id)
else: else:
logger.warning(f"渠道 {channel.value} 不支持回调,但收到了回调消息:{text}") logger.warning(f"渠道 {channel.value} 不支持回调,但收到了回调消息:{text}")
elif text.startswith('/ai') or text.startswith('/AI'): elif text.startswith('/') and not text.lower().startswith('/ai'):
# AI智能体处理 # 执行特定命令命令(但不是/ai
self._handle_ai_message(text=text, channel=channel, source=source,
userid=userid, username=username)
elif text.startswith('/'):
# 执行命令
self.eventmanager.send_event( self.eventmanager.send_event(
EventType.CommandExcute, EventType.CommandExcute,
{ {
@@ -186,7 +182,17 @@ class MessageChain(ChainBase):
"source": source "source": source
} }
) )
elif text.isdigit(): elif text.lower().startswith('/ai'):
# 用户指定AI智能体消息响应
self._handle_ai_message(text=text, channel=channel, source=source,
userid=userid, username=username)
elif settings.AI_AGENT_ENABLE and settings.AI_AGENT_GLOBAL:
# 普通消息,全局智能体响应
self._handle_ai_message(text=text, channel=channel, source=source,
userid=userid, username=username)
else:
# 非智能体普通消息响应
if text.isdigit():
# 用户选择了具体的条目 # 用户选择了具体的条目
# 缓存 # 缓存
cache_data: dict = user_cache.get(userid).copy() cache_data: dict = user_cache.get(userid).copy()
+2
View File
@@ -411,6 +411,8 @@ class ConfigModel(BaseModel):
# ==================== AI智能体配置 ==================== # ==================== AI智能体配置 ====================
# AI智能体开关 # AI智能体开关
AI_AGENT_ENABLE: bool = False AI_AGENT_ENABLE: bool = False
# 合局AI智能体
AI_AGENT_GLOBAL: bool = False
# LLM提供商 (openai/google/deepseek) # LLM提供商 (openai/google/deepseek)
LLM_PROVIDER: str = "deepseek" LLM_PROVIDER: str = "deepseek"
# LLM模型名称 # LLM模型名称
+2 -2
View File
@@ -1,2 +1,2 @@
APP_VERSION = 'v2.8.5' APP_VERSION = 'v2.8.6'
FRONTEND_VERSION = 'v2.8.5' FRONTEND_VERSION = 'v2.8.6'