Files
aiagent/backend/scripts/generate_test_agent.py
2026-01-20 18:05:31 +08:00

234 lines
6.9 KiB
Python
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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()