chat_with_router.py 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. import uuid
  25. chat_id = uuid.uuid4().hex
  26. async with httpx.AsyncClient(timeout=120.0) as client:
  27. # 检查服务是否可用
  28. try:
  29. await client.get(f"{BASE_URL}/health")
  30. except Exception as e:
  31. print(f"\n错误: 无法连接到 Router Agent 服务")
  32. print(f"请确保服务已启动: uv run python -m tool_agent")
  33. print(f"详细错误: {e}")
  34. return
  35. while True:
  36. try:
  37. # 读取用户输入
  38. user_input = await asyncio.to_thread(input, "\n[You] > ")
  39. user_input = user_input.strip()
  40. if not user_input:
  41. continue
  42. # 处理退出命令
  43. if user_input.lower() in ("exit", "quit"):
  44. print("\n再见!")
  45. break
  46. # 处理帮助命令
  47. if user_input.lower() == "help":
  48. print("\n可用命令:")
  49. print(" list - 列出所有工具")
  50. print(" search <关键词> - 搜索工具")
  51. print(" status - 查看工具状态")
  52. print(" exit/quit - 退出")
  53. print("\n你也可以直接用自然语言提问,例如:")
  54. print(" - 我需要一个图片压缩工具")
  55. print(" - image_stitcher 怎么用?")
  56. print(" - 帮我调用 XXX 工具")
  57. continue
  58. # 发送消息给 Router Agent
  59. print("\n[Router Agent] 思考中...")
  60. response = await client.post(
  61. f"{BASE_URL}/chat",
  62. json={
  63. "message": user_input,
  64. "chat_id": chat_id
  65. }
  66. )
  67. if response.status_code == 200:
  68. result = response.json()
  69. chat_id = result.get("chat_id", chat_id)
  70. print(f"\n[Router Agent]\n{result['response']}")
  71. else:
  72. print(f"\n错误: {response.status_code} - {response.text}")
  73. except KeyboardInterrupt:
  74. print("\n\n按 Ctrl+C 退出,或输入 'exit'")
  75. except EOFError:
  76. print("\n\n再见!")
  77. break
  78. except Exception as e:
  79. print(f"\n错误: {e}")
  80. if __name__ == "__main__":
  81. asyncio.run(chat_loop())