gemma-3-12b-it实战教程:用curl命令行调用Ollama API完成图文问答
gemma-3-12b-it实战教程:用curl命令行调用Ollama API完成图文问答
你是不是觉得,那些能看懂图片并回答问题的AI模型,部署和使用起来一定很复杂?需要写很多代码,或者需要一个复杂的开发环境?
今天,我要告诉你一个好消息:完全不需要。
借助Ollama和它的API,你只需要一个简单的命令行工具——curl,就能轻松调用像Gemma 3 12B这样强大的多模态模型,让它帮你分析图片、回答问题。整个过程就像在浏览器里访问一个网页一样简单。
这篇文章,我将手把手带你,从零开始,只用curl命令,完成一次完整的图文问答。你不需要懂复杂的Python,也不需要搭建任何开发框架,只需要一台能运行命令行的电脑。
1. 准备工作:理解我们要做什么
在开始敲命令之前,我们先花一分钟,搞清楚整个流程的“地图”。
我们的目标:让Gemma 3 12B模型看一张图片,然后回答我们关于这张图片的问题。
我们的工具:
- Ollama:一个强大的工具,它能把像Gemma这样的大模型“打包”成一个本地服务。你可以把它想象成一个“模型服务器”。
- curl:一个命令行工具,用来向网络服务器发送请求和接收响应。在这里,它就是我们的“遥控器”,用来向Ollama服务器发送指令和图片。
- Gemma 3 12B-it 模型:Google出品的轻量级、开源的多模态模型。它既能理解文字,也能看懂图片。
核心流程:
- 确保Ollama服务正在运行,并且已经拉取了
gemma3:12b模型。 - 准备一张你想让模型分析的图片。
- 使用
curl命令,构建一个符合Ollama API格式的请求,把图片和问题一起“打包”发送给Ollama。 - 接收Ollama返回的答案,并在命令行里显示出来。
听起来是不是很简单?我们马上开始。
2. 环境检查:确保Ollama就绪
第一步,我们需要确认两件事:Ollama服务在运行,并且模型已经下载好了。
2.1 检查Ollama服务状态
打开你的终端(Windows上是PowerShell或CMD,Mac/Linux上是Terminal),输入以下命令:
curl http://localhost:11434/api/tags
这个命令在做什么? 它在询问运行在本机11434端口的Ollama服务:“嘿,你那里都有哪些模型?”
如果你看到类似下面的响应(具体模型列表可能不同),说明Ollama服务运行正常:
{
"models": [
{
"name": "gemma3:12b",
"modified_at": "2024-...",
"size": 12000000000,
"digest": "..."
}
]
}
如果看到连接错误(比如 Failed to connect to localhost port 11434): 这说明Ollama没有运行。你需要先去Ollama官网下载并安装Ollama,然后启动它。在Mac/Linux上,安装后通常会自动启动服务。在Windows上,你可能需要在开始菜单找到Ollama并点击运行。
2.2 确认Gemma 3 12B模型已存在
在上一步的响应里,如果你看到了 "gemma3:12b" 这个模型名,恭喜你,模型已经准备好了。
如果列表里没有这个模型,你需要先拉取它。在终端里运行:
ollama pull gemma3:12b
这个命令会从网上下载模型文件,可能需要一些时间,取决于你的网速。下载完成后,再执行2.1的检查命令,就能看到它了。
好了,服务器和模型都准备好了。接下来,我们需要一张图片和一个问题。
3. 实战开始:用curl发送图文问答请求
这是最核心的一步。我们将构造一个curl命令,把图片和文字问题一起发送给模型。
假设我们有一张图片叫 cat.jpg,里面是一只猫。我们想问模型:“图片里是什么动物?”
3.1 理解API请求格式
Ollama的图文对话API端点(地址)是:http://localhost:11434/api/generate 我们需要以JSON格式向它发送一个POST请求。这个JSON里主要包含:
model: 指定使用哪个模型,这里是"gemma3:12b"。prompt: 我们的文字问题,比如"图片里是什么动物?"。images: 一个数组,里面包含图片的Base64编码字符串。Base64是一种把二进制图片数据转换成纯文本的方法,方便在JSON里传输。stream: 是否以流式(一边生成一边返回)的方式接收响应。我们设为false,让它一次性返回完整答案。
3.2 构建完整的curl命令
现在,我们把所有部分组合起来。在终端里,输入以下命令(这是一条很长的命令,建议先完整复制):
curl http://localhost:11434/api/generate \
-H "Content-Type: application/json" \
-d '{
"model": "gemma3:12b",
"prompt": "图片里是什么动物?",
"images": ["'"$(base64 -i cat.jpg)"'"],
"stream": false
}'
让我拆解一下这个命令:
curl http://localhost:11434/api/generate: 这是向Ollama的API发送请求。-H "Content-Type: application/json": 告诉服务器,我们发送的数据是JSON格式。-d '...':-d后面跟着的就是我们要发送的数据(请求体)。"model": "gemma3:12b": 指定模型。"prompt": "图片里是什么动物?": 我们的问题。"images": ["..."]: 图片的Base64数据。$(base64 -i cat.jpg)这部分是命令替换,它会先执行base64 -i cat.jpg命令把图片编码,然后把结果字符串放到这里。"stream": false: 非流式响应。
注意:base64 -i cat.jpg 这个命令在Mac和Linux上通常可用。如果你的系统不支持,或者图片不在当前目录,你需要调整路径或使用其他方式先获取图片的Base64编码。
3.3 解读模型的回应
执行上面的命令后,你会收到一个JSON格式的响应。它可能看起来像这样(经过简化):
{
"model": "gemma3:12b",
"created_at": "2024-...",
"response": "图片中是一只猫,看起来像一只橘猫,它正趴在地上或某个平面上。",
"done": true,
"context": [...],
"total_duration": 5049375000,
"load_duration": 301250000,
"prompt_eval_count": 265,
"prompt_eval_duration": 1620000000,
"eval_count": 23,
"eval_duration": 3125000000
}
我们最关心的是 "response" 这个字段,它的值 "图片中是一只猫,看起来像一只橘猫,它正趴在地上或某个平面上。" 就是Gemma模型对图片的分析和回答!它准确地识别出了动物是猫,甚至还给出了毛色和姿态的细节。
其他字段是一些元信息,比如用了哪个模型、处理耗时等。
恭喜你! 你已经成功完成了一次通过命令行调用多模态AI模型的图文问答。
4. 更多玩法与技巧
掌握了基本方法后,你可以玩出更多花样。
4.1 问更复杂的问题
不要只满足于“这是什么”。你可以基于图片内容进行推理、描述细节、甚至让它编故事。
示例命令:
curl http://localhost:11434/api/generate \
-H "Content-Type: application/json" \
-d '{
"model": "gemma3:12b",
"prompt": "详细描述这张图片的场景、主体物体的颜色、形态,并猜测拍摄这张照片可能的时间(白天/夜晚)和季节。",
"images": ["'"$(base64 -i landscape.jpg)"'"],
"stream": false
}'
4.2 处理多张图片
Ollama的API支持一次性传入多张图片。你只需要在 images 数组里放入多个Base64字符串即可。
curl http://localhost:11434/api/generate \
-H "Content-Type: application/json" \
-d '{
"model": "gemma3:12b",
"prompt": "比较这两张图片中的猫咪,它们在外观上有什么主要区别?",
"images": ["'"$(base64 -i cat1.jpg)"'", "'"$(base64 -i cat2.jpg)"'"],
"stream": false
}'
4.3 使用流式响应 (stream)
如果你想知道模型是如何“思考”并一个字一个字生成答案的,可以把 stream 设为 true。不过,用curl直接看流式响应会是一串连续的事件流,可读性不好。通常流式响应更适合在编程中处理,或者在Web前端展示。
4.4 将常用命令封装成脚本
如果你经常需要分析图片,每次都打这么长的命令太麻烦了。可以创建一个简单的Shell脚本(比如 ask_picture.sh):
#!/bin/bash
# ask_picture.sh
IMAGE_PATH=$1
QUESTION=$2
if [ -z "$IMAGE_PATH" ] || [ -z "$QUESTION" ]; then
echo "用法: ./ask_picture.sh <图片路径> <问题>"
exit 1
fi
IMAGE_BASE64=$(base64 -i "$IMAGE_PATH")
curl http://localhost:11434/api/generate \
-H "Content-Type: application/json" \
-d '{
"model": "gemma3:12b",
"prompt": "'"$QUESTION"'",
"images": ["'"$IMAGE_BASE64"'"],
"stream": false
}' | jq -r '.response'
给脚本执行权限:chmod +x ask_picture.sh 然后就可以这样使用了:./ask_picture.sh my_dog.jpg "这只狗是什么品种?"
注意,这个脚本示例使用了 jq 工具来从JSON响应中直接提取 response 字段。如果你的系统没有 jq,需要先安装它(例如在Ubuntu上:sudo apt install jq),或者修改脚本用其他方式解析JSON。
5. 总结
通过这篇教程,我们完成了一次非常“极客”的体验:不依赖任何图形界面或复杂的代码,仅用最基础的命令行工具,就调用了前沿的多模态大模型。
我们来快速回顾一下关键步骤:
- 确保环境:运行Ollama并拉取
gemma3:12b模型。 - 构造请求:使用
curl命令,以JSON格式将图片(Base64编码)和问题发送到http://localhost:11434/api/generate。 - 解析响应:从返回的JSON中获取
response字段,这就是模型的答案。
这种方法的好处是极其轻量和灵活。你可以在服务器上、在自动化脚本中、或者在任何能运行命令行的地方使用它。它剥离了所有不必要的界面,直击核心功能。
下次当你需要快速让AI“看一眼”图片并给出见解时,不妨打开终端,试试这条 curl 命令吧。你会发现,强大的AI能力,其实离命令行并不遥远。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐



所有评论(0)