chat_with_router.py 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. """Router Agent 命令行交互客户端
  2. 用法:
  3. uv run python chat_with_router.py
  4. """
  5. import asyncio
  6. import sys
  7. import httpx
  8. # 修复 Windows 控制台编码问题
  9. if sys.platform == 'win32':
  10. import io
  11. sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
  12. sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
  13. BASE_URL = "http://127.0.0.1:8001"
  14. async def chat_loop():
  15. """交互式对话循环"""
  16. print("=" * 60)
  17. print("Router Agent - 命令行客户端")
  18. print("=" * 60)
  19. print("提示:")
  20. print(" - 输入你的问题或请求")
  21. print(" - 输入 'exit' 或 'quit' 退出")
  22. print(" - 输入 'help' 查看可用命令")
  23. print("-" * 60)
  24. session_id = None
  25. async with httpx.AsyncClient(timeout=120.0) as client:
  26. # 检查服务是否可用
  27. try:
  28. await client.get(f"{BASE_URL}/health")
  29. except Exception as e:
  30. print(f"\n错误: 无法连接到 Router Agent 服务")
  31. print(f"请确保服务已启动: uv run python -m tool_agent")
  32. print(f"详细错误: {e}")
  33. return
  34. while True:
  35. try:
  36. # 读取用户输入
  37. user_input = await asyncio.to_thread(input, "\n[You] > ")
  38. user_input = user_input.strip()
  39. if not user_input:
  40. continue
  41. # 处理退出命令
  42. if user_input.lower() in ("exit", "quit"):
  43. print("\n再见!")
  44. break
  45. # 处理帮助命令
  46. if user_input.lower() == "help":
  47. print("\n可用命令:")
  48. print(" list - 列出所有工具")
  49. print(" search <关键词> - 搜索工具")
  50. print(" status - 查看工具状态")
  51. print(" exit/quit - 退出")
  52. print("\n你也可以直接用自然语言提问,例如:")
  53. print(" - 我需要一个图片压缩工具")
  54. print(" - image_stitcher 怎么用?")
  55. print(" - 帮我调用 XXX 工具")
  56. continue
  57. # 发送消息给 Router Agent
  58. print("\n[Router Agent] 思考中...")
  59. response = await client.post(
  60. f"{BASE_URL}/chat",
  61. json={
  62. "message": user_input,
  63. "session_id": session_id
  64. }
  65. )
  66. if response.status_code == 200:
  67. result = response.json()
  68. session_id = result.get("session_id")
  69. print(f"\n[Router Agent]\n{result['response']}")
  70. else:
  71. print(f"\n错误: {response.status_code} - {response.text}")
  72. except KeyboardInterrupt:
  73. print("\n\n按 Ctrl+C 退出,或输入 'exit'")
  74. except EOFError:
  75. print("\n\n再见!")
  76. break
  77. except Exception as e:
  78. print(f"\n错误: {e}")
  79. if __name__ == "__main__":
  80. asyncio.run(chat_loop())