From c957e294dd87488bbd552f3c73f2a9b53d43797d Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Mon, 11 Oct 2021 20:49:50 +0800 Subject: [PATCH] =?UTF-8?q?feat(openai):=20=E6=96=B0=E5=A2=9E=20NLP=20?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...OpenAIClientExecuteOpenApiNLPExtensions.cs | 133 ++++++++++++++++++ .../OpenApiNLPDocumentClassifyRequest.cs | 45 ++++++ .../OpenApiNLPDocumentClassifyResponse.cs | 52 +++++++ .../OpenApiNLPGetSimilarQueryRequest.cs | 38 +++++ .../OpenApiNLPGetSimilarQueryResponse.cs | 59 ++++++++ .../OpenApiNLPNewsAbstractionRequest.cs | 59 ++++++++ .../OpenApiNLPNewsAbstractionResponse.cs | 39 +++++ .../OpenApiNLP/OpenApiNLPRankRequest.cs | 58 ++++++++ .../OpenApiNLP/OpenApiNLPRankResponse.cs | 52 +++++++ .../OpenApiNLPRecommendQuestionsRequest.cs | 32 +++++ .../OpenApiNLPRecommendQuestionsResponse.cs | 25 ++++ ...enApiNLPTranslateChinese2EnglishRequest.cs | 38 +++++ ...nApiNLPTranslateChinese2EnglishResponse.cs | 25 ++++ ...enApiNLPTranslateEnglish2ChineseRequest.cs | 38 +++++ ...nApiNLPTranslateEnglish2ChineseResponse.cs | 25 ++++ .../WechatOpenAIClient.cs | 2 +- .../WechatOpenAIClientOptions.cs | 4 +- .../WechatOpenAIEndpoints.cs | 9 +- .../WechatOpenAIResponse.cs | 52 ++++--- .../OpenApiNLPDocumentClassifyRequest.json | 7 + .../OpenApiNLPDocumentClassifyResponse.json | 9 ++ .../OpenApiNLPGetSimilarQueryRequest.json | 6 + .../OpenApiNLPGetSimilarQueryResponse.json | 22 +++ .../OpenApiNLPNewsAbstractionRequest.json | 9 ++ .../OpenApiNLPNewsAbstractionResponse.json | 7 + .../OpenApiNLP/OpenApiNLPRankRequest.json | 11 ++ .../OpenApiNLP/OpenApiNLPRankResponse.json | 19 +++ .../OpenApiNLPRecommendQuestionsRequest.json | 4 + .../OpenApiNLPRecommendQuestionsResponse.json | 11 ++ ...ApiNLPTranslateEnglish2ChineseRequest.json | 6 + ...piNLPTranslateEnglish2ChineseResponse.json | 5 + 31 files changed, 879 insertions(+), 22 deletions(-) create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPDocumentClassifyRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPDocumentClassifyResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPGetSimilarQueryRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPGetSimilarQueryResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPNewsAbstractionRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPNewsAbstractionResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPRankRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPRankResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPRecommendQuestionsRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPRecommendQuestionsResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPTranslateChinese2EnglishRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPTranslateChinese2EnglishResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPTranslateEnglish2ChineseRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPTranslateEnglish2ChineseResponse.cs create mode 100644 test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPDocumentClassifyRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPDocumentClassifyResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPGetSimilarQueryRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPGetSimilarQueryResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPNewsAbstractionRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPNewsAbstractionResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPRankRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPRankResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPRecommendQuestionsRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPRecommendQuestionsResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPTranslateEnglish2ChineseRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPTranslateEnglish2ChineseResponse.json diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteOpenApiNLPExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteOpenApiNLPExtensions.cs index 86ccb530..c00f8abe 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteOpenApiNLPExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteOpenApiNLPExtensions.cs @@ -102,5 +102,138 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI return await client.SendRequestWithUrlEncodedAsync(flurlReq, data: request, cancellationToken: cancellationToken); } + + /// + /// 异步调用 [POST] /openapi/nlp/rank/{TOKEN} 接口。 + /// REF: https://developers.weixin.qq.com/doc/aispeech/platform/nlp/rank.html + /// + /// + /// + /// + /// + public static async Task ExecuteOpenApiNLPRankAsync(this WechatOpenAIClient client, Models.OpenApiNLPRankRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateRequest(request, HttpMethod.Post, "openapi", "nlp", "rank", client.Credentials.Token!); + + return await client.SendRequestWithUrlEncodedAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /openapi/nlp/translate_en2cn/{TOKEN} 接口。 + /// REF: https://developers.weixin.qq.com/doc/aispeech/platform/nlp/translate.html + /// + /// + /// + /// + /// + public static async Task ExecuteOpenApiNLPTranslateEnglish2ChineseAsync(this WechatOpenAIClient client, Models.OpenApiNLPTranslateEnglish2ChineseRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateRequest(request, HttpMethod.Post, "openapi", "nlp", "translate_en2cn", client.Credentials.Token!); + + return await client.SendRequestWithUrlEncodedAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /openapi/nlp/translate_cn2en/{TOKEN} 接口。 + /// REF: https://developers.weixin.qq.com/doc/aispeech/platform/nlp/translate.html + /// + /// + /// + /// + /// + public static async Task ExecuteOpenApiNLPTranslateChinese2EnglishAsync(this WechatOpenAIClient client, Models.OpenApiNLPTranslateChinese2EnglishRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateRequest(request, HttpMethod.Post, "openapi", "nlp", "translate_cn2en", client.Credentials.Token!); + + return await client.SendRequestWithUrlEncodedAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /openapi/nlp/get_similar_query/{TOKEN} 接口。 + /// REF: https://developers.weixin.qq.com/doc/aispeech/platform/nlp/similar_recommend.html + /// + /// + /// + /// + /// + public static async Task ExecuteOpenApiNLPGetSimilarQueryAsync(this WechatOpenAIClient client, Models.OpenApiNLPGetSimilarQueryRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateRequest(request, HttpMethod.Post, "openapi", "nlp", "get_similar_query", client.Credentials.Token!); + + return await client.SendRequestWithUrlEncodedAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /openapi/nlp/news-abstraction/{TOKEN} 接口。 + /// REF: https://developers.weixin.qq.com/doc/aispeech/platform/nlp/summarize.html + /// + /// + /// + /// + /// + public static async Task ExecuteOpenApiNLPNewsAbstractionAsync(this WechatOpenAIClient client, Models.OpenApiNLPNewsAbstractionRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateRequest(request, HttpMethod.Post, "openapi", "nlp", "news-abstraction", client.Credentials.Token!); + + return await client.SendRequestWithUrlEncodedAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /openapi/nlp/document_classify/{TOKEN} 接口。 + /// REF: https://developers.weixin.qq.com/doc/aispeech/platform/nlp/summarize.html + /// + /// + /// + /// + /// + public static async Task ExecuteOpenApiNLPDocumentClassifyAsync(this WechatOpenAIClient client, Models.OpenApiNLPDocumentClassifyRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateRequest(request, HttpMethod.Post, "openapi", "nlp", "document_classify", client.Credentials.Token!); + + return await client.SendRequestWithUrlEncodedAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /openapi/nlp/recommend_questions/{TOKEN} 接口。 + /// REF: https://developers.weixin.qq.com/doc/aispeech/platform/nlp/rec_chat.html + /// + /// + /// + /// + /// + public static async Task ExecuteOpenApiNLPRecommendQuestionsAsync(this WechatOpenAIClient client, Models.OpenApiNLPRecommendQuestionsRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateRequest(request, HttpMethod.Post, "openapi", "nlp", "recommend_questions", client.Credentials.Token!); + + return await client.SendRequestWithUrlEncodedAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPDocumentClassifyRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPDocumentClassifyRequest.cs new file mode 100644 index 00000000..cebaeb84 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPDocumentClassifyRequest.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /openapi/nlp/document_classify/{TOKEN} 接口的请求。 + /// + public class OpenApiNLPDocumentClassifyRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedUrlEncodedFormData + { + public static class Types + { + public class Data + { + /// + /// 获取或设置文章标题。 + /// + [Newtonsoft.Json.JsonProperty("title")] + [System.Text.Json.Serialization.JsonPropertyName("title")] + public string Title { get; set; } = string.Empty; + + /// + /// 获取或设置文章正文内容。 + /// + [Newtonsoft.Json.JsonProperty("content")] + [System.Text.Json.Serialization.JsonPropertyName("content")] + public string Content { get; set; } = string.Empty; + } + } + + /// + /// 获取或设置用户 ID。 + /// + [Newtonsoft.Json.JsonProperty("uid")] + [System.Text.Json.Serialization.JsonPropertyName("uid")] + public string UserId { get; set; } = string.Empty; + + /// + /// 获取或设置请求数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = new Types.Data(); +} +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPDocumentClassifyResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPDocumentClassifyResponse.cs new file mode 100644 index 00000000..2fb78869 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPDocumentClassifyResponse.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /openapi/nlp/document_classify/{TOKEN} 接口的响应。 + /// + public class OpenApiNLPDocumentClassifyResponse : WechatOpenAIResponse + { + public static class Types + { + public class Data + { + public static class Types + { + public class Result + { + /// + /// 获取或设置一级分类结果。 + /// + [Newtonsoft.Json.JsonProperty("level1_cls")] + [System.Text.Json.Serialization.JsonPropertyName("level1_cls")] + public string Level1Classification { get; set; } = default!; + + /// + /// 获取或设置二级分类结果。 + /// + [Newtonsoft.Json.JsonProperty("level2_cls")] + [System.Text.Json.Serialization.JsonPropertyName("level2_cls")] + public string Level2Classification { get; set; } = default!; + + /// + /// 获取或设置三级分类结果。 + /// + [Newtonsoft.Json.JsonProperty("level3_cls")] + [System.Text.Json.Serialization.JsonPropertyName("level3_cls")] + public string Level3lassification { get; set; } = default!; + } + } + + /// + /// 获取或设置文章分类的结果。 + /// + [Newtonsoft.Json.JsonProperty("preds")] + [System.Text.Json.Serialization.JsonPropertyName("preds")] + public Types.Result Result { get; set; } = default!; + } + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPGetSimilarQueryRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPGetSimilarQueryRequest.cs new file mode 100644 index 00000000..cbb91c05 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPGetSimilarQueryRequest.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /openapi/nlp/get_similar_query/{TOKEN} 接口的请求。 + /// + public class OpenApiNLPGetSimilarQueryRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedUrlEncodedFormData + { + public static class Types + { + public class Data + { + /// + /// 获取或设置输入文本。 + /// + [Newtonsoft.Json.JsonProperty("query")] + [System.Text.Json.Serialization.JsonPropertyName("query")] + public string QueryString { get; set; } = string.Empty; + } + } + + /// + /// 获取或设置用户 ID。 + /// + [Newtonsoft.Json.JsonProperty("uid")] + [System.Text.Json.Serialization.JsonPropertyName("uid")] + public string UserId { get; set; } = string.Empty; + + /// + /// 获取或设置请求数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = new Types.Data(); +} +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPGetSimilarQueryResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPGetSimilarQueryResponse.cs new file mode 100644 index 00000000..d2dbbb93 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPGetSimilarQueryResponse.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /openapi/nlp/get_similar_query/{TOKEN} 接口的响应。 + /// + public class OpenApiNLPGetSimilarQueryResponse : WechatOpenAIResponse + { + public static class Types + { + public class Data + { + public static class Types + { + public class Result + { + /// + /// 获取或设置相似问题信息项。 + /// + [Newtonsoft.Json.JsonProperty("question")] + [System.Text.Json.Serialization.JsonPropertyName("question")] + public string Sentiment { get; set; } = default!; + + /// + /// 获取或设置分值(范围:0~1)。 + /// + [Newtonsoft.Json.JsonProperty("score")] + [System.Text.Json.Serialization.JsonPropertyName("score")] + public double Score { get; set; } + + /// + /// 获取或设置来源。 + /// + [Newtonsoft.Json.JsonProperty("source")] + [System.Text.Json.Serialization.JsonPropertyName("source")] + public string Source { get; set; } = default!; + } + } + + /// + /// 获取或设置结果。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Result[] ResultList { get; set; } = default!; + + /// + /// 获取或设置耗时(单位:毫秒)。 + /// + [Newtonsoft.Json.JsonProperty("costime")] + [System.Text.Json.Serialization.JsonPropertyName("costime")] + public int CostTime { get; set; } + } + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPNewsAbstractionRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPNewsAbstractionRequest.cs new file mode 100644 index 00000000..f0b0e03e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPNewsAbstractionRequest.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /openapi/nlp/news-abstraction/{TOKEN} 接口的请求。 + /// + public class OpenApiNLPNewsAbstractionRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedUrlEncodedFormData + { + public static class Types + { + public class Data + { + /// + /// 获取或设置新闻标题。 + /// + [Newtonsoft.Json.JsonProperty("title")] + [System.Text.Json.Serialization.JsonPropertyName("title")] + public string Title { get; set; } = string.Empty; + + /// + /// 获取或设置新闻正文内容。 + /// + [Newtonsoft.Json.JsonProperty("content")] + [System.Text.Json.Serialization.JsonPropertyName("content")] + public string Content { get; set; } = string.Empty; + + /// + /// 获取或设置新闻所属的一级类别标签。 + /// + [Newtonsoft.Json.JsonProperty("category")] + [System.Text.Json.Serialization.JsonPropertyName("category")] + public string? Category { get; set; } + + /// + /// 获取或设置是否在提取摘要前先进行新闻分类标志。 + /// + [Newtonsoft.Json.JsonProperty("do_news_classify")] + [System.Text.Json.Serialization.JsonPropertyName("do_news_classify")] + public bool? RequireDoNewsClassify { get; set; } + } + } + + /// + /// 获取或设置用户 ID。 + /// + [Newtonsoft.Json.JsonProperty("uid")] + [System.Text.Json.Serialization.JsonPropertyName("uid")] + public string UserId { get; set; } = string.Empty; + + /// + /// 获取或设置请求数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = new Types.Data(); +} +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPNewsAbstractionResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPNewsAbstractionResponse.cs new file mode 100644 index 00000000..159be55b --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPNewsAbstractionResponse.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /openapi/nlp/news-abstraction/{TOKEN} 接口的响应。 + /// + public class OpenApiNLPNewsAbstractionResponse : WechatOpenAIResponse + { + public static class Types + { + public class Data + { + /// + /// 获取或设置摘要提取的结果。 + /// + [Newtonsoft.Json.JsonProperty("abstraction")] + [System.Text.Json.Serialization.JsonPropertyName("abstraction")] + public string Result { get; set; } = default!; + + /// + /// 获取或设置是否适合提取摘要的分类标签。 + /// + [Newtonsoft.Json.JsonProperty("classification")] + [System.Text.Json.Serialization.JsonPropertyName("classification")] + public bool HasClassification { get; set; } + + /// + /// 获取或设置分值(范围:0~1)。 + /// + [Newtonsoft.Json.JsonProperty("prob")] + [System.Text.Json.Serialization.JsonPropertyName("prob")] + public double Score { get; set; } + } + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPRankRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPRankRequest.cs new file mode 100644 index 00000000..a6d9816a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPRankRequest.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /openapi/nlp/rank/{TOKEN} 接口的请求。 + /// + public class OpenApiNLPRankRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedUrlEncodedFormData + { + public static class Types + { + public class Data + { + public static class Types + { + public class Candidate + { + /// + /// 获取或设置候选词。 + /// + [Newtonsoft.Json.JsonProperty("text")] + [System.Text.Json.Serialization.JsonPropertyName("text")] + public string Text { get; set; } = string.Empty; + } + } + + /// + /// 获取或设置输入文本。 + /// + [Newtonsoft.Json.JsonProperty("query")] + [System.Text.Json.Serialization.JsonPropertyName("query")] + public string QueryString { get; set; } = string.Empty; + + /// + /// 获取或设置候选词列表。 + /// + [Newtonsoft.Json.JsonProperty("candidates")] + [System.Text.Json.Serialization.JsonPropertyName("candidates")] + public IList CandidateList { get; set; } = new List(); + } + } + + /// + /// 获取或设置用户 ID。 + /// + [Newtonsoft.Json.JsonProperty("uid")] + [System.Text.Json.Serialization.JsonPropertyName("uid")] + public string UserId { get; set; } = string.Empty; + + /// + /// 获取或设置请求数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = new Types.Data(); +} +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPRankResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPRankResponse.cs new file mode 100644 index 00000000..086c2871 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPRankResponse.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /openapi/nlp/rank/{TOKEN} 接口的响应。 + /// + public class OpenApiNLPRankResponse : WechatOpenAIResponse + { + public static class Types + { + public class Data + { + public static class Types + { + public class Result + { + /// + /// 获取或设置候选词信息项。 + /// + [Newtonsoft.Json.JsonProperty("question")] + [System.Text.Json.Serialization.JsonPropertyName("question")] + public string Sentiment { get; set; } = default!; + + /// + /// 获取或设置分值(范围:0~1)。 + /// + [Newtonsoft.Json.JsonProperty("score")] + [System.Text.Json.Serialization.JsonPropertyName("score")] + public double Score { get; set; } + } + } + + /// + /// 获取或设置结果。 + /// + [Newtonsoft.Json.JsonProperty("results")] + [System.Text.Json.Serialization.JsonPropertyName("results")] + public Types.Result[] ResultList { get; set; } = default!; + + /// + /// 获取或设置是否有 Exact Match 候选。 + /// + [Newtonsoft.Json.JsonProperty("exact_match")] + [System.Text.Json.Serialization.JsonPropertyName("exact_match")] + public bool HasExactMatch { get; set; } + } + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPRecommendQuestionsRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPRecommendQuestionsRequest.cs new file mode 100644 index 00000000..e4e9cbe1 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPRecommendQuestionsRequest.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /openapi/nlp/recommend_questions/{TOKEN} 接口的请求。 + /// + public class OpenApiNLPRecommendQuestionsRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedUrlEncodedFormData + { + public static class Types + { + public class Data + { + } + } + + /// + /// 获取或设置用户 ID。 + /// + [Newtonsoft.Json.JsonProperty("uid")] + [System.Text.Json.Serialization.JsonPropertyName("uid")] + public string UserId { get; set; } = string.Empty; + + /// + /// 获取或设置请求数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = new Types.Data(); +} +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPRecommendQuestionsResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPRecommendQuestionsResponse.cs new file mode 100644 index 00000000..4ffde71d --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPRecommendQuestionsResponse.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /openapi/nlp/recommend_questions/{TOKEN} 接口的响应。 + /// + public class OpenApiNLPRecommendQuestionsResponse : WechatOpenAIResponse + { + public static class Types + { + public class Data + { + /// + /// 获取或设置推荐的结果。 + /// + [Newtonsoft.Json.JsonProperty("results")] + [System.Text.Json.Serialization.JsonPropertyName("results")] + public string[] ResultList { get; set; } = default!; + } + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPTranslateChinese2EnglishRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPTranslateChinese2EnglishRequest.cs new file mode 100644 index 00000000..30f1af75 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPTranslateChinese2EnglishRequest.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /openapi/nlp/translate_cn2en/{TOKEN} 接口的请求。 + /// + public class OpenApiNLPTranslateChinese2EnglishRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedUrlEncodedFormData + { + public static class Types + { + public class Data + { + /// + /// 获取或设置输入文本。 + /// + [Newtonsoft.Json.JsonProperty("q")] + [System.Text.Json.Serialization.JsonPropertyName("q")] + public string QueryString { get; set; } = string.Empty; + } + } + + /// + /// 获取或设置用户 ID。 + /// + [Newtonsoft.Json.JsonProperty("uid")] + [System.Text.Json.Serialization.JsonPropertyName("uid")] + public string UserId { get; set; } = string.Empty; + + /// + /// 获取或设置请求数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = new Types.Data(); +} +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPTranslateChinese2EnglishResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPTranslateChinese2EnglishResponse.cs new file mode 100644 index 00000000..89db52f2 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPTranslateChinese2EnglishResponse.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /openapi/nlp/translate_cn2en/{TOKEN} 接口的响应。 + /// + public class OpenApiNLPTranslateChinese2EnglishResponse : WechatOpenAIResponse + { + public static class Types + { + public class Data + { + /// + /// 获取或设置结果。 + /// + [Newtonsoft.Json.JsonProperty("result")] + [System.Text.Json.Serialization.JsonPropertyName("result")] + public string Result { get; set; } = default!; + } + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPTranslateEnglish2ChineseRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPTranslateEnglish2ChineseRequest.cs new file mode 100644 index 00000000..68aeee86 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPTranslateEnglish2ChineseRequest.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /openapi/nlp/translate_en2cn/{TOKEN} 接口的请求。 + /// + public class OpenApiNLPTranslateEnglish2ChineseRequest : WechatOpenAIRequest, WechatOpenAIRequest.Serialization.IEncryptedUrlEncodedFormData + { + public static class Types + { + public class Data + { + /// + /// 获取或设置输入文本。 + /// + [Newtonsoft.Json.JsonProperty("q")] + [System.Text.Json.Serialization.JsonPropertyName("q")] + public string QueryString { get; set; } = string.Empty; + } + } + + /// + /// 获取或设置用户 ID。 + /// + [Newtonsoft.Json.JsonProperty("uid")] + [System.Text.Json.Serialization.JsonPropertyName("uid")] + public string UserId { get; set; } = string.Empty; + + /// + /// 获取或设置请求数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public Types.Data Data { get; set; } = new Types.Data(); +} +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPTranslateEnglish2ChineseResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPTranslateEnglish2ChineseResponse.cs new file mode 100644 index 00000000..78017a51 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/OpenApiNLP/OpenApiNLPTranslateEnglish2ChineseResponse.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /openapi/nlp/translate_en2cn/{TOKEN} 接口的响应。 + /// + public class OpenApiNLPTranslateEnglish2ChineseResponse : WechatOpenAIResponse + { + public static class Types + { + public class Data + { + /// + /// 获取或设置结果。 + /// + [Newtonsoft.Json.JsonProperty("result")] + [System.Text.Json.Serialization.JsonPropertyName("result")] + public string Result { get; set; } = default!; + } + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIClient.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIClient.cs index c992ac51..a88737f7 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIClient.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIClient.cs @@ -30,7 +30,7 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI Credentials = new Settings.Credentials(options); - FlurlClient.BaseUrl = options.Endpoints ?? WechatOpenAIEndpoints.DEFAULT; + FlurlClient.BaseUrl = options.Endpoints ?? WechatOpenAIEndpoints.PLATFORM; FlurlClient.WithTimeout(TimeSpan.FromMilliseconds(options.Timeout)); } diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIClientOptions.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIClientOptions.cs index 21ec7ba2..26b9eda1 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIClientOptions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIClientOptions.cs @@ -13,9 +13,9 @@ /// /// 获取或设置微微信智能对话 API 域名。 - /// 默认值: + /// 默认值: /// - public string Endpoints { get; set; } = WechatOpenAIEndpoints.DEFAULT; + public string Endpoints { get; set; } = WechatOpenAIEndpoints.PLATFORM; /// /// 获取或设置微信智能对话 ClientId。仅限第三方平台接入时使用。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIEndpoints.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIEndpoints.cs index df263e5f..e8d07037 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIEndpoints.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIEndpoints.cs @@ -8,8 +8,13 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI public static class WechatOpenAIEndpoints { /// - /// 主域名(默认)。 + /// 平台接入(默认)。 /// - public const string DEFAULT = "https://openaiapi.weixin.qq.com"; + public const string PLATFORM = "https://openai.weixin.qq.com"; + + /// + /// 第三方接入。 + /// + public const string THIRDPARTY = "https://openaiapi.weixin.qq.com"; } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIResponse.cs index 4ea44e08..e77c561b 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIResponse.cs @@ -30,18 +30,11 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI public byte[] RawBytes { get; internal set; } = default!; /// - /// 获取微信智能对话 API 返回的错误码。 + /// 获取微信智能对话 API 返回的请求唯一标识。 /// - [Newtonsoft.Json.JsonProperty("errcode")] - [System.Text.Json.Serialization.JsonPropertyName("errcode")] - public virtual int? ErrorCode { get; set; } - - /// - /// 获取微信智能对话 API 返回的错误信息。 - /// - [Newtonsoft.Json.JsonProperty("errmsg")] - [System.Text.Json.Serialization.JsonPropertyName("errmsg")] - public virtual string? ErrorMessage { get; set; } + [Newtonsoft.Json.JsonProperty("request_id")] + [System.Text.Json.Serialization.JsonPropertyName("request_id")] + public virtual string? RequestId { get; set; } /// /// 获取微信智能对话 API 返回的状态码。 @@ -58,19 +51,44 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI public virtual string? Message { get; set; } /// - /// 获取微信智能对话 API 返回的请求唯一标识。 + /// 获取微信智能对话 API 返回的错误码。 /// - [Newtonsoft.Json.JsonProperty("request_id")] - [System.Text.Json.Serialization.JsonPropertyName("request_id")] - public virtual string? RequestId { get; set; } + [Newtonsoft.Json.JsonProperty("errcode")] + [System.Text.Json.Serialization.JsonPropertyName("errcode")] + public virtual int? ErrorCode { get; set; } /// - /// 获取一个值,该值指示调用微信 API 是否成功(即 HTTP 状态码为 200、且 code 和 errcode 值都为 0)。 + /// 获取微信智能对话 API 返回的错误信息。 + /// + [Newtonsoft.Json.JsonProperty("errmsg")] + [System.Text.Json.Serialization.JsonPropertyName("errmsg")] + public virtual string? ErrorMessage { get; set; } + + /// + /// 获取微信智能对话 API 返回的错误码。 + /// + [Newtonsoft.Json.JsonProperty("ret")] + [System.Text.Json.Serialization.JsonPropertyName("ret")] + public virtual int? ReturnCode { get; set; } + + /// + /// 获取微信智能对话 API 返回的错误信息。 + /// + [Newtonsoft.Json.JsonProperty("error")] + [System.Text.Json.Serialization.JsonPropertyName("error")] + public virtual string? ReturnError { get; set; } + + /// + /// 获取一个值,该值指示调用微信 API 是否成功(即 HTTP 状态码为 200、且 code/errcode/ret 值都为 0)。 /// /// public virtual bool IsSuccessful() { - return RawStatus == 200 && ErrorCode.GetValueOrDefault() == 0 && Code.GetValueOrDefault() == 0; + return RawStatus == 200 && + Code.GetValueOrDefault() == 0 && + ErrorCode.GetValueOrDefault() == 0 && + ReturnCode.GetValueOrDefault() == 0 && + string.IsNullOrEmpty(ReturnError); } } diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPDocumentClassifyRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPDocumentClassifyRequest.json new file mode 100644 index 00000000..cacf471b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPDocumentClassifyRequest.json @@ -0,0 +1,7 @@ +{ + "uid": "xjlsj33lasfaf", + "data": { + "title": "东北地区今日开启升温之旅 华南西南气温将创新低", + "content": "中国天气网讯 预计今天(6日),东南一带的降水将有所收敛,但是仍有助于缓和当地的气象干旱。气温方面,东北地区今天开始将开启升温之旅,而华南、西南一带最低气温还会创新低。随后而来的周末将会是今年晴天范围最大、降水最少的周末,公众可以提前安排户外活动,迎接温暖的阳光。" + } +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPDocumentClassifyResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPDocumentClassifyResponse.json new file mode 100644 index 00000000..0d40736e --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPDocumentClassifyResponse.json @@ -0,0 +1,9 @@ +{ + "data": { + "preds": { + "level1_cls": "天气", + "level2_cls": "其他", + "level3_cls": "其他" + } + } +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPGetSimilarQueryRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPGetSimilarQueryRequest.json new file mode 100644 index 00000000..4b0b8f8e --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPGetSimilarQueryRequest.json @@ -0,0 +1,6 @@ +{ + "uid": "xjlsj33lasfaf", + "data": { + "query": "你好吗" + } +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPGetSimilarQueryResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPGetSimilarQueryResponse.json new file mode 100644 index 00000000..271340fd --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPGetSimilarQueryResponse.json @@ -0,0 +1,22 @@ +{ + "data": { + "data": [ + { + "question": "你还好吗", + "score": 0.9911637194339746, + "source": "generation" + }, + { + "question": "你怎么样", + "score": 0.8547977341846155, + "source": "generation" + }, + { + "question": "你怎么样啊", + "score": 0.8517300445116354, + "source": "generation" + } + ], + "costime": 1394 + } +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPNewsAbstractionRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPNewsAbstractionRequest.json new file mode 100644 index 00000000..2787e5e6 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPNewsAbstractionRequest.json @@ -0,0 +1,9 @@ +{ + "uid": "xjlsj33lasfaf", + "data": { + "title": "大标题: 周杰伦透露孩子性格像自己", + "content": "自侃:在家地位不高周杰伦晒与儿子\\r\\n周杰伦与妻子昆凌\\r\\n新浪娱乐讯据台湾媒体报道,周杰伦今受邀出席公益篮球活动,许久没公开亮相的他坦言:“大家看我的社交网站就知道,现在玩乐和陪家人是最重要的。”他预计10月将启动全新巡演,但聊到新专辑,他笑说:“目前已经做好5首,但包括上次做好的2首。”进度严重落后,巡演前能否来得及推出仍是未知数。\r\\n周杰伦曾被“老萧”萧敬腾与五月天阿信调侃:“巴黎铁塔好像是他家一样”,周杰伦也坦言有考虑在法国置产,地点属意:“有巴黎铁塔蛮重要的”,他感叹身处欧洲比较可以自由自在走在街上,就算被粉丝认出,打个招呼就滑着滑板溜走,不用跑得太狼狈。\\r\\n今天他与小朋友共享篮球时光,但聊到自己的一双儿女,他说:“小朋友个性像自己,比较顽固一点,小朋友都是这样、比较讲不听,严格来说我扮黑脸也是没什么用,在家里地位不是很高。”他形容女儿就像自己“另个女朋友”,有时候想和她和好还被拒绝,一直被闹别扭,周杰伦无奈说:“我还不知道怎么对待一个女儿。”倒是儿子比较怕他,只要一出声就会低头认错,“像他会画在桌子上,家里很多画,就会教他看画手要放在后面,不要摸”严父模样只有儿子会买单。\\r\\n阿信曾夸周杰伦是“华人音乐圈精神领袖”,周杰伦赞阿信是“心目中真正的音乐人”,曾邀阿信到家中作客,2人畅谈音乐,阿信还精辟分析他专辑,“发现他是实际有在听我歌曲的人”,但问到每次打球都只邀萧敬腾,周杰伦笑说有透过社交网站约阿信打球,每次却只被回表情符号,忍不住说:“他说他以前打曲棍球,我是不太相信的。”\\r\\n周杰伦将于10月启动全新巡演,谈到近期的困扰,就是还没想到一个很威的名字,“想不到比‘地表最强’更好的,但这次跟(出道)20年有关,会比较欢乐,不是走自己多强势的感觉”。\\r\\n(责编:漠er凡)\\r\\n", + "category": "娱乐", + "do_news_classify": true + } +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPNewsAbstractionResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPNewsAbstractionResponse.json new file mode 100644 index 00000000..dc70ecf0 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPNewsAbstractionResponse.json @@ -0,0 +1,7 @@ +{ + "data": { + "abstraction": "新浪娱乐讯据台湾媒体报道,周杰伦今受邀出席公益篮球活动,许久没公开亮相的他坦言:“大家看我的社交网站就知道,现在玩乐和陪家人是最重要的。”他预计10月将启动全新巡演,但聊到新专辑,他笑说:“目前已经做好5首,但包括上次做好的2首。”进度严重落后,巡演前能否来得及推出仍是未知数。", + "classification": true, + "prob": 0.999969363213 + } +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPRankRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPRankRequest.json new file mode 100644 index 00000000..41f04a0f --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPRankRequest.json @@ -0,0 +1,11 @@ +{ + "uid": "xjlsj33lasfaf", + "data": { + "query": "北京到上海的火车票", + "candidates": [ + { "text": "上海到北京的火车票" }, + { "text": "北京到上海的飞机票" }, + { "text": "北京到上海的高铁票" } + ] + } +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPRankResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPRankResponse.json new file mode 100644 index 00000000..bafa75ec --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPRankResponse.json @@ -0,0 +1,19 @@ +{ + "data": { + "results": [ + { + "question": "北京到上海的高铁票", + "score": 0.9875847458814624 + }, + { + "question": "北京到上海的飞机票", + "score": 0.9707289708500416 + }, + { + "question": "上海到北京的火车票", + "score": 0.9169014875286918 + } + ], + "exact_match": false + } +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPRecommendQuestionsRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPRecommendQuestionsRequest.json new file mode 100644 index 00000000..4b364708 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPRecommendQuestionsRequest.json @@ -0,0 +1,4 @@ +{ + "uid": "xjlsj33lasfaf", + "data": {} +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPRecommendQuestionsResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPRecommendQuestionsResponse.json new file mode 100644 index 00000000..82ecb548 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPRecommendQuestionsResponse.json @@ -0,0 +1,11 @@ +{ + "data": { + "results": [ + "在微信H5支付中,如何在服务端判断支付成功?", + "交易资金与结算资金不一致", + "修改结算账户", + "数据查看", + "微信支付商户自查违规指引" + ] + } +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPTranslateEnglish2ChineseRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPTranslateEnglish2ChineseRequest.json new file mode 100644 index 00000000..49978f0b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPTranslateEnglish2ChineseRequest.json @@ -0,0 +1,6 @@ +{ + "uid": "xjlsj33lasfaf", + "data": { + "q": "北京的天气怎么样?" + } +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPTranslateEnglish2ChineseResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPTranslateEnglish2ChineseResponse.json new file mode 100644 index 00000000..5d316271 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/OpenApiNLP/OpenApiNLPTranslateEnglish2ChineseResponse.json @@ -0,0 +1,5 @@ +{ + "data": { + "result": "What about the weather in Beijing?" + } +} \ No newline at end of file