Files
aiagent/backend/scripts/generate_test_agent.py

234 lines
6.9 KiB
Python
Raw Permalink Normal View History

2026-01-20 18:05:31 +08:00
#!/usr/bin/env python3
"""
生成测试Agent - 演示左右连接
这是一个测试Agent用于演示节点左右连接的功能
"""
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from sqlalchemy.orm import Session
from app.core.database import SessionLocal
from app.models.agent import Agent
from app.models.user import User
from datetime import datetime
import uuid
def generate_test_agent(db: Session, username: str = "admin"):
"""生成测试Agent左右连接"""
print("=" * 60)
print("生成测试Agent左右连接演示")
print("=" * 60)
print()
# 查找用户
user = db.query(User).filter(User.username == username).first()
if not user:
print(f"❌ 未找到用户 '{username}',请先创建该用户")
return
print(f"✅ 找到用户: {user.username} (ID: {user.id})")
print()
# 生成测试工作流配置
# 工作流结构(横向排列,使用左右连接):
# 开始 → 处理1 → 处理2 → 处理3 → 结束
nodes = []
edges = []
# 节点横向排列Y坐标相同X坐标递增
base_y = 300
x_spacing = 250
# 1. 开始节点
start_node = {
"id": "start-1",
"type": "start",
"position": {"x": 50, "y": base_y},
"data": {
"label": "开始",
"output_format": "json"
}
}
nodes.append(start_node)
# 2. 处理节点1LLM
process1_node = {
"id": "llm-process1",
"type": "llm",
"position": {"x": 50 + x_spacing, "y": base_y},
"data": {
"label": "处理1",
"provider": "deepseek",
"model": "deepseek-chat",
"temperature": "0.3",
"max_tokens": "1000",
"prompt": """你是一个测试助手。请简单处理用户输入。
用户输入{{query}}
请输出已处理用户输入"{{query}}"
"""
}
}
nodes.append(process1_node)
# 3. 处理节点2Transform
process2_node = {
"id": "transform-process2",
"type": "transform",
"position": {"x": 50 + x_spacing * 2, "y": base_y},
"data": {
"label": "处理2",
"mode": "merge",
"mapping": {
"original_input": "{{query}}",
"processed_result": "{{output}}"
}
}
}
nodes.append(process2_node)
# 4. 处理节点3LLM
process3_node = {
"id": "llm-process3",
"type": "llm",
"position": {"x": 50 + x_spacing * 3, "y": base_y},
"data": {
"label": "处理3",
"provider": "deepseek",
"model": "deepseek-chat",
"temperature": "0.3",
"max_tokens": "1000",
"prompt": """请对处理结果进行总结。
原始输入{{original_input}}
处理结果{{processed_result}}
请输出一个简洁的总结"""
}
}
nodes.append(process3_node)
# 5. 结束节点
end_node = {
"id": "end-1",
"type": "end",
"position": {"x": 50 + x_spacing * 4, "y": base_y},
"data": {
"label": "结束",
"description": "返回最终结果"
}
}
nodes.append(end_node)
# 创建连接(使用左右连接)
# 注意:使用 sourceHandle='right' 和 targetHandle='left' 来指定左右连接
edges.append({
"id": "e1",
"source": "start-1",
"target": "llm-process1",
"sourceHandle": "right", # 从开始节点的右侧连接
"targetHandle": "left" # 连接到处理1节点的左侧
})
edges.append({
"id": "e2",
"source": "llm-process1",
"target": "transform-process2",
"sourceHandle": "right", # 从处理1节点的右侧连接
"targetHandle": "left" # 连接到处理2节点的左侧
})
edges.append({
"id": "e3",
"source": "transform-process2",
"target": "llm-process3",
"sourceHandle": "right", # 从处理2节点的右侧连接
"targetHandle": "left" # 连接到处理3节点的左侧
})
edges.append({
"id": "e4",
"source": "llm-process3",
"target": "end-1",
"sourceHandle": "right", # 从处理3节点的右侧连接
"targetHandle": "left" # 连接到结束节点的左侧
})
# 创建或更新Agent
workflow_config = {
"nodes": nodes,
"edges": edges
}
agent = db.query(Agent).filter(
Agent.name == "测试Agent左右连接",
Agent.user_id == user.id
).first()
if agent:
agent.workflow_config = workflow_config
agent.description = "测试Agent演示节点左右连接功能。工作流横向排列使用左右连接点。"
agent.updated_at = datetime.now()
agent.status = "published"
print("⚠️ Agent '测试Agent左右连接' 已存在,将更新它...")
else:
agent = Agent(
id=str(uuid.uuid4()),
name="测试Agent左右连接",
description="测试Agent演示节点左右连接功能。工作流横向排列使用左右连接点。",
workflow_config=workflow_config,
status="published",
user_id=user.id,
version=1
)
db.add(agent)
try:
db.commit()
db.refresh(agent)
print()
print("✅ Agent创建/更新成功!")
print()
print(f"📋 Agent信息")
print(f" - ID: {agent.id}")
print(f" - 名称: {agent.name}")
print(f" - 状态: {agent.status} (已发布,可直接使用)")
print(f" - 版本: {agent.version}")
print(f" - 节点数: {len(nodes)}")
print(f" - 连接数: {len(edges)}")
print()
print("🎯 工作流特点:")
print(" ✅ 节点横向排列")
print(" ✅ 使用左右连接点sourceHandle='right', targetHandle='left'")
print(" ✅ 工作流:开始 → 处理1 → 处理2 → 处理3 → 结束")
print()
print("💡 使用提示:")
print(" 1. 在Agent管理页面找到 '测试Agent左右连接'")
print(" 2. 点击 '使用' 按钮开始使用")
print(" 3. 输入任意文本进行测试")
print(" 4. 在工作流设计器中查看左右连接的视觉效果")
print()
return agent
except Exception as e:
db.rollback()
print(f"❌ 创建Agent失败: {str(e)}")
import traceback
traceback.print_exc()
return None
def main():
"""主函数"""
db = SessionLocal()
try:
generate_test_agent(db, username="admin")
finally:
db.close()
if __name__ == "__main__":
main()