You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将聊天历史传递给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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 15:03:17