diff --git a/reports/docs/ernie_tutorial/video_analysis_agent_cn.ipynb b/reports/docs/ernie_tutorial/video_analysis_agent_cn.ipynb new file mode 100644 index 000000000..2571a5c99 --- /dev/null +++ b/reports/docs/ernie_tutorial/video_analysis_agent_cn.ipynb @@ -0,0 +1,941 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 多智能体协作的自动化视频舆情分析报告生成器\n", + "\n", + "### 1. 项目的意义与价值\n", + "\n", + "#### 从“非结构化视频”中挖掘“结构化洞察”的通用挑战\n", + "\n", + "在当今的数字生态中,视频已成为信息传播、知识分享和消费者意见表达的核心媒介。从企业内部的会议录屏、技术培训,到外部的市场宣传、用户评测,海量视频内容正以前所未有的速度被创造出来。然而,对于绝大多数组织而言,这个庞大的视频库仍然是“暗数据”——蕴含着无尽的价值,却因其非结构化的特性,而难以被高效地检索、分析和利用。\n", + "\n", + "人工观看并提炼视频信息的方法,成本高昂、效率低下且无法规模化,这构成了企业在智能化转型中面临的普遍瓶颈。\n", + "\n", + "本项目旨在解决这一通用挑战。构建了一个由多个AI智能体(Agent)协作的自动化工作流,该系统如同一支永不疲倦的虚拟分析师团队,能够:\n", + "* **规模化处理**: 自动消化并理解海量的视频源。\n", + "* **深度多模态理解**: 同时“看懂”视频画面并“听懂”语音内容,实现跨模态的信息融合。\n", + "* **智能提炼**: 将线性的、非结构化的视频信息,转化为结构化的、可量化的数据资产。\n", + "\n", + "#### 以汽车行业为例:一个高价值的垂域应用场景\n", + "\n", + "上述挑战在那些产品复杂、竞争激烈、且高度依赖市场反馈的行业中尤为突出。**为了具体展示本系统的强大能力,我们将聚焦于一个典型的高价值应用场景——新款汽车的市场舆情分析。**\n", + "\n", + "当一家车企发布一款新车后,其成败往往在最初的“黄金72小时”就已初见端倪。市场的真实声音,就分散在YouTube、B站等平台上成百上千个KOL(关键意见领袖)的深度评-\n", + "测视频中。车企高层迫切需要知道:\n", + "* 市场最关注我们新车的哪些**核心特性**?\n", + "* 在这些特性上,主流观点是**正面还是负面**?\n", + "* 评测中,大家都在拿我们的车和哪些**竞品**做对比?\n", + "* 我们真正的**优势和短板**是什么?\n", + "\n", + "本Jupyter Notebook将完整地、端到端地实现一个智能体系统来回答这些问题。我们将演示,这个系统如何自动处理多个关于同一款新车的评测视频,并通过“探索-分析-策略”的多阶段智能体协作,最终生成一份包含量化数据和深度洞察的**专业级Markdown舆情洞察报告**。\n", + "\n", + "这不仅是一个技术演示,更是一个未来商业智能工作模式的缩影——将AI智能体应用于垂直领域,从而在海量信息中赢得决策先机。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. 环境准备:安装所有必需的库" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "execution": { + "iopub.execute_input": "2025-08-21T10:33:47.372575Z", + "iopub.status.busy": "2025-08-21T10:33:47.372328Z", + "iopub.status.idle": "2025-08-21T10:33:48.851270Z", + "shell.execute_reply": "2025-08-21T10:33:48.850566Z", + "shell.execute_reply.started": "2025-08-21T10:33:47.372556Z" + }, + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple/\n", + "Requirement already satisfied: agno in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (1.7.2)\n", + "Requirement already satisfied: baidu-aip in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (4.16.13)\n", + "Requirement already satisfied: openai in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (1.95.1)\n", + "Requirement already satisfied: opencv-python-headless in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (4.12.0.88)\n", + "Requirement already satisfied: moviepy in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (1.0.2)\n", + "Requirement already satisfied: pydub in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (0.25.1)\n", + "Requirement already satisfied: yt-dlp in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (2025.8.20)\n", + "Requirement already satisfied: docstring-parser in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from agno) (0.16)\n", + "Requirement already satisfied: gitpython in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from agno) (3.1.44)\n", + "Requirement already satisfied: httpx in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from agno) (0.28.1)\n", + "Requirement already satisfied: pydantic-settings in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from agno) (2.10.1)\n", + "Requirement already satisfied: pydantic in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from agno) (2.11.7)\n", + "Requirement already satisfied: python-dotenv in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from agno) (1.1.1)\n", + "Requirement already satisfied: python-multipart in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from agno) (0.0.20)\n", + "Requirement already satisfied: pyyaml in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from agno) (6.0.2)\n", + "Requirement already satisfied: rich in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from agno) (14.0.0)\n", + "Requirement already satisfied: tomli in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from agno) (2.2.1)\n", + "Requirement already satisfied: typer in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from agno) (0.16.0)\n", + "Requirement already satisfied: typing-extensions in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from agno) (4.14.1)\n", + "Requirement already satisfied: requests in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from baidu-aip) (2.32.4)\n", + "Requirement already satisfied: anyio<5,>=3.5.0 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from openai) (4.9.0)\n", + "Requirement already satisfied: distro<2,>=1.7.0 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from openai) (1.9.0)\n", + "Requirement already satisfied: jiter<1,>=0.4.0 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from openai) (0.10.0)\n", + "Requirement already satisfied: sniffio in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from openai) (1.3.1)\n", + "Requirement already satisfied: tqdm>4 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from openai) (4.67.1)\n", + "Requirement already satisfied: idna>=2.8 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from anyio<5,>=3.5.0->openai) (3.10)\n", + "Requirement already satisfied: certifi in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from httpx->agno) (2025.7.14)\n", + "Requirement already satisfied: httpcore==1.* in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from httpx->agno) (1.0.9)\n", + "Requirement already satisfied: h11>=0.16 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from httpcore==1.*->httpx->agno) (0.16.0)\n", + "Requirement already satisfied: annotated-types>=0.6.0 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from pydantic->agno) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.33.2 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from pydantic->agno) (2.33.2)\n", + "Requirement already satisfied: typing-inspection>=0.4.0 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from pydantic->agno) (0.4.1)\n", + "Requirement already satisfied: numpy<2.3.0,>=2 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from opencv-python-headless) (2.2.6)\n", + "Requirement already satisfied: decorator<5.0,>=4.0.2 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from moviepy) (4.4.2)\n", + "Requirement already satisfied: imageio<3.0,>=2.5 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from moviepy) (2.37.0)\n", + "Requirement already satisfied: imageio_ffmpeg>=0.2.0 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from moviepy) (0.6.0)\n", + "Requirement already satisfied: proglog<=1.0.0 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from moviepy) (0.1.12)\n", + "Requirement already satisfied: pillow>=8.3.2 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from imageio<3.0,>=2.5->moviepy) (11.3.0)\n", + "Requirement already satisfied: charset_normalizer<4,>=2 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from requests->baidu-aip) (3.4.2)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from requests->baidu-aip) (2.5.0)\n", + "Requirement already satisfied: gitdb<5,>=4.0.1 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from gitpython->agno) (4.0.12)\n", + "Requirement already satisfied: smmap<6,>=3.0.1 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from gitdb<5,>=4.0.1->gitpython->agno) (5.0.2)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from rich->agno) (3.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from rich->agno) (2.19.2)\n", + "Requirement already satisfied: mdurl~=0.1 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from markdown-it-py>=2.2.0->rich->agno) (0.1.2)\n", + "Requirement already satisfied: click>=8.0.0 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from typer->agno) (8.2.1)\n", + "Requirement already satisfied: shellingham>=1.3.0 in /Users/lizhijun/miniconda3/envs/agent/lib/python3.11/site-packages (from typer->agno) (1.5.4)\n" + ] + } + ], + "source": [ + "# 运行此单元格以安装所有依赖项\n", + "!pip install agno baidu-aip openai opencv-python-headless moviepy pydub yt-dlp" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. 导入核心库" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "execution": { + "iopub.execute_input": "2025-08-21T10:35:59.754531Z", + "iopub.status.busy": "2025-08-21T10:35:59.754304Z", + "iopub.status.idle": "2025-08-21T10:36:00.832477Z", + "shell.execute_reply": "2025-08-21T10:36:00.831647Z", + "shell.execute_reply.started": "2025-08-21T10:35:59.754511Z" + }, + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "import os\n", + "import json\n", + "import base64\n", + "import re\n", + "import logging\n", + "from typing import Dict, List, Iterator\n", + "from concurrent.futures import ThreadPoolExecutor, as_completed\n", + "\n", + "# 框架与核心工具\n", + "from agno.agent import Agent, RunResponse\n", + "from agno.workflow import Workflow\n", + "from agno.models.openai import OpenAIChat\n", + "from aip import AipSpeech\n", + "import cv2\n", + "from moviepy.editor import VideoFileClip\n", + "from pydub import AudioSegment\n", + "import yt_dlp\n", + "from openai import OpenAI\n", + "from tqdm.notebook import tqdm\n", + "from IPython.display import display, Markdown" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. 🚀 配置中心\n", + "百度智能云的语音识别相关配置需登录/申请使用,文心多模态大模型在星河社区首页点击即送~\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "class Config:\n", + " # --- 百度智能云 API 配置 ---\n", + " BAIDU_APP_ID = \"YOUR_BAIDU_APP_ID\"\n", + " BAIDU_API_KEY = \"YOUR_BAIDU_API_KEY\"\n", + " BAIDU_SECRET_KEY = \"YOUR_BAIDU_SECRET_KEY\"\n", + "\n", + " # --- 文心多模态大模型 API 配置 ---\n", + " # ERNIE_MODEL_NAME可选ernie-4.5-turbo-vl或ernie-4.5-vl-28b-a3b\n", + " ERNIE_API_KEY = \"YOUR_ERNIE_API_KEY\"\n", + " ERNIE_BASE_URL = \"https://aistudio.baidu.com/llm/lmapi/v3\" \n", + " ERNIE_MODEL_NAME = \"ernie-4.5-turbo-vl\" \n", + "\n", + "\n", + " # --- 视频源配置 (请提供1个或多个YouTube评测视频链接) ---\n", + " VIDEO_URLS = [\n", + " \"https://www.youtube.com/watch?v=l-SSk-fuNl8\", \n", + " \"https://www.youtube.com/watch?v=YJ_Qs-zziMc\"\n", + " ]\n", + " \n", + " # --- 工作目录与分析参数 ---\n", + " WORKING_DIRECTORY = \"./auto_market_research\"\n", + " CHUNK_DURATION_SECONDS = 30\n", + " LANGUAGE_MAP = {\"普通话\": 1537, \"英语\": 1737, \"粤语\": 1637, \"四川话\": 1837}\n", + " SELECTED_LANGUAGE = \"普通话\"\n", + " \n", + " # --- 并发与重试 ---\n", + " MAX_CONCURRENCY = 4\n", + " MAX_RETRIES = 3\n", + "\n", + "# --- 日志与环境设置 ---\n", + "os.makedirs(Config.WORKING_DIRECTORY, exist_ok=True)\n", + "logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')\n", + "logger = logging.getLogger(\"VideoAnalysisSystem\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5. 辅助工具与预处理模块\n", + "包含为Agent工作流准备数据的所有底层函数。它是一个确定性的数据处理管道,负责将视频URL转换为结构化的分析日志。" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "def extract_json_from_response(text: str) -> dict or list:\n", + " \"\"\"从LLM的返回文本中稳健地提取JSON对象或列表。\"\"\"\n", + " if not text or not isinstance(text, str): return {}\n", + " match = re.search(r'```(?:json)?\\s*(\\{.*\\}|\\[.*\\])\\s*```', text, re.DOTALL)\n", + " if match: json_str = match.group(1)\n", + " else:\n", + " match = re.search(r'(\\{.*\\}|\\[.*\\])', text, re.DOTALL)\n", + " if not match: return {}\n", + " json_str = match.group(0)\n", + " try:\n", + " return json.loads(json_str)\n", + " except json.JSONDecodeError: return {}\n", + "\n", + "def download_video_with_yt_dlp(video_url: str, output_dir: str, video_id: str) -> str:\n", + " \"\"\"使用 yt-dlp 下载视频,限制分辨率为最高720p以加快处理速度。\"\"\"\n", + " full_video_path = os.path.join(output_dir, f\"{video_id}.mp4\")\n", + " ydl_opts = {\n", + " 'format': 'bestvideo[ext=mp4][height<=720]+bestaudio[ext=m4a]/best[ext=mp4][height<=720]/best',\n", + " 'outtmpl': full_video_path, 'quiet': True, 'noplaylist': True, 'retries': 3,\n", + " }\n", + " try:\n", + " with yt_dlp.YoutubeDL(ydl_opts) as ydl:\n", + " ydl.download([video_url])\n", + " return full_video_path if os.path.exists(full_video_path) else None\n", + " except Exception as e:\n", + " logger.error(f\"yt-dlp 下载出错 for {video_url}: {e}\")\n", + " return None\n", + "\n", + "def run_audio_transcription(video_path: str, config: Config) -> List[Dict]:\n", + " \"\"\"从视频中提取音频并进行转录。\"\"\"\n", + " temp_audio_path = os.path.join(config.WORKING_DIRECTORY, f\"temp_audio_{os.path.basename(video_path)}.wav\")\n", + " try:\n", + " with VideoFileClip(video_path) as video:\n", + " video.audio.write_audiofile(temp_audio_path, codec='pcm_s16le', fps=16000, logger=None)\n", + " full_audio = AudioSegment.from_wav(temp_audio_path).set_channels(1)\n", + " asr_client = AipSpeech(config.BAIDU_APP_ID, config.BAIDU_API_KEY, config.BAIDU_SECRET_KEY)\n", + " dev_pid = config.LANGUAGE_MAP.get(config.SELECTED_LANGUAGE, 1537)\n", + " tasks = [{\"start_time\": i / 1000.0, \"data\": full_audio[i:i + config.CHUNK_DURATION_SECONDS * 1000].raw_data}\n", + " for i in range(0, len(full_audio), config.CHUNK_DURATION_SECONDS * 1000)\n", + " if len(full_audio[i:i + config.CHUNK_DURATION_SECONDS * 1000].raw_data) > 1000]\n", + " transcripts = []\n", + " with ThreadPoolExecutor(max_workers=config.MAX_CONCURRENCY) as executor:\n", + " future_to_task = {executor.submit(asr_client.asr, task[\"data\"], 'pcm', 16000, {'dev_pid': dev_pid}): task for task in tasks}\n", + " for future in tqdm(as_completed(future_to_task), total=len(tasks), desc=f\"音频转录 ({os.path.basename(video_path)})\"):\n", + " result = future.result()\n", + " if result and result.get(\"err_no\") == 0 and result.get(\"result\"):\n", + " task_info = future_to_task[future]\n", + " transcripts.append({\"start_time\": task_info[\"start_time\"], \"end_time\": task_info[\"start_time\"] + config.CHUNK_DURATION_SECONDS, \"text\": \"\".join(result[\"result\"])})\n", + " return sorted(transcripts, key=lambda x: x['start_time'])\n", + " finally:\n", + " if os.path.exists(temp_audio_path): os.remove(temp_audio_path)\n", + "\n", + "def run_vision_analysis(video_path: str, transcripts: List[Dict], config: Config) -> List[Dict]:\n", + " \"\"\"对视频帧进行分块分析。\"\"\"\n", + " vision_client = OpenAI(api_key=config.ERNIE_API_KEY, base_url=config.ERNIE_BASE_URL)\n", + " cap = cv2.VideoCapture(video_path)\n", + " duration = cap.get(cv2.CAP_PROP_FRAME_COUNT) / cap.get(cv2.CAP_PROP_FPS)\n", + " tasks = []\n", + " for start_s in range(0, int(duration), config.CHUNK_DURATION_SECONDS):\n", + " end_s = min(start_s + config.CHUNK_DURATION_SECONDS, duration)\n", + " frames_b64 = []\n", + " for i in range(int(end_s - start_s)):\n", + " cap.set(cv2.CAP_PROP_POS_MSEC, (start_s + i) * 1000)\n", + " ret, frame = cap.read()\n", + " if ret:\n", + " _, buffer = cv2.imencode('.jpg', frame, [int(cv2.IMWRITE_JPEG_QUALITY), 70])\n", + " frames_b64.append(base64.b64encode(buffer).decode('utf-8'))\n", + " if frames_b64:\n", + " context_transcript = \" \".join([t['text'] for t in transcripts if max(start_s, t['start_time']) < min(end_s, t['end_time'])])\n", + " tasks.append({\"start_time\": start_s, \"end_time\": end_s, \"frames\": frames_b64, \"transcript\": context_transcript})\n", + " cap.release()\n", + " vision_analysis = []\n", + " with ThreadPoolExecutor(max_workers=config.MAX_CONCURRENCY) as executor:\n", + " future_to_task = {}\n", + " for task in tasks:\n", + " prompt = f\"你是一个视频分析AI。请结合语音内容“{task['transcript']}”和以下图像帧,用一段话详细描述从{int(task['start_time'])}秒到{int(task['end_time'])}秒的视频场景和核心事件。\"\n", + " content_list = [{\"type\": \"text\", \"text\": prompt}] + [{\"type\": \"image_url\", \"image_url\": {\"url\": f\"data:image/jpeg;base64,{f}\"}} for f in task['frames']]\n", + " messages = [{\"role\": \"user\", \"content\": content_list}]\n", + " future = executor.submit(vision_client.chat.completions.create, model=config.ERNIE_MODEL_NAME, messages=messages, temperature=0.1, max_tokens=2048)\n", + " future_to_task[future] = task\n", + " for future in tqdm(as_completed(future_to_task), total=len(tasks), desc=f\"视觉分析 ({os.path.basename(video_path)})\"):\n", + " response = future.result()\n", + " task_info = future_to_task[future]\n", + " vision_analysis.append({\"start_time\": task_info['start_time'], \"end_time\": task_info['end_time'], \"description\": response.choices[0].message.content.strip()})\n", + " return sorted(vision_analysis, key=lambda x: x['start_time'])\n", + "\n", + "def batch_preprocess_videos(config: Config) -> Dict[str, str]:\n", + " \"\"\"批量预处理视频,并增加缓存机制,跳过已处理的视频。\"\"\"\n", + " video_log_paths = {}\n", + " for url in config.VIDEO_URLS:\n", + " try:\n", + " video_id = url.split(\"=\")[-1].split(\"&\")[0]\n", + " log_path = os.path.join(config.WORKING_DIRECTORY, f\"log_{video_id}.json\")\n", + " if os.path.exists(log_path):\n", + " logger.info(f\"✅ [缓存] 发现已处理的日志,跳过预处理: {video_id}\")\n", + " video_log_paths[video_id] = log_path\n", + " continue\n", + " \n", + " logger.info(f\"--- 开始预处理新视频: {video_id} ---\")\n", + " video_path = download_video_with_yt_dlp(url, config.WORKING_DIRECTORY, video_id)\n", + " if not video_path: continue\n", + "\n", + " transcripts = run_audio_transcription(video_path, config)\n", + " vision_analysis = run_vision_analysis(video_path, transcripts, config)\n", + " analysis_log = [{\"start_time\": v['start_time'], \"end_time\": v['end_time'], \"transcript\": \" \".join([t['text'] for t in transcripts if max(v['start_time'], t['start_time']) < min(v['end_time'], t['end_time'])]), \"vision_description\": v['description']} for v in vision_analysis]\n", + " \n", + " with open(log_path, 'w', encoding='utf-8') as f:\n", + " json.dump(analysis_log, f, indent=2, ensure_ascii=False)\n", + " video_log_paths[video_id] = log_path\n", + " logger.info(f\"✅ 视频 {video_id} 预处理完成 -> {log_path}\")\n", + " except Exception as e:\n", + " logger.error(f\"❌ 视频 {url} 预处理失败: {e}\", exc_info=True)\n", + " return video_log_paths" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6. 🤖 Agent 工作流定义\n", + "这是项目的核心大脑,定义了三个智能体角色(探索者、分析师、策略师)以及驱动它们的agno工作流。" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "def create_llm(config: Config, temperature: float = 0.2):\n", + " \"\"\"创建配置好的LLM实例\"\"\"\n", + " return OpenAIChat(\n", + " id=config.ERNIE_MODEL_NAME, api_key=config.ERNIE_API_KEY, base_url=config.ERNIE_BASE_URL,\n", + " temperature=temperature\n", + " )\n", + "\n", + "class AutoMarketResearchWorkflow(Workflow):\n", + " def __init__(self, config: Config, video_log_paths: Dict[str, str]):\n", + " super().__init__()\n", + " self.config = config\n", + " self.video_logs = {vid: json.load(open(path, 'r', encoding='utf-8')) for vid, path in video_log_paths.items()}\n", + "\n", + " def run(self) -> Iterator[RunResponse]:\n", + " # --- 阶段1: 探索 Agent (自动发现关键维度) ---\n", + " yield RunResponse(content=\"--- **阶段1: 探索Agent** 正在自动发现核心分析维度 ---\\n\")\n", + " explorer_agent = Agent(\n", + " model=create_llm(self.config, temperature=0.0),\n", + " instructions=[\"你是一个市场洞察专家,任务是从多个视频的分析日志中,自动归纳出被反复讨论的【产品核心特性】和被明确提及的【竞争对手】。你的输出必须是一个格式正确的JSON对象,包含`key_features`和`competitors`两个列表。\"]\n", + " )\n", + " all_logs_text = json.dumps(self.video_logs, ensure_ascii=False, indent=2)\n", + " response = explorer_agent.run(f\"请分析以下来自多个视频的日志,归纳出核心特性和竞争对手。\\n```json\\n{all_logs_text}\\n```\")\n", + " discovered_dims = extract_json_from_response(response.content)\n", + " self.session_state['key_features'] = discovered_dims.get('key_features', [])\n", + " self.session_state['competitors'] = discovered_dims.get('competitors', [])\n", + " yield RunResponse(content=f\"✅ **探索完成!**\\n - **发现特性**: {self.session_state['key_features']}\\n - **发现竞品**: {self.session_state['competitors']}\\n\")\n", + "\n", + " # --- 阶段2: 分析师 Agent (基于发现的维度进行标注) ---\n", + " yield RunResponse(content=\"\\n--- **阶段2: 分析师Agent** 正在对视频进行聚焦分析和情感标注 ---\\n\")\n", + " analyst_agent = Agent(\n", + " model=create_llm(self.config),\n", + " instructions=[\"你是一位严谨的分析师,任务是精读一份视频日志,抽取出所有关于指定【分析维度】的观点,并标注情感。你的输出必须是一个格式正确的JSON列表,每个对象包含`dimension`, `sentiment` ('positive', 'negative', 'neutral'), `quote`, 和 `timestamp`。\"]\n", + " )\n", + " tagged_reports = {}\n", + " analysis_dims = self.session_state['key_features'] + self.session_state['competitors']\n", + " for video_id, log_data in self.video_logs.items():\n", + " prompt = f\"分析以下视频日志,抽取出所有关于【分析维度: {analysis_dims}】的观点。\\n日志:\\n```json\\n{json.dumps(log_data, ensure_ascii=False, indent=2)}\\n```\"\n", + " response = analyst_agent.run(prompt)\n", + " tagged_reports[video_id] = extract_json_from_response(response.content)\n", + " self.session_state['tagged_reports'] = tagged_reports\n", + " yield RunResponse(content=f\"✅ **观点标注完成**,已处理所有视频。\\n\")\n", + " \n", + " # --- 阶段3: 策略师 Agent (整合数据并撰写报告) ---\n", + " yield RunResponse(content=\"\\n--- **阶段3: 市场策略师Agent** 正在撰写最终洞察报告 ---\\n\")\n", + " consolidated_db = {}\n", + " for video_id, report in tagged_reports.items():\n", + " if isinstance(report, list):\n", + " for item in report:\n", + " if isinstance(item, dict) and 'dimension' in item:\n", + " dim = item['dimension']\n", + " if dim not in consolidated_db: consolidated_db[dim] = []\n", + " consolidated_db[dim].append({**item, \"source_video\": video_id})\n", + " strategist_agent = Agent(\n", + " model=create_llm(self.config, temperature=0.4),\n", + " instructions=[\"你是一位高级市场策略师,任务是基于一份聚合后的舆情数据库,撰写一份给公司高层看的、专业的Markdown市场洞察报告。报告必须包含:1. 核心特性正负面评价统计分析。2. 主要优缺点总结(引用原话)。3. 竞品对比分析。4. 结论与建议。\"]\n", + " )\n", + " prompt = f\"这是关于新款汽车的聚合舆情数据。请基于此数据撰写一份深入的Markdown洞察报告。\\n聚合舆情数据库:\\n```json\\n{json.dumps(consolidated_db, ensure_ascii=False, indent=2)}\\n```\"\n", + " response = strategist_agent.run(prompt)\n", + " final_report = response.content\n", + " self.session_state['final_report'] = final_report\n", + " \n", + " yield RunResponse(content=\"\\n--- **工作流成功结束** ---\")\n", + " yield RunResponse(content=\"\\n\\n\" + \"=\"*80 + \"\\n 最终舆情洞察报告\\n\" + \"=\"*80 + \"\\n\\n\")\n", + " yield RunResponse(content=final_report)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 7. 🎬 主程序执行\n", + "运行此单元格将启动整个流程,并最终在下方渲染出完整的Markdown报告。" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-08-22 09:58:04,287 - VideoAnalysisSystem - INFO - >>> 开始批量视频预处理...\n", + "2025-08-22 09:58:04,288 - VideoAnalysisSystem - INFO - ✅ [缓存] 发现已处理的日志,跳过预处理: l-SSk-fuNl8\n", + "2025-08-22 09:58:04,288 - VideoAnalysisSystem - INFO - --- 开始预处理新视频: YJ_Qs-zziMc ---\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "e6ee05e497e64bebb074ee7d4eca23ce", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "音频转录 (YJ_Qs-zziMc.mp4): 0%| | 0/10 [00:00, ?it/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "b7f9de15a63546ac8b4c763175f4a721", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "视觉分析 (YJ_Qs-zziMc.mp4): 0%| | 0/10 [00:00, ?it/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-08-22 09:58:53,749 - httpx - INFO - HTTP Request: POST https://aistudio.baidu.com/llm/lmapi/v3/chat/completions \"HTTP/1.1 200 OK\"\n", + "2025-08-22 09:58:54,068 - httpx - INFO - HTTP Request: POST https://aistudio.baidu.com/llm/lmapi/v3/chat/completions \"HTTP/1.1 200 OK\"\n", + "2025-08-22 09:58:56,166 - httpx - INFO - HTTP Request: POST https://aistudio.baidu.com/llm/lmapi/v3/chat/completions \"HTTP/1.1 200 OK\"\n", + "2025-08-22 09:59:06,306 - httpx - INFO - HTTP Request: POST https://aistudio.baidu.com/llm/lmapi/v3/chat/completions \"HTTP/1.1 200 OK\"\n", + "2025-08-22 09:59:08,893 - httpx - INFO - HTTP Request: POST https://aistudio.baidu.com/llm/lmapi/v3/chat/completions \"HTTP/1.1 429 Too Many Requests\"\n", + "2025-08-22 09:59:08,895 - openai._base_client - INFO - Retrying request to /chat/completions in 0.467088 seconds\n", + "2025-08-22 09:59:11,641 - httpx - INFO - HTTP Request: POST https://aistudio.baidu.com/llm/lmapi/v3/chat/completions \"HTTP/1.1 200 OK\"\n", + "2025-08-22 09:59:13,077 - httpx - INFO - HTTP Request: POST https://aistudio.baidu.com/llm/lmapi/v3/chat/completions \"HTTP/1.1 200 OK\"\n", + "2025-08-22 09:59:14,063 - httpx - INFO - HTTP Request: POST https://aistudio.baidu.com/llm/lmapi/v3/chat/completions \"HTTP/1.1 200 OK\"\n", + "2025-08-22 09:59:17,208 - httpx - INFO - HTTP Request: POST https://aistudio.baidu.com/llm/lmapi/v3/chat/completions \"HTTP/1.1 200 OK\"\n", + "2025-08-22 09:59:26,843 - httpx - INFO - HTTP Request: POST https://aistudio.baidu.com/llm/lmapi/v3/chat/completions \"HTTP/1.1 200 OK\"\n", + "2025-08-22 09:59:28,577 - httpx - INFO - HTTP Request: POST https://aistudio.baidu.com/llm/lmapi/v3/chat/completions \"HTTP/1.1 200 OK\"\n", + "2025-08-22 09:59:28,595 - VideoAnalysisSystem - INFO - ✅ 视频 YJ_Qs-zziMc 预处理完成 -> ./auto_market_research/log_YJ_Qs-zziMc.json\n", + "2025-08-22 09:59:28,596 - VideoAnalysisSystem - INFO - \n", + ">>> 预处理完成,开始运行Agent工作流...\n" + ] + }, + { + "data": { + "text/html": [ + "
WARNING Workflow.run() should only yield RunResponseEvent objects, got: <class 'agno.run.response.RunResponse'> \n", + "\n" + ], + "text/plain": [ + "\u001b[33mWARNING \u001b[0m \u001b[1;35mWorkflow.run\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m should only yield RunResponseEvent objects, got: \u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'agno.run.response.RunResponse'\u001b[0m\u001b[1m>\u001b[0m \n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--- **阶段1: 探索Agent** 正在自动发现核心分析维度 ---\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-08-22 09:59:38,247 - httpx - INFO - HTTP Request: POST https://aistudio.baidu.com/llm/lmapi/v3/chat/completions \"HTTP/1.1 200 OK\"\n", + "2025-08-22 09:59:42,516 - httpx - INFO - HTTP Request: POST https://api.agno.com/v1/telemetry/agent/run/create \"HTTP/1.1 200 OK\"\n" + ] + }, + { + "data": { + "text/html": [ + "
WARNING Workflow.run() should only yield RunResponseEvent objects, got: <class 'agno.run.response.RunResponse'> \n", + "\n" + ], + "text/plain": [ + "\u001b[33mWARNING \u001b[0m \u001b[1;35mWorkflow.run\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m should only yield RunResponseEvent objects, got: \u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'agno.run.response.RunResponse'\u001b[0m\u001b[1m>\u001b[0m \n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "✅ **探索完成!**\n", + " - **发现特性**: [{'产品特性': '3.0T直列六缸发动机', '描述': '最大马力381匹,最大扭矩520牛米,百公里加速5.8秒'}, {'产品特性': '48伏轻混系统', '描述': '起步时由电机辅助,起步丝滑,速度起来后发动机介入'}, {'产品特性': '采埃孚变速箱', '描述': '换挡逻辑清晰,能够迅速降低到合适的档位,满足动力需求,同时尽量减少顿挫感'}, {'产品特性': '前置适时四驱和多片离合器', '描述': '在非铺装路面上自动切换到四驱模式,提供更好的驾驶体验和稳定性'}, {'产品特性': '华为ADS 2.0智驾系统', '描述': '智能驾驶系统,使得车辆基本上在任何地方都能开启智能驾驶模式'}, {'产品特性': 'CDC可变阻尼减震器和单腔空气悬挂', '描述': '提升车辆的行驶质感,通过车身传感器采集路况信息,底盘主动调节'}]\n", + " - **发现竞品**: ['奔驰', '宝马', '奥迪', '问界M9(在某些对比中被视为竞争对手的车型)']\n" + ] + }, + { + "data": { + "text/html": [ + "
WARNING Workflow.run() should only yield RunResponseEvent objects, got: <class 'agno.run.response.RunResponse'> \n", + "\n" + ], + "text/plain": [ + "\u001b[33mWARNING \u001b[0m \u001b[1;35mWorkflow.run\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m should only yield RunResponseEvent objects, got: \u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'agno.run.response.RunResponse'\u001b[0m\u001b[1m>\u001b[0m \n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- **阶段2: 分析师Agent** 正在对视频进行聚焦分析和情感标注 ---\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-08-22 09:59:59,087 - httpx - INFO - HTTP Request: POST https://aistudio.baidu.com/llm/lmapi/v3/chat/completions \"HTTP/1.1 200 OK\"\n", + "2025-08-22 10:00:03,455 - httpx - INFO - HTTP Request: POST https://api.agno.com/v1/telemetry/agent/run/create \"HTTP/1.1 200 OK\"\n", + "2025-08-22 10:00:33,729 - httpx - INFO - HTTP Request: POST https://aistudio.baidu.com/llm/lmapi/v3/chat/completions \"HTTP/1.1 200 OK\"\n", + "2025-08-22 10:00:38,227 - httpx - INFO - HTTP Request: POST https://api.agno.com/v1/telemetry/agent/run/create \"HTTP/1.1 200 OK\"\n" + ] + }, + { + "data": { + "text/html": [ + "
WARNING Workflow.run() should only yield RunResponseEvent objects, got: <class 'agno.run.response.RunResponse'> \n", + "\n" + ], + "text/plain": [ + "\u001b[33mWARNING \u001b[0m \u001b[1;35mWorkflow.run\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m should only yield RunResponseEvent objects, got: \u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'agno.run.response.RunResponse'\u001b[0m\u001b[1m>\u001b[0m \n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "✅ **观点标注完成**,已处理所有视频。\n" + ] + }, + { + "data": { + "text/html": [ + "
WARNING Workflow.run() should only yield RunResponseEvent objects, got: <class 'agno.run.response.RunResponse'> \n", + "\n" + ], + "text/plain": [ + "\u001b[33mWARNING \u001b[0m \u001b[1;35mWorkflow.run\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m should only yield RunResponseEvent objects, got: \u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'agno.run.response.RunResponse'\u001b[0m\u001b[1m>\u001b[0m \n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- **阶段3: 市场策略师Agent** 正在撰写最终洞察报告 ---\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-08-22 10:01:02,560 - httpx - INFO - HTTP Request: POST https://aistudio.baidu.com/llm/lmapi/v3/chat/completions \"HTTP/1.1 200 OK\"\n", + "2025-08-22 10:01:12,230 - httpx - INFO - HTTP Request: POST https://api.agno.com/v1/telemetry/agent/run/create \"HTTP/1.1 200 OK\"\n" + ] + }, + { + "data": { + "text/html": [ + "
WARNING Workflow.run() should only yield RunResponseEvent objects, got: <class 'agno.run.response.RunResponse'> \n", + "\n" + ], + "text/plain": [ + "\u001b[33mWARNING \u001b[0m \u001b[1;35mWorkflow.run\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m should only yield RunResponseEvent objects, got: \u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'agno.run.response.RunResponse'\u001b[0m\u001b[1m>\u001b[0m \n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- **工作流成功结束** ---" + ] + }, + { + "data": { + "text/html": [ + "
WARNING Workflow.run() should only yield RunResponseEvent objects, got: <class 'agno.run.response.RunResponse'> \n", + "\n" + ], + "text/plain": [ + "\u001b[33mWARNING \u001b[0m \u001b[1;35mWorkflow.run\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m should only yield RunResponseEvent objects, got: \u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'agno.run.response.RunResponse'\u001b[0m\u001b[1m>\u001b[0m \n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "================================================================================\n", + " 最终舆情洞察报告\n", + "================================================================================\n", + "\n" + ] + }, + { + "data": { + "text/html": [ + "
WARNING Workflow.run() should only yield RunResponseEvent objects, got: <class 'agno.run.response.RunResponse'> \n", + "\n" + ], + "text/plain": [ + "\u001b[33mWARNING \u001b[0m \u001b[1;35mWorkflow.run\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m should only yield RunResponseEvent objects, got: \u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'agno.run.response.RunResponse'\u001b[0m\u001b[1m>\u001b[0m \n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-08-22 10:01:12,237 - VideoAnalysisSystem - INFO - \n", + "\n", + ">>> 工作流执行完毕,正在渲染最终报告...\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "### 新款汽车市场洞察报告\n", + "\n", + "#### 1. 核心特性正负面评价统计分析\n", + "\n", + "根据聚合舆情数据库,我们对新款汽车的核心特性进行了正负面评价的统计分析。以下是主要特性的情感分布:\n", + "\n", + "- **3.0T直列六缸发动机**: 正面评价: 100%\n", + "- **48伏轻混系统**: 正面评价: 100%\n", + "- **采埃孚变速箱**: 正面评价: 100%\n", + "- **前置适时四驱和多片离合器**: 正面评价: 100%\n", + "- **华为ADS 2.0智驾系统**: 正面评价: 100%\n", + "- **CDC可变阻尼减震器和单腔空气悬挂**: 正面评价: 100%\n", + "- **竞品对比(奔驰、宝马、奥迪)**: 负面评价较多\n", + "\n", + "#### 2. 主要优缺点总结\n", + "\n", + "**优点**\n", + "\n", + "- **3.0T直列六缸发动机**: \n", + " - 用户评价:“3.0t,直接最大马力381匹,最大扭矩520牛米,百公里加速仅需4.8秒。”\n", + "\n", + "- **48伏轻混系统**: \n", + " - 用户评价:“车加入了48伏轻混系统,当速度起来之后,发动机介入,动力采用了直列六缸布局,可以做到动力输出更强劲,更平稳。”\n", + "\n", + "- **采埃孚变速箱**: \n", + " - 用户评价:“变速箱的换挡逻辑清晰,仿佛它能读懂你的心思,迅速降低到合适的档位,既满足了动力需求,同时也尽量减少了更多的顿挫感。”\n", + "\n", + "- **前置适时四驱和多片离合器**: \n", + " - 用户评价:“在非铺装路面上,它才会自动切换到四驱,可以提供更好的驾驶体验和稳定性。”\n", + "\n", + "- **华为ADS 2.0智驾系统**: \n", + " - 用户评价:“它搭载了华为研发的ADS 2.0智驾系统,基本上哪里都能开。”\n", + "\n", + "- **CDC可变阻尼减震器和单腔空气悬挂**: \n", + " - 用户评价:“底盘采用了电动四驱,领先全系标配的CDC可变阻尼减震器和单腔空气悬挂,不论是配置还是用料都属于上乘。”\n", + "\n", + "**缺点**\n", + "\n", + "- **竞品对比中的负面评价**:\n", + " - 用户评价(奔驰、宝马、奥迪): “呆个两三年哪有BBA(奔驰、宝马、奥迪)有面子,甚至不如奥迪A6L有面子,一个小康出品的车吧,就是个杂牌货被你吹得像个豪车。”\n", + "\n", + "#### 3. 竞品对比分析\n", + "\n", + "- **奔驰**:\n", + " - 负面评价集中在品牌价值方面,认为新款汽车不如奔驰有面子。\n", + " - 用户评价:“你你却还停留在70、80后的BBA(奔驰、宝马、奥迪)时代,问界M9提鞋都不配。”\n", + "\n", + "- **宝马**:\n", + " - 正面评价:宝马的驾驶体验仍然受到认可。\n", + " - 负面评价:认为新款汽车在某些方面已经超越宝马。\n", + " - 用户评价:“论舒适豪华都说奔驰舒适豪华,但问界M9比奔驰还要舒适,内饰要比奔驰E还豪华,高档,加速也比宝马快。”\n", + "\n", + "- **奥迪**:\n", + " - 负面评价:与奔驰、宝马类似,认为新款汽车在某些方面已经超越奥迪。\n", + " - 用户评价:“满大街的BBA,眼下国内很多款车型已经超越了我们一代人过时的梦想了。”\n", + "\n", + "- **问界M9**:\n", + " - 正面评价:在多个方面(舒适性、内饰豪华度、加速性能、智能化和辅助驾驶)都得到了高度评价。\n", + " - 用户评价:“买问界M9的车主,那都是真大哥,家里都是已经有两部三部车子的了,都是家里已经有奔驰、宝马、奥迪的了,再买问界M9是为了提高享受生活,提升出行的品质。”\n", + "\n", + "#### 4. 结论与建议\n", + "\n", + "**结论**\n", + "\n", + "- 新款汽车在动力性能、驾驶体验、智能化和辅助驾驶方面得到了用户的高度评价。\n", + "- 竞品对比中,奔驰、宝马和奥迪在品牌价值方面仍然有一定优势,但新款汽车在多个方面已经表现出超越竞品的潜力。\n", + "- 问界M9作为新款汽车的竞品,在舒适性、内饰豪华度、加速性能、智能化和辅助驾驶方面都得到了用户的认可。\n", + "\n", + "**建议**\n", + "\n", + "- **品牌建设**:加强品牌宣传,提升品牌价值和知名度,以更好地与奔驰、宝马和奥迪等竞品竞争。\n", + "- **产品优化**:继续优化产品性能,特别是在智能化和辅助驾驶方面,以保持领先地位。\n", + "- **市场定位**:明确市场定位,针对已有豪车(如奔驰、宝马、奥迪)的车主进行精准营销,强调新款汽车在提升生活品质和出行体验方面的优势。\n", + "\n", + "通过以上分析和建议,我们相信新款汽车在市场上将有更大的发展潜力和竞争力。" + ] + }, + { + "data": { + "text/markdown": [ + "### 新款汽车市场洞察报告\n", + "\n", + "#### 1. 核心特性正负面评价统计分析\n", + "\n", + "根据聚合舆情数据库,我们对新款汽车的核心特性进行了正负面评价的统计分析。以下是主要特性的情感分布:\n", + "\n", + "- **3.0T直列六缸发动机**: 正面评价: 100%\n", + "- **48伏轻混系统**: 正面评价: 100%\n", + "- **采埃孚变速箱**: 正面评价: 100%\n", + "- **前置适时四驱和多片离合器**: 正面评价: 100%\n", + "- **华为ADS 2.0智驾系统**: 正面评价: 100%\n", + "- **CDC可变阻尼减震器和单腔空气悬挂**: 正面评价: 100%\n", + "- **竞品对比(奔驰、宝马、奥迪)**: 负面评价较多\n", + "\n", + "#### 2. 主要优缺点总结\n", + "\n", + "**优点**\n", + "\n", + "- **3.0T直列六缸发动机**: \n", + " - 用户评价:“3.0t,直接最大马力381匹,最大扭矩520牛米,百公里加速仅需4.8秒。”\n", + "\n", + "- **48伏轻混系统**: \n", + " - 用户评价:“车加入了48伏轻混系统,当速度起来之后,发动机介入,动力采用了直列六缸布局,可以做到动力输出更强劲,更平稳。”\n", + "\n", + "- **采埃孚变速箱**: \n", + " - 用户评价:“变速箱的换挡逻辑清晰,仿佛它能读懂你的心思,迅速降低到合适的档位,既满足了动力需求,同时也尽量减少了更多的顿挫感。”\n", + "\n", + "- **前置适时四驱和多片离合器**: \n", + " - 用户评价:“在非铺装路面上,它才会自动切换到四驱,可以提供更好的驾驶体验和稳定性。”\n", + "\n", + "- **华为ADS 2.0智驾系统**: \n", + " - 用户评价:“它搭载了华为研发的ADS 2.0智驾系统,基本上哪里都能开。”\n", + "\n", + "- **CDC可变阻尼减震器和单腔空气悬挂**: \n", + " - 用户评价:“底盘采用了电动四驱,领先全系标配的CDC可变阻尼减震器和单腔空气悬挂,不论是配置还是用料都属于上乘。”\n", + "\n", + "**缺点**\n", + "\n", + "- **竞品对比中的负面评价**:\n", + " - 用户评价(奔驰、宝马、奥迪): “呆个两三年哪有BBA(奔驰、宝马、奥迪)有面子,甚至不如奥迪A6L有面子,一个小康出品的车吧,就是个杂牌货被你吹得像个豪车。”\n", + "\n", + "#### 3. 竞品对比分析\n", + "\n", + "- **奔驰**:\n", + " - 负面评价集中在品牌价值方面,认为新款汽车不如奔驰有面子。\n", + " - 用户评价:“你你却还停留在70、80后的BBA(奔驰、宝马、奥迪)时代,问界M9提鞋都不配。”\n", + "\n", + "- **宝马**:\n", + " - 正面评价:宝马的驾驶体验仍然受到认可。\n", + " - 负面评价:认为新款汽车在某些方面已经超越宝马。\n", + " - 用户评价:“论舒适豪华都说奔驰舒适豪华,但问界M9比奔驰还要舒适,内饰要比奔驰E还豪华,高档,加速也比宝马快。”\n", + "\n", + "- **奥迪**:\n", + " - 负面评价:与奔驰、宝马类似,认为新款汽车在某些方面已经超越奥迪。\n", + " - 用户评价:“满大街的BBA,眼下国内很多款车型已经超越了我们一代人过时的梦想了。”\n", + "\n", + "- **问界M9**:\n", + " - 正面评价:在多个方面(舒适性、内饰豪华度、加速性能、智能化和辅助驾驶)都得到了高度评价。\n", + " - 用户评价:“买问界M9的车主,那都是真大哥,家里都是已经有两部三部车子的了,都是家里已经有奔驰、宝马、奥迪的了,再买问界M9是为了提高享受生活,提升出行的品质。”\n", + "\n", + "#### 4. 结论与建议\n", + "\n", + "**结论**\n", + "\n", + "- 新款汽车在动力性能、驾驶体验、智能化和辅助驾驶方面得到了用户的高度评价。\n", + "- 竞品对比中,奔驰、宝马和奥迪在品牌价值方面仍然有一定优势,但新款汽车在多个方面已经表现出超越竞品的潜力。\n", + "- 问界M9作为新款汽车的竞品,在舒适性、内饰豪华度、加速性能、智能化和辅助驾驶方面都得到了用户的认可。\n", + "\n", + "**建议**\n", + "\n", + "- **品牌建设**:加强品牌宣传,提升品牌价值和知名度,以更好地与奔驰、宝马和奥迪等竞品竞争。\n", + "- **产品优化**:继续优化产品性能,特别是在智能化和辅助驾驶方面,以保持领先地位。\n", + "- **市场定位**:明确市场定位,针对已有豪车(如奔驰、宝马、奥迪)的车主进行精准营销,强调新款汽车在提升生活品质和出行体验方面的优势。\n", + "\n", + "通过以上分析和建议,我们相信新款汽车在市场上将有更大的发展潜力和竞争力。" + ], + "text/plain": [ + "
WARNING Workflow.run() should only yield RunResponseEvent objects, got: <class 'agno.run.response.RunResponse'> \n", + "\n" + ], + "text/plain": [ + "\u001b[33mWARNING \u001b[0m \u001b[1;35mWorkflow.run\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m should only yield RunResponseEvent objects, got: \u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'agno.run.response.RunResponse'\u001b[0m\u001b[1m>\u001b[0m \n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--- **Phase 1: Explorer Agent** is automatically discovering core analysis dimensions ---\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-08-22 10:30:42,519 - httpx - INFO - HTTP Request: POST https://aistudio.baidu.com/llm/lmapi/v3/chat/completions \"HTTP/1.1 429 Too Many Requests\"\n", + "2025-08-22 10:30:42,520 - openai._base_client - INFO - Retrying request to /chat/completions in 0.470447 seconds\n", + "2025-08-22 10:30:43,158 - httpx - INFO - HTTP Request: POST https://aistudio.baidu.com/llm/lmapi/v3/chat/completions \"HTTP/1.1 429 Too Many Requests\"\n", + "2025-08-22 10:30:43,161 - openai._base_client - INFO - Retrying request to /chat/completions in 0.969607 seconds\n", + "2025-08-22 10:30:55,739 - httpx - INFO - HTTP Request: POST https://aistudio.baidu.com/llm/lmapi/v3/chat/completions \"HTTP/1.1 200 OK\"\n", + "2025-08-22 10:31:00,362 - httpx - INFO - HTTP Request: POST https://api.agno.com/v1/telemetry/agent/run/create \"HTTP/1.1 200 OK\"\n" + ] + }, + { + "data": { + "text/html": [ + "
WARNING Workflow.run() should only yield RunResponseEvent objects, got: <class 'agno.run.response.RunResponse'> \n", + "\n" + ], + "text/plain": [ + "\u001b[33mWARNING \u001b[0m \u001b[1;35mWorkflow.run\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m should only yield RunResponseEvent objects, got: \u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'agno.run.response.RunResponse'\u001b[0m\u001b[1m>\u001b[0m \n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "✅ **Exploration Complete!**\n", + " - **Features Discovered**: [{'feature': '3.0T直列六缸发动机,最大马力381匹,最大扭矩520牛米,百公里加速5.8秒', 'frequency': 1}, {'feature': '48伏轻混系统,起步丝滑,发动机介入平稳', 'frequency': 1}, {'feature': '采埃孚变速箱,换挡逻辑清晰,减少顿挫感', 'frequency': 1}, {'feature': '前置适时四驱和多片离合器,提升驾驶稳定性和舒适性', 'frequency': 1}, {'feature': '多片离合器式中央差速器,自动切换两驱和四驱模式', 'frequency': 1}, {'feature': '问界M9增程式动力系统,前后双电机最大马力496匹,最大扭矩675牛米,百公里加速4.9秒', 'frequency': 1}, {'feature': '问界M9电动四驱,全系标配CDC可变阻尼减震器和单腔空气悬挂', 'frequency': 1}, {'feature': '问界M9途灵底盘,通过车身传感器采集路况信息,主动调节底盘,提升行驶质感', 'frequency': 1}, {'feature': '问界M9华为ADS2.0智驾系统,无图智驾功能领先', 'frequency': 1}]\n", + " - **Competitors Discovered**: ['宝马X7', '宝马X5', '奔驰E级', '奥迪A6L', '问界M9']\n" + ] + }, + { + "data": { + "text/html": [ + "
WARNING Workflow.run() should only yield RunResponseEvent objects, got: <class 'agno.run.response.RunResponse'> \n", + "\n" + ], + "text/plain": [ + "\u001b[33mWARNING \u001b[0m \u001b[1;35mWorkflow.run\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m should only yield RunResponseEvent objects, got: \u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'agno.run.response.RunResponse'\u001b[0m\u001b[1m>\u001b[0m \n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- **Phase 2: Analyst Agent** is performing focused analysis and sentiment tagging on the videos ---\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-08-22 10:31:29,902 - httpx - INFO - HTTP Request: POST https://aistudio.baidu.com/llm/lmapi/v3/chat/completions \"HTTP/1.1 200 OK\"\n", + "2025-08-22 10:31:34,251 - httpx - INFO - HTTP Request: POST https://api.agno.com/v1/telemetry/agent/run/create \"HTTP/1.1 200 OK\"\n", + "2025-08-22 10:31:51,706 - httpx - INFO - HTTP Request: POST https://aistudio.baidu.com/llm/lmapi/v3/chat/completions \"HTTP/1.1 200 OK\"\n", + "2025-08-22 10:31:55,743 - httpx - INFO - HTTP Request: POST https://api.agno.com/v1/telemetry/agent/run/create \"HTTP/1.1 200 OK\"\n" + ] + }, + { + "data": { + "text/html": [ + "
WARNING Workflow.run() should only yield RunResponseEvent objects, got: <class 'agno.run.response.RunResponse'> \n", + "\n" + ], + "text/plain": [ + "\u001b[33mWARNING \u001b[0m \u001b[1;35mWorkflow.run\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m should only yield RunResponseEvent objects, got: \u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'agno.run.response.RunResponse'\u001b[0m\u001b[1m>\u001b[0m \n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "✅ **Viewpoint Tagging Complete** for all videos.\n" + ] + }, + { + "data": { + "text/html": [ + "
WARNING Workflow.run() should only yield RunResponseEvent objects, got: <class 'agno.run.response.RunResponse'> \n", + "\n" + ], + "text/plain": [ + "\u001b[33mWARNING \u001b[0m \u001b[1;35mWorkflow.run\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m should only yield RunResponseEvent objects, got: \u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'agno.run.response.RunResponse'\u001b[0m\u001b[1m>\u001b[0m \n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- **Phase 3: Market Strategist Agent** is drafting the final insight report ---\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-08-22 10:32:31,566 - httpx - INFO - HTTP Request: POST https://aistudio.baidu.com/llm/lmapi/v3/chat/completions \"HTTP/1.1 200 OK\"\n", + "2025-08-22 10:32:35,662 - httpx - INFO - HTTP Request: POST https://api.agno.com/v1/telemetry/agent/run/create \"HTTP/1.1 200 OK\"\n" + ] + }, + { + "data": { + "text/html": [ + "
WARNING Workflow.run() should only yield RunResponseEvent objects, got: <class 'agno.run.response.RunResponse'> \n", + "\n" + ], + "text/plain": [ + "\u001b[33mWARNING \u001b[0m \u001b[1;35mWorkflow.run\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m should only yield RunResponseEvent objects, got: \u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'agno.run.response.RunResponse'\u001b[0m\u001b[1m>\u001b[0m \n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- **Workflow Successfully Completed** ---" + ] + }, + { + "data": { + "text/html": [ + "
WARNING Workflow.run() should only yield RunResponseEvent objects, got: <class 'agno.run.response.RunResponse'> \n", + "\n" + ], + "text/plain": [ + "\u001b[33mWARNING \u001b[0m \u001b[1;35mWorkflow.run\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m should only yield RunResponseEvent objects, got: \u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'agno.run.response.RunResponse'\u001b[0m\u001b[1m>\u001b[0m \n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "================================================================================\n", + " Final Public Opinion Insight Report\n", + "================================================================================\n", + "\n" + ] + }, + { + "data": { + "text/html": [ + "
WARNING Workflow.run() should only yield RunResponseEvent objects, got: <class 'agno.run.response.RunResponse'> \n", + "\n" + ], + "text/plain": [ + "\u001b[33mWARNING \u001b[0m \u001b[1;35mWorkflow.run\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m should only yield RunResponseEvent objects, got: \u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'agno.run.response.RunResponse'\u001b[0m\u001b[1m>\u001b[0m \n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-08-22 10:32:35,678 - VideoAnalysisSystem - INFO - \n", + "\n", + ">>> Workflow execution finished, rendering the final report...\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "### Market Insight Report: Public Opinion Analysis on New Car Models\n", + "\n", + "#### 1. Statistical Analysis of Positive/Negative Sentiment for Core Features\n", + "\n", + "Based on the aggregated public opinion data, the following statistical analysis highlights the sentiment distribution across core features of the new car models:\n", + "\n", + "- **3.0T Inline-Six Engine with 381 Horsepower and 520 Nm Torque**: \n", + " - Positive Sentiment: 100% (1/1)\n", + "- **48V Mild Hybrid System for Smooth Starts and Steady Engine Engagement**:\n", + " - Positive Sentiment: 100% (1/1)\n", + "- **ZF Transmission with Clear Shift Logic and Reduced Jolt**:\n", + " - Positive Sentiment: 100% (1/1)\n", + "- **Front Adaptive Four-Wheel Drive and Multi-Plate Clutch for Enhanced Stability and Comfort**:\n", + " - Positive Sentiment: 100% (1/1)\n", + "- **Multi-Plate Clutch Central Differential for Automatic Two/Four-Wheel Drive Switching**:\n", + " - Positive Sentiment: 100% (1/1)\n", + "- **AITO M9 Extended-Range Power System with Dual Motors, 496 Horsepower, 675 Nm Torque, and 4.9s Acceleration**:\n", + " - Positive Sentiment: 100% (2/2)\n", + "- **AITO M9 Electric Four-Wheel Drive with CDC Variable Damping Shock Absorbers and Single-Cavity Air Suspension**:\n", + " - Positive Sentiment: 100% (2/2)\n", + "- **AITO M9 Tuling Chassis with Road Sensors for Active Chassis Adjustment and Enhanced Ride Quality**:\n", + " - Positive Sentiment: 100% (2/2)\n", + "- **AITO M9 Huawei ADS 2.0 Intelligent Driving System with Leading Mapless Driving Functionality**:\n", + " - Positive Sentiment: 100% (2/2)\n", + "- **BMW X7**:\n", + " - Positive Sentiment: 50% (1/2)\n", + " - Neutral Sentiment: 50% (1/2)\n", + "- **BMW X5**:\n", + " - Positive Sentiment: 50% (1/2)\n", + " - Neutral Sentiment: 50% (1/2)\n", + "- **Mercedes-Benz E-Class**:\n", + " - Negative Sentiment: 100% (1/1, with one neutral)\n", + "- **Audi A6L**:\n", + " - Negative Sentiment: 100% (1/1, with one neutral)\n", + "- **AITO M9**:\n", + " - Positive Sentiment: 100% (2/2)\n", + "\n", + "#### 2. Summary of Major Pros and Cons\n", + "\n", + "**Pros:**\n", + "\n", + "- **Engine Performance**: The 3.0T inline-six engine delivers a robust 381 horsepower and 520 Nm torque, with a swift 5.8-second acceleration to 100 km/h. The engine's layout ensures powerful and stable output.\n", + " - *Quote*: \"3.0t, directly reaching maximum horsepower of 381, maximum torque of 520 Nm, don't underestimate this car as the largest model among BMWs, it drives very flexibly.\"\n", + "\n", + "- **Hybrid System**: The 48V mild hybrid system ensures smooth starts and steady engine engagement when speed increases.\n", + " - *Quote*: \"The car incorporates a 48V mild hybrid system for smooth starts, and when speed increases, the engine engages, utilizing an inline-cylinder layout for stronger and more stable power output.\"\n", + "\n", + "- **Transmission**: The ZF transmission's clear shift logic minimizes jolt, providing a seamless driving experience.\n", + " - *Quote*: \"Especially during high-speed driving requiring rapid acceleration, the ZF transmission's shift logic is clear, as if it can read your mind, quickly downshifting to the appropriate gear to meet power demands while minimizing jolt.\"\n", + "\n", + "- **Four-Wheel Drive System**: The front adaptive four-wheel drive and multi-plate clutch significantly enhance driving stability and comfort.\n", + " - *Quote*: \"The use of front adaptive four-wheel drive and multi-plate clutch further enhances driving stability and comfort.\"\n", + "\n", + "- **AITO M9 Performance and Technology**: The AITO M9's extended-range power system with dual motors, electric four-wheel drive, Tuling chassis, and Huawei ADS 2.0 intelligent driving system sets a new benchmark in performance and智能化(intelligence, but \"intelligence\" is better understood in context; here it refers to \"智能驾驶系统\" or \"intelligent driving system\") driving technology.\n", + " - *Quote*: \"The AITO M9's killer feature is its Huawei-developed ADS 2.0 intelligent driving system, which can drive virtually anywhere, making high-speed and long-distance driving truly effortless and safe.\"\n", + "\n", + "**Cons:**\n", + "\n", + "- **Brand Perception**: Compared to AITO M9, traditional luxury brands like BMW, Mercedes-Benz, and Audi are perceived as less innovative and prestigious in certain aspects.\n", + " - *Quote*: \"In two or three years, BBA (Benz, BMW, Audi) will lose their prestige. They won't be as prestigious as a Mercedes-Benz E-Class or BMW 5 Series, or even an Audi A6L.\"\n", + "\n", + "#### 3. Competitive Analysis\n", + "\n", + "- **BMW X7 and X5**: Both models are praised for their flexible handling and powerful engine performance. However, they face criticism for potentially losing their prestige and innovative edge compared to newer models like the AITO M9.\n", + "- **Mercedes-Benz E-Class and Audi A6L**: These models are viewed less favorably in terms of prestige and innovation, with direct comparisons highlighting the AITO M9's superiority in comfort, luxury, and technological advancements.\n", + "- **AITO M9**: This model stands out with its exceptional power, advanced chassis technology, and intelligent driving system. It is positioned as a strong competitor to established luxury brands, offering superior performance, comfort, and cutting-edge technology.\n", + "\n", + "#### 4. Conclusions and Recommendations\n", + "\n", + "**Conclusions:**\n", + "\n", + "- The new car models, particularly the AITO M9, demonstrate significant advancements in power, technology, and driving experience.\n", + "- Traditional luxury brands like BMW, Mercedes-Benz, and Audi face challenges in maintaining their prestige and innovative image in the face of emerging competitors.\n", + "- The AITO M9's extended-range power system, electric four-wheel drive, Tuling chassis, and Huawei ADS 2.0 intelligent driving system set new standards in the automotive industry.\n", + "\n", + "**Recommendations:**\n", + "\n", + "1. **Enhance Brand Image**: Traditional luxury brands should focus on enhancing their brand image through innovation and technological advancements to compete with emerging models like the AITO M9.\n", + "2. **Invest in Technology**: Automakers should invest in research and development to improve power systems, transmission, and intelligent driving technologies to meet evolving consumer demands.\n", + "3. **Market Positioning**: Clearly position new models to highlight their unique selling points, such as performance, comfort, and technological advancements, to attract target consumers.\n", + "4. **Consumer Education**: Educate consumers about the benefits and advancements of new technologies to increase market acceptance and demand.\n", + "\n", + "By implementing these recommendations, automakers can better position themselves in the competitive market and meet the evolving demands of consumers." + ] + }, + { + "data": { + "text/markdown": [ + "### Market Insight Report: Public Opinion Analysis on New Car Models\n", + "\n", + "#### 1. Statistical Analysis of Positive/Negative Sentiment for Core Features\n", + "\n", + "Based on the aggregated public opinion data, the following statistical analysis highlights the sentiment distribution across core features of the new car models:\n", + "\n", + "- **3.0T Inline-Six Engine with 381 Horsepower and 520 Nm Torque**: \n", + " - Positive Sentiment: 100% (1/1)\n", + "- **48V Mild Hybrid System for Smooth Starts and Steady Engine Engagement**:\n", + " - Positive Sentiment: 100% (1/1)\n", + "- **ZF Transmission with Clear Shift Logic and Reduced Jolt**:\n", + " - Positive Sentiment: 100% (1/1)\n", + "- **Front Adaptive Four-Wheel Drive and Multi-Plate Clutch for Enhanced Stability and Comfort**:\n", + " - Positive Sentiment: 100% (1/1)\n", + "- **Multi-Plate Clutch Central Differential for Automatic Two/Four-Wheel Drive Switching**:\n", + " - Positive Sentiment: 100% (1/1)\n", + "- **AITO M9 Extended-Range Power System with Dual Motors, 496 Horsepower, 675 Nm Torque, and 4.9s Acceleration**:\n", + " - Positive Sentiment: 100% (2/2)\n", + "- **AITO M9 Electric Four-Wheel Drive with CDC Variable Damping Shock Absorbers and Single-Cavity Air Suspension**:\n", + " - Positive Sentiment: 100% (2/2)\n", + "- **AITO M9 Tuling Chassis with Road Sensors for Active Chassis Adjustment and Enhanced Ride Quality**:\n", + " - Positive Sentiment: 100% (2/2)\n", + "- **AITO M9 Huawei ADS 2.0 Intelligent Driving System with Leading Mapless Driving Functionality**:\n", + " - Positive Sentiment: 100% (2/2)\n", + "- **BMW X7**:\n", + " - Positive Sentiment: 50% (1/2)\n", + " - Neutral Sentiment: 50% (1/2)\n", + "- **BMW X5**:\n", + " - Positive Sentiment: 50% (1/2)\n", + " - Neutral Sentiment: 50% (1/2)\n", + "- **Mercedes-Benz E-Class**:\n", + " - Negative Sentiment: 100% (1/1, with one neutral)\n", + "- **Audi A6L**:\n", + " - Negative Sentiment: 100% (1/1, with one neutral)\n", + "- **AITO M9**:\n", + " - Positive Sentiment: 100% (2/2)\n", + "\n", + "#### 2. Summary of Major Pros and Cons\n", + "\n", + "**Pros:**\n", + "\n", + "- **Engine Performance**: The 3.0T inline-six engine delivers a robust 381 horsepower and 520 Nm torque, with a swift 5.8-second acceleration to 100 km/h. The engine's layout ensures powerful and stable output.\n", + " - *Quote*: \"3.0t, directly reaching maximum horsepower of 381, maximum torque of 520 Nm, don't underestimate this car as the largest model among BMWs, it drives very flexibly.\"\n", + "\n", + "- **Hybrid System**: The 48V mild hybrid system ensures smooth starts and steady engine engagement when speed increases.\n", + " - *Quote*: \"The car incorporates a 48V mild hybrid system for smooth starts, and when speed increases, the engine engages, utilizing an inline-cylinder layout for stronger and more stable power output.\"\n", + "\n", + "- **Transmission**: The ZF transmission's clear shift logic minimizes jolt, providing a seamless driving experience.\n", + " - *Quote*: \"Especially during high-speed driving requiring rapid acceleration, the ZF transmission's shift logic is clear, as if it can read your mind, quickly downshifting to the appropriate gear to meet power demands while minimizing jolt.\"\n", + "\n", + "- **Four-Wheel Drive System**: The front adaptive four-wheel drive and multi-plate clutch significantly enhance driving stability and comfort.\n", + " - *Quote*: \"The use of front adaptive four-wheel drive and multi-plate clutch further enhances driving stability and comfort.\"\n", + "\n", + "- **AITO M9 Performance and Technology**: The AITO M9's extended-range power system with dual motors, electric four-wheel drive, Tuling chassis, and Huawei ADS 2.0 intelligent driving system sets a new benchmark in performance and智能化(intelligence, but \"intelligence\" is better understood in context; here it refers to \"智能驾驶系统\" or \"intelligent driving system\") driving technology.\n", + " - *Quote*: \"The AITO M9's killer feature is its Huawei-developed ADS 2.0 intelligent driving system, which can drive virtually anywhere, making high-speed and long-distance driving truly effortless and safe.\"\n", + "\n", + "**Cons:**\n", + "\n", + "- **Brand Perception**: Compared to AITO M9, traditional luxury brands like BMW, Mercedes-Benz, and Audi are perceived as less innovative and prestigious in certain aspects.\n", + " - *Quote*: \"In two or three years, BBA (Benz, BMW, Audi) will lose their prestige. They won't be as prestigious as a Mercedes-Benz E-Class or BMW 5 Series, or even an Audi A6L.\"\n", + "\n", + "#### 3. Competitive Analysis\n", + "\n", + "- **BMW X7 and X5**: Both models are praised for their flexible handling and powerful engine performance. However, they face criticism for potentially losing their prestige and innovative edge compared to newer models like the AITO M9.\n", + "- **Mercedes-Benz E-Class and Audi A6L**: These models are viewed less favorably in terms of prestige and innovation, with direct comparisons highlighting the AITO M9's superiority in comfort, luxury, and technological advancements.\n", + "- **AITO M9**: This model stands out with its exceptional power, advanced chassis technology, and intelligent driving system. It is positioned as a strong competitor to established luxury brands, offering superior performance, comfort, and cutting-edge technology.\n", + "\n", + "#### 4. Conclusions and Recommendations\n", + "\n", + "**Conclusions:**\n", + "\n", + "- The new car models, particularly the AITO M9, demonstrate significant advancements in power, technology, and driving experience.\n", + "- Traditional luxury brands like BMW, Mercedes-Benz, and Audi face challenges in maintaining their prestige and innovative image in the face of emerging competitors.\n", + "- The AITO M9's extended-range power system, electric four-wheel drive, Tuling chassis, and Huawei ADS 2.0 intelligent driving system set new standards in the automotive industry.\n", + "\n", + "**Recommendations:**\n", + "\n", + "1. **Enhance Brand Image**: Traditional luxury brands should focus on enhancing their brand image through innovation and technological advancements to compete with emerging models like the AITO M9.\n", + "2. **Invest in Technology**: Automakers should invest in research and development to improve power systems, transmission, and intelligent driving technologies to meet evolving consumer demands.\n", + "3. **Market Positioning**: Clearly position new models to highlight their unique selling points, such as performance, comfort, and technological advancements, to attract target consumers.\n", + "4. **Consumer Education**: Educate consumers about the benefits and advancements of new technologies to increase market acceptance and demand.\n", + "\n", + "By implementing these recommendations, automakers can better position themselves in the competitive market and meet the evolving demands of consumers." + ], + "text/plain": [ + "