const axios = require('axios'); const makeLinks = require('../../shared/hateoas'); const { v4: uuidv4 } = require('uuid'); process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; // 获取access_token async function fetchAccessToken(apiKey) { try { const tokenResp = await axios.post( 'https://ngw.devices.sberbank.ru:9443/api/v2/oauth', { scope: 'GIGACHAT_API_PERS' }, { headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'application/json', 'Authorization': `Basic ${apiKey}`, 'RqUID': uuidv4() }, } ); return tokenResp.data.access_token; } catch (err) { console.error('AI生成图片出错: 获取access_token失败'); if (err.response) { console.error('status:', err.response.status); console.error('headers:', err.response.headers); console.error('data:', err.response.data); console.error('config:', err.config); } else { console.error('AI生成图片出错:', err.message); } throw new Error('获取access_token失败: ' + err.message); } } // 调用chat生成图片描述 async function fetchChatContent(accessToken, prompt) { try { const chatResp = await axios.post( 'https://gigachat.devices.sberbank.ru/api/v1/chat/completions', { model: "GigaChat", messages: [ { role: "system", content: "Ты — Василий Кандинский" }, { role: "user", content: prompt } ], stream: false, function_call: 'auto' }, { headers: { 'Authorization': `Bearer ${accessToken}`, 'Content-Type': 'application/json', 'RqUID': uuidv4(), } } ); const content = chatResp.data.choices[0].message.content; console.log('GigaChat返回内容:', content); return content; } catch (err) { console.error('AI生成图片出错: chat接口失败'); if (err.response) { console.error('status:', err.response.status); console.error('headers:', err.response.headers); console.error('data:', err.response.data); console.error('config:', err.config); } else { console.error('AI生成图片出错:', err.message); } throw new Error('chat接口失败: ' + err.message); } } // 获取图片内容 async function fetchImageContent(accessToken, imageId) { try { const imageResp = await axios.get( `https://gigachat.devices.sberbank.ru/api/v1/files/${imageId}/content`, { headers: { 'Authorization': `Bearer ${accessToken}`, 'RqUID': uuidv4(), }, responseType: 'arraybuffer' } ); return imageResp.data; } catch (err) { console.error('AI生成图片出错: 获取图片内容失败'); if (err.response) { console.error('status:', err.response.status); console.error('headers:', err.response.headers); console.error('data:', err.response.data); console.error('config:', err.config); } else { console.error('AI生成图片出错:', err.message); } throw new Error('获取图片内容失败: ' + err.message); } } exports.generate = async (req, res) => { const { prompt } = req.query; if (!prompt) { return res.status(400).json({ error: 'Prompt parameter is required' }); } try { const apiKey = process.env.GIGACHAT_API_KEY; const accessToken = await fetchAccessToken(apiKey); const content = await fetchChatContent(accessToken, prompt); const match = content.match(/