187 lines
6.5 KiB
Python
187 lines
6.5 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
生成Android日志获取Agent
|
||
"""
|
||
import sys
|
||
import os
|
||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||
|
||
from app.core.database import SessionLocal
|
||
from app.models.agent import Agent
|
||
from app.models.workflow import Workflow
|
||
import uuid
|
||
from datetime import datetime
|
||
|
||
def generate_android_log_agent():
|
||
"""生成Android日志获取Agent"""
|
||
db = SessionLocal()
|
||
|
||
try:
|
||
# 检查是否已存在
|
||
existing = db.query(Agent).filter(Agent.name == "Android日志获取助手").first()
|
||
if existing:
|
||
print(f"Agent 'Android日志获取助手' 已存在,ID: {existing.id}")
|
||
return existing.id
|
||
|
||
# 创建工作流
|
||
workflow_id = str(uuid.uuid4())
|
||
nodes = [
|
||
{
|
||
"id": "start",
|
||
"type": "start",
|
||
"position": {"x": 100, "y": 200},
|
||
"data": {"label": "开始"}
|
||
},
|
||
{
|
||
"id": "intent-recognize",
|
||
"type": "llm",
|
||
"position": {"x": 400, "y": 200},
|
||
"data": {
|
||
"label": "意图识别",
|
||
"provider": "deepseek",
|
||
"model": "deepseek-chat",
|
||
"temperature": 0.3,
|
||
"max_tokens": 200,
|
||
"prompt": """分析用户请求,提取以下信息:
|
||
1. 命令类型:logcat(获取日志)、devices(列出设备)、shell(执行shell命令)
|
||
2. 日志标签过滤(如果有)
|
||
3. 日志级别过滤(V/D/I/W/E/F/S,如果有)
|
||
4. 最大行数(默认100)
|
||
|
||
用户请求:{{input.query}}
|
||
|
||
请以JSON格式返回:
|
||
{
|
||
"command": "logcat|devices|shell",
|
||
"filter_tag": "标签或shell命令(可选)",
|
||
"level": "V|D|I|W|E|F|S(可选)",
|
||
"max_lines": 100
|
||
}"""
|
||
}
|
||
},
|
||
{
|
||
"id": "json-parse",
|
||
"type": "json",
|
||
"position": {"x": 700, "y": 200},
|
||
"data": {
|
||
"label": "解析参数",
|
||
"operation": "parse",
|
||
"json_path": "$"
|
||
}
|
||
},
|
||
{
|
||
"id": "llm-with-tools",
|
||
"type": "llm",
|
||
"position": {"x": 1000, "y": 200},
|
||
"data": {
|
||
"label": "执行ADB命令",
|
||
"provider": "deepseek",
|
||
"model": "deepseek-chat",
|
||
"temperature": 0.7,
|
||
"max_tokens": 2000,
|
||
"enable_tools": True,
|
||
"selected_tools": ["adb_log"],
|
||
"prompt": """根据解析的参数,使用adb_log工具获取Android设备日志。
|
||
|
||
参数:
|
||
- command: {{json-parse.output.command}}
|
||
- filter_tag: {{json-parse.output.filter_tag}}
|
||
- level: {{json-parse.output.level}}
|
||
- max_lines: {{json-parse.output.max_lines}}
|
||
|
||
请调用adb_log工具获取日志,然后分析日志内容,提取关键信息并总结。"""
|
||
}
|
||
},
|
||
{
|
||
"id": "end",
|
||
"type": "end",
|
||
"position": {"x": 1300, "y": 200},
|
||
"data": {"label": "结束"}
|
||
}
|
||
]
|
||
|
||
edges = [
|
||
{
|
||
"id": "e1",
|
||
"source": "start",
|
||
"target": "intent-recognize",
|
||
"sourceHandle": "right",
|
||
"targetHandle": "left"
|
||
},
|
||
{
|
||
"id": "e2",
|
||
"source": "intent-recognize",
|
||
"target": "json-parse",
|
||
"sourceHandle": "right",
|
||
"targetHandle": "left"
|
||
},
|
||
{
|
||
"id": "e3",
|
||
"source": "json-parse",
|
||
"target": "llm-with-tools",
|
||
"sourceHandle": "right",
|
||
"targetHandle": "left"
|
||
},
|
||
{
|
||
"id": "e4",
|
||
"source": "llm-with-tools",
|
||
"target": "end",
|
||
"sourceHandle": "right",
|
||
"targetHandle": "left"
|
||
}
|
||
]
|
||
|
||
workflow = Workflow(
|
||
id=workflow_id,
|
||
name="Android日志获取工作流",
|
||
description="通过ADB命令获取Android设备日志的工作流",
|
||
nodes=nodes,
|
||
edges=edges,
|
||
created_at=datetime.now(),
|
||
updated_at=datetime.now()
|
||
)
|
||
|
||
db.add(workflow)
|
||
db.commit()
|
||
db.refresh(workflow)
|
||
|
||
# 创建Agent
|
||
agent_id = str(uuid.uuid4())
|
||
agent = Agent(
|
||
id=agent_id,
|
||
name="Android日志获取助手",
|
||
description="通过ADB命令获取和分析Android设备日志的智能助手。支持获取logcat日志、列出设备、执行shell命令等功能。",
|
||
workflow_config={
|
||
"workflow_id": workflow_id,
|
||
"nodes": nodes,
|
||
"edges": edges
|
||
},
|
||
created_at=datetime.now(),
|
||
updated_at=datetime.now()
|
||
)
|
||
|
||
db.add(agent)
|
||
db.commit()
|
||
db.refresh(agent)
|
||
|
||
print(f"✅ Android日志获取Agent创建成功!")
|
||
print(f" Agent ID: {agent_id}")
|
||
print(f" Agent名称: {agent.name}")
|
||
print(f" 工作流ID: {workflow_id}")
|
||
print(f"\n使用示例:")
|
||
print(f" python3 test_workflow_tool.py -a \"Android日志获取助手\" -i '{{\"query\": \"获取最近的错误日志\"}}'")
|
||
|
||
return agent_id
|
||
|
||
except Exception as e:
|
||
db.rollback()
|
||
print(f"❌ 创建Agent失败: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
return None
|
||
finally:
|
||
db.close()
|
||
|
||
if __name__ == "__main__":
|
||
generate_android_log_agent()
|