A detailed guide on building an AI agent with Python, from defining the architecture and sample code to real-world production deployment — based on the experience of the engineering team at ECOA AI.
Don’t Think an AI Agent Is Too Complicated
I once spent hours with a client — he was the CTO of a logistics startup — who wanted to build an AI agent with Python to automatically process orders and chat with customers. It sounds grand, but what was the reality?
Why Smart CTOs Hire Vietnamese Developers: The 2025 Offshoring Playbook
TL;DR: Vietnam is emerging as a top-tier destination for offshore software development, offering a 40% cost reduction, strong… ...
After just three weeks, we had an agent running stably, handling 2,000+ messages per day with an average response time of 120ms.
The problem is that many people think building an AI agent with Python requires using some super-sized, super-difficult framework. But in reality, you only need to grasp a few core concepts and a simple stack.
Why Smart CTOs Hire Vietnamese Developers: Lower Cost, Higher Quality
TL;DR Vietnam is the top emerging hub for offshore development. Hire Vietnamese developers for 40-60% cost savings, strong… ...
What an AI Agent Actually Is
To put it plainly: an AI agent is a system with autonomous capability — it receives input, reasons, and then takes action (calling APIs, sending emails, updating databases) without requiring human intervention at each step.
In Python, you can build one with three main components:
- LLM as the “brain” for reasoning
- Tools/Functions as the “hands and feet” for execution
- Memory as the “memory” for retaining context
To build an AI agent with Python, you don’t need to rewrite an entire complex system. You just need to choose the right tools and understand how they connect.
Environment Setup — A Small Thing That’s Easy to Get Wrong
I’ve seen many projects fail right at the dependency installation step due to version conflicts. Keep in mind: Python 3.10+ and pip 21+ are the minimum requirements.
Below is the requirements.txt I use in most of my agent projects:
openai>=1.0.0
pydantic>=2.0.0
redis>=5.0.0 # for session-based memory
httpx>=0.25.0 # fast API calls
python-dotenv>=1.0.0
Important: don’t use requests if you need to handle concurrent requests. httpx runs async and is 3-4 times faster in real-world scenarios.
Sample Code: An AI Agent for Handling Support Tickets
Let me share something real — this is code we actually use at the ECOA AI Platform. It’s simple, but it runs stably in production.
import openai
import json
from pydantic import BaseModel
class TicketAgent:
def __init__(self, api_key: str):
openai.api_key = api_key
self.tools = [
{
"type": "function",
"function": {
"name": "get_ticket_info",
"description": "Retrieve ticket information from the database",
"parameters": {
"type": "object",
"properties": {
"ticket_id": {"type": "string"}
}
}
}
}
]
def run(self, user_message: str) -> str:
response = openai.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": user_message}],
tools=self.tools,
tool_choice="auto"
)
# Handle function calls if present
if response.choices[0].message.tool_calls:
for tool_call in response.choices[0].message.tool_calls:
if tool_call.function.name == "get_ticket_info":
args = json.loads(tool_call.function.arguments)
ticket_data = self._fetch_ticket(args["ticket_id"])
return f"Ticket #{ticket_data['id']}: {ticket_data['status']}"
return response.choices[0].message.content
def _fetch_ticket(self, ticket_id: str) -> dict:
# Simulated database
return {"id": ticket_id, "status": "open", "priority": "high"}
# Test it
agent = TicketAgent(api_key="your-key")
print(agent.run("Check ticket ABC-123 for me"))
It may sound unbelievable, but with just ~40 lines of this code, you’ve got an agent that can automatically look up information and respond.
But can it really run in production?
The answer is yes, but you’ll need to add three things: memory, rate limiting, and monitoring.
Comparing Approaches to Building an AI Agent — Which One to Choose?
| Approach | Complexity | Deployment Speed | Best Suited For |
|---|---|---|---|
| Pure custom code (like the sample above) | Low | Fast (1-2 days) | MVP, POC |
| Using a framework (LangChain, LlamaIndex) | Medium | Medium (1 week) | Complex applications |
| Using a specialized platform (ECOA AI) | Very low | Very fast (a few hours) | Production, large scale |
In my experience: if you just need to build an AI agent with Python for a small project, custom coding is fine. But when you need monitoring, logging, and scaling to thousands of requests, a platform like ECOA AI will save you at least 40% of development time.
Memory — The Thing That Makes an Agent “Smarter”
An agent without memory is just a cheap chatbot. It will forget what you just asked after every response.
The solution? Use Redis to store session history. Here’s how I usually do it:
import redis
import json
class MemoryAgent:
def __init__(self, redis_url: str):
self.redis = redis.from_url(redis_url)
def get_history(self, session_id: str) -> list:
data = self.redis.get(f"session:{session_id}")
return json.loads(data) if data else []
def add_message(self, session_id: str, role: str, content: str):
history = self.get_history(session_id)
history.append({"role": role, "content": content})
# Keep only the last 20 messages to avoid context explosion
self.redis.setex(f"session:{session_id}", 3600, json.dumps(history[-20:]))
The reality is that just the last 20-30 messages give you enough context for the agent to respond accurately. Don’t hoard millions of tokens — it’s both expensive and slow.
When Should You Use the ECOA AI Platform Instead of Coding Yourself?
I’m not selling anything. But if you’re reading this and thinking, “I can code all of this myself,” then ask yourself:
- Do you need to handle 1,000+ requests per second?
- Do you want to track token usage, latency, and error rates?
- Are you willing to spend two months building a logging, alerting, and fallback system?
“In a previous project, our client spent 3 months building an agent from scratch — and it was still unstable in the end. They switched to the ECOA AI Platform and had a production-ready agent in just 2 days.” — ECOA AI Engineering Team
If you’re building an AI agent with Python for learning or experimentation purposes — code it by hand. But if you need a reliable solution, use an existing platform.
Frequently Asked Questions (FAQ) About Building an AI Agent with Python
1. Do I need to know machine learning to build an AI agent?
No. You just need to know how to call an LLM API (like OpenAI, Claude) and write simple processing logic. ML is a different field.
2. Is building an AI agent with Python expensive?
The main cost is calling the LLM API. An agent handling 10,000 requests per month with GPT-4o-mini costs about $5-10. Very cheap compared to hiring a person.
3. Can my agent suffer from hallucinations?
Yes. To reduce this, you should add grounding — tell the agent when it’s allowed to reason and when it must use a specific tool. Using Pydantic to validate the output also helps.
4. Which framework is best for production?
I recommend LangChain if you want flexibility, and the ECOA AI Platform if you want built-in monitoring and scaling. There is no “best” — only “best suited.”
5. How do I stop the agent from repeating answers?
Set temperature=0.7-1.0, and add an instruction in the system message: “Provide varied responses, avoid repeating phrases.” Memory also helps the agent know what it has already said.