AITestController.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using Microsoft.AspNetCore.Mvc;
  2. using OASystem.API.OAMethodLib.HunYuanAPI;
  3. using TencentCloud.Hunyuan.V20230901.Models;
  4. namespace OASystem.API.Controllers
  5. {
  6. /// <summary>
  7. /// AI测试控制器
  8. /// </summary>
  9. [Route("api/[controller]")]
  10. public class AITestController : ControllerBase
  11. {
  12. private readonly IHunyuanService _hunyuanService;
  13. private readonly ILogger<AITestController> _logger;
  14. public AITestController(IHunyuanService hunyuanService, ILogger<AITestController> logger)
  15. {
  16. _hunyuanService = hunyuanService;
  17. _logger = logger;
  18. }
  19. #region 混元 AI
  20. /// <summary>
  21. /// 基础对话示例
  22. /// </summary>
  23. [HttpPost("chat")]
  24. public async Task<ActionResult<string>> BasicChat(string question)
  25. {
  26. try
  27. {
  28. var response = await _hunyuanService.ChatCompletionsHunyuan_t1_latestAsync(question);
  29. return Ok(response);
  30. }
  31. catch (Exception ex)
  32. {
  33. _logger.LogError(ex, "调用腾讯云混元API失败。");
  34. return StatusCode(500, new { Message = "调用腾讯云API失败,请检查配置或网络。", Detail = ex.Message });
  35. }
  36. }
  37. /// <summary>
  38. /// 模拟“根据文件提问”的API端点
  39. /// 注意:此示例中,文件内容通过请求体传入。
  40. /// 实际场景中,文件内容可能来自用户上传并解析(如PDF、TXT解析为文本)后的结果。
  41. /// </summary>
  42. [HttpPost("ask-with-file")]
  43. public async Task<ActionResult<string>> AskBasedOnFile([FromBody] AskWithFileRequest request)
  44. {
  45. if (string.IsNullOrEmpty(request.FileContent) || string.IsNullOrEmpty(request.Question))
  46. {
  47. return BadRequest(new { Message = "FileContent和Question字段不能为空。" });
  48. }
  49. try
  50. {
  51. var answer = await _hunyuanService.AskWithFileContextAsync(request.FileContent, request.Question, request.Model);
  52. return Ok(answer);
  53. }
  54. catch (Exception ex)
  55. {
  56. _logger.LogError(ex, "处理基于文件的提问失败。");
  57. return StatusCode(500, new { Message = "处理请求失败。", Detail = ex.Message });
  58. }
  59. }
  60. /// <summary>
  61. /// 用于测试的GET端点,快速验证服务可用性(使用示例数据)
  62. /// </summary>
  63. [HttpGet("test-file-query")]
  64. public async Task<ActionResult<string>> TestFileQuery()
  65. {
  66. // 示例文件内容和问题
  67. var sampleFileContent = "在软件开发中,依赖注入(Dependency Injection)是一种设计模式,用于实现控制反转(Inversion of Control, IoC)。它允许在类外部创建依赖对象,并通过构造函数、属性或方法将其‘注入’到类中,从而降低类之间的耦合度。";
  68. var sampleQuestion = "依赖注入的主要目的是什么?";
  69. var model = "hunyuan-lite"; // 可使用 "hunyuan-pro" 等
  70. try
  71. {
  72. var answer = await _hunyuanService.AskWithFileContextAsync(sampleFileContent, sampleQuestion, model);
  73. return Ok($"测试成功。问题:'{sampleQuestion}'\n回答:{answer}");
  74. }
  75. catch (Exception ex)
  76. {
  77. _logger.LogError(ex, "测试文件提问失败。");
  78. return StatusCode(500, new { Message = "测试失败。", Detail = ex.Message });
  79. }
  80. }
  81. /// <summary>
  82. /// 用于“根据文件提问”的请求体
  83. /// </summary>
  84. public class AskWithFileRequest
  85. {
  86. public string FileContent { get; set; } = string.Empty;
  87. public string Question { get; set; } = string.Empty;
  88. public string Model { get; set; } = "hunyuan-lite";
  89. }
  90. #endregion
  91. }
  92. }