|
|
@@ -2715,7 +2715,7 @@ Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id Where m.Id={0} ", _m
|
|
|
var hunyuanAIInvDatas = new List<InvitationAIInfo>();
|
|
|
if (aiTasks.Any())
|
|
|
{
|
|
|
- await SendStep(60, $"正在召唤混元 AI:检索 {aiTasks.Count} 个国家的邀请信息...");
|
|
|
+ await SendStep(60, $"Hunyuan AI 正在跨境深度检索 {aiTasks.Count} 个国家的邀请单位信息...");
|
|
|
|
|
|
string question = BuildHunyuanPrompt(aiTasks, entryInfo); // 抽离 Prompt 构造
|
|
|
string aiRawResponse = string.Empty;
|
|
|
@@ -2743,8 +2743,8 @@ Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id Where m.Id={0} ", _m
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
- _logger.LogError(ex, "AI 接口调用或解析失败");
|
|
|
- await SendStep(60, "警告:AI 检索部分失败,将仅展示本地数据。");
|
|
|
+ _logger.LogError(ex, "Hunyuan AI 接口调用或解析失败");
|
|
|
+ await SendStep(60, "警告:Hunyuan AI 检索部分失败,将仅展示本地数据。");
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
@@ -2775,7 +2775,7 @@ Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id Where m.Id={0} ", _m
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
_logger.LogError(ex, "SSE 发生不可预知异常");
|
|
|
- await SendStep(-1, $"炼金炸炉:{ex.Message}");
|
|
|
+ await SendStep(-1, $"SSE Error:{ex.Message}");
|
|
|
}
|
|
|
finally
|
|
|
{
|
|
|
@@ -2783,9 +2783,9 @@ Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id Where m.Id={0} ", _m
|
|
|
await HttpContext.Response.Body.FlushAsync();
|
|
|
|
|
|
// 此时方法结束,ASP.NET Core 会自动处理连接关闭
|
|
|
- _logger.LogInformation("SSE 炼金通道已安全关闭");
|
|
|
- // :直接完成响应流
|
|
|
+ _logger.LogInformation("SSE 通道已安全关闭");
|
|
|
|
|
|
+ // 直接完成响应流
|
|
|
await response.CompleteAsync();
|
|
|
|
|
|
}
|
|
|
@@ -3374,8 +3374,7 @@ Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id Where m.Id={0} ", _m
|
|
|
{
|
|
|
progress,
|
|
|
message = msg,
|
|
|
- data,
|
|
|
- operatedAt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
|
|
|
+ data
|
|
|
});
|
|
|
await response.WriteAsync($"data: {payload}\n\n");
|
|
|
await response.Body.FlushAsync();
|
|
|
@@ -3418,7 +3417,7 @@ Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id Where m.Id={0} ", _m
|
|
|
// 构建 Question
|
|
|
string question = BuildHunyuanPrompt(aiTasks, entryInfo);
|
|
|
|
|
|
- await SendStep(30, "AI 正在深度检索跨境商邀数据,请稍候...");
|
|
|
+ await SendStep(30, "Hunyuan AI 正在深度检索跨境商邀数据,请稍候...");
|
|
|
|
|
|
// 调用 AI (Progress: 30% - 80%)
|
|
|
// 注意:这里如果能换成流式接口(ChatCompletionsStream)会更好,
|
|
|
@@ -3447,7 +3446,7 @@ Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id Where m.Id={0} ", _m
|
|
|
|
|
|
if (update > 0)
|
|
|
{
|
|
|
- await SendStep(100, $"AI 续写成功!新增 {hunyuanAIInvDatas.Count} 条数据", invAiInfo.AiCrawledDetails);
|
|
|
+ await SendStep(100, $"Hunyuan AI 续写成功!新增 {hunyuanAIInvDatas.Count} 条数据", invAiInfo.AiCrawledDetails);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -3974,7 +3973,7 @@ Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id Where m.Id={0} ", _m
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- await SendStep(10, "正在分析考察团组背景与访问意图...");
|
|
|
+ await SendStep(10, "Hunyuan AI 正在分析考察团组背景与访问意图...");
|
|
|
|
|
|
// 2. 准备 AI 上下文数据 (Progress: 15%)
|
|
|
var clientInfoSources = invAiInfo.AiCrawledDetails.Where(x => dto.Guids.Contains(x.Guid)).ToList();
|
|
|
@@ -3994,7 +3993,7 @@ Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id Where m.Id={0} ", _m
|
|
|
.Where(x => x.Id == dto.CurrUserId).Select(x => x.CnName).FirstAsync() ?? "-";
|
|
|
|
|
|
// 3. 构建 Prompt 并调用 AI (Progress: 25%)
|
|
|
- await SendStep(30, $"首席联络官已就位,正在为 {clientInfosForAI.Count} 家单位撰写定制化正式邮件...");
|
|
|
+ await SendStep(30, $"Hunyuan AI 正在为 {clientInfosForAI.Count} 家单位撰写定制化正式邮件...");
|
|
|
|
|
|
// 此处沿用你原有的庞大 Prompt 逻辑
|
|
|
string pormpt = $@"
|
|
|
@@ -4072,7 +4071,7 @@ Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id Where m.Id={0} ", _m
|
|
|
// 4. 解析结果 (Progress: 85%)
|
|
|
var hunyuanAIEmailDatas = new List<AICreateEmailInfo>();
|
|
|
if (!string.IsNullOrWhiteSpace(aiResponse))
|
|
|
- {
|
|
|
+ {
|
|
|
// 预处理:过滤 AI 可能返回的 Markdown 标记
|
|
|
string cleanJson = aiResponse.Trim();
|
|
|
if (cleanJson.StartsWith("```json"))
|