第40期 | 模块四复盘:AI应用开发模式总结

🎯 今天你将学会

  • 整理 AI 应用的常见架构模式,形成你的「开发模式库」
  • 掌握 AI 应用特有的性能优化策略
  • 理解 AI 应用安全注意事项——比传统 Web 应用更多
  • 回顾模块四全部知识,完成能力自检

📖 核心知识

AI 前端开发模式库

经过模块四 10 期的学习,我们把所有模式整理成一份可复用的开发模式库:

模式1:基础对话模式

适用场景:简单聊天、问答、翻译
架构:前端 → 后端代理 → LLM API → SSE流式返回
关键组件:ChatStore + ChatMessage + MarkdownRenderer + ChatInput
关键技术:SSE流式解析 + Zustand状态管理 + react-markdown渲染
常见问题:流式渲染抖动、Markdown格式不一致、长消息性能

模式2:RAG问答模式

适用场景:知识库问答、文档搜索、技术助手
架构:前端 → 后端(向量搜索+LLM) → SSE流(content+sources)
关键组件:ChatStore + SourceReference + DocumentUpload + KnowledgeStore
关键技术:向量搜索UI + 引用来源展示 + 文档分片管理
常见问题:搜索精度低、分片质量差、引用来源不可信

模式3:Agent交互模式

适用场景:AI助手、自动化任务、工具调用
架构:前端 → 后端(Agent思考+工具+LLM) → SSE流(thinking+tool+text)
关键组件:AgentStore + AgentMessage + ToolCall + ThinkingStep + DisplayModeToggle
关键技术:Agent SSE多类型解析 + 工具调用可视化 + 思考过程展示
常见问题:工具调用结果展示混乱、思考过程太长、用户不理解Agent逻辑

模式4:图片生成模式

适用场景:AI绘画、图片创作、设计辅助
架构:前端 → 后端代理 → DALL-E/Stable Diffusion → 图片URL返回
关键组件:ImageStore + PromptInput + StylePresets + GenerationProgress + ResultGallery
关键技术:模拟进度条 + 图片下载持久化 + 风格预设组合
常见问题:等待时间长(15-60s)、结果不确定、URL临时过期(2h)

模式5:语音交互模式

适用场景:语音聊天、语音助手、语音转文字
架构:Web Speech API(免费) 或 Whisper API(付费) → 文字 → LLM → SpeechSynthesis播放
关键组件:VoiceRecorder + AudioVisualizer + VoicePlayer + 降级处理
关键技术:SpeechRecognition实时转文字 + AnalyserNode波形可视化 + SpeechSynthesis播放
常见问题:浏览器支持度差异、隐私提示、降级方案

模式6:多模态交互模式

适用场景:图片理解、混合对话、结构化提取
架构:前端(文字+图片) → 后端(GPT-4o多模态) → SSE流(文字+可能图片)
关键组件:MultimodalMessage + ImageUploader + StructuredResult + ExportButton
关键技术:图片base64编码 + 多模态消息渲染 + 结构化输出Prompt
常见问题:图片压缩(20MB限制)、格式约束不稳定、结构化提取精度

六种模式的选择决策树

你的需求是什么?
│
├─ 纯文字对话 → 模式1(基础对话)
│
├─ 需要知识库支撑 → 模式2(RAG问答)
│
├─ 需要AI执行操作 → 模式3(Agent交互)
│
├─ 需要生成图片 → 模式4(图片生成)
│
├─ 需要语音输入/输出 → 模式5(语音交互)
│
├─ 需要图片理解 → 模式6(多模态交互)
│
└─ 需要多种能力组合 → 组合模式(如 RAG + Agent + 语音)

AI 应用性能优化策略

AI 应用有传统 Web 应用没有的性能瓶颈:

瓶颈 原因 优化方案
LLM 响应慢 生成 1-30 秒 流式响应(SSE)+ 模拟进度 + 预估时间提示
长消息渲染 Markdown 渲染重 虚拟列表 + 分段渲染 + 懒加载图片
Token 成本高 每次请求 $0.01-0.30 缓存相似问题 + 模型降级(gpt-4o-mini) + max_tokens限制
图片URL过期 DALL-E URL 2小时失效 立即下载保存 + CDN持久化
并发请求多 多用户同时聊天 限流 + 队列 + 降级到更小模型
状态管理重 对话历史可能很长 Zustand persist + 对话压缩 + 只持久化关键数据

具体优化实现:

1. 虚拟列表(聊天消息过多时)

当对话超过 100 条消息时,渲染所有消息会变慢。用虚拟列表只渲染可见区域:

import { useVirtualizer } from '@tanstack/react-virtual';

function VirtualMessageList({ messages }: { messages: Message[] }) {
  const parentRef = useRef<HTMLDivElement>(null);

  const virtualizer = useVirtualizer({
    count: messages.length,
    getScrollElement: () => parentRef.current,
    estimateSize: () => 80,  // 预估每条消息高度
    overscan: 5,             // 多渲染5条,避免频繁重新渲染
  });

  return (
    <div ref={parentRef} className="h-[600px] overflow-auto">
      <div style={{ height: virtualizer.getTotalSize(), position: 'relative' }}>
        {virtualizer.getVirtualItems().map((item) => (
          <div
            key={item.key}
            style={{ position: 'absolute', top: item.start, height: item.size }}
          >
            <ChatMessage message={messages[item.index]} />
          </div>
        ))}
      </div>
    </div>
  );
}

2. 缓存相似问题

// lib/cache.ts
interface CacheEntry {
  query: string;
  response: string;
  timestamp: string;
  tokensUsed: number;
}

class QueryCache {
  private cache: Map<string, CacheEntry> = new Map();

  get(query: string): CacheEntry | null {
    // 简单的相似度判断:去掉标点和空格后比较
    const normalized = query.toLowerCase().replace(/[^\w]/g, '');
    for (const [key, entry] of this.cache) {
      const normalizedKey = key.toLowerCase().replace(/[^\w]/g, '');
      if (normalized === normalizedKey || this.similarity(normalized, normalizedKey) > 0.8) {
        return entry;
      }
    }
    return null;
  }

  set(query: string, response: string, tokensUsed: number) {
    this.cache.set(query, {
      query,
      response,
      timestamp: new Date().toISOString(),
      tokensUsed,
    });
  }

  private similarity(a: string, b: string): number {
    // 简化的相似度:公共字符数 / max(len)
    const setA = new Set(a);
    const setB = new Set(b);
    const common = [...setA].filter(c => setB.has(c)).length;
    return common / Math.max(setA.size, setB.size);
  }
}

3. 模型动态降级

// lib/model-selector.ts
export function selectModel(query: string, usage: TokenUsage): string {
  // 简单问题用 mini 模型
  if (query.length < 100 && !query.includes('代码') && !query.includes('架构')) {
    return 'gpt-4o-mini';
  }

  // 复杂问题用 gpt-4o
  return 'gpt-4o';
}

AI 应用安全注意事项

AI 应用比传统 Web 应用多了一层安全维度——内容安全

安全维度 传统 Web 应用 AI 应用 防护措施
API Key 安全 不暴露在前端 同样不能暴露 后端代理 + 环境变量
数据隐私 不泄露用户数据 LLM 可能记住用户数据 不传敏感数据给 LLM + 数据脱敏
内容安全 不太多关注 LLM 可能生成有害内容 content moderation + 内容过滤
成本控制 服务器成本可控 API 成本随使用量飙升 限流 + 缓存 + 模型降级
Prompt 注入 不存在 用户可能通过输入操纵 AI 输入验证 + system prompt 保护
幻觉风险 不存在 LLM 编造不存在的事实 RAG + 引用来源 + 用户验证提示

Prompt 注入防护:

// lib/prompt-sanitizer.ts
export function sanitizeUserInput(input: string): string {
  // 移除可能用于注入的标记
  const dangerousPatterns = [
    /ignore previous instructions/gi,
    /forget everything/gi,
    /system:/gi,
    /\[SYSTEM\]/gi,
    /<\/?system>/gi,
  ];

  let sanitized = input;
  for (const pattern of dangerousPatterns) {
    sanitized = sanitized.replace(pattern, '[FILTERED]');
  }

  // 限制输入长度
  if (sanitized.length > 4000) {
    sanitized = sanitized.slice(0, 4000) + '... (输入过长,已截断)';
  }

  return sanitized;
}

数据脱敏:

// lib/data-mask.ts
export function maskSensitiveData(text: string): string {
  // 脱敏手机号
  text = text.replace(/(\d{3})\d{4}(\d{4})/g, '$1****$2');

  // 脱敏邮箱
  text = text.replace(/(\w{2})\w+@(\w+\.\w+)/g, '$1***@$2');

  // 脱敏身份证号
  text = text.replace(/(\d{4})\d{10}(\d{4})/g, '$1**********$2');

  return text;
}

模块四知识地图回顾

模块四:AI应用开发(第31-40期)

31. AI应用架构全景
    ├─ 四种架构模式(直接调用→代理→流式→RAG+Agent)
    ├─ AI应用 vs 传统Web差异
    └─ 完整技术栈推荐

32. OpenAI API接入实战
    ├─ SDK安装 + Key管理
    ├─ 后端代理(非流式+流式)
    ├─ AI客户端封装(重试+超时+追踪)
    └─ 成本控制策略

33. 聊天界面开发
    ├─ ChatStore + ChatMessage + ChatInput
    ├─ MarkdownRenderer + CodeBlock
    ├─ 流式打字效果
    └─ 5个交互细节(滚动/中断/重试/复制/清空)

34. RAG前端实现
    ├─ 知识库管理界面(上传/分片/搜索)
    ├─ 向量搜索交互 + SourceReference
    ├─ RAG SSE流(content + sources)
    └─ 引用来源展示

35. AI Agent前端交互
    ├─ Agent思考-行动循环
    ├─ 三种显示模式(精简/详细/实时)
    ├─ ToolCall + ThinkingStep组件
    └─ Agent SSE多类型流解析

36. 实战4:AI助手应用
    ├─ TechAssist完整项目架构
    ├─ 三种模式(chat/rag/agent)统一设计
    ├─ 分模块逐步实现策略
    └─ 产品级细节(持久化/标题生成/模型切换/Token追踪)

37. AI绘画前端
    ├─ 图片生成界面 + 风格预设
    ├─ 模拟进度条 + 等待体验设计
    ├─ ResultGallery + 下载持久化
    └─ URL过期/版权提示

38. 语音AI前端
    ├─ Web Speech API + Whisper降级
    ├─ VoiceRecorder + AudioVisualizer
    ├─ VoicePlayer + SpeechSynthesis
    └─ 语音UX原则(实时反馈/可中断/文字兜底/隐私提示)

39. 多模态AI应用
    ├─ 三种交互模式(图片理解/混合对话/多模态创作)
    ├─ MultimodalMessage + ImageUploader
    ├─ 结构化输出Prompt
    └─ 图片压缩 + 格式约束

40. 模块四复盘
    ├─ 六种开发模式库
    ├─ 性能优化策略(虚拟列表/缓存/模型降级)
    ├─ 安全注意事项(Prompt注入/数据脱敏/内容安全)
    └─ 能力自检清单

能力自检清单

能力 自检标准 ✅/❌
AI 应用架构 能根据需求选择正确的架构模式
后端代理 实现了安全的 LLM API 代理(Key 不暴露)
流式响应 实现 SSE 流式渲染 + 逐字打字效果
聊天界面 实现完整的 ChatGPT 风格聊天(消息+输入+Markdown)
RAG 前端 实现知识库管理 + 引用来源展示
Agent 交互 实现思考过程 + 工具调用可视化
图片生成 实现风格预设 + 进度条 + 画廊展示
语音交互 实现 VoiceRecorder + VoicePlayer + 降级方案
多模态 实现图片上传 + 多模态消息渲染
成本控制 实现了模型降级 + 缓存 + Token 追踪
性能优化 实现了虚拟列表 / 缓存 / 模型降级中的至少 2 种
安全防护 实现了 Prompt 注入防护 + 数据脱敏

达标线: 12 项中至少 10 项 ✅。

常见误区

误区1:AI 应用不需要特殊安全防护
AI 应用有 Prompt 注入、数据隐私、内容安全、成本失控等独特风险——比传统 Web 应用需要更多防护。

误区2:性能优化不重要
LLM 响应慢 + 高成本 + 长消息渲染重——这三个性能瓶颈不解决,用户体验会很差。

误区3:只实现一种模式就够了
AI 应用通常需要多种能力组合(对话+RAG+Agent+语音)。六种模式库让你能快速组合出新的应用。

🤖 AI协作实战

实战场景:建立你的「AI 前端开发模式库」文档

把模块四学到的所有模式整理成一份可复用的参考文档:

我的 AI 前端开发模式库
├─ 模式1:基础对话(架构+组件+关键技术+常见问题)
├─ 模式2:RAG问答
├─ 模式3:Agent交互
├─ 模式4:图片生成
├─ 模式5:语音交互
├─ 模式6:多模态交互
├─ 选择决策树
├─ 性能优化策略表
└─ 安全注意事项表

我给 AI 的 prompt:

帮我整理一份「AI前端开发模式库」文档,包含六种模式的:
1. 适用场景
2. 核心架构图
3. 关键组件列表
4. 关键技术栈
5. 常见问题和解决方案
6. 成本估算

还有:
- 模式选择决策树
- 性能优化策略对比表
- 安全注意事项清单

格式:Markdown,适合放在项目 wiki 中。

学到了什么: 整理模式库的过程本身就是最好的复习——你把 10 期的零散知识变成了一份可复用的参考文档。以后做新的 AI 应用时,直接查模式库就能快速选择架构和组件。

💻 动手练习

练习1(简单):完成能力自检清单

对照 12 项能力清单逐项评估,标注 ✅/❌。❌ 的项目标注需要复习的期数。

练习2(中等):写你的「AI前端开发模式库」

根据本期的六种模式,整理一份你自己的开发模式库文档。每个模式写:适用场景、核心组件、关键技术、常见问题。保存为 ai-patterns-library.md

练习3(挑战):组合两种模式实现一个新应用

选两种模式组合(如 RAG + 语音,或 Agent + 图片生成),实现一个原型:

  • 设计组合架构
  • 实现核心组件
  • 测试验证功能

📌 本期要点

  1. 六种开发模式库: 基础对话 / RAG问答 / Agent交互 / 图片生成 / 语音交互 / 多模态交互——每种都有完整的架构、组件、技术栈
  2. 模式选择决策树: 根据需求快速选择正确的架构模式
  3. 性能优化三策略: 虚拟列表(长消息)+ 缓存(相似问题)+ 模型降级(成本控制)
  4. 安全六维度: API Key / 数据隐私 / 内容安全 / 成本控制 / Prompt注入 / 幻觉风险
  5. 模式库是可复用资产: 以后做新 AI 应用时直接查模式库,不需要从零开始设计

🔗 下期预告

从下一期开始进入模块五——项目实战与就业!第41期开始做你的第一个可展示项目:AI 知识库产品。
如果你没有苹果电脑,需要上传ios到APPStore可以访问以下网站
iPA上传工具 - IPA解析与AppStore提交

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐