Deploy Microsoft AutoGen as a standalone Python application.
mkdir autogen-app
cd autogen-app
mkdir -p src output coding
python -m venv venv
source venv/bin/activate # Linux/macOS
# or
venv\Scripts\activate # Windows
Create requirements.txt:
autogen-agentchat>=0.7.0
autogen-ext[openai]>=0.7.0
python-dotenv>=1.0.0
Install:
pip install -r requirements.txt
Create src/main.py:
import asyncio
import os
from dotenv import load_dotenv
from autogen_agentchat.agents import AssistantAgent, UserProxyAgent
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_ext.models.openai import OpenAIChatCompletionClient
# Load environment variables
load_dotenv()
async def main() -> None:
# Create model client
model_client = OpenAIChatCompletionClient(
model="gpt-4o",
temperature=0.7
)
# Create agents
coder = AssistantAgent(
"coder",
model_client=model_client,
description="A helpful coding assistant",
system_message="You are a helpful coding assistant. Write code when requested."
)
reviewer = AssistantAgent(
"reviewer",
model_client=model_client,
description="A code reviewer",
system_message="You are a code reviewer. Review code for quality."
)
user_proxy = UserProxyAgent(
"user_proxy",
description="A human user proxy",
code_execution_config={"work_dir": "coding"}
)
# Create team
team = RoundRobinGroupChat(
[coder, reviewer, user_proxy],
max_turns=10
)
# Run the team
result = await team.run(
task="Create a Python function to calculate fibonacci numbers"
)
print(result)
await model_client.close()
if __name__ == "__main__":
asyncio.run(main())
Create .env file:
OPENAI_API_KEY=sk-your-openai-api-key-here
python src/main.py
Create src/api.py:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import asyncio
from autogen_agentchat.agents import AssistantAgent
from autogen_ext.models.openai import OpenAIChatCompletionClient
app = FastAPI()
class TaskRequest(BaseModel):
task: str
model: str = "gpt-4o"
class TaskResponse(BaseModel):
result: str
@app.post("/run", response_model=TaskResponse)
async def run_task(request: TaskRequest) -> TaskResponse:
try:
model_client = OpenAIChatCompletionClient(model=request.model)
agent = AssistantAgent(
"assistant",
model_client=model_client,
system_message="You are a helpful assistant."
)
result = await agent.run(task=request.task)
await model_client.close()
return TaskResponse(result=str(result))
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.get("/health")
async def health():
return {"status": "healthy"}
Install dependencies:
pip install fastapi uvicorn
Run:
uvicorn src.api:app --host 0.0.0.0 --port 8000
Create /etc/systemd/system/autogen.service:
[Unit]
Description=Microsoft AutoGen Application
After=network.target
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/opt/autogen
Environment="PATH=/opt/autogen/venv/bin"
Environment="OPENAI_API_KEY=your-api-key"
ExecStart=/opt/autogen/venv/bin/python src/main.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Enable and start:
sudo systemctl daemon-reload
sudo systemctl enable autogen
sudo systemctl start autogen
sudo systemctl status autogen
Edit crontab:
crontab -e
Add entry (run daily at 6 AM):
0 6 * * * cd /opt/autogen && /opt/autogen/venv/bin/python src/main.py >> /var/log/autogen.log 2>&1
Create logging_config.py:
import logging
import sys
def setup_logging():
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('autogen.log'),
logging.StreamHandler(sys.stdout)
]
)
Use in main.py:
from logging_config import setup_logging
setup_logging()
logger = logging.getLogger(__name__)
async def main():
logger.info("Starting AutoGen execution...")
# ... rest of code
Install AutoGen Studio:
pip install autogenstudio
Create systemd service for Studio:
[Unit]
Description=AutoGen Studio
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/autogen
Environment="OPENAI_API_KEY=your-api-key"
ExecStart=/opt/autogen/venv/bin/autogenstudio ui --port 8080 --host 0.0.0.0
Restart=always
[Install]
WantedBy=multi-user.target
Access at: http://your-server:8080