我第一次接触多模态AI开发时,面对满屏的专业术语完全不知所措。花了整整三天才搞清楚什么是vision model、什么是base64编码、为什么我的图片传不上去。三年后的今天,我决定写一篇真正面向零基础开发者的教程——不假设你会任何东西,手把手带你从安装环境到跑通第一个多模态Chain。

本文所有代码基于 HolySheep API 完成,国内直连延迟低于50ms,支持GPT-4o、Gemini 2.0等多模态模型,新用户注册即送免费额度。

一、多模态Chain到底是什么?

先不要被名字吓到。普通AI只能处理文字,你问它"这张图片里有什么",它会一脸懵。多模态AI不一样——它同时理解图片和文字,就像一个能"看见"的智能助手。

举个例子:你发给它一张产品实物图,问"这个产品在我们的库存系统里属于哪一类?"它会先"看"图,再结合文字问题,给出准确答案。这就是多模态Chain的典型应用场景。

二、环境准备:30分钟从零搭建

我们先在电脑上准备好开发环境。

2.1 安装Python(如果你还没有)

先去 python.org 下载安装包(选3.9以上版本)。安装时记得勾选"Add Python to PATH"。

2.2 创建项目文件夹

在命令行里执行:

mkdir multimodal-demo
cd multimodal-demo
python -m venv venv

Windows激活虚拟环境

venv\Scripts\activate

Mac/Linux激活虚拟环境

source venv/bin/activate

2.3 安装LangChain及相关包

pip install langchain langchain-openai pillow python-dotenv requests

我第一次安装时遇到版本冲突问题,后来发现用指定版本更稳定:

pip install langchain==0.1.0 langchain-openai==0.0.5

三、API Key获取与配置

这里以 HolySheep 为例,因为它的优势非常明显:

访问 立即注册 HolySheep,注册后在控制台创建API Key。

在项目根目录创建 .env 文件:

HOLYSHEEP_API_KEY=YOUR_HOLYSHEEP_API_KEY

四、第一个多模态Chain:看图回答问题

我们从最基础的功能开始:上传一张图片,问AI图片里有什么。

4.1 基础版本(单张图片)

import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage
from langchain.tools.render import render_text_description
import base64

加载环境变量

load_dotenv()

初始化模型(使用HolySheep API)

llm = ChatOpenAI( model="gpt-4o", api_key=os.getenv("HOLYSHEEP_API_KEY"), base_url="https://api.holysheep.ai/v1" ) def encode_image_to_base64(image_path): """将本地图片转换为base64编码""" with open(image_path, "rb") as image_file: return base64.b64encode(image_file.read()).decode("utf-8") def ask_about_image(image_path, question): """ 多模态问答:上传图片并提问 image_path: 本地图片路径 question: 你的问题 """ # 编码图片 base64_image = encode_image_to_base64(image_path) # 构建多模态消息 messages = [ HumanMessage(content=[ {"type": "text", "text": question}, {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}} ]) ] # 调用API获取回答 response = llm.invoke(messages) return response.content

测试运行

if __name__ == "__main__": # 确保有一张测试图片 answer = ask_about_image( "test_image.jpg", "请描述这张图片的主要内容" ) print(f"AI回答: {answer}")

4.2 进阶版本:多图对比Chain

实际工作中我们经常需要对比多张图片。我写了一个支持多图输入的版本:

import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain

load_dotenv()

llm = ChatOpenAI(
    model="gpt-4o",
    api_key=os.getenv("HOLYSHEEP_API_KEY"),
    base_url="https://api.holysheep.ai/v1"
)

def encode_images_to_base64(image_paths):
    """批量编码多张图片"""
    encoded_images = []
    for path in image_paths:
        with open(path, "rb") as f:
            encoded_images.append(base64.b64encode(f.read()).decode("utf-8"))
    return encoded_images

def compare_products(image_paths, product_names):
    """
    多图对比Chain:对比多个产品的外观差异
    返回结构化的对比报告
    """
    # 构建多图消息
    content = []
    for i, (img_b64, name) in enumerate(zip(
        encode_images_to_base64(image_paths), 
        product_names
    )):
        content.append({"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{img_b64}"}})
    
    # 添加分析指令
    comparison_prompt = f"""请对比以下{len(product_names)}个产品,输出结构化对比报告:
产品列表: {', '.join(product_names)}
对比维度: 外观、颜色、尺寸感、包装风格
输出格式: Markdown表格"""
    
    content.insert(0, {"type": "text", "text": comparison_prompt})
    
    messages = [HumanMessage(content=content)]
    response = llm.invoke(messages)
    return response.content

使用示例

if __name__ == "__main__": # 假设有三款竞品图片 products = ["product_a.jpg", "product_b.jpg", "product_c.jpg"] names = ["竞品A", "竞品B", "竞品C"] report = compare_products(products, names) print(report)

五、价格与成本测算

很多开发者担心多模态调用成本高。我实测了 HolySheep 的主流多模态模型定价(基于2026年最新数据):

相关资源

相关文章

🔥 推荐使用 HolySheep AI

国内直连AI API平台,¥1=$1,支持Claude·GPT-5·Gemini·DeepSeek全系模型

👉 立即注册 →