VLM 集成指南¶
本文档说明如何配置和使用 PDF Module 的 VLM (Vision Language Model) 视觉增强功能。
一、概述¶
1.1 什么是 VLM 增强?¶
VLM 增强是一种可选的 PDF 处理升级方案,通过视觉语言模型对 PDF 页面进行布局分析,提升复杂文档的提取质量。
1.2 适用场景¶
| 场景 | 基础模式 | VLM 增强 |
|---|---|---|
| 纯文本文档 | ✅ 推荐 | 不必要 |
| 扫描件 PDF | ❌ 效果差 | ✅ 推荐 |
| 复杂布局 (多栏/表格) | ⚠️ 可能混乱 | ✅ 推荐 |
| 图文混排 | ❌ 丢失图片信息 | ✅ 推荐 |
| 手写批注 | ❌ 无法识别 | ✅ 推荐 |
二、支持的模型¶
2.1 模型列表¶
| 模型 | 提供商 | 特点 | 推荐场景 |
|---|---|---|---|
glm-4v-flash |
智谱 AI | 免费、快速 | 日常使用 |
glm-4v-plus |
智谱 AI | 高精度 | 复杂文档 |
gpt-4o |
OpenAI | 通用性强 | 国际文档 |
claude-3.5-sonnet |
Anthropic | 推理能力强 | 学术论文 |
2.2 模型选择建议¶
中文文档 → glm-4v-flash / glm-4v-plus
英文文档 → gpt-4o / claude-3.5-sonnet
学术论文 → claude-3.5-sonnet
快速预览 → glm-4v-flash
高精度需求 → glm-4v-plus / gpt-4o
三、配置方法¶
3.1 环境变量配置¶
智谱 AI (推荐)
// ~/.cursor/mcp.json
{
"mcpServers": {
"pdf-module": {
"command": "/path/to/pdf-mcp",
"env": {
"VLM_API_KEY": "your_zhipu_api_key",
"VLM_MODEL": "glm-4v-flash",
"VLM_ENDPOINT": "https://open.bigmodel.cn/api/paas/v4/chat/completions",
"VLM_TIMEOUT_SECS": "30",
"VLM_MAX_CONCURRENCY": "5"
}
}
}
}
OpenAI
{
"mcpServers": {
"pdf-module": {
"command": "/path/to/pdf-mcp",
"env": {
"VLM_API_KEY": "sk-xxx",
"VLM_MODEL": "gpt-4o",
"VLM_ENDPOINT": "https://api.openai.com/v1/chat/completions",
"VLM_TIMEOUT_SECS": "60"
}
}
}
}
Anthropic
{
"mcpServers": {
"pdf-module": {
"command": "/path/to/pdf-mcp",
"env": {
"VLM_API_KEY": "sk-ant-xxx",
"VLM_MODEL": "claude-3.5-sonnet",
"VLM_ENDPOINT": "https://api.anthropic.com/v1/messages",
"VLM_TIMEOUT_SECS": "60"
}
}
}
}
3.2 环境变量说明¶
| 变量 | 必填 | 默认值 | 说明 |
|---|---|---|---|
VLM_API_KEY |
✅ | - | API 密钥 |
VLM_MODEL |
❌ | glm-4v-flash |
模型名称 |
VLM_ENDPOINT |
❌ | 智谱 API | API 端点 |
VLM_TIMEOUT_SECS |
❌ | 30 |
请求超时 (秒) |
VLM_MAX_CONCURRENCY |
❌ | 5 |
最大并发数 |
VLM_MAX_RETRIES |
❌ | 3 |
最大重试次数 |
VLM_ENABLE_THINKING |
❌ | false |
启用思考模式 |
VLM_ENABLE_FUNCTION_CALL |
❌ | false |
启用函数调用 |
四、工作原理¶
4.1 处理流程¶
┌─────────────────────────────────────────────────────────────┐
│ PDF 输入 │
└──────────────────────────┬──────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ PdfiumEngine (本地 FFI) │
│ ┌─────────────────┐ ┌─────────────────────────────────┐ │
│ │ 文本提取 │ │ 页面渲染 (RGBA 像素) │ │
│ │ (所有页面) │ │ (按需,DPI=150) │ │
│ └────────┬────────┘ └────────────────┬────────────────┘ │
└───────────┼──────────────────────────────┼──────────────────┘
│ │
│ ▼
│ ┌───────────────────────────────────┐
│ │ VlmGateway │
│ │ ┌─────────────────────────────┐ │
│ │ │ Base64 编码 │ │
│ │ │ 构建 API 请求 │ │
│ │ │ 并发控制 (Semaphore) │ │
│ │ │ 重试 + 指数退避 │ │
│ │ └─────────────────────────────┘ │
│ └────────────────┬──────────────────┘
│ │
│ ▼
│ ┌───────────────────────────────────┐
│ │ VLM API (远程) │
│ │ 返回: 区域类型 + 坐标 + 内容 │
│ └────────────────┬──────────────────┘
│ │
▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ 结果合并 │
│ - 文本内容合并 │
│ - 区域标注 │
│ - 阅读顺序推断 │
└──────────────────────────┬──────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 结构化输出 │
└─────────────────────────────────────────────────────────────┘
4.2 降级策略¶
当 VLM 不可用时,系统自动降级到基础模式:
五、使用示例¶
5.1 自动 VLM 增强¶
当配置了 VLM 环境变量后,系统会自动检测扫描件并启用 VLM:
用户: 提取 /path/to/scanned.pdf
AI: [调用 extract_structured]
系统自动:
1. 检测到扫描件 (文本提取量 < 阈值)
2. 启用 VLM 布局分析
3. 合并结果返回
5.2 强制 VLM 模式¶
5.3 查看处理状态¶
VLM 处理结果会包含元数据:
{
"extracted_text": "...",
"page_count": 10,
"extraction_metadata": {
"vlm_used": true,
"vlm_model": "glm-4v-flash",
"vlm_pages_processed": 10,
"vlm_degraded": false
}
}
六、性能优化¶
6.1 并发控制¶
6.2 超时设置¶
6.3 重试策略¶
七、成本控制¶
7.1 模型成本对比¶
| 模型 | 输入价格 | 输出价格 | 100页估算 |
|---|---|---|---|
| glm-4v-flash | 免费 | 免费 | ¥0 |
| glm-4v-plus | ¥0.01/千token | ¥0.01/千token | ~¥2 |
| gpt-4o | $2.5/百万token | $10/百万token | ~$0.5 |
| claude-3.5-sonnet | $3/百万token | $15/百万token | ~$0.8 |
7.2 成本优化建议¶
- 使用免费模型:
glm-4v-flash适合大多数场景 - 选择性启用: 只对扫描件启用 VLM
- 批量处理: 减少重复请求
- 缓存结果: 避免重复处理同一 PDF
八、故障排查¶
8.1 常见错误¶
| 错误 | 原因 | 解决 |
|---|---|---|
VLM_API_KEY not set |
未配置 API Key | 设置环境变量 |
Timeout |
请求超时 | 增加 VLM_TIMEOUT_SECS |
Rate limit |
API 限流 | 降低 VLM_MAX_CONCURRENCY |
Model not found |
模型名称错误 | 检查 VLM_MODEL |
Network error |
网络问题 | 检查网络连接 |
8.2 调试模式¶
启用详细日志:
8.3 测试 VLM 连接¶
# 测试 API 连通性
curl -X POST https://open.bigmodel.cn/api/paas/v4/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "glm-4v-flash", "messages": [{"role": "user", "content": "test"}]}'
九、安全建议¶
9.1 API Key 管理¶
9.2 数据隐私¶
- PDF 内容会发送到 VLM API
- 敏感文档建议使用本地模型
- 了解各提供商的隐私政策