에이전트와 함께 메모리 사용

경고

의미 체계 커널 에이전트 메모리 기능은 실험적이며 변경될 수 있으며 피드백 및 평가에 따라 종료됩니다.

에이전트가 중요한 정보를 기억하는 것이 중요한 경우가 많습니다. 이 정보는 대화 기간 동안 보존되거나 여러 대화에 걸쳐 더 긴 기간 동안 보존될 수 있습니다. 이 정보는 사용자와 상호 작용하여 학습될 수 있으며 해당 사용자와 관련이 있을 수 있습니다.

우리는 이 정보를 추억이라고 부릅니다.

기억을 캡처하고 보존하기 위해 스레드에 추가된 모든 메시지에서 메모리를 추출하고 필요에 따라 에이전트에 해당 메모리를 제공하는 데 사용할 AgentThread 수 있는 구성 요소를 지원합니다.

에이전트 메모리에 Mem0 사용

Mem0 은 LLM 애플리케이션을 위한 자체 개선 메모리 계층으로, 개인 설정된 AI 환경을 지원합니다.

에이전트는 Microsoft.SemanticKernel.Memory.Mem0Provider Mem0 서비스와 통합되어 여러 스레드에서 사용자 기본 설정 및 컨텍스트를 기억할 수 있으므로 원활한 사용자 환경을 사용할 수 있습니다.

스레드에 추가된 각 메시지는 메모리를 추출하기 위해 Mem0 서비스로 전송됩니다. 각 에이전트 호출에 대해 Mem0에서 제공된 사용자 요청과 일치하는 추억을 쿼리하고 해당 호출에 대한 모든 추억이 에이전트 컨텍스트에 추가됩니다.

Mem0 메모리 공급자는 사용자 ID로 구성하여 사용자에 대한 추억을 여러 스레드에 장기간 저장할 수 있습니다. 스레드 ID로 구성하거나 에이전트 스레드의 스레드 ID를 사용하여 단일 스레드에만 연결된 단기 메모리를 허용할 수도 있습니다.

다음은 이 구성 요소를 사용하는 방법의 예입니다.

// Create an HttpClient for the Mem0 service.
using var httpClient = new HttpClient()
{
    BaseAddress = new Uri("https://api.mem0.ai")
};
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Token", "<Your_Mem0_API_Key>");

// Create a Mem0 provider for the current user.
var mem0Provider = new Mem0Provider(httpClient, options: new()
{
    UserId = "U1"
});

// Clear any previous memories (optional).
await mem0Provider.ClearStoredMemoriesAsync();

// Add the mem0 provider to the agent thread.
ChatHistoryAgentThread agentThread = new();
agentThread.AIContextProviders.Add(mem0Provider);

// Use the agent with mem0 memory.
ChatMessageContent response = await agent.InvokeAsync("Please retrieve my company report", agentThread).FirstAsync();
Console.WriteLine(response.Content);

Mem0Provider 옵션

동작 Mem0Provider 을 사용자 지정하는 다양한 옵션을 사용하여 구성할 수 있습니다. Mem0ProviderOptions 클래스를 사용하여 Mem0Provider 생성자에 옵션이 제공됩니다.

범위 지정 옵션

Mem0은 애플리케이션, 에이전트, 스레드 및 사용자별로 메모리 범위를 지정하는 기능을 제공합니다.

이러한 범위에 대한 ID를 제공하는 옵션을 사용할 수 있으므로 이러한 ID 아래에 메모리를 mem0에 저장할 수 있습니다. ApplicationId에서 AgentId, ThreadId, UserId, 및 Mem0ProviderOptions 속성을 참조하세요.

경우에 따라 서비스 기반 에이전트를 사용할 때 서버 쪽 에이전트 스레드의 스레드 ID를 사용할 수 있습니다. 그러나 Mem0Provider 개체를 생성할 때 스레드가 아직 만들어지지 않았을 수 있습니다. 이 경우, ScopeToPerOperationThreadId 옵션을 true로 설정할 수 있으며, Mem0Provider는 사용 가능한 경우 AgentThread의 ID를 사용할 것입니다.

컨텍스트 프롬프트

ContextPrompt 옵션을 사용하면 메모리 앞에 접두사로 지정된 기본 프롬프트를 재정의할 수 있습니다. 프롬프트는 AI 모델에 제공된 메모리를 컨텍스트화하는 데 사용되므로 AI 모델에서 해당 메모리의 개념과 사용 방법을 알 수 있습니다.

Short-Term 컨텍스트에 화이트보드 메모리 사용

화이트보드 메모리 기능을 사용하면 채팅 기록이 잘리는 경우에도 에이전트가 대화에서 가장 관련성이 큰 정보를 캡처하고 유지할 수 있습니다.

대화에 추가된 Microsoft.SemanticKernel.Memory.WhiteboardProvider 각 메시지는 요구 사항, 제안, 결정, 작업을 추출하기 위해 처리됩니다. 이러한 항목은 화이트보드에 저장되고 각 호출에 대한 추가 컨텍스트로 에이전트에 제공됩니다.

화이트보드 메모리를 설정하는 방법의 예는 다음과 같습니다.

// Create a whiteboard provider.
var whiteboardProvider = new WhiteboardProvider(chatClient);

// Add the whiteboard provider to the agent thread.
ChatHistoryAgentThread agentThread = new();
agentThread.AIContextProviders.Add(whiteboardProvider);

// Simulate a conversation with the agent.
await agent.InvokeAsync("I would like to book a trip to Paris.", agentThread);

// Whiteboard should now contain a requirement that the user wants to book a trip to Paris.

화이트보드 메모리의 이점

  • Short-Term 컨텍스트: 진행 중인 대화의 목표에 대한 주요 정보를 유지합니다.
  • 채팅 기록 잘림 허용: 채팅 기록이 잘리는 경우 중요한 컨텍스트 유지 관리를 지원합니다.

WhiteboardProvider 옵션

동작 WhiteboardProvider 을 사용자 지정하는 다양한 옵션을 사용하여 구성할 수 있습니다. WhiteboardProviderOptions 클래스를 사용하여 WhiteboardProvider 생성자에 옵션이 제공됩니다.

화이트보드 메시지 최대값

화이트보드에 유지할 최대 메시지 수를 지정합니다. 최대값에 도달하면 덜 중요한 메시지가 제거됩니다.

[문맥 프롬프트]

AI 모델에 화이트보드 콘텐츠를 제공할 때 메시지의 용도를 설명하는 것이 중요합니다. 이 설정을 사용하면 WhiteboardProvider에 기본 제공된 메시징을 재정의할 수 있습니다.

화이트보드비어있음알림

화이트보드가 비어 WhiteboardProvider 있으면 공백이라는 메시지가 출력됩니다. 이 설정을 사용하면 WhiteboardProvider에 기본 제공된 메시징을 재정의할 수 있습니다.

유지보수 알림 템플릿

AI WhiteboardProvider 모델을 사용하여 화이트보드에서 메시지를 추가/업데이트/제거합니다. 이러한 업데이트를 만들기 위한 기본 제공 프롬프트가 있습니다. 이 설정을 사용하면 이 기본 제공 프롬프트를 재정의할 수 있습니다.

템플릿에서 다음 매개 변수를 사용할 수 있습니다.

  • {{$maxWhiteboardMessages}}: 화이트보드에 허용되는 최대 메시지 수입니다.
  • {{$inputMessages}}: 화이트보드에 추가할 입력 메시지입니다.
  • {{$currentWhiteboard}}: 화이트보드의 현재 상태입니다.

Mem0 및 Whiteboard 메모리 결합

동일한 에이전트에서 Mem0 메모리와 화이트보드 메모리를 모두 사용하여 장기 및 단기 메모리 기능 간의 균형을 달성할 수 있습니다.

// Add both Mem0 and whiteboard providers to the agent thread.
agentThread.AIContextProviders.Add(mem0Provider);
agentThread.AIContextProviders.Add(whiteboardProvider);

// Use the agent with combined memory capabilities.
ChatMessageContent response = await agent.InvokeAsync("Please retrieve my company report", agentThread).FirstAsync();
Console.WriteLine(response.Content);

에이전트는 이러한 메모리 기능을 결합하여 사용자에게 보다 개인화된 컨텍스트 인식 환경을 제공할 수 있습니다.

다음 단계

곧 출시

자세한 내용은 곧 제공될 예정입니다.

곧 출시

자세한 내용은 곧 제공될 예정입니다.