invoke.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #!/usr/bin/env python
  2. """
  3. 薄 CLI 脚本:透传命令行参数到 cyber-agent 的 invoke_agent() SDK。
  4. 远端 / 本地由 agent_type 前缀决定,同步返回 JSON 到 stdout。
  5. """
  6. import argparse
  7. import asyncio
  8. import json
  9. import sys
  10. from pathlib import Path
  11. from agent import invoke_agent
  12. # skill 目录本身包含共享 config.py,作为未显式传 --project_root 时的默认锚点。
  13. _SKILL_DIR = str(Path(__file__).resolve().parent)
  14. def main() -> int:
  15. parser = argparse.ArgumentParser(description="调用 Agent(远端或本地)")
  16. parser.add_argument("--agent_type", required=True,
  17. help="Agent 类型。'remote_' 前缀走 KnowHub 服务器;否则本地执行")
  18. parser.add_argument("--task", required=True, help="任务描述")
  19. parser.add_argument("--skills", default=None,
  20. help="逗号分隔的 skill 列表(如 ask_strategy,upload_strategy)")
  21. parser.add_argument("--continue_from", default=None,
  22. help="已有 sub_trace_id,传入则续跑")
  23. parser.add_argument("--messages", default=None,
  24. help="预置消息(JSON 数组字符串,OpenAI 格式)")
  25. parser.add_argument("--project_root", default=None,
  26. help="本地 agent 可选——项目目录(含 config.py)。"
  27. "不传则使用 skill 目录自带的共享 config.py")
  28. args = parser.parse_args()
  29. skills = [s.strip() for s in args.skills.split(",") if s.strip()] if args.skills else None
  30. messages = json.loads(args.messages) if args.messages else None
  31. # 本地 agent 且未显式指定项目 → 回落到 skill 自带的 config.py。
  32. # 远端 agent(remote_ 前缀)无视 project_root,不影响。
  33. project_root = args.project_root or _SKILL_DIR
  34. result = asyncio.run(invoke_agent(
  35. agent_type=args.agent_type,
  36. task=args.task,
  37. skills=skills,
  38. continue_from=args.continue_from,
  39. messages=messages,
  40. project_root=project_root,
  41. ))
  42. print(json.dumps(result, ensure_ascii=False, indent=2))
  43. return 0 if result.get("status") == "completed" else 1
  44. if __name__ == "__main__":
  45. sys.exit(main())