Almacenamiento y recuperación del historial y el contexto de las conversaciones con la biblioteca BedrockSessionSaver de LangGraph - Amazon Bedrock

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Almacenamiento y recuperación del historial y el contexto de las conversaciones con la biblioteca BedrockSessionSaver de LangGraph

En lugar de utilizar directamente las API de administración de sesiones de Amazon Bedrock, puede almacenar y recuperar el historial y el contexto de las conversaciones en LangGraph con la biblioteca BedrockSessionSaver. Se trata de una implementación personalizada de CheckpointSaver de LangGraph. Utiliza las API de Amazon Bedrock con una interfaz basada en LangGraph. Para obtener más información, consulte langgraph-checkpoint-aws en el repositorio GitHub de LangChain.

En el siguiente ejemplo de código se muestra cómo usar la biblioteca BedrockSessionSaver de LangGraph para realizar un seguimiento del estado a medida que un usuario interactúa con Claude. Cómo usar este ejemplo de código:

  • Instale las dependencias requeridas.

    • boto3

    • langgraph

    • langgraph-checkpoint-aws

    • langchain-core

  • Asegúrese de tener acceso al modelo Claude 3.5 Sonnet v2 en su cuenta. O puede modificar el código para utilizar un modelo diferente.

  • Reemplace REGION por la región.

    • La región de su cliente de tiempo de ejecución y la de BedrockSessionSaver deben coincidir.

    • Debe ser compatible con Claude 3.5 Sonnet v2 (o el modelo que esté utilizando).

import boto3 from typing import Dict, TypedDict, Annotated, Sequence, Union from langgraph.graph import StateGraph, END from langgraph_checkpoint_aws.saver import BedrockSessionSaver from langchain_core.messages import HumanMessage, AIMessage import json # Define state structure class State(TypedDict): messages: Sequence[Union[HumanMessage, AIMessage]] current_question: str # Function to get response from Claude def get_response(messages): bedrock = boto3.client('bedrock-runtime', region_name="us-west-2") prompt = "\n".join([f"{'Human' if isinstance(m, HumanMessage) else 'Assistant'}: {m.content}" for m in messages]) response = bedrock.invoke_model( modelId="anthropic.claude-3-5-sonnet-20241022-v2:0", body=json.dumps({ "anthropic_version": "bedrock-2023-05-31", "max_tokens": 1000, "messages": [ { "role": "user", "content": [ { "type": "text", "text": prompt } ] } ], "temperature": 0.7 }) ) response_body = json.loads(response['body'].read()) return response_body['content'][0]['text'] # Node function to process user question def process_question(state: State) -> Dict: messages = list(state["messages"]) messages.append(HumanMessage(content=state["current_question"])) # Get response from Claude response = get_response(messages) messages.append(AIMessage(content=response)) # Print assistant's response print("\nAssistant:", response) # Get next user input next_question = input("\nYou: ").strip() return { "messages": messages, "current_question": next_question } # Node function to check if conversation should continue def should_continue(state: State) -> bool: # Check if the last message was from the user and contains 'quit' if state["current_question"].lower() == 'quit': return False return True # Create the graph def create_graph(session_saver): # Initialize state graph workflow = StateGraph(State) # Add nodes workflow.add_node("process_question", process_question) # Add conditional edges workflow.add_conditional_edges( "process_question", should_continue, { True: "process_question", False: END } ) # Set entry point workflow.set_entry_point("process_question") return workflow.compile(session_saver) def main(): # Create a runtime client agent_run_time_client = boto3.client("bedrock-agent-runtime", region_name="REGION") # Initialize Bedrock session saver. The Region must match the Region used for the agent_run_time_client. session_saver = BedrockSessionSaver(region_name="REGION") # Create graph graph = create_graph(session_saver) # Create session session_id = agent_run_time_client.create_session()["sessionId"] print("Session started. Type 'quit' to end.") # Configure graph config = {"configurable": {"thread_id": session_id}} # Initial state state = { "messages": [], "current_question": "Hello! How can I help you today? (Type 'quit' to end)" } # Print initial greeting print(f"\nAssistant: {state['current_question']}") state["current_question"] = input("\nYou: ").strip() # Process the question through the graph graph.invoke(state, config) print("\nSession contents:") for i in graph.get_state_history(config, limit=3): print(i) if __name__ == "__main__": main()