Microsoft Agent Framework(MAF) - 使用MAF和GitHub Models创建一个AI Agent - Background Responses(长时间作业 )
1. 简单介绍
如果发送给Agent或大模型的是一个复杂的查询,可能需要比较长时间才能获得回复。当前有一些大模型支持Background Responses,比如openai/gpt-4o。Background Responses允许服务端以异步的方式去执行耗时任务,这样客户端就不需要进行长时间等待了,客户端还能继续处于响应状态。Background Responses是通过continuation token来运作的。如果AI Agent或者大模型支持Background Responses,则再执行耗时任务时候,会首先返回一个continuation token,应用程序可以使用这个continuation token来检查进度或者恢复流传输。按照微软的介绍,当前Background Responses支持.NET和Python两种语言。
这边将体验一下AI Agent 执行长时间任务时候,网络中断又恢复,看是否还能正常拿到final response。这边将采用streaming的方式从AI Agent获取response。
2.具体说明
2.1 GitHub Models
这边将使用GitHub Models中的openai/gpt-4o-mini进行体验。GitHub Models的使用过程可以参考之前的文章GitHub Models - 尝试一下使用GitHub Models
得到GitHub Models的 endpoint, personal access token, model的信息。
model: openai/gpt-4o-mini
endpoint: https://models.github.ai/inference
token: [your own token]
2.2 使用Background Responses
创建一个控制台项目,Background Responses的配置

var agent = chatClient
.AsAIAgent(
instructions: instructions,
name: "Assistant"
);
AgentRunOptions options = new()
{
AllowBackgroundResponses = true
};
AgentSession session = await agent.CreateSessionAsync();
AgentResponseUpdate? latestUpdate = null;
await foreach (var update in agent.RunStreamingAsync("Write a detailed market analysis for the 2026.", session, options))
{
Console.Write(update.Text);
latestUpdate = update;
break;
}
为了防止网络中断的情况,则可以添加如下的代码,
#pragma warning disable MEAI001
options.ContinuationToken = latestUpdate?.ContinuationToken;
#pragma warning restore MEAI001
await foreach (var update in agent.RunStreamingAsync(session, options))
{
Console.Write(update.Text);
}
note, 获取ContinuationToken,然后使用token恢复流传输。在测试的时候,尽量写一个让AI大模型产生大量回复的prompt,比如上面的"Write a detailed market analysis for the 2026"。这样AI大模型就需要比较长的时间来处理了。
2.3 运行一下
启动项目,开始从GitHub Models得到streaming result,这时候把电脑的网络断了,会发现流式传输中断了。如下图所示,

等了一分钟,然后把网络恢复,会发现控制台又有流传输结果返回。

不过网络中断的时间,不能太长,否则会报如下这个错误,可以看出默认允许中断100秒,

note, 按照提示,100秒的时间限制可以进行更改的。
2.4 其他
如果配置的是,AllowBackgroundResponses = false,

则进行网络中断测试时候,应用程序会报如下这个错误的,
3.总结
本文简单介绍了一下AI Agent/大模型在执行长时间任务的时候,配置了Background Responses应用程序的执行效果。发现在执行长时间任务时,即使网络中断并恢复,仍然可以继续得到streaming result。以上只是个人测试的结果,作为一个参考,谢谢。
下面是MAF源码中,对于AllowBackgroundResponses的注释,可以作为参考信息。

本文如果哪里有错误,麻烦告之,谢谢谢谢!
更多推荐
所有评论(0)