Files
agent_management/scripts/init_database.sh
2026-01-15 17:22:16 +00:00

234 lines
7.9 KiB
Bash

#!/bin/bash
# 数据库初始化和数据迁移脚本
set -e
echo "Agent Manager - Database Initialization and Migration"
echo "======================================================"
# 1. 备份现有数据(如果存在)
if [ -f "agent_manager.db" ]; then
echo "Backing up existing database..."
cp agent_manager.db agent_manager.db.backup.$(date +%Y%m%d_%H%M%S)
fi
# 2. 初始化数据库(如果不存在)
echo "Initializing database..."
python3 << 'EOF'
from database import init_db, SessionLocal, Template, Quota, AgentType
from datetime import datetime
# 创建所有表
init_db()
print("✓ Database tables created")
# 创建示例模板数据
db = SessionLocal()
try:
# 检查是否已有模板
existing_templates = db.query(Template).count()
if existing_templates == 0:
print("\nCreating default templates...")
# MySQL Agent (Platform)
mysql_template = Template(
name="mysql_agent",
display_name="MySQL Query Agent",
description="Platform MySQL database query agent using LangChain",
agent_type=AgentType.PLATFORM,
image="agnettaiji.azurecr.io/mysql_agent:latest",
port=None,
env_requirements={
"required": {
"MYSQL_HOST": "MySQL server hostname",
"MYSQL_USER": "MySQL username",
"MYSQL_PASSWORD": "MySQL password",
"MYSQL_DATABASE": "MySQL database name",
"OPENAI_API_KEY": "OpenAI API key for LangChain"
},
"optional": {
"MYSQL_PORT": "MySQL port (default: 3306)"
}
},
cpu_request="100m",
cpu_limit="500m",
memory_request="256Mi",
memory_limit="512Mi",
min_replicas=1,
max_replicas=3,
target_cpu_utilization=80
)
db.add(mysql_template)
# PostgreSQL Agent (Custom)
pg_template = Template(
name="postgresql_agent",
display_name="PostgreSQL Query Agent",
description="Custom PostgreSQL database query agent using LangChain",
agent_type=AgentType.CUSTOM,
image="agnettaiji.azurecr.io/postgresql_agent:latest",
port=None,
env_requirements={
"required": {
"POSTGRES_HOST": "PostgreSQL server hostname",
"POSTGRES_USER": "PostgreSQL username",
"POSTGRES_PASSWORD": "PostgreSQL password",
"POSTGRES_DATABASE": "PostgreSQL database name",
"OPENAI_API_KEY": "OpenAI API key for LangChain"
},
"optional": {
"POSTGRES_PORT": "PostgreSQL port (default: 5432)"
}
},
cpu_request="100m",
cpu_limit="500m",
memory_request="256Mi",
memory_limit="512Mi",
min_replicas=1,
max_replicas=5,
target_cpu_utilization=80
)
db.add(pg_template)
# Jina Search Agent (Custom with HTTP service)
jina_template = Template(
name="jina_search_agent",
display_name="Jina Search Agent",
description="Custom web search agent using Jina Reader API",
agent_type=AgentType.CUSTOM,
image="agnettaiji.azurecr.io/jina_search_agent:latest",
port=8080,
env_requirements={
"required": {
"JINA_API_KEY": "Jina API key"
},
"optional": {
"SERVICE_PORT": "HTTP service port (default: 8080)",
"SERVICE_HOST": "HTTP service host (default: 0.0.0.0)"
}
},
cpu_request="100m",
cpu_limit="500m",
memory_request="128Mi",
memory_limit="256Mi",
min_replicas=1,
max_replicas=5,
target_cpu_utilization=80
)
db.add(jina_template)
# Intelligent Search Agent (Custom with HTTP service)
search_template = Template(
name="search_agent",
display_name="Intelligent Search Agent",
description="智能搜索代理,提供多源搜索和答案生成功能",
agent_type=AgentType.CUSTOM,
agent_framework="langchain",
image="agnettaiji.azurecr.io/ai-agents/search-agent:v1.0",
port=8080,
env_requirements={
"required": {
"LLM_BASE_URL": "LLM API基础URL",
"LLM_API_KEY": "LLM API密钥",
"SERPER_API_KEY": "Serper API密钥(Google搜索)",
"JINA_API_KEY": "Jina API密钥(内容提取和重排序)"
},
"optional": {
"LLM_MODEL": "LLM模型名称,默认xchat52",
"MAX_ITERATIONS": "最大迭代次数,默认3",
"MAX_RESULTS_PER_QUERY": "每次搜索最大结果数,默认10",
"CONTENT_MAX_LENGTH": "内容最大长度,默认5000",
"LOG_LEVEL": "日志级别,默认INFO",
"TIMEOUT": "超时时间(秒),默认30"
}
},
cpu_request="500m",
cpu_limit="1000m",
memory_request="512Mi",
memory_limit="1Gi",
min_replicas=1,
max_replicas=3,
target_cpu_utilization=70
)
db.add(search_template)
# Echo Agent (Platform - simple example)
echo_template = Template(
name="echo_agent",
display_name="Echo Agent",
description="Simple platform echo agent for testing",
agent_type=AgentType.PLATFORM,
image="busybox:latest",
port=None,
env_requirements={},
cpu_request="50m",
cpu_limit="100m",
memory_request="64Mi",
memory_limit="128Mi",
min_replicas=1,
max_replicas=2,
target_cpu_utilization=80
)
db.add(echo_template)
db.commit()
print("✓ Created 5 default templates")
# 创建默认配额
print("\nCreating default quotas...")
# 默认管理员配额
admin_quota = Quota(
owner_type="admin",
owner_id="admin",
platform_pod_quota=100,
platform_pod_used=0,
custom_cpu_quota=50.0,
custom_cpu_used=0.0,
custom_memory_quota=102400.0, # 100GB
custom_memory_used=0.0
)
db.add(admin_quota)
# 默认租户配额
tenant_quota = Quota(
owner_type="tenant",
owner_id="default_tenant",
platform_pod_quota=10,
platform_pod_used=0,
custom_cpu_quota=5.0,
custom_cpu_used=0.0,
custom_memory_quota=10240.0, # 10GB
custom_memory_used=0.0
)
db.add(tenant_quota)
db.commit()
print("✓ Created default quotas")
else:
print(f"\n✓ Database already contains {existing_templates} templates")
print("\n✅ Database initialization completed successfully!")
except Exception as e:
print(f"\n❌ Error: {str(e)}")
db.rollback()
raise
finally:
db.close()
EOF
echo ""
echo "======================================================"
echo "Database initialized at: agent_manager.db"
echo ""
echo "Next steps:"
echo "1. Review database content: sqlite3 agent_manager.db"
echo "2. Start the service: python app_new.py"
echo "3. Test API: curl http://localhost:8000/templates"
echo "======================================================"