Skip to content

Commit 018a5cb

Browse files
authored
Merge pull request #87 from Senparc/Developer
v0.16.0 添加 SenparcKernelAiResult<T> 类型;重命名 IAiResult.Output 为 Output…
2 parents d28843f + a6ab347 commit 018a5cb

File tree

10 files changed

+55
-37
lines changed

10 files changed

+55
-37
lines changed

Samples/Senparc.AI.Samples.Consoles/Samples/ChatSample.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ 输入 exit 退出。
167167
{
168168
//使用整体输出
169169
var result = await _semanticAiHandler.ChatAsync(iWantToRun, input);
170-
await Console.Out.WriteLineAsync(result.Output);
170+
await Console.Out.WriteLineAsync(result.OutputString);
171171
}
172172

173173
await Console.Out.WriteLineAsync();

Samples/Senparc.AI.Samples.Consoles/Samples/CompletionSample.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ await Console.Out.WriteLineAsync(@"CompletionSample 开始运行,请输入对
109109
{
110110
//使用整体输出
111111
var result = await iWantToRun.RunAsync(request);
112-
await Console.Out.WriteLineAsync(result.Output);
112+
await Console.Out.WriteLineAsync(result.OutputString);
113113
}
114114
await Console.Out.WriteLineAsync();
115115
}

src/Senparc.AI.Kernel.Tests/Handlers/SemanticAiHandlerTests.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@ public async Task ChatAsyncTest()
3939

4040
Assert.IsNotNull(result);
4141
//await Console.Out.WriteLineAsync(result.ToJson(true));
42-
Assert.IsTrue(result.Output.Length > 0);
42+
Assert.IsTrue(result.OutputString.Length > 0);
4343
Assert.IsTrue(result.LastException == null);
4444

4545
((SenparcAiArguments)result.InputContext).KernelArguments.TryGetValue("human_input", out var question);
4646
await Console.Out.WriteLineAsync("Q: " + question);
47-
await Console.Out.WriteLineAsync("A: " + result.Output);
47+
await Console.Out.WriteLineAsync("A: " + result.OutputString);
4848
await Console.Out.WriteLineAsync();
4949

5050
//第二轮对话
@@ -55,7 +55,7 @@ public async Task ChatAsyncTest()
5555

5656
((SenparcAiArguments)result.InputContext).KernelArguments.TryGetValue("human_input", out var question2);
5757
await Console.Out.WriteLineAsync("Q: " + question2);
58-
await Console.Out.WriteLineAsync("A: " + result.Output);
58+
await Console.Out.WriteLineAsync("A: " + result.OutputString);
5959
await Console.Out.WriteLineAsync();
6060

6161
//第三轮对话
@@ -66,7 +66,7 @@ public async Task ChatAsyncTest()
6666

6767
((SenparcAiArguments)result.InputContext).KernelArguments.TryGetValue("human_input", out var question3);
6868
await Console.Out.WriteLineAsync("Q: " + question3);
69-
await Console.Out.WriteLineAsync("A: " + result.Output);
69+
await Console.Out.WriteLineAsync("A: " + result.OutputString);
7070
await Console.Out.WriteLineAsync();
7171

7272
//第四轮对话
@@ -76,7 +76,7 @@ public async Task ChatAsyncTest()
7676
await Console.Out.WriteLineAsync($"第四轮对话(耗时:{SystemTime.DiffTotalMS(dt)}ms)");
7777
((SenparcAiArguments)result.InputContext).KernelArguments.TryGetValue("human_input", out var question4);
7878
await Console.Out.WriteLineAsync("Q: " + question4);
79-
await Console.Out.WriteLineAsync("A: " + result.Output);
79+
await Console.Out.WriteLineAsync("A: " + result.OutputString);
8080
}
8181

8282
[TestMethod]
@@ -120,15 +120,15 @@ public async Task ReadMeDemoTest()
120120
aiRequest.SetStoredContext("history", history + $"\nHuman: {prompt}\nBot: {aiRequest.RequestContent}");
121121

122122
//aiResult.Result 结果:中国的人口约为13.8亿。
123-
await Console.Out.WriteLineAsync(aiResult.Output);
123+
await Console.Out.WriteLineAsync(aiResult.OutputString);
124124
//await Console.Out.WriteLineAsync(aiResult.ToJson(true));
125125

126126
//第二次对话,包含上下文,自动理解提问目标是人口数量
127127
aiRequest.SetStoredContext("human_input", "那美国呢");
128128

129129
aiResult = await iWantToRun.RunAsync(aiRequest);
130130
//aiResult.Result 结果:美国的人口大约为3.2亿。
131-
await Console.Out.WriteLineAsync(aiResult.Output);
131+
await Console.Out.WriteLineAsync(aiResult.OutputString);
132132
}
133133

134134
[TestMethod]
@@ -163,7 +163,7 @@ public async Task PureFunctionTextCompletionTest1()
163163
//await Console.Out.WriteLineAsync(Senparc.AI.Config.SenparcAiSetting.ToJson(true));
164164

165165
Assert.IsNotNull(result);
166-
await Console.Out.WriteLineAsync(result.Output);
166+
await Console.Out.WriteLineAsync(result.OutputString);
167167
}
168168

169169
[TestMethod]
@@ -215,8 +215,8 @@ 5. 直接输出结果,不需要输出任何其他文字。
215215
//await Console.Out.WriteLineAsync(Senparc.AI.Config.SenparcAiSetting.ToJson(true));
216216

217217
Assert.IsNotNull(result);
218-
await Console.Out.WriteLineAsync(result.Output);
219-
Assert.AreEqual("Helloworld!Thisisanewworld.", result.Output);
218+
await Console.Out.WriteLineAsync(result.OutputString);
219+
Assert.AreEqual("Helloworld!Thisisanewworld.", result.OutputString);
220220
}
221221

222222
[TestMethod()]

src/Senparc.AI.Kernel/Entities/SenaprcAiResult_MemoryQuery.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace Senparc.AI.Kernel.Entities
1414
/// </summary>
1515
public class SenaprcAiResult_MemoryQuery : SenparcAiResult
1616
{
17-
public override string Output { get => throw new SenparcAiException("请从 MemoryQueryResult 获取"); set => throw new SenparcAiException("当前方法内无法设置"); }
17+
public override string OutputString { get => throw new SenparcAiException("请从 MemoryQueryResult 获取"); set => throw new SenparcAiException("当前方法内无法设置"); }
1818
/// <summary>
1919
/// Whether the source data used to calculate embeddings are stored in the local
2020
/// storage provider or is available through an external service, such as web site, MS Graph, etc.

src/Senparc.AI.Kernel/Entities/SenparcAiResult.cs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class SenparcAiResult : IAiResult
3030
/// <summary>
3131
/// <inheritdoc/>
3232
/// </summary>
33-
public virtual string Output { get; set; }
33+
public virtual string OutputString { get; set; }
3434

3535
/// <summary>
3636
/// <inheritdoc/>
@@ -55,6 +55,7 @@ public SenparcAiResult(IWantToRun iwantToRun, IAiContext inputContext)
5555
public class SenaprcAiResult<T> : SenparcAiResult, IAiResult
5656
{
5757
public T Result { get; set; }
58+
public IAsyncEnumerable<StreamingKernelContent>? /*SKContext*/ StreamResult { get; set; }
5859

5960
public SenaprcAiResult(IWantToRun iWwantToRun, string inputContent)
6061
: base(iWwantToRun, inputContent)
@@ -82,14 +83,30 @@ public SenparcTextAiResult(IWantToRun iWwantToRun, IAiContext inputContext)
8283
}
8384
}
8485

85-
public class SenparcKernelAiResult : SenaprcAiResult<FunctionResult>, IAiResult
86+
public class SenparcKernelAiResult : SenparcKernelAiResult<string>, IAiResult
8687
{
88+
public SenparcKernelAiResult(IWantToRun iWwantToRun, string? inputContent)
89+
: base(iWwantToRun, inputContent)
90+
{
91+
}
92+
93+
public SenparcKernelAiResult(IWantToRun iWwantToRun, IAiContext inputContext)
94+
: base(iWwantToRun, inputContext)
95+
{
96+
}
97+
}
98+
99+
public class SenparcKernelAiResult<T> : SenaprcAiResult<FunctionResult>, IAiResult
100+
{
101+
public T? Output => Result.GetValue<T>();
102+
87103
public FunctionResult /*SKContext*/ Result { get; set; }
88104
public IAsyncEnumerable<StreamingKernelContent>? /*SKContext*/ StreamResult { get; set; }
89105

90106
public SenparcKernelAiResult(IWantToRun iWwantToRun, string? inputContent)
91107
: base(iWwantToRun, inputContent)
92108
{
109+
93110
}
94111

95112
public SenparcKernelAiResult(IWantToRun iWwantToRun, IAiContext inputContext)

src/Senparc.AI.Kernel/Handlers/SemanticAiHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ public async Task<SenparcAiResult> ChatAsync(IWantToRun iWantToRun, string input
133133
newHistory = this.RemoveHistory(history, maxHistoryCount - 1);
134134
}
135135

136-
newHistory = newHistory + $"\n{humanId}: {input}\n{robotId}: {aiResult.Output}";
136+
newHistory = newHistory + $"\n{humanId}: {input}\n{robotId}: {aiResult.OutputString}";
137137

138138
//记录对话历史(可选)
139139
request.SetStoredContext(historyArgName, newHistory);

src/Senparc.AI.Kernel/KernelConfigExtensions/KernelConfigExtensions.cs

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ public static bool GetStoredArguments(this SenparcAiRequest request, string key,
321321
/// <param name="request"></param>
322322
/// <param name="inStreamItemProceessing">启用流,并指定遍历异步流每一步需要执行的委托。注意:只要此项不为 null,则会触发流式的请求。</param>
323323
/// <returns></returns>
324-
public static Task<SenparcKernelAiResult> RunAsync(this IWantToRun iWanToRun, SenparcAiRequest request, Action<StreamingKernelContent> inStreamItemProceessing = null)
324+
public static Task<SenparcKernelAiResult<string>> RunAsync(this IWantToRun iWanToRun, SenparcAiRequest request, Action<StreamingKernelContent> inStreamItemProceessing = null)
325325
{
326326
return RunAsync<string>(iWanToRun, request, inStreamItemProceessing);
327327
}
@@ -335,7 +335,7 @@ public static Task<SenparcKernelAiResult> RunAsync(this IWantToRun iWanToRun, Se
335335
/// <typeparam name="T">指定返回结果类型</typeparam>
336336
/// <returns></returns>
337337

338-
public static async Task<SenparcKernelAiResult> RunAsync<T>(this IWantToRun iWanToRun, SenparcAiRequest request, Action<StreamingKernelContent> inStreamItemProceessing = null)
338+
public static async Task<SenparcKernelAiResult<T>> RunAsync<T>(this IWantToRun iWanToRun, SenparcAiRequest request, Action<StreamingKernelContent> inStreamItemProceessing = null)
339339
{
340340
var iWantTo = iWanToRun.IWantToBuild.IWantToConfig.IWantTo;
341341
var helper = iWanToRun.SemanticKernelHelper;
@@ -353,7 +353,7 @@ public static async Task<SenparcKernelAiResult> RunAsync<T>(this IWantToRun iWan
353353
var tempArguments = request.TempAiArguments?.KernelArguments;
354354

355355
FunctionResult? functionResult = null;
356-
var result = new SenparcKernelAiResult(iWanToRun, inputContent: null);
356+
var result = new SenparcKernelAiResult<T>(iWanToRun, inputContent: null);
357357

358358
var useStream = inStreamItemProceessing != null;
359359

@@ -428,21 +428,20 @@ public static async Task<SenparcKernelAiResult> RunAsync<T>(this IWantToRun iWan
428428
{
429429
try
430430
{
431-
result.Output = functionResult.GetValue<string>()?.TrimStart('\n') ?? "";
432-
433-
}
434-
catch (Exception)
435-
{
436-
//TODO: 提供 Output 的泛型
437-
try
431+
if (typeof(T) == typeof(string))
438432
{
439-
result.Output = functionResult.GetValue<T>()?.ToJson()?.TrimStart('\n') ?? "";
433+
result.OutputString = functionResult.GetValue<string>()?.TrimStart('\n') ?? "";
440434
}
441-
catch (Exception)
435+
else
442436
{
443-
result.Output = functionResult.GetValue<object>()?.ToJson()?.TrimStart('\n') ?? "";
437+
result.OutputString = functionResult.GetValue<T>()?.ToJson()?.TrimStart('\n') ?? "";
444438
}
445439
}
440+
catch (Exception)
441+
{
442+
//TODO: 提供 Output 的泛型
443+
result.OutputString = functionResult.GetValue<object>()?.ToJson()?.TrimStart('\n') ?? "";
444+
}
446445
result.Result = functionResult;
447446
}
448447
else
@@ -458,7 +457,7 @@ public static async Task<SenparcKernelAiResult> RunAsync<T>(this IWantToRun iWan
458457
}
459458
}
460459

461-
result.Output = stringResult.ToString();
460+
result.OutputString = stringResult.ToString();
462461
}
463462

464463
//result.LastException = botAnswer.LastException;
@@ -473,11 +472,10 @@ public static async Task<SenparcKernelAiResult> RunAsync<T>(this IWantToRun iWan
473472
/// <param name="request"></param>
474473
/// <param name="inStreamItemProceessing">启用流,并指定遍历异步流每一步需要执行的委托。</param>
475474
/// <returns></returns>
476-
public static Task<SenparcKernelAiResult> RunStreamAsync(this IWantToRun iWanToRun, SenparcAiRequest request, Action<StreamingKernelContent> inStreamItemProceessing = null)
475+
public static Task<SenparcKernelAiResult<string>> RunStreamAsync(this IWantToRun iWanToRun, SenparcAiRequest request, Action<StreamingKernelContent> inStreamItemProceessing = null)
477476
{
478477
inStreamItemProceessing ??= (item) => { };
479478
return RunAsync(iWanToRun, request, inStreamItemProceessing);
480-
481479
}
482480

483481
/// <summary>
@@ -500,7 +498,7 @@ public static async Task<SenaprcAiResult<T>> RunAsync<T>(this IWantToRun iWanToR
500498

501499
try
502500
{
503-
result.Output = kernelResult.GetValue<string>() ?? "";
501+
result.OutputString = kernelResult.GetValue<string>() ?? "";
504502
}
505503
catch (Exception)
506504
{

src/Senparc.AI.Kernel/Senparc.AI.Kernel.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
33
<TargetFramework>netstandard2.1</TargetFramework>
4-
<Version>0.15.4.5</Version>
4+
<Version>0.16.0-beta1</Version>
55
<Nullable>enable</Nullable>
66
<LangVersion>10.0</LangVersion>
77
<AssemblyName>Senparc.AI.Kernel</AssemblyName>

src/Senparc.AI/Interfaces/IAiResult.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ public interface IAiResult
1818
/// </summary>
1919
IAiContext InputContext { get; set; }
2020
/// <summary>
21-
/// 输出内容
21+
/// 输出内容(文本)
2222
/// </summary>
23-
string Output { get; set; }
23+
string OutputString { get; set; }
2424
/// <summary>
2525
/// 最近一个异常
2626
/// </summary>

src/Senparc.AI/Senparc.AI.csproj

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
33
<TargetFramework>netstandard2.1</TargetFramework>
4-
<Version>0.15.3</Version>
4+
<Version>0.16.0-beta1</Version>
55
<Nullable>enable</Nullable>
66
<LangVersion>10.0</LangVersion>
77
<AssemblyName>Senparc.AI</AssemblyName>
@@ -43,6 +43,9 @@
4343
v0.15.0 添加 HttpClient 日志功能,完善内容输出机制
4444
v0.15.1 升级到 SK 最新版本(v1.7.1)
4545
v0.15.2 添加 RedirectingHttpMessageHandler
46+
v0.16.0
47+
1、添加 SenparcKernelAiResult&lt;T$gt; 类型
48+
2、重命名 IAiResult.Output 为 OutputString
4649
</PackageReleaseNotes>
4750
<RepositoryUrl>https://github.com/Senparc/Senparc.AI</RepositoryUrl>
4851
<Configurations>Debug;Release;Test</Configurations>

0 commit comments

Comments
 (0)