diff --git a/src/AntSK.Domain/Utils/ConvertUtils.cs b/src/AntSK.Domain/Utils/ConvertUtils.cs
index 850052d6..e50d7ae8 100644
--- a/src/AntSK.Domain/Utils/ConvertUtils.cs
+++ b/src/AntSK.Domain/Utils/ConvertUtils.cs
@@ -1,4 +1,7 @@
-using System.Security.Cryptography;
+using Newtonsoft.Json;
+using Serilog;
+using System.Security.Cryptography;
+using System.Text.RegularExpressions;
using System.Web;
namespace AntSK.Domain.Utils
@@ -263,6 +266,50 @@ public static bool ComparisonIgnoreCase(this string s, string value)
return s.Equals(value, StringComparison.OrdinalIgnoreCase);
}
+
+ ///
+ /// \uxxxx转中文,保留换行符号
+ ///
+ ///
+ ///
+ public static string Unescape(this string value)
+ {
+ if (value.IsNull())
+ {
+ return "";
+ }
+
+ try
+ {
+ Formatting formatting = Formatting.None;
+
+ object jsonObj = JsonConvert.DeserializeObject(value);
+ string unescapeValue = JsonConvert.SerializeObject(jsonObj, formatting);
+ return unescapeValue;
+ }
+ catch (Exception ex)
+ {
+ Log.Error(ex.ToString());
+ return "";
+ }
+ }
+
+
+ ///
+ /// 是否为流式请求
+ ///
+ ///
+ ///
+ public static bool IsStream(this string value)
+ {
+ // 正则表达式忽略空格的情况
+ string pattern = @"\s*""stream""\s*:\s*true\s*";
+
+ // 使用正则表达式匹配
+ bool contains = Regex.IsMatch(value, pattern);
+ return contains;
+ }
+
public static string AntSKCalculateSHA256(this BinaryData binaryData)
{
byte[] byteArray = SHA256.HashData(binaryData.ToMemory().Span);
diff --git a/src/AntSK.Domain/Utils/OpenAIHttpClientHandler.cs b/src/AntSK.Domain/Utils/OpenAIHttpClientHandler.cs
index c99839da..69215081 100644
--- a/src/AntSK.Domain/Utils/OpenAIHttpClientHandler.cs
+++ b/src/AntSK.Domain/Utils/OpenAIHttpClientHandler.cs
@@ -1,5 +1,5 @@
-
-using Serilog;
+using Serilog;
+using System.Text;
using System.Text.RegularExpressions;
namespace AntSK.Domain.Utils
@@ -17,12 +17,19 @@ protected override async Task SendAsync(HttpRequestMessage
UriBuilder uriBuilder;
Regex regex = new Regex(@"(https?)://([^/:]+)(:\d+)?/(.*)");
Match match = regex.Match(_endPoint);
- if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development" && request.Content != null)
+ string guid = Guid.NewGuid().ToString();
+ var mediaType = request.Content.Headers.ContentType.MediaType;
+ string requestBody = (await request.Content.ReadAsStringAsync()).Unescape();
+ var uncaseBody = new StringContent(requestBody, Encoding.UTF8, mediaType);
+ request.Content = uncaseBody;
+
+ if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT").ConvertToString() != "Production")
{
- string requestBody = await request.Content.ReadAsStringAsync();
+ //生产环境根据环境变量可去关闭日志
//便于调试查看请求prompt
- Log.Information(requestBody);
+ Log.Information("{Message}", $"【模型服务接口调用-{guid},host:{_endPoint}】:{Environment.NewLine}{requestBody}");
}
+
if (match.Success)
{
string xieyi = match.Groups[1].Value;
@@ -72,7 +79,11 @@ protected override async Task SendAsync(HttpRequestMessage
// 接着,调用基类的 SendAsync 方法将你的修改后的请求发出去
HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
-
+ if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT").ConvertToString() != "Production")
+ {
+ string responseContent = requestBody.IsStream() ? response.Content.ReadAsStringAsync().Result : response.Content.ReadAsStringAsync().Result.Unescape();
+ Log.Information("{Message}", $"【模型服务接口返回-{guid},host:{_endPoint}】:{Environment.NewLine}{responseContent}");
+ }
return response;
}
}
@@ -84,7 +95,7 @@ public static HttpClient GetHttpClient(string endPoint)
{
var handler = new OpenAIHttpClientHandler(endPoint.ConvertToString());
var httpClient = new HttpClient(handler);
- httpClient.Timeout = TimeSpan.FromMinutes(5);
+ httpClient.Timeout = TimeSpan.FromMinutes(10);
return httpClient;
}
}