diff --git a/next.config.ts b/next.config.ts index e9ffa30..e704545 100644 --- a/next.config.ts +++ b/next.config.ts @@ -2,6 +2,7 @@ import type { NextConfig } from "next"; const nextConfig: NextConfig = { /* config options here */ + allowedDevOrigins: ["127.0.0.1"], }; export default nextConfig; diff --git a/src/components/pages/AssistantPage.tsx b/src/components/pages/AssistantPage.tsx index 40d528e..65b7475 100644 --- a/src/components/pages/AssistantPage.tsx +++ b/src/components/pages/AssistantPage.tsx @@ -7,10 +7,10 @@ import { Check, Database, MessageSquareText, - Mic, MoreHorizontal, Pencil, Plus, + Rocket, Search, Sparkles, Trash2, @@ -48,10 +48,14 @@ import { } from "@/components/ui/card"; import { useState } from "react"; +type RuntimeMode = "pipeline" | "realtime"; + type AssistantForm = { name: string; greeting: string; prompt: string; + runtimeMode: RuntimeMode; + realtimeModel: string; model: string; asr: string; voice: string; @@ -190,6 +194,8 @@ export function AssistantPage() { greeting: "您好,我是 AI 视频助手,请问有什么可以帮您?", prompt: "你是一名专业的政务视频咨询助手,负责为市民提供政策解读、办事指南和常见问题解答。\n\n请遵循以下原则:\n1. 回答准确、简洁,使用通俗易懂的语言\n2. 不确定的信息应明确告知,不编造政策内容\n3. 涉及具体办事流程时,引导用户前往官方渠道核实", + runtimeMode: "pipeline", + realtimeModel: "gpt-realtime-2", model: "DeepSeek-V3", asr: "SenseVoice", voice: "晓宁", @@ -686,6 +692,66 @@ export function AssistantPage() {
+ +
+ + + +
+
+ } title="基础信息" @@ -714,18 +780,51 @@ export function AssistantPage() { /> - } - title="模型配置" - description="选择大语言模型和知识库能力" - > - updateForm("model", value)} - options={["DeepSeek-V3", "Qwen-Max", "Kimi-K2", "Doubao-Pro", "GPT-4o"]} - /> - + {form.runtimeMode === "realtime" && ( + } + title="Realtime 配置" + description="当前模式下 ASR 与 TTS 由 Realtime 模型内置完成" + > + updateForm("realtimeModel", value)} + options={["gpt-realtime-2", "gpt-realtime", "gpt-4o-realtime-preview"]} + /> + + )} + + {form.runtimeMode === "pipeline" && ( + } + title="Pipeline 配置" + description="选择 ASR、LLM 和 TTS 组成级联语音管线" + > +
+ updateForm("model", value)} + options={["DeepSeek-V3", "Qwen-Max", "Kimi-K2", "Doubao-Pro", "GPT-4o"]} + /> + + updateForm("asr", value)} + options={["SenseVoice", "Paraformer", "Whisper", "FunASR"]} + /> + + updateForm("voice", value)} + options={["晓宁", "晓美", "晓宇", "晓晨"]} + /> +
+
+ )} } @@ -740,28 +839,6 @@ export function AssistantPage() { /> - } - title="语音配置" - description="配置语音识别模型和播报声音" - > -
- updateForm("asr", value)} - options={["SenseVoice", "Paraformer", "Whisper", "FunASR"]} - /> - - updateForm("voice", value)} - options={["晓宁", "晓美", "晓宇", "晓晨"]} - /> -
-
- } title="交互策略" @@ -785,29 +862,39 @@ function SectionCard({ description, children, }: { - icon: React.ReactNode; - title: string; - description: string; + icon?: React.ReactNode; + title?: string; + description?: string; children: React.ReactNode; }) { + const hasHeader = Boolean(title); + return ( - -
-
- {icon} -
+ {hasHeader && ( + +
+ {icon && ( +
+ {icon} +
+ )} -
- {title} - - {description} - +
+ {title} + {description && ( + + {description} + + )} +
-
-
+ + )} - {children} + + {children} + ); }