255 lines
8.5 KiB
Python
255 lines
8.5 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""
|
||
Agent相关API蓝图
|
||
处理智能代理、工具执行、监控等功能
|
||
"""
|
||
|
||
from flask import Blueprint, request, jsonify
|
||
import asyncio
|
||
|
||
agent_bp = Blueprint('agent', __name__, url_prefix='/api/agent')
|
||
|
||
|
||
@agent_bp.route('/status')
|
||
def get_agent_status():
|
||
"""获取Agent状态"""
|
||
try:
|
||
from src.web.service_manager import service_manager
|
||
status = service_manager.get_agent_assistant().get_agent_status()
|
||
return jsonify({"success": True, **status})
|
||
except Exception as e:
|
||
# 返回默认状态,避免500错误
|
||
return jsonify({
|
||
"success": False,
|
||
"status": "inactive",
|
||
"active_goals": 0,
|
||
"available_tools": 0,
|
||
"error": "Agent服务暂时不可用"
|
||
})
|
||
|
||
|
||
@agent_bp.route('/action-history')
|
||
def get_agent_action_history():
|
||
"""获取Agent动作执行历史"""
|
||
try:
|
||
from src.web.service_manager import service_manager
|
||
limit = request.args.get('limit', 50, type=int)
|
||
history = service_manager.get_agent_assistant().get_action_history(limit)
|
||
return jsonify({
|
||
"success": True,
|
||
"history": history,
|
||
"count": len(history)
|
||
})
|
||
except Exception as e:
|
||
return jsonify({"error": str(e)}), 500
|
||
|
||
|
||
@agent_bp.route('/trigger-sample', methods=['POST'])
|
||
def trigger_sample_action():
|
||
"""触发示例动作"""
|
||
try:
|
||
from src.web.service_manager import service_manager
|
||
result = service_manager.get_agent_assistant().trigger_sample_actions_sync()
|
||
return jsonify(result)
|
||
except Exception as e:
|
||
return jsonify({"error": str(e)}), 500
|
||
|
||
|
||
@agent_bp.route('/clear-history', methods=['POST'])
|
||
def clear_agent_history():
|
||
"""清空Agent执行历史"""
|
||
try:
|
||
from src.web.service_manager import service_manager
|
||
result = service_manager.get_agent_assistant().clear_execution_history()
|
||
return jsonify(result)
|
||
except Exception as e:
|
||
return jsonify({"error": str(e)}), 500
|
||
|
||
|
||
@agent_bp.route('/llm-stats')
|
||
def get_llm_stats():
|
||
"""获取LLM使用统计"""
|
||
try:
|
||
from src.web.service_manager import service_manager
|
||
stats = service_manager.get_agent_assistant().get_llm_usage_stats()
|
||
return jsonify({
|
||
"success": True,
|
||
"stats": stats
|
||
})
|
||
except Exception as e:
|
||
return jsonify({"error": str(e)}), 500
|
||
|
||
|
||
@agent_bp.route('/toggle', methods=['POST'])
|
||
def toggle_agent_mode():
|
||
"""切换Agent模式"""
|
||
try:
|
||
from src.web.service_manager import service_manager
|
||
data = request.get_json()
|
||
enabled = data.get('enabled', True)
|
||
success = service_manager.get_agent_assistant().toggle_agent_mode(enabled)
|
||
return jsonify({
|
||
"success": success,
|
||
"message": f"Agent模式已{'启用' if enabled else '禁用'}"
|
||
})
|
||
except Exception as e:
|
||
return jsonify({"error": str(e)}), 500
|
||
|
||
|
||
@agent_bp.route('/monitoring/start', methods=['POST'])
|
||
def start_agent_monitoring():
|
||
"""启动Agent监控"""
|
||
try:
|
||
from src.web.service_manager import service_manager
|
||
success = service_manager.get_agent_assistant().start_proactive_monitoring()
|
||
return jsonify({
|
||
"success": success,
|
||
"message": "Agent监控已启动" if success else "启动失败"
|
||
})
|
||
except Exception as e:
|
||
return jsonify({"error": str(e)}), 500
|
||
|
||
|
||
@agent_bp.route('/monitoring/stop', methods=['POST'])
|
||
def stop_agent_monitoring():
|
||
"""停止Agent监控"""
|
||
try:
|
||
from src.web.service_manager import service_manager
|
||
success = service_manager.get_agent_assistant().stop_proactive_monitoring()
|
||
return jsonify({
|
||
"success": success,
|
||
"message": "Agent监控已停止" if success else "停止失败"
|
||
})
|
||
except Exception as e:
|
||
return jsonify({"error": str(e)}), 500
|
||
|
||
|
||
@agent_bp.route('/proactive-monitoring', methods=['POST'])
|
||
def proactive_monitoring():
|
||
"""主动监控检查"""
|
||
try:
|
||
from src.web.service_manager import service_manager
|
||
result = service_manager.get_agent_assistant().run_proactive_monitoring()
|
||
return jsonify(result)
|
||
except Exception as e:
|
||
return jsonify({"error": str(e)}), 500
|
||
|
||
|
||
@agent_bp.route('/intelligent-analysis', methods=['POST'])
|
||
def intelligent_analysis():
|
||
"""智能分析"""
|
||
try:
|
||
from src.web.service_manager import service_manager
|
||
analysis = service_manager.get_agent_assistant().run_intelligent_analysis()
|
||
return jsonify({"success": True, "analysis": analysis})
|
||
except Exception as e:
|
||
return jsonify({"error": str(e)}), 500
|
||
|
||
|
||
@agent_bp.route('/chat', methods=['POST'])
|
||
def agent_chat():
|
||
"""Agent对话接口"""
|
||
try:
|
||
from src.web.service_manager import service_manager
|
||
data = request.get_json()
|
||
message = data.get('message', '')
|
||
context = data.get('context', {})
|
||
|
||
if not message:
|
||
return jsonify({"error": "消息不能为空"}), 400
|
||
|
||
# 使用Agent助手处理消息
|
||
agent_assistant = service_manager.get_agent_assistant()
|
||
|
||
# 模拟Agent处理(实际应该调用真正的Agent处理逻辑)
|
||
result = agent_assistant.process_message_agent_sync(
|
||
message=message,
|
||
user_id=context.get('user_id', 'admin'),
|
||
work_order_id=None,
|
||
enable_proactive=True
|
||
)
|
||
|
||
return jsonify({
|
||
"success": True,
|
||
"response": result.get('response', 'Agent已处理您的请求'),
|
||
"actions": result.get('actions', []),
|
||
"status": result.get('status', 'completed')
|
||
})
|
||
except Exception as e:
|
||
return jsonify({"error": str(e)}), 500
|
||
|
||
|
||
@agent_bp.route('/tools/stats')
|
||
def get_agent_tools_stats():
|
||
"""获取Agent工具统计"""
|
||
try:
|
||
from src.web.service_manager import service_manager
|
||
agent_assistant = service_manager.get_agent_assistant()
|
||
tools = agent_assistant.agent_core.tool_manager.get_available_tools()
|
||
performance = agent_assistant.agent_core.tool_manager.get_tool_performance_report()
|
||
return jsonify({
|
||
"success": True,
|
||
"tools": tools,
|
||
"performance": performance
|
||
})
|
||
except Exception as e:
|
||
# 返回默认工具列表,避免500错误
|
||
return jsonify({
|
||
"success": False,
|
||
"tools": [],
|
||
"performance": {},
|
||
"error": "工具统计暂时不可用"
|
||
})
|
||
|
||
|
||
@agent_bp.route('/tools/execute', methods=['POST'])
|
||
def execute_agent_tool():
|
||
"""执行指定的Agent工具"""
|
||
try:
|
||
from src.web.service_manager import service_manager
|
||
data = request.get_json() or {}
|
||
tool_name = data.get('tool') or data.get('name')
|
||
parameters = data.get('parameters') or {}
|
||
if not tool_name:
|
||
return jsonify({"error": "缺少工具名称tool"}), 400
|
||
|
||
result = service_manager.get_agent_assistant().agent_core.tool_manager.execute_tool_sync(tool_name, parameters)
|
||
return jsonify(result)
|
||
except Exception as e:
|
||
return jsonify({"error": str(e)}), 500
|
||
|
||
|
||
@agent_bp.route('/tools/register', methods=['POST'])
|
||
def register_custom_tool():
|
||
"""注册自定义工具(仅登记元数据,函数为占位符)"""
|
||
try:
|
||
from src.web.service_manager import service_manager
|
||
data = request.get_json() or {}
|
||
name = data.get('name')
|
||
description = data.get('description', '')
|
||
if not name:
|
||
return jsonify({"error": "缺少工具名称"}), 400
|
||
|
||
def _placeholder_tool(**kwargs):
|
||
return {"message": f"自定义工具 {name} 已登记(占位),当前不可执行", "params": kwargs}
|
||
|
||
service_manager.get_agent_assistant().agent_core.tool_manager.register_tool(
|
||
name,
|
||
_placeholder_tool,
|
||
metadata={"description": description, "custom": True}
|
||
)
|
||
return jsonify({"success": True, "message": "工具已注册"})
|
||
except Exception as e:
|
||
return jsonify({"error": str(e)}), 500
|
||
|
||
|
||
@agent_bp.route('/tools/unregister/<name>', methods=['DELETE'])
|
||
def unregister_custom_tool(name):
|
||
"""注销自定义工具"""
|
||
try:
|
||
from src.web.service_manager import service_manager
|
||
success = service_manager.get_agent_assistant().agent_core.tool_manager.unregister_tool(name)
|
||
return jsonify({"success": success})
|
||
except Exception as e:
|
||
return jsonify({"error": str(e)}), 500
|