如何将聊天历史传递给MS Foundry DataAgent?技术实现咨询
问题描述
我们正在实现一个包含多个聊天完成代理的Semantic Kernel,其中一个代理会调用现有的MS Foundry数据代理,该代理以Fabric数据代理作为知识库。我们希望将用户当前的聊天历史作为额外上下文传递给Foundry Agent,但目前似乎无法实现。
以下代码可以成功调用Foundry Agent,但不清楚如何(或当前是否可行)传递聊天历史:
private async Task<AzureAIAgent> CreateASReviewFabricAgent(string history) { var client = AzureAIAgent .CreateAgentsClient(_foundryProjectEndpoint, new DefaultAzureCredential()); try { PersistentAgent agent = await client .Administration .GetAgentAsync(_foundryASRDataAgent); return new AzureAIAgent(agent, client); } catch (Exception ex) { _logger.LogError(ex, "Failed to fetch agent"); throw; } }
解决方案
传递聊天历史的正确时机不是在创建AzureAIAgent实例的时候,而是在向该Agent发送对话请求的阶段。你需要在调用Agent的对话接口时,将聊天历史作为对话上下文的一部分传入。
具体操作步骤:
- 保留现有
CreateASReviewFabricAgent方法(可移除参数history,因为创建Agent实例时不需要该参数),它负责获取Agent实例和客户端。 - 在调用Agent进行对话的逻辑中,构造包含完整聊天历史的消息列表,再传入Agent的调用方法。
示例代码如下:
// 获取Agent实例 var fabricAgent = await CreateASReviewFabricAgent(); // 构造包含聊天历史的消息集合 var conversationMessages = new List<ChatMessage>(); // 遍历添加历史对话消息 foreach (var historyItem in userChatHistory) { conversationMessages.Add(new ChatMessage(historyItem.Role, historyItem.Content)); } // 添加用户当前的新请求 conversationMessages.Add(new ChatMessage(ChatRole.User, currentUserQuery)); // 调用Agent并传入包含历史的消息集合 var agentResponse = await fabricAgent.InvokeAsync(conversationMessages);
如果需要更灵活的上下文传递,也可以通过AgentInvokeOptions附加额外上下文信息,只要你的Foundry Agent配置允许使用上下文数据,就能正常处理传入的聊天历史内容。
内容的提问来源于stack exchange,提问作者Dooie
相关产品推荐
相关产品推荐

