Skip to content

多模态 AI 应用开发指南

多模态 AI 能够同时处理文本、图像、音频等多种数据类型,提供更丰富的交互体验。本文详细介绍如何使用 OpenClaw 开发多模态 AI 应用,包含 4 个实战案例。

一、多模态基础概念

什么是多模态?

多模态 AI 指能够理解和生成多种媒体类型的人工智能系统:

  • 文本:自然语言处理(NLP)
  • 图像:计算机视觉(CV)
  • 音频:语音识别和合成
  • 视频:时序视觉分析
  • 结构化数据:表格、数据库

OpenClaw 多模态工具

工具功能支持格式
image图像分析jpg, png, gif, webp
pdfPDF 文档处理pdf
web_fetch网页内容提取HTML → Markdown
exec音频/视频处理通过 ffmpeg 等工具

二、实战案例 1:智能图片分析

场景说明

自动分析用户上传的图片,提供详细描述和建议。

完整实现

javascript
// 图片分析函数
async function analyzeImage(imagePath) {
  // 1. 基础分析
  const basicAnalysis = image(
    image=imagePath,
    prompt="详细描述这张图片的内容,包括场景、物体、人物、动作等"
  )
  
  // 2. 情感分析
  const emotionAnalysis = image(
    image=imagePath,
    prompt="分析这张图片传达的情感和氛围(积极/消极/中性)"
  )
  
  // 3. 实用建议
  const practicalAdvice = image(
    image=imagePath,
    prompt="基于这张图片,提供实用的建议或行动项"
  )
  
  // 4. 生成报告
  const report = \`
# 图片分析报告

## 内容描述
\${basicAnalysis}

## 情感分析
\${emotionAnalysis}

## 实用建议
\${practicalAdvice}

## 元数据
- 文件:\${imagePath}
- 分析时间:\${new Date().toLocaleString('zh-CN')}
- AI 模型:视觉模型 v3.5
  \`
  
  return report
}

// 使用示例
const report = await analyzeImage("./user-upload.jpg")
message(action="send", message=report, media="./user-upload.jpg")

输出示例

# 图片分析报告

## 内容描述
这是一张办公室工作场景的照片。画面中有:
- 一位年轻女性坐在办公桌前
- 桌面上有笔记本电脑、咖啡杯、笔记本
- 背景是现代化的开放式办公室
- 光线充足,色调温暖

## 情感分析
整体情感倾向:积极
- 专注的工作状态
- 舒适的工作环境
- 温暖的光线营造安全感

## 实用建议
1. **工作效率**:当前状态适合深度工作,建议保持专注
2. **健康提醒**:记得每小时起身活动,保护视力
3. **环境优化**:可以添加绿植提升工作环境

三、实战案例 2:文档智能处理

场景说明

处理 PDF 技术文档,提取关键信息并生成摘要。

完整实现

javascript
// 文档处理函数
async function processDocument(pdfPath) {
  // 1. 整体概览
  const overview = pdf(
    pdf=pdfPath,
    prompt="提供这份文档的整体概览,包括章节结构和核心主题"
  )
  
  // 2. 提取关键技术点
  const keyPoints = pdf(
    pdf=pdfPath,
    prompt="提取文档中的关键技术点、架构图、API 接口等重要信息"
  )
  
  // 3. 生成学习路径
  const learningPath = pdf(
    pdf=pdfPath,
    prompt="基于这份文档,为初学者制定一个循序渐进的学习路径"
  )
  
  // 4. 创建代码示例
  const codeExamples = pdf(
    pdf=pdfPath,
    prompt="从文档中提取关键代码示例,并添加详细注释"
  )
  
  // 5. 生成问答对
  const qaPairs = pdf(
    pdf=pdfPath,
    prompt="基于文档内容,生成 5 个常见问题及其答案"
  )
  
  // 6. 整合报告
  const report = \`
# 文档智能处理报告

## 文档概览
\${overview}

## 关键技术点
\${keyPoints}

## 学习路径
\${learningPath}

## 代码示例
\`\`\`javascript
\${codeExamples}
\`\`\`

## 常见问题
\${qaPairs}

---
处理完成时间:\${new Date().toLocaleString('zh-CN')}
  \`
  
  return report
}

// 批量处理
async function batchProcessDocuments(pdfPaths) {
  const reports = []
  
  for (const pdfPath of pdfPaths) {
    try {
      const report = await processDocument(pdfPath)
      reports.push({ file: pdfPath, report })
      
      // 保存报告
      const reportPath = pdfPath.replace('.pdf', '-analysis.md')
      write(path=reportPath, content=report)
      
    } catch (e) {
      console.log(\`处理失败 \${pdfPath}: \${e.message}\`)
    }
    
    // 避免请求过快
    if (pdfPaths.indexOf(pdfPath) < pdfPaths.length - 1) {
      exec(command="sleep 2")
    }
  }
  
  return reports
}

四、实战案例 3:网页内容聚合

场景说明

从多个网页抓取内容,聚合生成综合报告。

完整实现

javascript
// 网页聚合函数
async function aggregateWebContent(urls) {
  const contents = []
  
  // 1. 并行抓取网页
  for (const url of urls) {
    try {
      const content = web_fetch(
        url=url,
        extractMode="markdown",
        maxChars=3000
      )
      contents.push({ url, content })
    } catch (e) {
      console.log(\`抓取失败 \${url}: \${e.message}\`)
    }
  }
  
  // 2. 内容去重
  const uniqueContents = deduplicateContents(contents)
  
  // 3. 生成综合报告
  const aggregatedReport = \`
# 网页内容聚合报告

## 数据源
- 总链接数:\${urls.length}
- 成功抓取:\${uniqueContents.length}
- 去重后:\${uniqueContents.length}

## 综合分析
\${uniqueContents.map((item, i) => \`
### 来源 \${i+1}: \${item.url}
\${item.content.substring(0, 500)}...
\`).join('\\n')}

## 核心观点
\${generateKeyInsights(uniqueContents)}

## 行动建议
\${generateActionableAdvice(uniqueContents)}
  \`
  
  return aggregatedReport
}

// 去重函数
function deduplicateContents(contents) {
  const unique = []
  
  for (const content of contents) {
    const isDuplicate = unique.some(u => 
      similarity(content.content, u.content) > 0.8
    )
    
    if (!isDuplicate) {
      unique.push(content)
    }
  }
  
  return unique
}

// 相似度计算(简化版)
function similarity(text1, text2) {
  const words1 = new Set(text1.split(' '))
  const words2 = new sets(text2.split(' '))
  
  const intersection = [...words1].filter(word => words2.has(word))
  const union = new Set([...words1, ...words2])
  
  return intersection.length / union.size
}

五、实战案例 4:多模态客服系统

场景说明

支持文本、图片、文档等多种输入的智能客服。

完整实现

javascript
// 多模态客服类
class MultimodalCustomerService {
  constructor() {
    this.supportedTypes = ['text', 'image', 'pdf', 'url']
  }
  
  // 处理用户消息
  async handleUserMessage(message, attachments = []) {
    // 1. 分析消息类型
    const messageType = this.detectMessageType(message, attachments)
    
    // 2. 路由到相应处理器
    switch (messageType) {
      case 'text':
        return await this.handleTextMessage(message)
        
      case 'image':
        return await this.handleImageMessage(attachments[0])
        
      case 'pdf':
        return await this.handlePdfMessage(attachments[0])
        
      case 'url':
        return await this.handleUrlMessage(message)
        
      default:
        return "抱歉,暂时不支持这种消息类型。请发送文本、图片、PDF 或网页链接。"
    }
  }
  
  // 文本消息处理
  async handleTextMessage(text) {
    // 使用常规 AI 处理
    return aiResponse(text)
  }
  
  // 图片消息处理
  async handleImageMessage(imagePath) {
    const analysis = image(
      image=imagePath,
      prompt="分析用户上传的图片,理解其意图,并提供相关帮助"
    )
    return \`
图片分析结果:
\${analysis}

如果需要进一步帮助,请告诉我具体问题。
    \`
  }
  
  // PDF 消息处理
  async handlePdfMessage(pdfPath) {
    const summary = pdf(
      pdf=pdfPath,
      prompt="总结用户上传的 PDF 文档的主要内容,并询问是否需要特定帮助"
    )
    return \`
文档摘要:
\${summary}

我可以帮您:
- 详细解释某个部分
- 提取特定信息
- 生成学习笔记
- 转换为其他格式

请告诉我您的需求。
    \`
  }
  
  // URL 消息处理
  async handleUrlMessage(url) {
    const content = web_fetch(url=url, maxChars=2000)
    const summary = summarizeContent(content)
    return \`
网页内容摘要:
\${summary}

我可以帮您:
- 深入分析特定方面
- 对比其他资源
- 生成相关问题
- 保存到知识库

需要什么帮助?
    \`
  }
  
  // 消息类型检测
  detectMessageType(message, attachments) {
    if (attachments.length > 0) {
      const ext = attachments[0].split('.').pop().toLowerCase()
      if (['jpg', 'jpeg', 'png', 'gif', 'webp'].includes(ext)) {
        return 'image'
      } else if (ext === 'pdf') {
        return 'pdf'
      }
    }
    
    if (message.startsWith('http')) {
      return 'url'
    }
    
    return 'text'
  }
}

// 使用示例
const service = new MultimodalCustomerService()

// 处理不同类型的用户消息
await service.handleUserMessage("你好")  // 文本
await service.handleUserMessage("", ["./screenshot.png"])  // 图片
await service.handleUserMessage("", ["./manual.pdf"])  // PDF
await service.handleUserMessage("https://example.com")  // URL

六、高级技巧

1. 模态融合

javascript
// 结合图片和文本分析
async function multimodalAnalysis(imagePath, contextText) {
  // 图片分析
  const imageAnalysis = image(image=imagePath, prompt="描述图片内容")
  
  // 结合上下文分析
  const combinedAnalysis = \`
基于以下上下文和图片,提供综合分析:

上下文:\${contextText}
图片内容:\${imageAnalysis}

综合分析:
  \`
  
  return combinedAnalysis
}

2. 批量处理优化

javascript
// 控制并发数量
async function batchProcessWithConcurrency(items, processor, concurrency=3) {
  const results = []
  
  for (let i = 0; i < items.length; i += concurrency) {
    const batch = items.slice(i, i + concurrency)
    const batchResults = await Promise.all(
      batch.map(item => processor(item))
    )
    results.push(...batchResults)
  }
  
  return results
}

3. 错误处理和降级

javascript
// 多模态降级策略
async function robustMultimodalProcessing(input) {
  try {
    // 尝试主要模态
    return await primaryProcessor(input)
  } catch (e) {
    console.log(\`主处理器失败:\${e.message}\`)
    
    try {
      // 尝试备用模态
      return await fallbackProcessor(input)
    } catch (e2) {
      // 返回错误信息
      return \`处理失败:\${e.message},备用方案也失败:\${e2.message}\`
    }
  }
}

七、常见问题

Q: 如何处理大文件?

A:

  • 图片:限制大小(<10MB)
  • PDF:分页处理(pages 参数)
  • 网页:限制字符数(maxChars)

Q: 模态之间如何协作?

A:

  • 先处理主要模态
  • 用结果作为上下文处理其他模态
  • 最终整合所有结果

Q: 如何保证处理质量?

A:

  • 设置合理的超时时间
  • 添加重试机制
  • 人工复核关键结果

八、总结

多模态 AI 让应用更智能、更自然:

模态应用场景工具
图像视觉分析、OCRimage
PDF文档处理、知识提取pdf
网页信息聚合、竞品分析web_fetch
文本常规对话、内容生成message

掌握多模态开发,打造真正的智能应用!


相关资源:

Released under the MIT License.