Talegorithm 1 месяц назад
Родитель
Сommit
e5af5edf9b
2 измененных файлов с 36 добавлено и 4 удалено
  1. 18 0
      agent/client.py
  2. 18 4
      agent/tools/builtin/subagent.py

+ 18 - 0
agent/client.py

@@ -35,6 +35,24 @@ from typing import Any, Dict, List, Optional
 logger = logging.getLogger(__name__)
 logger = logging.getLogger(__name__)
 
 
 
 
+# 模块加载时就 load .env,保证后续任何 module-level `os.getenv(...)` 读取都能拿到值。
+# 查找顺序:cwd / cyber-agent 仓库根(editable install 定位)。
+def _load_default_env() -> None:
+    try:
+        from dotenv import load_dotenv
+    except ImportError:
+        return
+    # 先试 cwd 向上查找
+    load_dotenv()
+    # 再试 cyber-agent 仓库根(编辑安装时 agent/__init__.py 所在仓库的 .env)
+    repo_env = Path(__file__).resolve().parent.parent / ".env"
+    if repo_env.exists():
+        load_dotenv(repo_env, override=False)
+
+
+_load_default_env()
+
+
 async def invoke_agent(
 async def invoke_agent(
     agent_type: str,
     agent_type: str,
     task: str,
     task: str,

+ 18 - 4
agent/tools/builtin/subagent.py

@@ -22,8 +22,20 @@ from agent.trace.websocket import broadcast_sub_trace_started, broadcast_sub_tra
 # ===== 远端路由常量 =====
 # ===== 远端路由常量 =====
 
 
 REMOTE_PREFIX = "remote_"
 REMOTE_PREFIX = "remote_"
-KNOWHUB_API = os.getenv("KNOWHUB_API", "http://localhost:9999").rstrip("/")
-REMOTE_AGENT_TIMEOUT = float(os.getenv("REMOTE_AGENT_TIMEOUT", "600"))  # 秒
+
+
+def _knowhub_api() -> str:
+    """运行时读取 KNOWHUB_API,避免 module-load 时 .env 尚未加载的情况"""
+    return os.getenv("KNOWHUB_API", "http://localhost:9999").rstrip("/")
+
+
+def _remote_agent_timeout() -> float:
+    return float(os.getenv("REMOTE_AGENT_TIMEOUT", "600"))
+
+
+# 兼容旧代码对 module-level 常量的引用(运行时值 = 首次 import 时的快照)
+KNOWHUB_API = _knowhub_api()
+REMOTE_AGENT_TIMEOUT = _remote_agent_timeout()
 
 
 
 
 # ===== prompts =====
 # ===== prompts =====
@@ -643,9 +655,11 @@ async def _run_remote_agent(
         "skills": skills,
         "skills": skills,
     }
     }
 
 
+    api_base = _knowhub_api()
+    timeout = _remote_agent_timeout()
     try:
     try:
-        async with httpx.AsyncClient(timeout=REMOTE_AGENT_TIMEOUT) as client:
-            response = await client.post(f"{KNOWHUB_API}/api/agent", json=payload)
+        async with httpx.AsyncClient(timeout=timeout) as client:
+            response = await client.post(f"{api_base}/api/agent", json=payload)
             response.raise_for_status()
             response.raise_for_status()
             result = response.json()
             result = response.json()