feat: Agent 批量测试、作业助手与上传预览;Windows 启动脚本与文档- 新增 run_agent_test_cases 与示例 JSON、(红头)agent测试用例文档

- 扩展 test_agent_execution(--homework、UTF-8 控制台)
- 后端:uploads 预览、file_read、工作流与对话落盘等
- 前端:AgentChatPreview 与设计器相关调整
- 忽略 redis二进制、agent_workspaces、uploads、tessdata 等本机产物

Made-with: Cursor
This commit is contained in:
renjianbo
2026-04-13 20:17:18 +08:00
parent 0608161c82
commit df4fab1e6e
31 changed files with 3784 additions and 251 deletions

View File

@@ -35,6 +35,10 @@ from typing import Any, Dict, List, Optional, Tuple
# 图构建辅助
# ---------------------------------------------------------------------------
DEFAULT_LLM_PROVIDER = os.getenv("ENTERPRISE_LLM_PROVIDER", "deepseek")
DEFAULT_LLM_MODEL = os.getenv("ENTERPRISE_LLM_MODEL", "deepseek-chat")
DEFAULT_LLM_TIMEOUT = max(30, int(os.getenv("ENTERPRISE_LLM_TIMEOUT", "180")))
def _sanitize_edges(edges: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
seen: set = set()
@@ -76,7 +80,10 @@ def _llm(
"data": {
"label": label,
"prompt": prompt,
"provider": DEFAULT_LLM_PROVIDER,
"model": DEFAULT_LLM_MODEL,
"temperature": float(temperature),
"request_timeout": DEFAULT_LLM_TIMEOUT,
"enable_tools": en,
"tools": tlist if en else [],
"selected_tools": tlist if en else [],
@@ -195,17 +202,17 @@ result["lane"] = lane
def build_switch_multilane_workflow() -> Dict[str, Any]:
nodes: List[Dict[str, Any]] = [
{"id": "start-1", "type": "start", "position": {"x": 40, "y": 280}, "data": {"label": "开始"}},
{"id": "start-1", "type": "start", "position": {"x": 60, "y": 300}, "data": {"label": "开始"}},
{
"id": "code-lane",
"type": "code",
"position": {"x": 240, "y": 280},
"position": {"x": 260, "y": 300},
"data": {"label": "解析线路", "language": "python", "code": CODE_LANE, "timeout": 15},
},
{
"id": "sw-1",
"type": "switch",
"position": {"x": 460, "y": 280},
"position": {"x": 500, "y": 300},
"data": {
"label": "业务线路",
"field": "lane",
@@ -215,39 +222,39 @@ def build_switch_multilane_workflow() -> Dict[str, Any]:
},
_llm(
"llm-cs",
(700, 80),
(760, 120),
"客服线",
"你是企业客服专家。用户已从多线路由进入本分支;忽略线路标记,专注解决问题。简洁、礼貌。",
temperature=0.35,
),
_llm(
"llm-def",
(760, 260),
"默认线",
"你是通用企业助手。用户未指定【客服】/【研发】/【运维】线路;先简要澄清所属场景再回答。",
temperature=0.35,
),
_llm(
"llm-dev",
(700, 280),
(760, 400),
"研发线",
"你是研发支持专家。用户已进入研发分支;给出可执行步骤与示例,避免空泛。",
temperature=0.28,
),
_llm(
"llm-ops",
(700, 480),
(760, 540),
"运维线",
"你是运维专家。用户已进入运维分支;优先给排查顺序与注意事项,不编造监控数据。",
temperature=0.3,
),
_llm(
"llm-def",
(700, 640),
"默认线",
"你是通用企业助手。用户未指定【客服】/【研发】/【运维】线路;先简要澄清所属场景再回答。",
temperature=0.35,
),
{
"id": "merge-1",
"type": "merge",
"position": {"x": 980, "y": 280},
"position": {"x": 1060, "y": 330},
"data": {"label": "合并", "mode": "merge_all", "strategy": "object"},
},
{"id": "end-1", "type": "end", "position": {"x": 1220, "y": 280}, "data": {"label": "结束"}},
{"id": "end-1", "type": "end", "position": {"x": 1300, "y": 330}, "data": {"label": "结束"}},
]
edges = _sanitize_edges(
[