feat(集成): 集成提示词优化功能到页面
- 在 layout.tsx 中添加 PromptOptimizerProvider - 在 AppLayout 和聊天页面添加 PromptOptimizer 浮动按钮 - ChatInput 组件监听并消费优化后的提示词 - 优化结果可自动填入输入框
This commit is contained in:
parent
57bb1ffab7
commit
249362a6eb
@ -9,11 +9,13 @@ import { ChatInput } from '@/components/features/ChatInput';
|
||||
import { MessageBubble } from '@/components/features/MessageBubble';
|
||||
import { ChatHeaderInfo } from '@/components/features/ChatHeader';
|
||||
import { SaveToNoteModal } from '@/components/features/SaveToNoteModal';
|
||||
import { PromptOptimizer } from '@/components/features/PromptOptimizer';
|
||||
import { cn } from '@/lib/utils';
|
||||
import { useConversation, useConversations } from '@/hooks/useConversations';
|
||||
import { useStreamChat, type ChatMessage } from '@/hooks/useStreamChat';
|
||||
import { useModels, useTools, useSettings } from '@/hooks/useSettings';
|
||||
import { useAuth } from '@/providers/AuthProvider';
|
||||
import { usePromptOptimizer } from '@/providers/PromptOptimizerProvider';
|
||||
import type { UploadFile } from '@/types/file-upload';
|
||||
|
||||
interface PageProps {
|
||||
@ -26,6 +28,7 @@ export default function ChatPage({ params }: PageProps) {
|
||||
const searchParams = useSearchParams();
|
||||
const initialMessage = searchParams.get('message');
|
||||
const { user } = useAuth();
|
||||
const { setOptimizedPrompt } = usePromptOptimizer();
|
||||
|
||||
const [sidebarOpen, setSidebarOpen] = useState(true);
|
||||
const messagesEndRef = useRef<HTMLDivElement>(null);
|
||||
@ -614,6 +617,9 @@ export default function ChatPage({ params }: PageProps) {
|
||||
initialContent={noteContent}
|
||||
conversationId={chatId}
|
||||
/>
|
||||
|
||||
{/* 提示词优化工具浮动按钮 */}
|
||||
<PromptOptimizer onUsePrompt={setOptimizedPrompt} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@ import type { Metadata } from "next";
|
||||
import "./globals.css";
|
||||
import { SettingsProvider } from "@/components/providers/SettingsProvider";
|
||||
import { AuthProvider } from "@/providers/AuthProvider";
|
||||
import { PromptOptimizerProvider } from "@/providers/PromptOptimizerProvider";
|
||||
import { Toaster } from "@/components/ui/Toast";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
@ -22,8 +23,10 @@ export default function RootLayout({
|
||||
<body className="antialiased">
|
||||
<AuthProvider>
|
||||
<SettingsProvider>
|
||||
<PromptOptimizerProvider>
|
||||
{children}
|
||||
<Toaster />
|
||||
</PromptOptimizerProvider>
|
||||
</SettingsProvider>
|
||||
</AuthProvider>
|
||||
</body>
|
||||
|
||||
@ -1,12 +1,13 @@
|
||||
'use client';
|
||||
|
||||
import { useState, useRef } from 'react';
|
||||
import { useState, useRef, useEffect } from 'react';
|
||||
import { Paperclip, ArrowUp, Upload } from 'lucide-react';
|
||||
import { ModelSelector } from './ModelSelector';
|
||||
import { ToolsDropdown } from './ToolsDropdown';
|
||||
import { FilePreviewList } from './FilePreviewList';
|
||||
import { Tooltip } from '@/components/ui/Tooltip';
|
||||
import { useFileUpload } from '@/hooks/useFileUpload';
|
||||
import { usePromptOptimizer } from '@/providers/PromptOptimizerProvider';
|
||||
import { cn } from '@/lib/utils';
|
||||
import type { Model, Tool } from '@/types';
|
||||
import type { UploadFile } from '@/types/file-upload';
|
||||
@ -37,6 +38,17 @@ export function ChatInput({
|
||||
const [message, setMessage] = useState('');
|
||||
const fileInputRef = useRef<HTMLInputElement>(null);
|
||||
|
||||
// 使用提示词优化 Hook
|
||||
const { consumeOptimizedPrompt } = usePromptOptimizer();
|
||||
|
||||
// 监听优化后的提示词并填入输入框
|
||||
useEffect(() => {
|
||||
const prompt = consumeOptimizedPrompt();
|
||||
if (prompt) {
|
||||
setMessage(prompt);
|
||||
}
|
||||
}, [consumeOptimizedPrompt]);
|
||||
|
||||
// 使用文件上传 Hook
|
||||
const {
|
||||
files,
|
||||
|
||||
@ -2,6 +2,8 @@
|
||||
|
||||
import { useState, type ReactNode } from 'react';
|
||||
import { Sidebar, SidebarToggle } from '@/components/layout/Sidebar';
|
||||
import { PromptOptimizer } from '@/components/features/PromptOptimizer';
|
||||
import { usePromptOptimizer } from '@/providers/PromptOptimizerProvider';
|
||||
import { cn } from '@/lib/utils';
|
||||
|
||||
interface AppLayoutProps {
|
||||
@ -12,6 +14,7 @@ interface AppLayoutProps {
|
||||
|
||||
export function AppLayout({ children, showHeader = true, headerContent }: AppLayoutProps) {
|
||||
const [sidebarOpen, setSidebarOpen] = useState(true);
|
||||
const { setOptimizedPrompt } = usePromptOptimizer();
|
||||
|
||||
return (
|
||||
<div className="flex min-h-screen">
|
||||
@ -41,6 +44,9 @@ export function AppLayout({ children, showHeader = true, headerContent }: AppLay
|
||||
{children}
|
||||
</div>
|
||||
</main>
|
||||
|
||||
{/* 提示词优化工具浮动按钮 */}
|
||||
<PromptOptimizer onUsePrompt={setOptimizedPrompt} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user