Designing Agentic Systems with LangChain
Dilini K. Sumanapala, PhD
Founder & AI Engineer, Genverv, Ltd.
The area of a rectangle with sides 5 and 7 is 35 square units.
User: "What is the area of a rectangle with sides 5 and 7?"
tools = [rectangle_area] query = "What is the area of a rectangle with sides 14 and 4?"
# Create the ReAct agent app = create_react_agent(model, tools)
# Invoke the agent with a query and store the messages response = app.invoke({"messages": [("human", query)]})
# Define and print the input and output messages print({ "user_input": query, "agent_output": response["messages"][-1].content})
{'user_input': 'What is the area of a rectangle with sides 14 and 4?',
'agent_output': 'The area of a rectangle with sides 14 and 4 is 56
square units.'}
{'user_input': 'What about one with sides 12 and 14?',
'agent_output': ['HumanMessage: What is the area of a rectangle with sides 5 and 7?', 'AIMessage: The area of a rectangle with sides 5 and 7 is 35 square units.', 'HumanMessage: What about one with sides 12 and 14?', 'AIMessage: The area of a rectangle with sides 12 and 14 is 168 square units.',
'HumanMessage: What about one with sides 12 and 14?', 'AIMessage: The area of a rectangle with sides 12 and 14 is 168 square units.']}
from langchain_core.messages import
HumanMessage, AIMessage
from langchain_core.messages import HumanMessage, AIMessage
message_history = messages["messages"]
from langchain_core.messages import HumanMessage, AIMessage message_history = messages["messages"]
new_query = "What about one with sides 4 and 3?"
from langchain_core.messages import HumanMessage, AIMessage message_history = messages["messages"]
new_query = "What about one with sides 4 and 3?"
# Invoke the app with the full message history messages = app.invoke({"messages": message_history + [("human", new_query)]})
# Extract the human and AI messages
filtered_messages = [msg for msg in
messages["messages"] if
isinstance(msg,
(HumanMessage,
AIMessage))
and msg.content.strip()]
# Extract the human and AI messages filtered_messages = [msg for msg in messages["messages"] if isinstance(msg, (HumanMessage, AIMessage)) and msg.content.strip()]
# Format and print the final result print({ "user_input": new_query, "agent_output": [f"{msg.__class__.__name__}: {msg.content}" for msg in filtered_messages]})
{'user_input': 'What about one with sides 4 and 3?',
'agent_output': ['HumanMessage: What is the area of a rectangle with sides 14 and 4?', 'AIMessage: The area of a rectangle with sides 14 and 4 is 56 square units.', 'HumanMessage: What about one with sides 4 and 3?', 'AIMessage: The area of a rectangle with sides 4 and 3 is 12 square units.',
'HumanMessage: What about one with sides 4 and 3?', 'AIMessage: The area of a rectangle with sides 4 and 3 is 12 square units.']}
Designing Agentic Systems with LangChain