"use client" import { useState } from "react" import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Switch } from "@/components/ui/switch" import { Checkbox } from "@/components/ui/checkbox" import { Badge } from "@/components/ui/badge" import { Separator } from "@/components/ui/separator" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { Brain, Lightbulb, BarChart, PieChart, Users, Tag, Play, Settings, Search, Filter, Copy, Check, Zap, Plus, Download, } from "lucide-react" import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogFooter, } from "@/components/ui/dialog" import { useToast } from "@/components/ui/use-toast" import { Textarea } from "@/components/ui/textarea" interface AIAnalysisTask { id: string name: string type: string status: "pending" | "running" | "completed" | "failed" progress: number createdAt: string completedAt: string | null dataSource: string parameters: Record result: any | null } interface AIModel { id: string name: string provider: string type: string capabilities: string[] apiEndpoint: string apiKey: string status: "active" | "inactive" } export function AIAnalysisTools() { const { toast } = useToast() const [activeTab, setActiveTab] = useState("analysis-tasks") const [isCreatingTask, setIsCreatingTask] = useState(false) const [selectedTaskId, setSelectedTaskId] = useState(null) const [isAddingModel, setIsAddingModel] = useState(false) const [copiedText, setCopiedText] = useState(null) // 模拟AI分析任务 const [aiTasks, setAiTasks] = useState([ { id: "task-1", name: "用户行为分析", type: "behavior-analysis", status: "completed", progress: 100, createdAt: "2023-07-20 10:15", completedAt: "2023-07-20 10:25", dataSource: "行为分析平台", parameters: { userSegment: "高价值用户", timeRange: "近30天", analysisDepth: "深度", }, result: { summary: "高价值用户在过去30天内主要活跃在晚间时段,偏好浏览科技和旅游类内容,平均会话时长较长。", insights: [ "用户主要在晚上9点至11点活跃", "科技类内容点击率高于平均水平58%", "平均会话时长为8.5分钟,高于普通用户3.2分钟", "移动端访问占比87%,其中iOS设备占65%", ], recommendations: [ "在晚间时段推送个性化内容", "增加科技和旅游类内容的推荐权重", "针对长会话时长优化页面加载速度", "优化iOS端用户体验", ], }, }, { id: "task-2", name: "用户分群自动发现", type: "segment-discovery", status: "completed", progress: 100, createdAt: "2023-07-19 14:30", completedAt: "2023-07-19 15:10", dataSource: "用户数据库", parameters: { clusteringMethod: "K-Means", features: ["消费行为", "活跃度", "内容偏好"], maxClusters: 8, }, result: { summary: "系统自动发现了5个明显的用户分群,其中包括高消费低活跃、高活跃低消费等特征明显的群体。", clusters: [ { name: "高消费科技爱好者", size: 12500, characteristics: ["高消费", "科技内容偏好", "中等活跃度"], }, { name: "活跃社交用户", size: 28900, characteristics: ["高活跃度", "社交内容偏好", "中等消费"], }, { name: "奢侈品偶尔购买者", size: 8700, characteristics: ["低活跃度", "高单次消费", "奢侈品偏好"], }, { name: "日常必需品购买者", size: 45600, characteristics: ["高频次低金额消费", "中等活跃度", "生活类内容偏好"], }, { name: "休眠用户", size: 15400, characteristics: ["极低活跃度", "低消费", "无明显内容偏好"], }, ], }, }, { id: "task-3", name: "用户流失预测", type: "churn-prediction", status: "running", progress: 65, createdAt: "2023-07-21 09:45", completedAt: null, dataSource: "用户数据库 & 行为分析平台", parameters: { predictionHorizon: "30天", modelType: "随机森林", features: ["活跃度", "消费频率", "客服交互", "产品使用情况"], }, result: null, }, { id: "task-4", name: "营销策略生成", type: "strategy-generation", status: "pending", progress: 0, createdAt: "2023-07-21 10:30", completedAt: null, dataSource: "用户画像 & 行为分析", parameters: { targetSegment: "流失风险用户", campaignGoal: "提高留存率", budgetConstraint: "中等", channelPreference: ["短信", "应用内推送", "邮件"], }, result: null, }, { id: "task-5", name: "自动标签生成", type: "tag-generation", status: "completed", progress: 100, createdAt: "2023-07-18 11:20", completedAt: "2023-07-18 12:05", dataSource: "用户数据库 & 行为分析平台", parameters: { tagCategories: ["兴趣", "消费习惯", "活跃模式"], minConfidence: 0.7, maxTagsPerUser: 10, }, result: { summary: "系统为85%的用户生成了新标签,平均每用户5.3个标签。", tagCategories: [ { name: "兴趣标签", count: 28, coverage: "92%", examples: ["科技爱好者", "旅游达人", "美食家", "运动健身"], }, { name: "消费习惯", count: 15, coverage: "88%", examples: ["奢侈品偏好", "理性消费", "冲动购物", "价格敏感"], }, { name: "活跃模式", count: 12, coverage: "95%", examples: ["工作时间活跃", "夜间活跃", "周末活跃", "低频高质"], }, ], }, }, ]) // 模拟AI模型 const [aiModels, setAiModels] = useState([ { id: "model-1", name: "GPT-4", provider: "OpenAI", type: "大语言模型", capabilities: ["文本生成", "内容分析", "情感分析", "摘要生成"], apiEndpoint: "https://api.openai.com/v1/chat/completions", apiKey: "sk-***********", status: "active", }, { id: "model-2", name: "Claude 2", provider: "Anthropic", type: "大语言模型", capabilities: ["文本生成", "内容分析", "代码生成", "问答"], apiEndpoint: "https://api.anthropic.com/v1/complete", apiKey: "sk-ant-***********", status: "active", }, { id: "model-3", name: "MCP SERVER AI", provider: "内部服务", type: "专用分析模型", capabilities: ["用户行为分析", "分群发现", "标签生成", "预测模型"], apiEndpoint: "https://mcp.example.com/api/analyze", apiKey: "mcp-***********", status: "active", }, { id: "model-4", name: "DALL-E 3", provider: "OpenAI", type: "图像生成模型", capabilities: ["图像生成", "图像编辑", "风格迁移"], apiEndpoint: "https://api.openai.com/v1/images/generations", apiKey: "sk-***********", status: "inactive", }, ]) // 模拟分析模板 const analysisTemplates = [ { id: "template-1", name: "用户行为分析", description: "分析用户的行为模式、偏好和习惯", type: "behavior-analysis", parameters: { userSegment: "所有用户", timeRange: "近30天", analysisDepth: "标准", }, }, { id: "template-2", name: "用户分群发现", description: "自动发现数据中的用户分群", type: "segment-discovery", parameters: { clusteringMethod: "K-Means", features: ["消费行为", "活跃度", "内容偏好"], maxClusters: 8, }, }, { id: "template-3", name: "用户流失预测", description: "预测未来可能流失的用户", type: "churn-prediction", parameters: { predictionHorizon: "30天", modelType: "随机森林", features: ["活跃度", "消费频率", "客服交互", "产品使用情况"], }, }, { id: "template-4", name: "营销策略生成", description: "为特定用户分群生成营销策略", type: "strategy-generation", parameters: { targetSegment: "流失风险用户", campaignGoal: "提高留存率", budgetConstraint: "中等", channelPreference: ["短信", "应用内推送", "邮件"], }, }, { id: "template-5", name: "自动标签生成", description: "基于用户数据自动生成用户标签", type: "tag-generation", parameters: { tagCategories: ["兴趣", "消费习惯", "活跃模式"], minConfidence: 0.7, maxTagsPerUser: 10, }, }, ] const getStatusBadge = (status: string) => { switch (status) { case "pending": return 等待中 case "running": return 运行中 case "completed": return 已完成 case "failed": return 失败 case "active": return 已启用 case "inactive": return 已禁用 default: return 未知 } } const getTaskTypeIcon = (type: string) => { switch (type) { case "behavior-analysis": return case "segment-discovery": return case "churn-prediction": return case "strategy-generation": return case "tag-generation": return default: return } } const selectedTask = selectedTaskId ? aiTasks.find((task) => task.id === selectedTaskId) : null const handleCopyText = (text: string) => { navigator.clipboard.writeText(text) setCopiedText(text) toast({ title: "已复制到剪贴板", description: "文本已成功复制到剪贴板", }) setTimeout(() => setCopiedText(null), 2000) } const toggleModelStatus = (id: string) => { setAiModels( aiModels.map((model) => { if (model.id === id) { return { ...model, status: model.status === "active" ? "inactive" : "active", } } return model }), ) } return (

AI分析工具

分析任务 AI模型 分析模板 AI设置
AI分析任务
类型 任务名称 数据源 创建时间 状态 进度 操作 {aiTasks.map((task) => ( {getTaskTypeIcon(task.type)} {task.name} {task.dataSource} {task.createdAt} {getStatusBadge(task.status)}
))}
AI模型管理
模型名称 提供商 类型 能力 API端点 状态 操作 {aiModels.map((model) => ( {model.name} {model.provider} {model.type}
{model.capabilities.slice(0, 2).map((capability, index) => ( {capability} ))} {model.capabilities.length > 2 && ( +{model.capabilities.length - 2} )}
{model.apiEndpoint}
toggleModelStatus(model.id)} aria-label="Toggle model" /> {getStatusBadge(model.status)}
))}
MCP SERVER配置 配置MCP SERVER AI工具的分析参数
{analysisTemplates.map((template) => (
{getTaskTypeIcon(template.type)} {template.name}
{template.description}

默认参数

{Object.entries(template.parameters).map(([key, value]) => (
{key}: {Array.isArray(value) ? value.join(", ") : value.toString()}
))}
))}

创建新模板

创建自定义分析模板,保存常用的分析配置

AI分析设置 配置AI分析的全局设置

关闭后,所有AI分析功能将暂停

设置同时执行的AI分析任务数量,数值越大系统负载越高

{/* 任务详情对话框 */} !open && setSelectedTaskId(null)}> 分析任务详情 查看AI分析任务的详细信息和结果 {selectedTask && (
{getTaskTypeIcon(selectedTask.type)}

{selectedTask.name}

{selectedTask.dataSource} | 创建于 {selectedTask.createdAt}

{getStatusBadge(selectedTask.status)}

分析参数

{Object.entries(selectedTask.parameters).map(([key, value]) => (
{key}: {Array.isArray(value) ? value.join(", ") : value.toString()}
))}
{selectedTask.status === "running" && (

分析进度

{selectedTask.progress}%

正在处理数据...预计剩余时间: {Math.round((100 - selectedTask.progress) / 10)} 分钟

)} {selectedTask.result && (

分析摘要

{selectedTask.result.summary}
{selectedTask.result.insights && (

关键洞察

{selectedTask.result.insights.map((insight: string, index: number) => (

{insight}

))}
)} {selectedTask.result.recommendations && (

建议

{selectedTask.result.recommendations.map((recommendation: string, index: number) => (

{recommendation}

))}
)} {selectedTask.result.clusters && (

发现的用户分群

分群名称 用户数 特征 {selectedTask.result.clusters.map((cluster: any, index: number) => ( {cluster.name} {cluster.size.toLocaleString()}
{cluster.characteristics.map((char: string, charIndex: number) => ( {char} ))}
))}
)} {selectedTask.result.tagCategories && (

生成的标签分类

分类名称 标签数量 覆盖率 示例标签 {selectedTask.result.tagCategories.map((category: any, index: number) => ( {category.name} {category.count} {category.coverage}
{category.examples.map((example: string, exampleIndex: number) => ( {example} ))}
))}
)}
)}
)} {selectedTask?.status === "completed" && ( )}
{/* 添加模型对话框 */} 添加AI模型 配置新的AI模型连接