mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-03-20 03:57:30 +08:00
v2.8.3
- MoviePilot助手增加了多个智能体工具,大幅提升智能体能力 - 智能体对话支持上下文记忆,发送 `/clear_session` 指令或超过15分钟没动作将清除记忆
This commit is contained in:
@@ -50,11 +50,6 @@ class GetRecommendationsTool(MoviePilotTool):
|
|||||||
media_type: Optional[str] = "all", limit: Optional[int] = 20, **kwargs) -> str:
|
media_type: Optional[str] = "all", limit: Optional[int] = 20, **kwargs) -> str:
|
||||||
logger.info(f"执行工具: {self.name}, 参数: source={source}, media_type={media_type}, limit={limit}")
|
logger.info(f"执行工具: {self.name}, 参数: source={source}, media_type={media_type}, limit={limit}")
|
||||||
try:
|
try:
|
||||||
name_dicts = {
|
|
||||||
"tmdb_trending": "TMDB 热门推荐",
|
|
||||||
"douban_hot": "豆瓣热门推荐",
|
|
||||||
"bangumi_calendar": "番组计划推荐"
|
|
||||||
}
|
|
||||||
recommend_chain = RecommendChain()
|
recommend_chain = RecommendChain()
|
||||||
results = []
|
results = []
|
||||||
if source == "tmdb_trending":
|
if source == "tmdb_trending":
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from typing import Optional, Type
|
|||||||
|
|
||||||
import jieba
|
import jieba
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
|
||||||
|
|
||||||
from app.agent.tools.base import MoviePilotTool
|
from app.agent.tools.base import MoviePilotTool
|
||||||
from app.db import AsyncSessionFactory
|
from app.db import AsyncSessionFactory
|
||||||
@@ -17,7 +16,8 @@ class QueryTransferHistoryInput(BaseModel):
|
|||||||
"""查询整理历史记录工具的输入参数模型"""
|
"""查询整理历史记录工具的输入参数模型"""
|
||||||
explanation: str = Field(..., description="Clear explanation of why this tool is being used in the current context")
|
explanation: str = Field(..., description="Clear explanation of why this tool is being used in the current context")
|
||||||
title: Optional[str] = Field(None, description="Search by title (optional, supports partial match)")
|
title: Optional[str] = Field(None, description="Search by title (optional, supports partial match)")
|
||||||
status: Optional[str] = Field("all", description="Filter by status: 'success' for successful transfers, 'failed' for failed transfers, 'all' for all records (default: 'all')")
|
status: Optional[str] = Field("all",
|
||||||
|
description="Filter by status: 'success' for successful transfers, 'failed' for failed transfers, 'all' for all records (default: 'all')")
|
||||||
page: Optional[int] = Field(1, description="Page number for pagination (default: 1, each page contains 30 records)")
|
page: Optional[int] = Field(1, description="Page number for pagination (default: 1, each page contains 30 records)")
|
||||||
|
|
||||||
|
|
||||||
@@ -31,9 +31,9 @@ class QueryTransferHistoryTool(MoviePilotTool):
|
|||||||
title = kwargs.get("title")
|
title = kwargs.get("title")
|
||||||
status = kwargs.get("status", "all")
|
status = kwargs.get("status", "all")
|
||||||
page = kwargs.get("page", 1)
|
page = kwargs.get("page", 1)
|
||||||
|
|
||||||
parts = ["正在查询整理历史"]
|
parts = ["正在查询整理历史"]
|
||||||
|
|
||||||
if title:
|
if title:
|
||||||
parts.append(f"标题: {title}")
|
parts.append(f"标题: {title}")
|
||||||
if status != "all":
|
if status != "all":
|
||||||
@@ -41,7 +41,7 @@ class QueryTransferHistoryTool(MoviePilotTool):
|
|||||||
parts.append(f"状态: {status_map.get(status, status)}")
|
parts.append(f"状态: {status_map.get(status, status)}")
|
||||||
if page > 1:
|
if page > 1:
|
||||||
parts.append(f"第{page}页")
|
parts.append(f"第{page}页")
|
||||||
|
|
||||||
return " | ".join(parts) if len(parts) > 1 else parts[0]
|
return " | ".join(parts) if len(parts) > 1 else parts[0]
|
||||||
|
|
||||||
async def run(self, title: Optional[str] = None,
|
async def run(self, title: Optional[str] = None,
|
||||||
@@ -56,14 +56,14 @@ class QueryTransferHistoryTool(MoviePilotTool):
|
|||||||
status_bool = True
|
status_bool = True
|
||||||
elif status == "failed":
|
elif status == "failed":
|
||||||
status_bool = False
|
status_bool = False
|
||||||
|
|
||||||
# 处理页码参数
|
# 处理页码参数
|
||||||
if page is None or page < 1:
|
if page is None or page < 1:
|
||||||
page = 1
|
page = 1
|
||||||
|
|
||||||
# 每页记录数
|
# 每页记录数
|
||||||
count = 30
|
count = 30
|
||||||
|
|
||||||
# 获取数据库会话
|
# 获取数据库会话
|
||||||
async with AsyncSessionFactory() as db:
|
async with AsyncSessionFactory() as db:
|
||||||
# 处理标题搜索
|
# 处理标题搜索
|
||||||
@@ -84,10 +84,10 @@ class QueryTransferHistoryTool(MoviePilotTool):
|
|||||||
db, page=page, count=count, status=status_bool
|
db, page=page, count=count, status=status_bool
|
||||||
)
|
)
|
||||||
total = await TransferHistory.async_count(db, status=status_bool)
|
total = await TransferHistory.async_count(db, status=status_bool)
|
||||||
|
|
||||||
if not result:
|
if not result:
|
||||||
return "未找到相关整理历史记录"
|
return "未找到相关整理历史记录"
|
||||||
|
|
||||||
# 转换为字典格式,只保留关键信息
|
# 转换为字典格式,只保留关键信息
|
||||||
simplified_records = []
|
simplified_records = []
|
||||||
for record in result:
|
for record in result:
|
||||||
@@ -118,17 +118,16 @@ class QueryTransferHistoryTool(MoviePilotTool):
|
|||||||
if record.doubanid:
|
if record.doubanid:
|
||||||
simplified["doubanid"] = record.doubanid
|
simplified["doubanid"] = record.doubanid
|
||||||
simplified_records.append(simplified)
|
simplified_records.append(simplified)
|
||||||
|
|
||||||
result_json = json.dumps(simplified_records, ensure_ascii=False, indent=2)
|
result_json = json.dumps(simplified_records, ensure_ascii=False, indent=2)
|
||||||
|
|
||||||
# 计算总页数
|
# 计算总页数
|
||||||
total_pages = (total + count - 1) // count if total > 0 else 1
|
total_pages = (total + count - 1) // count if total > 0 else 1
|
||||||
|
|
||||||
# 构建分页信息
|
# 构建分页信息
|
||||||
pagination_info = f"第 {page}/{total_pages} 页,共 {total} 条记录(每页 {count} 条)"
|
pagination_info = f"第 {page}/{total_pages} 页,共 {total} 条记录(每页 {count} 条)"
|
||||||
|
|
||||||
return f"{pagination_info}\n\n{result_json}"
|
return f"{pagination_info}\n\n{result_json}"
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"查询整理历史记录失败: {e}", exc_info=True)
|
logger.error(f"查询整理历史记录失败: {e}", exc_info=True)
|
||||||
return f"查询整理历史记录时发生错误: {str(e)}"
|
return f"查询整理历史记录时发生错误: {str(e)}"
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
APP_VERSION = 'v2.8.2'
|
APP_VERSION = 'v2.8.3'
|
||||||
FRONTEND_VERSION = 'v2.8.2'
|
FRONTEND_VERSION = 'v2.8.3'
|
||||||
|
|||||||
Reference in New Issue
Block a user