Written by Gerald Hewes
We already explained in a prior article The Future of Fintech: From AI Tools to Agentic Autopilot why agentic AI matters for today’s real‑estate and fintech operations. Now it’s time to build it!
Most organizations have deployed simple chatbots to answer FAQs or qualify leads. While this represents a foundational step, the true potential of AI emerges when systems evolve into autonomous agents and agentic systems. These entities pursue objectives with minimal human intervention, learn from interactions, and orchestrate complex workflows under robust safety and governance controls.
This post walks you through some of the critical technical foundations — memory persistence, real‑time observability, and robust safety nets — that enable the transition toward an agentic future.
From Reactive to Proactive: Understanding the Landscape
To set a baseline, let’s compare the core AI paradigms:
Perceive‑Plan‑Act‑Learn Cycle
%20cycle.webp)
At their core, true AI agents and agentic systems follow a Perceive → Plan → Act → Learn (PPAL) cycle, continuously ingesting data, making decisions, executing actions, and feeding outcomes back into their models.
Case Study
Danske Bank reported a 60 % reduction in false positives after deploying an agentic fraud‑detection solution, with expectations to reach 80 % once further refinements are applied (Source: ThinkBig Analytics Case Study).
The Challenges of Scaling to Autonomous Agents
Scaling from scripted chatbots to autonomous agents demands a fundamental rethinking of infrastructure. At Proxet, we frequently see enterprises underestimate these specific hurdles:
Deep Dive: A Technical Look
Memory Infrastructure: The Backbone of Adaptive Agents
“In agentic systems, long‑term memory isn’t just storage — it’s the foundation of true autonomy. Without it, agents reset like amnesiacs, doomed to repeat mistakes; with it, they evolve into efficient, optimized executors.”
– Gerald Hewes
Memory elevates agents from forgetful responders to intelligent learners. It is typically split into:
In practice, short‑term memory is often programmatic under the control of the AI. Using LangGraph, it is implemented by updating the shared state of a graph; this state is not persisted beyond the current session.
Example: Remembering a User’s Name in LangGraph (simplified)
from typing import TypedDict, Annotated, List
import operator
from langchain_core.messages import BaseMessage
class AgentState(TypedDict):
messages: Annotated[List[BaseMessage], operator.add]
user_name: str | None = None
def greet_and_ask_name(state: AgentState) -> AgentState:
if state.get("user_name"):
return {}
greeting = BaseMessage(content="Hello! What's your name?")
return {"messages": [greeting]}
def extract_name(state: AgentState) -> AgentState:
for message in state["messages"]:
content = message.content.lower()
if "my name is" in content:
name = content.split("my name is")[-1].strip()
return {"user_name": name}
return {}
def process_with_name(state: AgentState) -> AgentState:
if state.get("user_name"):
response = BaseMessage(content=f"Nice to meet you, {state['user_name']}!")
return {"messages": [response]}
return {}
# Define workflow
workflow = StateGraph(AgentState)
workflow.add_node("greet", greet_and_ask_name)
workflow.add_node("extract", extract_name)
workflow.add_node("process", process_with_name)
# Add edges
workflow.add_edge(START, "greet")
workflow.add_edge("greet", "extract")
workflow.add_edge("extract", "process")
workflow.add_edge("process", END)For long‑term storage, typical solutions include relational databases (PostgreSQL, RDS, etc.) for structured preferences, key‑value stores (AWS DynamoDB) for richer properties, graph databases (Neo4j, Dgraph, GraphRAG) for entity relationships, and vector databases (Pinecone, Milvus, Qdrant) for large‑content embeddings.
Frameworks such as Letta (a library that abstracts agent‑memory mechanics) and Mem0 (a universal, self‑improving memory layer for LLM applications) reduce developer effort by handling storage, update, and retrieval while allowing for self‑hosted or cloud‑hosted deployments.
Example: Retrieving Memories with Mem0
def chat_with_companion(user_input: str, user_id: str, companion_id: str):
# Retrieve relevant memories
user_memories = search_memories(user_input, user_id)
companion_memories = search_memories(user_input, companion_id, is_agent=True)
# Construct message history
messages = [
{
"role": "system",
"content": (
"You are a faithful and helpful AI companion with access to both the "
"user's memories and your own memories from previous interactions. "
"Your goal is to provide responses that make the user feel good, "
"supported, and understood. Use the memories to personalize your "
"interactions, show empathy, and offer encouragement. "
"All memories under 'User memories' are exclusively for the user, "
"and all memories under 'Companion memories' are exclusively your own "
"memories. Do not mix or confuse these two sets of memories. "
"Use your own memories to maintain consistency in your personality "
"and previous interactions. Always maintain a positive and uplifting tone "
"while being honest and respectful."
),
},
*conversation_history,
{"role": "user", "content": user_input},
{
"role": "system",
"content": f"User memories: {user_memories}\n\nCompanion memories:
{companion_memories}",
},
]
try:
response = httpx.post(
"https://openrouter.ai/api/v1/chat/completions",
headers={"Authorization": f"Bearer {OPENROUTER_API_KEY}"},
json={"model": "gryphe/mythomax-l2-13b", "messages": messages},
)
response.raise_for_status()
companion_response = response.json()["choices"][0]["message"]["content"]
# Store new memories
store_memory([{"role": "user", "content": user_input}])
store_memory([{"role": "assistant", "content": companion_response}], is_agent=True)
# Update conversation history
conversation_history.append({"role": "user", "content": user_input})
conversation_history.append({"role": "assistant", "content": companion_response})
return companion_response
except Exception as e:
print(f"Error in chat_with_companion: {e}")
return "I'm sorry, but I'm having trouble responding right now. Please try again."Mem0 automatically analyses user queries and LLM responses to identify information that should be stored, without explicit programming.
Observability: Taming the Complexity of Agentic Systems
Agentic systems comprise many distributed, interdependent steps. Observability ensures traceability of every execution, leveraging standards such as OpenTelemetry(OTel) for metrics, logs, and traces.
Agentic AI is expensive. A simple chatbot query is one inference call. An agentic task might be a loop of 25 calls: Plan -> Search -> Read -> Think -> Search Again -> Draft -> Critique -> Rewrite. This "Token Tax" can destroy ROI if not managed.
With rich telemetry, key metrics — latency, error rates, request volume, model drift, cost per inference, safety, security, compliance, bias — need to be continuously monitored and alerted on.
Implementing Langfuse Spans for Agent Flows
from langfuse.langchain import CallbackHandler
langfuse_handler = CallbackHandler()
config = {
"configurable": {
"property_id": "3442 587242",
"thread_id": thread_id,
},
"metadata": {
"langfuse_session_id": thread_id,
"langfuse_user_id": user_id,
"langfuse_tags": [AGENT_TAG, os.environ["OPENAI_MODEL"]],
},
}
for question in checklist:
events = graph.stream(
{"messages": ("user", question)},
config,
stream_mode="values",
)
for event in events:
_print_event(event, _printed)Just a few lines are all that are needed to forward telemetry data to Langfuse in a LangGraph application.
In large deployments, general‑purpose OTEL platforms such as Uptrace or Jaeger are paired with LLM‑specific tools like Langfuse, LangSmith or Arize AI for detailed agent execution tracing.
Large volumes of trace data require dedicated observability platforms. AI systems can monitor and alert in real time — a capability often overlooked during planning. Best practice dictates (and our engineering teams have found) integrating monitoring with CI/CD pipelines so that the evolution of agentic systems is understood as changes are deployed.
Building the Future, One Agent at a Time
The leap from reactive chatbots to proactive agentic systems is not just a technical upgrade — it’s a strategic shift. Enterprises that win will be those that invest in robust memory, orchestration, observability, and responsible-by-design AI. At Proxet, we don’t treat responsible AI as an afterthought — we build and deploy our own AI models and frameworks to address security, safety, reliability, and ethics from day one. These practices are backed by concrete guidelines, best practices, and continuous evaluation strategies that ensure agentic systems behave as intended as they scale.
Coming Up Next
In our next post, we’ll explore the Data Layer — how to architect federated data systems that feed your agentic stack. We’ll cover schema design, security, and performance considerations that keep data flowing smoothly to your autonomous agents.
How Proxet Can Help
Proxet partners with forward-thinking enterprises to design and build complex adaptive systems where autonomy and accountability go hand in hand. If you’re ready to move beyond the Chatbot paradigm and unlock the value of true Autonomy, let’s start a conversation.