在我的上一篇博客中,我介绍了 Microsoft 的 Azure AI Agent 服务,这是一个完全管理的平台,简化了构建、部署和扩大 AI 代理的过程。与 OpenAI Assistant 不同,Azure AI Agent 服务更加灵活,支持多种大型语言模型(LLM,例如 OpenAI、Mistral、DeepSeek 等),同时确保企业级的安全保障并实现与 Azure 生态系统的无缝集成。
Azure AI 代理服务:它是啥,如何用 Azure AI 工作坊和 .NET 建一个 AI 代理blog.cubed.run该博客提供了一份一步一步的指南,使用Azure AI Foundry Hub(Azure AI Foundry Hub) 创建一个AI代理,涵盖了从项目搭建和代理配置到与外部数据(例如10-K报告)进行关联,以及将其集成到.NET应用程序中以用于实际操作的全过程。
通过结合无需代码的代理创建与自定义的.NET集成,这种方法让开发人员能够以最小的努力构建可扩展且智能的AI驱动助手,利用结构化数据和强大的安全措施。
在本博文中,我将进一步更深入地探讨如何构建一个多代理系统,利用Microsoft的AI框架Semantic Kernel。
之前,我们创建了StockExpertAgent,这是一个基于公司10-K报告的AI代理。现在,我们来介绍一下InvestorAgent,它将根据股票代理提供的组合数据为我提供个性化的投资建议。我们将利用Semantic Kernel来协调这些代理,以实现智能互动与决策的多代理系统。
这是一张图,展示了这个博客中的主要话题。
开始吧!
首先:在Azure AI代理服务中创建InvestorAgent:要详细了解如何在 Azure AI Agent 服务中创建智能代理,请参阅我之前的博客博客。创建并设置 AI 工坊项目和中心后,这个过程非常简单。访问 Azure AI Studio 并点击 代理 选项卡开始操作,在这里你可以点击 代理 选项卡开始操作。
我要把它和样本投资组合一起磨碎。
Azure AI工作室中Agents选项卡的截图
步骤二:在第一步中定义的Azure AI服务中的智能体获取现在在 .NET 应用程序中,安装以下 NuGet:
以下为安装包的引用示例:
#r "nuget: Azure.AI.Projects, 1.0.0-beta.4"
#r "nuget: Azure.Identity"
#r "nuget: Microsoft.SemanticKernel.Agents.Core, 1.40.0-preview"
#r "nuget: Microsoft.SemanticKernel.Agents.AzureAI, 1.40.0-preview"
// 构建核心
var builder = Kernel.CreateBuilder();
builder.AddAzureOpenAIChatCompletion("GPT4ov1", "https://testmediumazureopenai.openai.azure.com", "<api-key>");
Kernel kernel = builder.Build();
// 定义连接字符串以连接 Azure AI 代理
string connectionString = "eastus2.api.azureml.ms;<project>;aifoundary-hub;aiproject";
// 初始化 Azure 代理客户端对象
AgentsClient client = new AgentsClient(connectionString, credential);
// 初始化股票专家代理实例
string stockExpertAgentId = "asst_8Ev5OpD3bMUll20xJFu36Pah";
Response<Agent> agentResponse = await client.GetAgentAsync(stockExpertAgentId);
Agent stockExpertAgentDefinition = agentResponse.Value;
AzureAI代理 stockExpertAgent = new(stockExpertAgentDefinition, client)
{
Kernel = kernel // 将核心用于执行
};
我们现在定义一个叫做投资者顾问代理的,它已基于样本投资组合建立。
// 初始化投资者顾问代理
string 投资顾问代理Id = "asst_txX6WR6caXzpVhEksCupcySS";
Response<Agent> 投资顾问代理响应 = await client.GetAgentAsync(投资顾问代理Id);
Agent 投资顾问代理定义 = 投资顾问代理响应.Value;
AzureAIAgent 投资顾问代理 = new(投资顾问代理定义, client)
{
// 设置内核
Kernel = kernel,
};
步骤3:定义代理小组聊天并看看它的实际应用
使用Semantic Kernel的“群聊”功能,创建一个多代理系统。
// 创建由两个代理组成的语义内核代理群聊
AgentGroupChat agentGroupChat = new AgentGroupChat(stockExpertAgent, investorProxyAgent)
{
ExecutionSettings = new()
{
SelectionStrategy = selectionStrategy,
TerminationStrategy = terminationStrategy,
}
};
// 开始聊天
agentGroupChat.AddChatMessage(new ChatMessageContent(AuthorRole.User, "<Starting prompt here>"));
// 异步处理并显示聊天消息
await foreach (var content in agentGroupChat.InvokeAsync())
{
string interaction = $"<b>#{content.Role}</b> - <i>{content.AuthorName ?? "*"} </i>: \"{content.Content}\"";
控制台输出(interaction);
}
股票专家提供了公司投资的见解。
接着那位投资顾问代理人就给出了投资建议
关于定义终止和选择策略,可以看看我之前写的博客
一步一步构建投资组合经理:一个基于微软语义的多代理系统,如何通过SelectionFunction实现高效的团队协作你可以找到所有的代码
在 GitHub 上查看 StockAnalyzer-Azure-AI-Agent-Service 项目中的 MultiAgentSystemWithSKExample.cs 文件(位于 main 分支)。github.com/akshaykokane/StockAnalyzer-Azure-AI-Agent-Service/blob/main/MultiAgentSystemWithSKExample.cs?source=post_page-----a6c68b123e54---------------------------------------
最后:在上述说明中,我们展示了如何使用Semantic Kernel来调度在Azure AI Agent Service中创建的AI代理。首先,该过程利用了在Azure AI Foundry中构建的知识库,然后根据需要执行了检索增强生成(RAG)。
然而,当你运行应用程序后,你可能会注意到正确的代理并不总能被正确选择。为此,我们需要为代理群聊设定一个结束和选择规则。
总的来说,我更倾向于使用托管服务,但我注意到在Semantic Kernel中的ChatCompletionAgent相比Azure Agent响应更快。这一点也在预料之中,因为我们使用的是托管服务,这可能会带来一些额外的开销。
共同學習,寫下你的評論
評論加載中...
作者其他優(yōu)質文章