146 lines
4.7 KiB
Markdown
Raw Permalink Normal View History

# LangGraph Agent with Bedrock AgentCore Integration
| Information | Details |
|---------------------|------------------------------------------------------------------------------|
| Agent type | Synchronous |
| Agentic Framework | Langgraph |
| LLM model | Anthropic Claude 3 Haiku |
| Components | AgentCore Runtime |
| Example complexity | Easy |
| SDK used | Amazon BedrockAgentCore Python SDK |
This example demonstrates how to integrate a LangGraph agent with AWS Bedrock AgentCore, enabling you to deploy a web search-capable agent as a managed service.
## Prerequisites
- Python 3.10+
- [uv](https://github.com/astral-sh/uv) - Fast Python package installer and resolver
- AWS account with Bedrock access
## Setup Instructions
### 1. Create a Python Environment with uv
```bash
# Install uv if you don't have it already
pip install uv
# Create and activate a virtual environment
uv venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
```
### 2. Install Requirements
```bash
uv pip install -r requirements.txt
```
### 3. Understanding the Agent Code
The `langgraph_agent_web_search.py` file contains a LangGraph agent with web search capabilities, integrated with Bedrock AgentCore:
```python
from typing import Annotated
from langchain.chat_models import init_chat_model
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START
from langgraph.graph.message import add_messages
from langgraph.prebuilt import ToolNode, tools_condition
# Initialize the LLM with Bedrock
llm = init_chat_model(
"us.anthropic.claude-3-5-haiku-20241022-v1:0",
model_provider="bedrock_converse",
)
# Define search tool
from langchain_community.tools import DuckDuckGoSearchRun
search = DuckDuckGoSearchRun()
tools = [search]
llm_with_tools = llm.bind_tools(tools)
# Define state
class State(TypedDict):
messages: Annotated[list, add_messages]
# Build the graph
graph_builder = StateGraph(State)
def chatbot(state: State):
return {"messages": [llm_with_tools.invoke(state["messages"])]}
graph_builder.add_node("chatbot", chatbot)
tool_node = ToolNode(tools=tools)
graph_builder.add_node("tools", tool_node)
graph_builder.add_conditional_edges("chatbot", tools_condition)
graph_builder.add_edge("tools", "chatbot")
graph_builder.add_edge(START, "chatbot")
graph = graph_builder.compile()
# Integrate with Bedrock AgentCore
from bedrock_agentcore.runtime import BedrockAgentCoreApp
app = BedrockAgentCoreApp()
@app.entrypoint
def agent_invocation(payload, context):
tmp_msg = {"messages": [{"role": "user", "content": payload.get("prompt", "No prompt found in input")}]}
tmp_output = graph.invoke(tmp_msg)
return {"result": tmp_output['messages'][-1].content}
app.run()
```
### 4. Configure and Launch with Bedrock AgentCore Toolkit
```bash
# Configure your agent for deployment
bedrock-agentcore-toolkit configure
# Deploy your agent
bedrock-agentcore-toolkit deploy --app-file langgraph_agent_web_search.py
```
During configuration, you'll be prompted to:
- Select your AWS region
- Choose a deployment name
- Configure other deployment settings
### 5. Testing Your Agent
Once deployed, you can test your agent using:
```bash
bedrock-agentcore-toolkit invoke --prompt "What are the latest developments in quantum computing?"
```
The agent will:
1. Process your query
2. Use DuckDuckGo to search for relevant information
3. Provide a comprehensive response based on the search results
### 6. Cleanup
To remove your deployed agent:
```bash
bedrock-agentcore-toolkit delete
```
## How It Works
This agent uses LangGraph to create a directed graph for agent reasoning:
1. The user query is sent to the chatbot node
2. The chatbot decides whether to use tools based on the query
3. If tools are needed, the query is sent to the tools node
4. The tools node executes the search and returns results
5. Results are sent back to the chatbot for final response generation
The Bedrock AgentCore framework handles deployment, scaling, and management of the agent in AWS.
## Additional Resources
- [LangGraph Documentation](https://github.com/langchain-ai/langgraph)
- [LangChain Documentation](https://python.langchain.com/docs/get_started/introduction)
- [Bedrock AgentCore Documentation](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-core.html)