feature/worker #111
@@ -110,6 +110,20 @@ async function fetchImageContent(accessToken, imageId) {
|
||||
}
|
||||
}
|
||||
|
||||
// 工具函数:异步重试
|
||||
async function retryAsync(fn, times = 3, delay = 800) {
|
||||
let lastErr;
|
||||
for (let i = 0; i < times; i++) {
|
||||
try {
|
||||
return await fn();
|
||||
} catch (err) {
|
||||
lastErr = err;
|
||||
if (i < times - 1 && delay) await new Promise(r => setTimeout(r, delay));
|
||||
}
|
||||
}
|
||||
throw lastErr;
|
||||
}
|
||||
|
||||
exports.generate = async (req, res) => {
|
||||
const { prompt } = req.query;
|
||||
if (!prompt) {
|
||||
@@ -122,14 +136,17 @@ exports.generate = async (req, res) => {
|
||||
return res.status(500).json({ error: e.message });
|
||||
}
|
||||
try {
|
||||
const content = await fetchChatContent(accessToken, prompt);
|
||||
const match = content.match(/<img src=\"(.*?)\"/);
|
||||
// 1. 重试获取图片描述内容
|
||||
const content = await retryAsync(() => fetchChatContent(accessToken, prompt), 3, 800);
|
||||
// 升级正则,兼容更多图片标签格式
|
||||
const match = content.match(/<img[^>]+src=['"]([^'"]+)['"]/);
|
||||
if (!match) {
|
||||
console.error('AI生成图片出错: GigaChat未返回图片标签');
|
||||
return res.status(500).json({ error: 'No image generated' });
|
||||
}
|
||||
const imageId = match[1];
|
||||
const imageData = await fetchImageContent(accessToken, imageId);
|
||||
// 2. 重试获取图片内容
|
||||
const imageData = await retryAsync(() => fetchImageContent(accessToken, imageId), 3, 800);
|
||||
res.set('Content-Type', 'image/jpeg');
|
||||
res.set('X-HATEOAS', JSON.stringify(makeLinks('/gigachat', { self: '/prompt' })));
|
||||
res.send(imageData);
|
||||
|
||||
Reference in New Issue
Block a user