invoke.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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 agent import invoke_agent
  11. def main() -> int:
  12. parser = argparse.ArgumentParser(description="调用 Agent(远端或本地)")
  13. parser.add_argument("--agent_type", required=True,
  14. help="Agent 类型。'remote_' 前缀走 KnowHub 服务器;否则本地执行")
  15. parser.add_argument("--task", required=True, help="任务描述")
  16. parser.add_argument("--skills", default=None,
  17. help="逗号分隔的 skill 列表(如 ask_strategy,upload_strategy)")
  18. parser.add_argument("--continue_from", default=None,
  19. help="已有 sub_trace_id,传入则续跑")
  20. parser.add_argument("--messages", default=None,
  21. help="预置消息(JSON 数组字符串,OpenAI 格式)")
  22. parser.add_argument("--project_root", default=None,
  23. help="本地 agent 必填——项目目录(含 config.py)")
  24. args = parser.parse_args()
  25. skills = [s.strip() for s in args.skills.split(",") if s.strip()] if args.skills else None
  26. messages = json.loads(args.messages) if args.messages else None
  27. result = asyncio.run(invoke_agent(
  28. agent_type=args.agent_type,
  29. task=args.task,
  30. skills=skills,
  31. continue_from=args.continue_from,
  32. messages=messages,
  33. project_root=args.project_root,
  34. ))
  35. print(json.dumps(result, ensure_ascii=False, indent=2))
  36. return 0 if result.get("status") == "completed" else 1
  37. if __name__ == "__main__":
  38. sys.exit(main())