告别OpenAI SDK!用原生Fetch玩转多模态图像生成:Prompt原来可以这样用
前言
作为一名NLP开发者,你可能每天都在和Prompt打交道——无论是情感分类、实体抽取,还是让大模型“看图说话”。但你是否想过:摆脱庞大的SDK,只用一行fetch,就能同时驾驭文本理解和图像生成?
本文将带你从Prompt在NLP中的经典应用出发,一路进阶到多模态图像生成,并手把手演示如何用原生HTTP请求调用阿里云通义万象(qwen-image)API,通过多张参考图+文本指令精准生成新图像。全文无SDK依赖,只有最纯粹的fetch实战。
一、Prompt在NLP中的“基本功”:情感推断与信息提取
Prompt(提示)是引导大语言模型完成特定任务的输入。在纯文本领域,它早已被证明是“四两拨千斤”的利器。
1. 情感推断(Sentiment Inference)
通过设计简单的Prompt,可以让模型判断一段文本的情感倾向。
Prompt: 请判断下面评论的情感是「正面」还是「负面」。
评论:等了两个小时才上菜,服务员还板着脸。
情感:
模型输出:负面
更高级的用法包括Few-shot Prompting(给几个例子再提问)和Chain-of-Thought(引导模型逐步推理)。
2. 信息提取(Information Extraction)
从非结构化文本中抽取出结构化信息,例如命名实体识别、关系抽取。
Prompt: 从以下文本中提取「人名」「组织名」「地点」。
文本:马斯克在SpaceX总部宣布,星舰将于2026年从火星基地起飞。
输出格式:JSON
模型输出:{"人名":"马斯克","组织名":"SpaceX","地点":"火星基地"}
核心洞察:无论任务多么复杂,Prompt本质上都是用自然语言向模型下达清晰的指令。而当我们把这种能力扩展到“图像+文本”的多模态场景时,Prompt的魔力被再次放大。
二、跨入多模态:从文本生成到图像生成
传统图像生成(如GAN)需要大量训练数据。如今,多模态大模型允许我们通过自然语言+视觉输入来生成或编辑图像。
-
文本到图像:
Prompt = “一只穿西装的柴犬”→ 模型输出图像。 -
多模态Prompt:
文本指令 + 参考图像1 + 参考图像2→ 模型综合理解并生成新图像。
这就像给了模型三样东西:“图1的人物 + 图2的裙子 + 图3的姿势” → 它就能生成“图1的女生穿着图2的裙子摆出图3的姿势”这张新图。这才是Prompt工程在视觉领域的杀手级应用。
三、实战:用原生Fetch调用多模态生成API
很多人习惯用OpenAI SDK(如openai.createImage),但它的本质也不过是一次HTTP请求。用原生fetch的好处是:
-
无需安装和维护SDK版本
-
可以直接看到请求/响应的全貌,方便调试
-
轻松切换不同厂商的API(阿里云、月之暗面、讯飞等)
下面我们以阿里云DashScope的通义万象(qwen-image-2.0-pro)为例,演示如何通过fetch发送多模态生成请求。
3.1 准备工作
-
注册阿里云账号,开通DashScope服务,获取API Key。
-
在项目中安装
dotenv(用于管理密钥)。
npm install dotenv
-
创建
.env文件:
DASHSCOPE_API_KEY=sk-xxxxxxxxxxxxxxxxxxxx
3.2 完整的图像生成代码(Node.js环境)
import dotenv from 'dotenv';
dotenv.config();
async function generateMultiModalImage() {
const API_KEY = process.env.DASHSCOPE_API_KEY;
const API_URL = 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation';
// 构造请求体 —— 这是Prompt的核心!
const requestBody = {
model: 'qwen-image-2.0-pro',
input: {
messages: [
{
role: 'user',
content: [
// 参考图1: 人物
{ image: 'https://example.com/person.png' },
// 参考图2: 裙子
{ image: 'https://example.com/skirt.png' },
// 参考图3: 姿势
{ image: 'https://example.com/pose.png' },
// 文本指令
{ text: '图1中的女生穿着图2中的黑色裙子,按图3的姿势坐下' }
]
}
]
},
parameters: {
// 可选:生成图片尺寸、数量等
size: '1024*1024',
n: 1
}
};
try {
const response = await fetch(API_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${API_KEY}`
},
body: JSON.stringify(requestBody)
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const result = await response.json();
console.log('生成成功,返回数据:', result);
// 阿里云返回的图片URL通常位于 output.choices[0].message.content[0].image
const generatedImageUrl = result.output?.choices?.[0]?.message?.content?.[0]?.image;
if (generatedImageUrl) {
console.log('图片地址:', generatedImageUrl);
}
return result;
} catch (error) {
console.error('请求失败:', error);
}
}
generateMultiModalImage();
3.3 关键点解析
| 组成部分 | 作用 | 说明 |
|---|---|---|
| URL | 多模态生成服务的入口 | 阿里云固定地址,不同厂商不同 |
| Method: POST | 创建资源 | 比GET更安全,请求体可携带复杂数据 |
| Headers.Authorization | 身份认证 | Bearer ${API_KEY} 格式 |
| Headers.Content-Type | 告诉服务器请求体是JSON | 必须是application/json |
| Body | 真正的Prompt内容 | 包含messages数组,每个元素可混合image和text |
3.4 为什么这个Prompt设计很妙?
我们用了 三张参考图 + 一段文本指令:
-
{ image: ... }提供视觉锚点(人物、衣服、姿势) -
{ text: ... }描述它们之间的组合关系
模型需要同时理解:
-
图1里谁是“女生”
-
图2中哪件是“黑色裙子”
-
图3的“姿势”是什么角度
这种多图联合推理能力,是纯文本Prompt无法实现的,也是多模态大模型真正的价值所在。
四、从Demo到生产:你需要注意的4个细节
-
图片URL必须可公开访问
阿里云/OpenAI等服务的图像输入通常要求图片是公网可访问的URL,或使用Base64编码(部分平台支持)。测试时可以使用图床或阿里云OSS。 -
Prompt越具体,生成越精准
对比:
❌ “改一下这张图”
✅ “将图1中女生的蓝色连衣裙换成图2中的红色外套,背景保持原样” -
处理异步与重试
图像生成往往需要几秒到十几秒,记得设置超时和重试逻辑。 -
成本控制
多模态生成消耗的Token数(或调用次数)通常高于纯文本,建议限制生成图片数量(parameters.n=1)。
五、扩展:把HTTP请求封装成你的专属“SDK”
你可以轻松封装一个通用函数,适配不同厂商的API:
async function callMultiModalAPI(provider, promptImages, textInstruction) {
const endpoints = {
aliyun: 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation',
openai: 'https://api.openai.com/v1/images/generations', // OpenAI暂不支持多图输入,需用其他接口
// 其他厂商...
};
// 根据provider构造不同的请求体...
}
这样,你既享受了fetch的轻量,又保留了对底层逻辑的完全控制。
总结
| 阶段 | 技术本质 | Prompt示例 |
|---|---|---|
| NLP情感推断 | 文本 → 类别 | “判断这句话是正面还是负面:...” |
| NLP信息提取 | 文本 → JSON | “从文本中抽出人名、地名” |
| 文本生成图像 | 文本 → 图像 | “一只穿西装的柴犬” |
| 多模态生成 | 图像+文本 → 新图像 | “图1的人 + 图2的裙子 + 图3的姿势” |
无论任务如何变化,Prompt始终是连接人类意图与模型能力的桥梁。而原生fetch则是最轻量、最透明的桥梁建设工具——它让你不被任何SDK绑架,赤裸裸地看到HTTP请求的每个字节。
希望这篇文章能帮你打开思路:下次想要调用大模型时,不妨直接打开浏览器控制台或Node.js REPL,用几行fetch就验证你的Prompt设计。
掌握了Prompt + fetch,你就拥有了调用一切大模型API的万能钥匙。 🔑
互动一下:你在实际项目中用过哪些“脑洞大开”的多模态Prompt?欢迎在评论区分享你的经验~
更多推荐


所有评论(0)