|
|
@@ -3,6 +3,7 @@
|
|
|
"""
|
|
|
|
|
|
from typing import List, Dict, Any, Optional
|
|
|
+from datetime import datetime, timedelta
|
|
|
from agent.tools import tool, ToolResult, ToolContext
|
|
|
|
|
|
|
|
|
@@ -15,13 +16,16 @@ async def douyin_user_videos(
|
|
|
"""
|
|
|
根据抖音用户ID获取该用户的作品列表
|
|
|
|
|
|
+ ⚠️ 注意:当前返回的是模拟数据,仅用于测试和演示
|
|
|
+ 实际使用时需要对接真实的抖音API
|
|
|
+
|
|
|
Args:
|
|
|
author_id: 抖音用户ID
|
|
|
max_results: 最大返回数量,默认20
|
|
|
ctx: 工具上下文
|
|
|
|
|
|
Returns:
|
|
|
- ToolResult: 包含用户作品列表
|
|
|
+ ToolResult: 包含用户作品列表(模拟数据)
|
|
|
"""
|
|
|
# TODO: 实际实现需要调用抖音API或爬虫服务
|
|
|
# 这里返回模拟数据
|
|
|
@@ -30,33 +34,52 @@ async def douyin_user_videos(
|
|
|
|
|
|
if not results:
|
|
|
return ToolResult(
|
|
|
- title=f"用户作品: {author_id}",
|
|
|
- output=f"未找到用户 {author_id} 的作品",
|
|
|
- metadata={"total": 0, "items": []},
|
|
|
+ title=f"[模拟数据] 用户作品: {author_id}",
|
|
|
+ output=f"⚠️ 未找到用户 {author_id} 的作品(模拟数据)",
|
|
|
+ metadata={"total": 0, "items": [], "is_mock_data": True},
|
|
|
)
|
|
|
|
|
|
author_name = results[0]["author_name"]
|
|
|
- summary = f"用户「{author_name}」(ID: {author_id}) 共有 {len(results)} 个作品"
|
|
|
+ summary = f"⚠️ [模拟数据] 用户「{author_name}」(ID: {author_id}) 共有 {len(results)} 个作品"
|
|
|
+
|
|
|
+ # 统计时效性
|
|
|
+ recent_count = sum(1 for v in results if v.get('days_since_publish', 999) < 30)
|
|
|
+ if recent_count > 0:
|
|
|
+ summary += f",其中 {recent_count} 个是近30天内发布"
|
|
|
+
|
|
|
+ summary += "\n\n⚠️ 注意:以下是模拟数据,仅用于测试。实际使用需对接真实抖音API。"
|
|
|
|
|
|
# 构建详细输出
|
|
|
output_lines = [summary, ""]
|
|
|
for i, item in enumerate(results[:5], 1): # 只显示前5条
|
|
|
+ days_ago = item.get('days_since_publish', 0)
|
|
|
+ time_desc = f"{days_ago}天前" if days_ago > 0 else "今天"
|
|
|
+
|
|
|
output_lines.append(f"{i}. {item['title']}")
|
|
|
- output_lines.append(f" 发布: {item['create_time']}")
|
|
|
- output_lines.append(f" 数据: 播放 {item['play_count']:,} | 点赞 {item['like_count']:,} | 分享 {item['share_count']:,}")
|
|
|
+ output_lines.append(f" 发布: {time_desc}")
|
|
|
+ output_lines.append(f" 数据: 点赞 {item['like_count']:,} | 评论 {item['comment_count']:,} | 分享 {item['share_count']:,}")
|
|
|
+
|
|
|
+ # 计算互动比例
|
|
|
+ like_count = item['like_count']
|
|
|
+ comment_ratio = (item['comment_count'] / like_count * 100) if like_count > 0 else 0
|
|
|
+ share_ratio = (item['share_count'] / like_count * 100) if like_count > 0 else 0
|
|
|
+ output_lines.append(f" 互动: 评论率 {comment_ratio:.1f}% | 分享率 {share_ratio:.1f}%")
|
|
|
output_lines.append("")
|
|
|
|
|
|
if len(results) > 5:
|
|
|
output_lines.append(f"... 还有 {len(results) - 5} 个作品")
|
|
|
|
|
|
return ToolResult(
|
|
|
- title=f"用户作品: {author_name}",
|
|
|
+ title=f"[模拟数据] 用户作品: {author_name}",
|
|
|
output="\n".join(output_lines),
|
|
|
metadata={
|
|
|
"author_id": author_id,
|
|
|
"author_name": author_name,
|
|
|
"total": len(results),
|
|
|
+ "recent_count": recent_count,
|
|
|
"items": results,
|
|
|
+ "is_mock_data": True,
|
|
|
+ "warning": "这是模拟数据,实际使用需对接真实API",
|
|
|
},
|
|
|
)
|
|
|
|
|
|
@@ -67,7 +90,9 @@ async def _mock_user_videos(
|
|
|
) -> List[Dict[str, Any]]:
|
|
|
"""模拟获取用户作品(实际应调用真实API)"""
|
|
|
|
|
|
- # 模拟不同用户的数据
|
|
|
+ now = datetime.now()
|
|
|
+
|
|
|
+ # 模拟不同用户的数据(包含时效性信息)
|
|
|
user_data = {
|
|
|
"user_001": {
|
|
|
"author_name": "感动中国",
|
|
|
@@ -75,29 +100,42 @@ async def _mock_user_videos(
|
|
|
{
|
|
|
"video_id": "7234567890123456789",
|
|
|
"title": "感人至深!孩子军抗日故事",
|
|
|
- "play_count": 150000,
|
|
|
"like_count": 8000,
|
|
|
"comment_count": 1200,
|
|
|
"share_count": 500,
|
|
|
- "create_time": "2024-03-01 10:00:00",
|
|
|
+ "collect_count": 1500,
|
|
|
+ "create_time": (now - timedelta(days=3)).strftime("%Y-%m-%d %H:%M:%S"),
|
|
|
+ "days_since_publish": 3,
|
|
|
},
|
|
|
{
|
|
|
"video_id": "7234567890123456791",
|
|
|
"title": "真实抗战故事",
|
|
|
- "play_count": 95000,
|
|
|
"like_count": 5200,
|
|
|
"comment_count": 800,
|
|
|
"share_count": 350,
|
|
|
- "create_time": "2024-03-03 09:15:00",
|
|
|
+ "collect_count": 1000,
|
|
|
+ "create_time": (now - timedelta(days=45)).strftime("%Y-%m-%d %H:%M:%S"),
|
|
|
+ "days_since_publish": 45,
|
|
|
},
|
|
|
{
|
|
|
"video_id": "7234567890123456792",
|
|
|
"title": "历史不能忘记",
|
|
|
- "play_count": 120000,
|
|
|
"like_count": 6500,
|
|
|
"comment_count": 950,
|
|
|
"share_count": 420,
|
|
|
- "create_time": "2024-03-05 15:20:00",
|
|
|
+ "collect_count": 1200,
|
|
|
+ "create_time": (now - timedelta(days=20)).strftime("%Y-%m-%d %H:%M:%S"),
|
|
|
+ "days_since_publish": 20,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "video_id": "7234567890123456794",
|
|
|
+ "title": "铭记历史,珍爱和平",
|
|
|
+ "like_count": 4200,
|
|
|
+ "comment_count": 600,
|
|
|
+ "share_count": 280,
|
|
|
+ "collect_count": 800,
|
|
|
+ "create_time": (now - timedelta(days=8)).strftime("%Y-%m-%d %H:%M:%S"),
|
|
|
+ "days_since_publish": 8,
|
|
|
},
|
|
|
],
|
|
|
},
|
|
|
@@ -107,20 +145,57 @@ async def _mock_user_videos(
|
|
|
{
|
|
|
"video_id": "7234567890123456790",
|
|
|
"title": "抗日经典片段合集",
|
|
|
- "play_count": 280000,
|
|
|
"like_count": 15000,
|
|
|
"comment_count": 2300,
|
|
|
"share_count": 1200,
|
|
|
- "create_time": "2024-03-02 14:30:00",
|
|
|
+ "collect_count": 3000,
|
|
|
+ "create_time": (now - timedelta(days=15)).strftime("%Y-%m-%d %H:%M:%S"),
|
|
|
+ "days_since_publish": 15,
|
|
|
},
|
|
|
{
|
|
|
"video_id": "7234567890123456793",
|
|
|
"title": "那些年的英雄",
|
|
|
- "play_count": 180000,
|
|
|
"like_count": 9500,
|
|
|
"comment_count": 1500,
|
|
|
"share_count": 800,
|
|
|
- "create_time": "2024-03-04 11:00:00",
|
|
|
+ "collect_count": 2000,
|
|
|
+ "create_time": (now - timedelta(days=25)).strftime("%Y-%m-%d %H:%M:%S"),
|
|
|
+ "days_since_publish": 25,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "video_id": "7234567890123456795",
|
|
|
+ "title": "珍贵历史影像资料",
|
|
|
+ "like_count": 12000,
|
|
|
+ "comment_count": 1800,
|
|
|
+ "share_count": 950,
|
|
|
+ "collect_count": 2500,
|
|
|
+ "create_time": (now - timedelta(days=5)).strftime("%Y-%m-%d %H:%M:%S"),
|
|
|
+ "days_since_publish": 5,
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ "user_003": {
|
|
|
+ "author_name": "时代记忆",
|
|
|
+ "videos": [
|
|
|
+ {
|
|
|
+ "video_id": "7234567890123456796",
|
|
|
+ "title": "最新抗战短片",
|
|
|
+ "like_count": 3500,
|
|
|
+ "comment_count": 450,
|
|
|
+ "share_count": 200,
|
|
|
+ "collect_count": 800,
|
|
|
+ "create_time": (now - timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S"),
|
|
|
+ "days_since_publish": 1,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "video_id": "7234567890123456797",
|
|
|
+ "title": "感动瞬间合集",
|
|
|
+ "like_count": 5800,
|
|
|
+ "comment_count": 720,
|
|
|
+ "share_count": 380,
|
|
|
+ "collect_count": 1100,
|
|
|
+ "create_time": (now - timedelta(days=12)).strftime("%Y-%m-%d %H:%M:%S"),
|
|
|
+ "days_since_publish": 12,
|
|
|
},
|
|
|
],
|
|
|
},
|