mirror of
https://gitee.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat.git
synced 2026-02-11 02:07:49 +08:00
feat(openai): 新增 NLP 相关接口
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"uid": "xjlsj33lasfaf",
|
||||
"data": {
|
||||
"q": "帮我订两张后天上午的火车票"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"type": "number",
|
||||
"span": [
|
||||
3,
|
||||
4
|
||||
],
|
||||
"text": "两",
|
||||
"norm": "2"
|
||||
},
|
||||
{
|
||||
"type": "datetime_interval",
|
||||
"span": [
|
||||
5,
|
||||
9
|
||||
],
|
||||
"text": "后天上午",
|
||||
"norm": "2019-10-30 08:00:00~2019-10-30 11:59:59"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"uid": "xjlsj33lasfaf",
|
||||
"data": {
|
||||
"q": "楼主真垃圾,祝你早日死全家",
|
||||
"model": "cnnn"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"data": {
|
||||
"result": [
|
||||
[
|
||||
"dirty_curse",
|
||||
0.9999999900000001
|
||||
],
|
||||
[
|
||||
"other",
|
||||
9.9999999E-9
|
||||
],
|
||||
[
|
||||
"dirty_politics",
|
||||
0.0
|
||||
],
|
||||
[
|
||||
"dirty_porno",
|
||||
0.0
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"uid": "xjlsj33lasfaf",
|
||||
"data": {
|
||||
"q": "恭喜小张脱单成功",
|
||||
"mode": "3class"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"data": {
|
||||
"result": [
|
||||
[
|
||||
"正面",
|
||||
0.9593541622161865
|
||||
],
|
||||
[
|
||||
"无情感",
|
||||
0.0400625541806221
|
||||
],
|
||||
[
|
||||
"负面",
|
||||
0.000583284127060324
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"uid": "xjlsj33lasfaf",
|
||||
"data": {
|
||||
"q": "在微信智言与微信智聆两大技术的支持下,微信AI团队推出了“微信对话开放平台”和“腾讯小微”智能硬件两大核心产品。微信支付团队最新发布的“微信青蛙Pro”在现场设置了体验区,让大家感受AI认脸的本事。"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,284 @@
|
||||
{
|
||||
"data": {
|
||||
"words": [
|
||||
"在",
|
||||
"微信",
|
||||
"智",
|
||||
"言",
|
||||
"与",
|
||||
"微信",
|
||||
"智",
|
||||
"聆",
|
||||
"两",
|
||||
"大",
|
||||
"技术",
|
||||
"的",
|
||||
"支持",
|
||||
"下",
|
||||
",",
|
||||
"微信",
|
||||
"ai",
|
||||
"团队",
|
||||
"推出",
|
||||
"了",
|
||||
"“",
|
||||
"微信",
|
||||
"对话",
|
||||
"开放",
|
||||
"平台",
|
||||
"”",
|
||||
"和",
|
||||
"“",
|
||||
"腾讯",
|
||||
"小",
|
||||
"微",
|
||||
"”",
|
||||
"智能",
|
||||
"硬件",
|
||||
"两",
|
||||
"大",
|
||||
"核心",
|
||||
"产品",
|
||||
"。",
|
||||
"微信",
|
||||
"支付",
|
||||
"团队",
|
||||
"最新",
|
||||
"发布",
|
||||
"的",
|
||||
"“",
|
||||
"微信",
|
||||
"青蛙",
|
||||
"pro",
|
||||
"”",
|
||||
"在",
|
||||
"现场",
|
||||
"设置",
|
||||
"了",
|
||||
"体验",
|
||||
"区",
|
||||
",",
|
||||
"让",
|
||||
"大家",
|
||||
"感受",
|
||||
"ai",
|
||||
"认",
|
||||
"脸",
|
||||
"的",
|
||||
"本事",
|
||||
"。"
|
||||
],
|
||||
"POSs": [
|
||||
25,
|
||||
16,
|
||||
16,
|
||||
46,
|
||||
25,
|
||||
16,
|
||||
16,
|
||||
46,
|
||||
15,
|
||||
1,
|
||||
16,
|
||||
30,
|
||||
33,
|
||||
8,
|
||||
34,
|
||||
31,
|
||||
23,
|
||||
16,
|
||||
31,
|
||||
36,
|
||||
34,
|
||||
16,
|
||||
33,
|
||||
33,
|
||||
16,
|
||||
34,
|
||||
5,
|
||||
34,
|
||||
6,
|
||||
1,
|
||||
38,
|
||||
34,
|
||||
16,
|
||||
16,
|
||||
15,
|
||||
1,
|
||||
16,
|
||||
16,
|
||||
34,
|
||||
6,
|
||||
31,
|
||||
16,
|
||||
1,
|
||||
31,
|
||||
30,
|
||||
34,
|
||||
31,
|
||||
16,
|
||||
23,
|
||||
34,
|
||||
25,
|
||||
28,
|
||||
31,
|
||||
30,
|
||||
33,
|
||||
16,
|
||||
34,
|
||||
31,
|
||||
27,
|
||||
31,
|
||||
23,
|
||||
31,
|
||||
16,
|
||||
30,
|
||||
16,
|
||||
34
|
||||
],
|
||||
"words_mix": [
|
||||
"在",
|
||||
"微信",
|
||||
"智",
|
||||
"言",
|
||||
"与",
|
||||
"微信",
|
||||
"智",
|
||||
"聆",
|
||||
"两",
|
||||
"大",
|
||||
"技术",
|
||||
"的",
|
||||
"支持",
|
||||
"下",
|
||||
",",
|
||||
"微信",
|
||||
"ai",
|
||||
"团队",
|
||||
"推出",
|
||||
"了",
|
||||
"“",
|
||||
"微信",
|
||||
"对话",
|
||||
"开放",
|
||||
"平台",
|
||||
"”",
|
||||
"和",
|
||||
"“",
|
||||
"腾讯",
|
||||
"小微",
|
||||
"”",
|
||||
"智能",
|
||||
"硬件",
|
||||
"两",
|
||||
"大",
|
||||
"核心",
|
||||
"产品",
|
||||
"。",
|
||||
"微信",
|
||||
"支付",
|
||||
"团队",
|
||||
"最新",
|
||||
"发布",
|
||||
"的",
|
||||
"“",
|
||||
"微信",
|
||||
"青蛙",
|
||||
"pro",
|
||||
"”",
|
||||
"在",
|
||||
"现场",
|
||||
"设置",
|
||||
"了",
|
||||
"体验",
|
||||
"区",
|
||||
",",
|
||||
"让",
|
||||
"大家",
|
||||
"感受",
|
||||
"ai",
|
||||
"认",
|
||||
"脸",
|
||||
"的",
|
||||
"本事",
|
||||
"。"
|
||||
],
|
||||
"POSs_mix": [
|
||||
25,
|
||||
16,
|
||||
16,
|
||||
46,
|
||||
25,
|
||||
16,
|
||||
16,
|
||||
46,
|
||||
15,
|
||||
1,
|
||||
16,
|
||||
30,
|
||||
33,
|
||||
8,
|
||||
34,
|
||||
31,
|
||||
23,
|
||||
16,
|
||||
31,
|
||||
36,
|
||||
34,
|
||||
16,
|
||||
33,
|
||||
33,
|
||||
16,
|
||||
34,
|
||||
5,
|
||||
34,
|
||||
6,
|
||||
16,
|
||||
34,
|
||||
16,
|
||||
16,
|
||||
15,
|
||||
1,
|
||||
16,
|
||||
16,
|
||||
34,
|
||||
6,
|
||||
31,
|
||||
16,
|
||||
1,
|
||||
31,
|
||||
30,
|
||||
34,
|
||||
31,
|
||||
16,
|
||||
23,
|
||||
34,
|
||||
25,
|
||||
28,
|
||||
31,
|
||||
30,
|
||||
33,
|
||||
16,
|
||||
34,
|
||||
31,
|
||||
27,
|
||||
31,
|
||||
23,
|
||||
31,
|
||||
16,
|
||||
30,
|
||||
16,
|
||||
34
|
||||
],
|
||||
"entities": [
|
||||
"腾讯",
|
||||
"小微",
|
||||
"最新发布"
|
||||
],
|
||||
"entity_types": [
|
||||
100000013,
|
||||
0,
|
||||
0
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,10 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests
|
||||
Instance = new WechatOpenAIClient(new WechatOpenAIClientOptions()
|
||||
{
|
||||
ClientId = TestConfigs.WechatClientId,
|
||||
ClientKey = TestConfigs.WechatClientKey
|
||||
ClientKey = TestConfigs.WechatClientKey,
|
||||
AppId = TestConfigs.WechatAppId,
|
||||
Token = TestConfigs.WechatToken,
|
||||
EncodingAESKey = TestConfigs.WechatEncodingAESKey
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,9 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests
|
||||
var config = json.RootElement.GetProperty("WechatConfig");
|
||||
WechatClientId = config.GetProperty("ClientId").GetString();
|
||||
WechatClientKey = config.GetProperty("ClientKey").GetString();
|
||||
WechatAppId = config.GetProperty("AppId").GetString();
|
||||
WechatToken = config.GetProperty("Token").GetString();
|
||||
WechatEncodingAESKey = config.GetProperty("EncodingAESKey").GetString();
|
||||
WechatAccessToken = config.GetProperty("AccessToken").GetString();
|
||||
|
||||
ProjectSourceDirectory = json.RootElement.GetProperty("ProjectSourceDirectory").GetString();
|
||||
@@ -25,6 +28,9 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests
|
||||
|
||||
public static readonly string WechatClientId;
|
||||
public static readonly string WechatClientKey;
|
||||
public static readonly string WechatAppId;
|
||||
public static readonly string WechatToken;
|
||||
public static readonly string WechatEncodingAESKey;
|
||||
public static readonly string WechatAccessToken;
|
||||
|
||||
public static readonly string ProjectSourceDirectory;
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
|
||||
namespace SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests
|
||||
{
|
||||
public class WechatOpenAIJWTTests
|
||||
{
|
||||
[Fact(DisplayName = "JWT 编码(HS256)")]
|
||||
public void JWTEncodeWithHS256Test()
|
||||
{
|
||||
object payload = new
|
||||
{
|
||||
uid = "xjlsj33lasfaf",
|
||||
data = new
|
||||
{
|
||||
q = "在微信智言与微信智聆两大技术的支持下,微信AI团队推出了“微信对话开放平台”和“腾讯小微”智能硬件两大核心产品。微信支付团队最新发布的“微信青蛙Pro”在现场设置了体验区,让大家感受AI认脸的本事。"
|
||||
}
|
||||
};
|
||||
string secret = "jWmYm7qr5nMoAUwZRjGtBxmz3KA1tkAj3ykkR6q2B2C";
|
||||
|
||||
string actualJwt = Utilities.JWTUtility.EncodeWithHS256(payload: payload, secret: secret);
|
||||
string expectdJwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOiJ4amxzajMzbGFzZmFmIiwiZGF0YSI6eyJxIjoi5Zyo5b6u5L-h5pm66KiA5LiO5b6u5L-h5pm66IGG5Lik5aSn5oqA5pyv55qE5pSv5oyB5LiL77yM5b6u5L-hQUnlm6LpmJ_mjqjlh7rkuobigJzlvq7kv6Hlr7nor53lvIDmlL7lubPlj7DigJ3lkozigJzohb7orq_lsI_lvq7igJ3mmbrog73noazku7bkuKTlpKfmoLjlv4Pkuqflk4HjgILlvq7kv6HmlK_ku5jlm6LpmJ_mnIDmlrDlj5HluIPnmoTigJzlvq7kv6HpnZLom5lQcm_igJ3lnKjnjrDlnLrorr7nva7kuobkvZPpqozljLrvvIzorqnlpKflrrbmhJ_lj5dBSeiupOiEuOeahOacrOS6i-OAgiJ9fQ.8FeSvxKlIrbI6MCAaWGekB4sHGA8DeUxgVXiHa8ulJk";
|
||||
|
||||
Assert.Equal(expectdJwt, actualJwt, ignoreCase: true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -497,7 +497,7 @@ namespace SKIT.FlurlHttpClient.Wechat
|
||||
// 如果是 GET 请求,检查是否包含 JSON 序列化字段
|
||||
if ("GET".Equals(expectedRequestMethod, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
if (!(reqCodeSourceCode.Contains("/* @codestyle-disable") && reqCodeSourceCode.Contains("no-jsonable-property-in-get")))
|
||||
if (!(reqCodeSourceCode.Contains("/* @codestyle-disable") && reqCodeSourceCode.Contains("no-jsonable-property-in-request-get")))
|
||||
{
|
||||
if (new Regex("\\[Newtonsoft.Json.JsonProperty\\(\"[a-zA-Z0-9_]*\"\\)\\]").IsMatch(reqCodeSourceCode))
|
||||
{
|
||||
@@ -560,10 +560,13 @@ namespace SKIT.FlurlHttpClient.Wechat
|
||||
}
|
||||
|
||||
// 检验是否包含 `new class()` 的赋值
|
||||
if (new Regex("=\\s*new\\s[a-zA-Z0-9.]*\\(\\)").IsMatch(resCodeSourceCode))
|
||||
if (!(resCodeSourceCode.Contains("/* @codestyle-disable") && resCodeSourceCode.Contains("no-instantiated-property-in-response")))
|
||||
{
|
||||
lstError.Add(new Exception($"源代码 \"{resCodeFileName}\" 下代码有误,请求模型不应包含 `= new class()` 赋值。"));
|
||||
return false;
|
||||
if (new Regex("=\\s*new\\s[a-zA-Z0-9.]*\\(\\)").IsMatch(resCodeSourceCode))
|
||||
{
|
||||
lstError.Add(new Exception($"源代码 \"{resCodeFileName}\" 下代码有误,响应模型不应包含 `= new class()` 赋值。"));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 检验是否包含列表类型字段
|
||||
|
||||
Reference in New Issue
Block a user