View a markdown version of this page

Integrasikan AgentCore Memori dengan LangChain atau LangGraph - Batuan Dasar Amazon AgentCore

Integrasikan AgentCore Memori dengan LangChain atau LangGraph

LangChain dan LangGraph merupakan kerangka kerja sumber terbuka yang kuat untuk mengembangkan agen melalui arsitektur berbasis grafik. Mereka menyediakan antarmuka sederhana untuk mendefinisikan interaksi agen dengan pengguna, alat-alatnya, dan memori.

Di dalamnya LangGraph ada dua konsep memori utama dalam hal ketekunan memori. Short-term, konteks mentah disimpan melalui objek pos pemeriksaan, sementara pengambilan memori jangka panjang yang cerdas dilakukan dengan menyimpan dan mencari melalui penyimpanan memori. Untuk mengatasi dua kasus penggunaan ini, integrasi dibuat untuk mencakup alur kerja checkpointing dan alur kerja penyimpanan:

  • AgentCoreMemorySaver- digunakan untuk menyimpan dan memuat objek pos pemeriksaan yang mencakup pesan pengguna dan AI, status eksekusi grafik, dan metadata tambahan

  • AgentCoreMemoryStore- digunakan untuk menyimpan pesan percakapan, meninggalkan layanan AgentCore Memori untuk mengekstrak wawasan, ringkasan, dan preferensi pengguna di latar belakang, kemudian membiarkan agen mencari melalui kenangan cerdas tersebut dalam percakapan masa depan

Integrasi ini mudah diatur, hanya membutuhkan menentukan ID Memori Memori dari AgentCore Memori. Karena mereka disimpan ke penyimpanan persisten dalam layanan, tidak perlu khawatir kehilangan interaksi ini melalui keluar wadah, solusi dalam memori yang tidak dapat diandalkan, atau crash aplikasi agen.

Prasyarat

Persyaratan yang Anda butuhkan sebelum mengintegrasikan AgentCore Memori dengan LangChain dan LangGraph.

  1. AWS akun dengan akses Bedrock Amazon Bedrock AgentCore

  2. AWS Kredensi yang dikonfigurasi (boto3)

  3. Sebuah AgentCore Memori

  4. Izin IAM yang diperlukan:

    • bedrock-agentcore:CreateEvent

    • bedrock-agentcore:ListEvents

    • bedrock-agentcore:RetrieveMemories

Konfigurasi untuk persistensi memori jangka pendek

AgentCoreMemorySaverIn LangGraph menangani semua penyimpanan dan pemuatan status percakapan, konteks eksekusi, dan variabel status di bawah tenda melalui jenis gumpalan AgentCore Memori. Ini berarti bahwa satu-satunya pengaturan yang diperlukan adalah menentukan checkpointer saat menyusun grafik agen, kemudian memberikan actor_id dan thread_id di RunnableConfigsaat memanggil agen. Konfigurasi ditunjukkan di bawah ini dan pemanggilan agen ditampilkan di bagian berikutnya. Jika ketekunan percakapan sederhana adalah semua kebutuhan aplikasi Anda, jangan ragu untuk melewati bagian memori jangka panjang.

# Import LangGraph and LangChain components from langchain.chat_models import init_chat_model from langgraph.prebuilt import create_react_agent # Import the AgentCore Memory integrations from langgraph_checkpoint_aws import AgentCoreMemorySaver REGION = "us-west-2" MEMORY_ID = "YOUR_MEMORY_ID" MODEL_ID = "us.anthropic.claude-3-7-sonnet-20250219-v1:0" # Initialize checkpointer for state persistence. No additional setup required. # Sessions will be saved and persisted for actor_id/session_id combinations checkpointer = AgentCoreMemorySaver(MEMORY_ID, region_name=REGION)

Konfigurasi untuk pencarian memori jangka panjang yang cerdas

Untuk penyimpanan memori jangka panjang LangGraph, Anda memiliki lebih banyak fleksibilitas tentang bagaimana pesan diproses. Misalnya, jika aplikasi hanya berkaitan dengan preferensi pengguna, Anda hanya perlu menyimpan HumanMessage objek dalam percakapan. Untuk ringkasan, semua jenisHumanMessage,AIMessage, dan ToolMessage akan relevan. Ada banyak cara untuk melakukan ini, tetapi pola implementasi yang umum adalah menggunakan kait model pra dan pasca, seperti yang ditunjukkan pada contoh di bawah ini. Untuk pengambilan memori, Anda dapat menambahkan store.search(query) panggilan di hook pra-model dan menambahkannya ke pesan pengguna sehingga agen memiliki semua konteksnya. Atau, agen dapat diberikan alat untuk mencari informasi sesuai kebutuhan. Semua pola implementasi ini didukung dan implementasinya akan bervariasi berdasarkan aplikasi.

from langgraph_checkpoint_aws import ( AgentCoreMemoryStore ) # Initialize store for saving and searching over long term memories # such as preferences and facts across sessions store = AgentCoreMemoryStore(MEMORY_ID, region_name=REGION) # Pre-model hook runs and saves messages of your choosing to AgentCore Memory # for async processing and extraction def pre_model_hook(state, config: RunnableConfig, *, store: BaseStore): """Hook that runs pre-LLM invocation to save the latest human message""" actor_id = config["configurable"]["actor_id"] thread_id = config["configurable"]["thread_id"] # Saving the message to the actor and session combination that we get at runtime namespace = (actor_id, thread_id) messages = state.get("messages", []) # Save the last human message we see before LLM invocation for msg in reversed(messages): if isinstance(msg, HumanMessage): store.put(namespace, str(uuid.uuid4()), {"message": msg}) break # OPTIONAL: Retrieve user preferences based on the last message and append to state # user_preferences_namespace = ("preferences", actor_id) # preferences = store.search(user_preferences_namespace, query=msg.content, limit=5) # # Add to input messages as needed return {"llm_input_messages": messages}

Buat agen dengan konfigurasi

Inisialisasi LLM dan buat LangGraph agen dengan konfigurasi memori.

# Initialize LLM llm = init_chat_model(MODEL_ID, model_provider="bedrock_converse", region_name=REGION) # Create a pre-built langgraph agent (configurations work for custom agents too) graph = create_react_agent( model=llm, tools=tools, checkpointer=checkpointer, # AgentCoreMemorySaver we created above store=store, # AgentCoreMemoryStore we created above pre_model_hook=pre_model_hook, # OPTIONAL: Function we defined to save user messages # post_model_hook=post_model_hook # OPTIONAL: Can save AI messages to memory if needed )

Panggil agen

Panggil agen.

# Specify config at runtime for ACTOR and SESSION config = { "configurable": { "thread_id": "session-1", # REQUIRED: This maps to Bedrock AgentCore session_id under the hood "actor_id": "react-agent-1", # REQUIRED: This maps to Bedrock AgentCore actor_id under the hood } } # Invoke the agent response = graph.invoke( {"messages": [("human", "I like sushi with tuna. In general seafood is great.")]}, config=config ) # ... agent will answer # Agent will have the conversation and state persisted on the next message # Because the session ID is the same in the runtime config response = graph.invoke( {"messages": [("human", "What did I just say?")]}, config=config ) # Define a new session in the runtime config to test long term retrieval config = { "configurable": { "thread_id": "session-2", # New session ID "actor_id": "react-agent-1", # Same actor ID } } # Invoke the agent (it will retrieve long term memories from other session) response = graph.invoke( {"messages": [("human", "Lets make a meal tonight, what should I cook?")]}, config=config )

Sumber daya