← Back to Blog

多模态向量化功能说明

Xiao Wu
Xiao WuAuthor
June 25, 2025AGENT
Tags:
工具向量化

多模态向量化功能说明

本项目已支持使用火山引擎API进行文本和图片的向量化处理,实现多模态知识库搜索。

功能特性

  • ✅ 支持文本文件向量化(PDF、TXT、DOC、CSV)
  • ✅ 支持图片文件向量化(JPEG、PNG、GIF、WebP)
  • ✅ 支持文本查询
  • ✅ 支持图片相似性搜索
  • ✅ 支持混合搜索(文本+图片)

支持的文件类型

文本文件

  • text/plain - 纯文本文件
  • application/pdf - PDF文档
  • application/msword - Word文档(.doc)
  • application/vnd.openxmlformats-officedocument.wordprocessingml.document - Word文档(.docx)
  • text/csv - CSV文件

图片文件

  • image/jpeg / image/jpg - JPEG图片
  • image/png - PNG图片
  • image/gif - GIF图片
  • image/webp - WebP图片

API使用说明

文件处理

import { processFile } from './lib/vectorization'
 
// 处理任意支持的文件(自动检测文本或图片)
await processFile(fileId)

文本搜索

import { searchSimilarChunks } from './lib/vectorization'
 
// 使用文本查询搜索
const results = await searchSimilarChunks(
  "查找相关的产品图片", 
  knowledgeBaseId, 
  10
)

图片搜索

import { searchSimilarImages, searchSimilarChunks } from './lib/vectorization'
 
// 方法1: 使用专门的图片搜索函数
const results1 = await searchSimilarImages(
  "https://example.com/image.jpg", 
  knowledgeBaseId, 
  10
)
 
// 方法2: 使用通用搜索函数
const imageQuery = {
  type: "image_url",
  image_url: {
    url: "https://example.com/image.jpg"
  }
}
const results2 = await searchSimilarChunks(imageQuery, knowledgeBaseId, 10)

混合搜索

import { hybridSearch } from './lib/vectorization'
 
// 同时使用文本和图片搜索
const results = await hybridSearch(
  knowledgeBaseId,
  "产品设计", // 文本查询
  "https://example.com/design.jpg", // 图片查询
  10
)
 
// 仅使用文本
const textResults = await hybridSearch(
  knowledgeBaseId,
  "用户界面",
  undefined,
  10
)
 
// 仅使用图片
const imageResults = await hybridSearch(
  knowledgeBaseId,
  undefined,
  "https://example.com/ui.jpg",
  10
)

火山引擎API配置

输入格式

文本输入

{
  "type": "text",
  "text": "要向量化的文本内容"
}

图片输入

{
  "type": "image_url",
  "image_url": {
    "url": "https://example.com/image.jpg"
  }
}

API请求示例

{
  "model": "ep-20250531230449-wtdzd",
  "input": [
    {
      "type": "image_url",
      "image_url": {
        "url": "https://ark-project.tos-cn-beijing.volces.com/images/view.jpeg"
      }
    }
  ]
}

注意事项

  1. 图片编码方式: 默认使用Base64编码,无需配置公网URL
  2. API限流: 图片处理时增加了延迟(200ms)以避免API限流
  3. 批处理大小: 图片处理时使用较小的批处理大小(5个/批)
  4. 文件大小限制: 建议图片文件小于10MB,过大的图片可能导致API调用失败
  5. 支持格式: 支持JPEG、PNG、GIF、WebP格式

配置要求

环境变量

# 火山引擎API配置
ARK_API_KEY=your-api-key
ARK_API_URL=https://ark.cn-beijing.volces.com/api/v3/embeddings/multimodal
EMBEDDING_MODEL=your-endpoint-id
 
# 图片服务配置(可选,现在默认使用Base64编码)
# BASE_URL=https://your-domain.com

数据库字段

确保 vectorChunk 表支持存储图片相关的元数据:

-- metadata 字段应该支持 JSON 格式,包含:
{
  "isImage": true,
  "imageUrl": "https://example.com/image.jpg",
  "fileName": "image.jpg",
  "chunkIndex": 0,
  "totalChunks": 1,
  "useBase64": false
}

最佳实践

  1. 图片预处理: 考虑对大图片进行压缩以提高处理速度
  2. 缓存策略: 对向量结果进行缓存以避免重复计算
  3. 错误处理: 实现适当的重试机制处理API调用失败
  4. 相似度计算: 考虑实现客户端相似度计算以减少API调用次数

故障排除

常见错误及解决方案

1. Base64图片格式错误

错误信息: Base64图片格式错误或图片过大

原因: 图片文件格式不支持或文件过大

解决方案:

  • 确保使用支持的格式:JPEG、PNG、GIF、WebP
  • 压缩图片文件大小(建议小于10MB)
  • 检查图片文件是否损坏

2. Next.js 参数访问错误

错误信息: params should be awaited before using its properties

解决方案: 已修复,确保在API路由中先 await params

3. 图片文件过大

错误信息: API超时或内存不足

解决方案:

  • 压缩图片文件
  • 使用适当的图片格式
  • 考虑分批处理

4. API限流

错误信息: 429 Too Many Requests

解决方案:

  • 增加请求间隔(已实现200ms延迟)
  • 减少批处理大小
  • 实现指数退避重试

调试技巧

  1. 检查环境变量:
echo $BASE_URL
echo $ARK_API_KEY
  1. 测试图片URL可访问性:
curl -I $BASE_URL/uploads/knowledge/your-file.jpg
  1. 查看详细日志:
// 在向量化过程中会输出详细日志
console.log("图片处理方式: Base64编码/URL访问")
console.log("Generated image URL: https://...")
  1. 验证API响应:
// 检查API返回的向量维度
console.log("向量维度:", embedding.length)

性能优化

  1. 图片优化:

    • 使用WebP格式减少文件大小
    • 限制图片分辨率(建议不超过2048x2048)
    • 压缩图片质量
  2. 批处理优化:

    • 图片处理使用较小批次(5个/批)
    • 文本处理可使用较大批次(10个/批)
  3. 缓存策略:

    • 缓存向量结果避免重复计算
    • 使用Redis等缓存系统

示例代码

参考 lib/vectorization-examples.ts 文件查看完整的使用示例。

相关文档

Comments