234 lines
6.9 KiB
Python
Executable File
234 lines
6.9 KiB
Python
Executable File
#!/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. 处理节点1(LLM)
|
||
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. 处理节点2(Transform)
|
||
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. 处理节点3(LLM)
|
||
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()
|