多模态与模型评测:拓展 AI 的边界

多模态与模型评测:拓展 AI 的边界

AI 核心技能系列 · 第 11 篇


导语

大模型不只是"文字模型"了——它能看图、听声音、理解视频。同时,一个经常被忽略但极其重要的问题是:怎么判断一个 AI 系统到底好不好用?

"感觉还行"不是评测。没有量化的评测,就没有优化方向,就不知道上线后会不会翻车。

这篇文章一次覆盖两个进阶主题:多模态能力模型评测体系


Part I:多模态


一、多模态大模型:从文字到万物

1.1 什么是多模态

多模态(Multimodal)= 模型能处理多种类型的输入和输出:文本、图像、音频、视频。

模型 文本 图像理解 图像生成 语音 视频
GPT-4o ✅(DALL·E)
Claude Opus 4.6
Gemini 2.5 Pro ✅(Imagen)
Llama 4

1.2 为什么多模态重要

真实世界的信息不只是文字——合同是 PDF 扫描件、Bug 是截图、会议是录音、产品是设计稿。一个只能处理文字的 AI,在很多场景下是"残缺"的。


二、视觉理解:图像与文档

2.1 主流视觉能力

能力 说明 实际应用
图片描述 理解图片内容并文字描述 无障碍、内容审核
OCR 识别图片中的文字 票据识别、文档数字化
图表解读 理解数据图表的含义 数据分析、报告解读
文档理解 解析 PDF/扫描件的结构和内容 合同审查、表格提取
设计稿解读 理解 UI 设计稿 设计稿转代码

2.2 代码示例

from openai import OpenAI
import base64

client = OpenAI()

# 方式一:传入图片 URL
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "这张图片中有什么?请详细描述。"},
                {
                    "type": "image_url",
                    "image_url": {"url": "https://example.com/photo.jpg"}
                }
            ]
        }
    ]
)

# 方式二:传入本地图片(Base64)
def encode_image(image_path):
    with open(image_path, "rb") as f:
        return base64.b64encode(f.read()).decode("utf-8")

image_data = encode_image("receipt.jpg")
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "请提取这张发票中的以下信息:发票号码、金额、日期、开票方。以 JSON 格式输出。"},
                {
                    "type": "image_url",
                    "image_url": {"url": f"data:image/jpeg;base64,{image_data}"}
                }
            ]
        }
    ],
    response_format={"type": "json_object"}
)
print(response.choices[0].message.content)

三、语音与音频处理

3.1 核心能力

能力 代表工具 用途
语音识别 (ASR) Whisper, Gemini 语音转文字
语音合成 (TTS) OpenAI TTS, ElevenLabs 文字转语音
实时对话 GPT-4o Realtime API 语音实时交互

3.2 语音处理流水线

from openai import OpenAI

client = OpenAI()

# 1. 语音转文字 (ASR)
with open("meeting_recording.mp3", "rb") as audio_file:
    transcript = client.audio.transcriptions.create(
        model="whisper-1",
        file=audio_file,
        language="zh",
        response_format="text"
    )
print(f"会议记录: {transcript}")

# 2. 用 LLM 处理文本(总结会议)
summary = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": "你是一个会议助手,请总结会议要点。"},
        {"role": "user", "content": f"以下是会议录音的文字稿,请提取关键决策和待办事项:\n\n{transcript}"}
    ]
)

# 3. 文字转语音 (TTS)
tts_response = client.audio.speech.create(
    model="tts-1",
    voice="alloy",
    input=summary.choices[0].message.content
)
tts_response.stream_to_file("meeting_summary.mp3")

Part II:模型评测


四、为什么评测很重要

"感觉还行"不等于"真的好用"。

没有评测的 AI 项目:
  "我觉得回答挺好的" → 上线 → 用户投诉 → "怎么回事?" → 无从排查

有评测的 AI 项目:
  "Faithfulness 0.85, Relevancy 0.78" → 针对性优化 → "优化后 0.92, 0.89" → 上线

评测的三个层次:

层次 评什么 方法 负责人
模型层 模型本身的基础能力 Benchmark(MMLU 等) 模型团队
应用层 模型在特定任务的表现 自定义评测集 AI 工程师
业务层 对业务指标的影响 A/B 测试、用户满意度 产品团队

五、评测体系设计

5.1 基准测试(Benchmark)

Benchmark 评测内容 指标
MMLU 57 个学科知识 准确率
HumanEval 代码生成 Pass@K
GSM8K 数学推理 准确率
MT-Bench 多轮对话质量 1-10 评分
LMSYS Chatbot Arena 综合用户偏好 Elo 评分

5.2 LLM-as-Judge(用 LLM 评 LLM)

用一个强模型(如 GPT-4o)来评判另一个模型的输出质量。

def llm_judge(question, answer, reference=None):
    """用 GPT-4o 作为裁判评估回答质量"""
    judge_prompt = f"""请评估以下回答的质量,按 1-5 分打分。

评分标准:
1 分:完全错误或无关
2 分:部分正确但有重大错误
3 分:基本正确但不完整
4 分:正确且完整
5 分:优秀,超出预期

问题:{question}
{"参考答案:" + reference if reference else ""}
待评估回答:{answer}

请输出 JSON:{{"score": <1-5>, "reason": "<评分理由>"}}"""

    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": judge_prompt}],
        response_format={"type": "json_object"}
    )
    return json.loads(response.choices[0].message.content)

5.3 评测方法对比

方法 成本 可靠性 适用场景
Benchmark 高(标准化) 模型基础能力对比
LLM-as-Judge 中高 开放式生成任务
人工评估 最高 最终验收
自动指标 中(任务依赖) 分类、抽取等有标准答案的任务

六、构建自己的评测管线

import json
from dataclasses import dataclass
from typing import List

@dataclass
class EvalCase:
    question: str
    expected: str
    category: str

@dataclass
class EvalResult:
    question: str
    expected: str
    actual: str
    score: float
    reason: str

def build_eval_pipeline(model_fn, eval_cases: List[EvalCase]) -> dict:
    """构建评测管线"""
    results = []
    
    for case in eval_cases:
        # 1. 获取模型输出
        actual = model_fn(case.question)
        
        # 2. 用 LLM-as-Judge 评分
        judgment = llm_judge(case.question, actual, case.expected)
        
        results.append(EvalResult(
            question=case.question,
            expected=case.expected,
            actual=actual,
            score=judgment["score"],
            reason=judgment["reason"]
        ))
    
    # 3. 汇总统计
    avg_score = sum(r.score for r in results) / len(results)
    by_category = {}
    for r in results:
        cat = next(c.category for c in eval_cases if c.question == r.question)
        by_category.setdefault(cat, []).append(r.score)
    
    category_scores = {
        cat: sum(scores)/len(scores) 
        for cat, scores in by_category.items()
    }
    
    return {
        "overall_score": avg_score,
        "category_scores": category_scores,
        "total_cases": len(results),
        "details": results
    }

# 使用示例
eval_cases = [
    EvalCase("什么是 RAG?", "RAG 是检索增强生成...", "基础概念"),
    EvalCase("LoRA 的原理?", "LoRA 通过低秩矩阵分解...", "技术深度"),
    # ...更多测试用例
]

report = build_eval_pipeline(my_model_fn, eval_cases)
print(f"总体得分: {report['overall_score']:.2f}")
for cat, score in report['category_scores'].items():
    print(f"  {cat}: {score:.2f}")

七、RAG 评测专题

RAG 系统有特殊的评测维度——不仅要评生成质量,还要评检索质量:

指标 含义 好的范围
Context Precision 检索到的文档中,真正相关的比例 > 0.8
Context Recall 所有相关文档中,被检索到的比例 > 0.7
Faithfulness 回答是否忠实于检索到的文档(不编造) > 0.9
Answer Relevancy 回答是否回答了用户的问题 > 0.8

使用 RAGAS 评测

from ragas import evaluate
from ragas.metrics import (
    faithfulness, answer_relevancy,
    context_precision, context_recall
)
from datasets import Dataset

# 准备评测数据
eval_data = {
    "question": ["公司的年假政策是什么?", "如何申请报销?"],
    "answer": ["入职满一年后享有5天年假...", "填写报销单并提交..."],
    "contexts": [
        ["员工入职满一年后享有5天年假,满3年10天..."],
        ["报销流程:1.填写报销单 2.主管审批..."]
    ],
    "ground_truth": ["入职满一年5天,满三年10天...", "填写报销单,主管审批后..."]
}

dataset = Dataset.from_dict(eval_data)

# 执行评测
results = evaluate(
    dataset,
    metrics=[faithfulness, answer_relevancy, context_precision, context_recall]
)

print(results)
# {'faithfulness': 0.92, 'answer_relevancy': 0.88, 
#  'context_precision': 0.85, 'context_recall': 0.78}

八、职业视角

方向 价值
多模态 差异化竞争力——大部分人只会处理文本
评测能力 企业中极度稀缺——很多团队"凭感觉"做 AI,缺少评测体系

面试高频问题:

  • 怎么评估一个 RAG 系统的效果?(Faithfulness + Relevancy + Context Precision/Recall)
  • LLM-as-Judge 有什么问题?(位置偏差、自我偏好、长度偏差)
  • 你会怎么为一个新的 AI 功能设计评测方案?(确定评测维度→构建测试集→选择评测方法→建立基线→持续回归)

总结

多模态

  1. GPT-4o/Gemini 已原生支持视觉+语音,Claude 支持视觉
  2. 视觉理解的典型应用:OCR、文档解析、图表分析、设计稿转代码
  3. 语音流水线:ASR(Whisper) → LLM 处理 → TTS

模型评测

  1. 三个层次:模型层(Benchmark)→ 应用层(自定义评测)→ 业务层(A/B 测试)
  2. LLM-as-Judge 是开放式任务的主流评测方法
  3. RAG 评测四维度:Context Precision/Recall + Faithfulness + Answer Relevancy
  4. 评测不是一次性的——需要持续回归测试

本文是 AI 核心技能系列 第 11 篇,共 12 篇。上一篇:Skills 与知识系统 | 下一篇:AI 岗位全景与转行指南

关注公众号「coft」,获取完整系列更新、配套代码和学习路线图。一起交流 AI 转行经验,助力职业跃升,迈向高薪岗位。

posted @ 2026-02-27 18:24  warm3snow  阅读(1)  评论(0)    收藏  举报