ai.controller.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import Router from '@koa/router';
  2. import { Context } from 'koa';
  3. import axios from 'axios';
  4. import { config } from '../../config';
  5. const router = new Router();
  6. // AI 生成文本
  7. router.post('/generate', async (ctx: Context) => {
  8. const { prompt } = ctx.request.body as {
  9. prompt: string;
  10. };
  11. if (!prompt || prompt.trim().length === 0) {
  12. ctx.status = 400;
  13. ctx.body = { code: 400, message: '请输入提示词' };
  14. return;
  15. }
  16. try {
  17. // 使用阿里云 DashScope API 调用 Qwen 大模型
  18. const apiKey = config.dashscope.apiKey;
  19. if (!apiKey) {
  20. ctx.status = 500;
  21. ctx.body = { code: 500, message: '未配置 AI API Key' };
  22. return;
  23. }
  24. // 调用阿里云百炼文本生成 API
  25. const response = await axios.post(
  26. 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation',
  27. {
  28. model: 'qwen-turbo',
  29. input: {
  30. prompt: prompt,
  31. },
  32. parameters: {
  33. result_format: 'message',
  34. },
  35. },
  36. {
  37. headers: {
  38. 'Authorization': `Bearer ${apiKey}`,
  39. 'Content-Type': 'application/json',
  40. },
  41. timeout: 60000,
  42. }
  43. );
  44. const data = response.data;
  45. console.log('🤖 AI 响应:', JSON.stringify(data));
  46. if (data.code) {
  47. throw new Error(data.message || `AI 调用失败: ${data.code}`);
  48. }
  49. // 提取生成的文本
  50. const generatedText = data.output?.choices?.[0]?.message?.content || '';
  51. ctx.body = {
  52. code: 0,
  53. message: 'success',
  54. data: {
  55. text: generatedText,
  56. },
  57. };
  58. } catch (error: any) {
  59. console.error('❌ AI 生成失败:', error.response?.data || error.message);
  60. ctx.status = 500;
  61. ctx.body = {
  62. code: 500,
  63. message: error.message || 'AI 生成失败,请稍后重试',
  64. };
  65. }
  66. });
  67. export default router;