一、项目背景与产品介绍
随着人工智能的发展,文本生成图像(文生图)技术在广告创意、视觉设计、内容营销等领域应用广泛。阿里云通义千问作为先进的大语言模型,不仅具备强大的文本理解能力,还能与图像生成技术结合,实现根据文本描述自动生成高质量图像。
本博客将展示如何使用通义千问与阿里云的其他产品(如函数计算、API 网关、对象存储 OSS)搭建一个简单的文生图系统,实现用户输入文本并生成相应图像的功能。
二、系统架构设计
文生图系统架构如下:
通义千问 API:处理用户文本输入,生成图像描述。
图像生成 API:将文本描述转换为图像。
函数计算(FC):承载逻辑处理,将用户请求分发到相关 API。
对象存储(OSS):存储生成的图像并提供外部访问。
API 网关:作为统一入口,提供 HTTP 接口。
前端界面:提供用户输入文本并展示生成图像的页面。
三、阿里云相关产品的使用流程
- 通义千问 API 接入
登录阿里云,进入通义千问控制台。
开通 API 服务,获取AppKey和AppSecret。
确认通义千问可正常生成图像描述。
示例调用(Python代码)
import requests
import json
API_URL = "https://qianwen-api.aliyun.com/v1/completions"
APP_KEY = "your_app_key"
APP_SECRET = "your_app_secret"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {APP_SECRET}"
}
data = {
"model": "qianwen-chat",
"prompt": "请描述一幅夕阳下的山川图景。",
"max_tokens": 100,
"temperature": 0.7
}
response = requests.post(API_URL, headers=headers, data=json.dumps(data))
print(response.json())
输出事例:
{
"choices": [
{
"text": "一幅夕阳西下,群山连绵起伏,天空染上橙红色的图景。"
}
]
}
- 图像生成 API 接入(可选 Midjourney 或 DALL·E 替代)
将通义千问生成的描述发送到图像生成 API。以下是调用示例:
IMAGE_API_URL = "https://api.image-generator.com/v1/generate"
image_data = {
"prompt": response.json()["choices"][0]["text"],
"size": "1024x1024"
}
image_response = requests.post(IMAGE_API_URL, headers={"Authorization": "Bearer image_api_key"}, data=json.dumps(image_data))
image_url = image_response.json().get("url")
print(f"生成的图像链接:{image_url}")
- 函数计算(FC)处理逻辑
登录阿里云控制台,进入函数计算。
创建新的函数,选择 HTTP 触发器。
部署完整代码,将用户文本生成图像并返回结果。
函数代码示例:
import json
import requests
import os
def handler(environ, start_response):
try:
request_body = environ['wsgi.input'].read().decode('utf-8')
user_prompt = json.loads(request_body)['prompt']
# 通义千问生成图像描述
api_url = "https://qianwen-api.aliyun.com/v1/completions"
app_secret = os.getenv("APP_SECRET")
headers = {"Content-Type": "application/json", "Authorization": f"Bearer {app_secret}"}
payload = {"model": "qianwen-chat", "prompt": user_prompt, "max_tokens": 100, "temperature": 0.7}
response = requests.post(api_url, headers=headers, json=payload)
description = response.json().get("choices", [{}])[0].get("text")
# 调用图像生成 API
image_api_url = "https://api.image-generator.com/v1/generate"
image_data = {"prompt": description, "size": "1024x1024"}
image_response = requests.post(image_api_url, headers=headers, json=image_data)
image_url = image_response.json().get("url")
start_response('200 OK', [('Content-Type', 'application/json')])
return [json.dumps({"image_url": image_url}).encode('utf-8')]
except Exception as e:
start_response('500 Internal Server Error', [('Content-Type', 'text/plain')])
return [str(e).encode('utf-8')]
- 配置 API 网关
登录阿里云,进入API 网关。
创建 API 服务并绑定函数计算,设置路径为/generate-image。
配置 API 安全策略。
- 存储图像到 OSS
登录阿里云,进入OSS 控制台。
创建一个存储桶并设置公共读取权限。
上传图像并获取访问链接。
示例 OSS 上传代码
import oss2
def upload_image_to_oss(image_url, file_name):
auth = oss2.Auth('your_access_key_id', 'your_access_key_secret')
bucket = oss2.Bucket(auth, 'oss-cn-your-region.aliyuncs.com', 'your_bucket_name')
image_data = requests.get(image_url).content
bucket.put_object(file_name, image_data)
return f"https://{bucket.bucket_name}.oss-cn-your-region.aliyuncs.com/{file_name}"
四、前端展示示例
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>文生图系统</title>
</head>
<body>
<h1>文生图系统</h1>
<textarea id="prompt" placeholder="请输入生成图像的描述"></textarea><br>
<button onclick="generateImage()">生成图像</button>
<img id="result" style="display:none;" />
<script>
async function generateImage() {
const prompt = document.getElementById('prompt').value;
const response = await fetch('https://your_api_gateway_url/generate-image', {
method: 'POST',
headers: {
'Content-Type': 'application/json'},
body: JSON.stringify({
prompt })
});
const result = await response.json();
const img = document.getElementById('result');
img.src = result.image_url;
img.style.display = 'block';
}
</script>
</body>
</html>
五、总结与优化建议
提高图像生成速度:可通过缓存和并行调用优化响应时间。
多样化生成:通过调整temperature参数或提供多个模型选项增加生成多样性。
监控与日志:使用阿里云日志服务(SLS)监控系统性能,定位问题。
通过本文的示例,您可以轻松构建基于阿里云通义千问的文生图系统,为您的业务或项目提供自动化图像生成能力。希望这篇博客为您的开发提供有效的指导!