""" 主程序入口 支持命令行和API服务两种模式 """ import asyncio import sys from loguru import logger from .config import Config from .agent import FacebookAgent from .models.schemas import SearchRequest async def main(): """主函数""" # 加载配置 try: config = Config.from_env() config.validate() except Exception as e: logger.error(f"配置加载失败: {e}") sys.exit(1) # 创建Agent agent = FacebookAgent(config) # 检查命令行参数 if len(sys.argv) > 1: # 命令行模式 query = sys.argv[1] limit = int(sys.argv[2]) if len(sys.argv) > 2 else 5 logger.info(f"搜索关键词: {query}") request = SearchRequest(query=query, limit=limit) response = await agent.search(request) if response.success: print("\n" + "=" * 60) print("搜索结果") print("=" * 60) print(f"关键词: {response.query}") print(f"找到 {len(response.results)} 条结果\n") for i, result in enumerate(response.results, 1): print(f"[{i}] {result.title}") if result.snippet: print(f" {result.snippet[:100]}...") if result.author: print(f" 作者: {result.author}") if result.likes: print(f" 点赞: {result.likes}") if result.url: print(f" 链接: {result.url}") print() if response.summary: print("=" * 60) print("AI总结") print("=" * 60) print(response.summary) print() else: print(f"搜索失败: {response.message}") sys.exit(1) else: # 交互模式 print("=" * 60) print("Facebook搜索智能Agent") print("=" * 60) print("输入搜索关键词,输入 'quit' 或 'exit' 退出") print("=" * 60) while True: try: query = input("\n🔎 请输入关键词: ").strip() if query.lower() in ['quit', 'exit', '退出']: print("再见!") break if not query: continue request = SearchRequest(query=query, limit=5) response = await agent.search(request) if response.success: print("\n" + "=" * 60) print(f"找到 {len(response.results)} 条结果") print("=" * 60) for i, result in enumerate(response.results, 1): print(f"\n[{i}] {result.title}") if result.snippet: print(f" {result.snippet[:150]}...") if result.author: print(f" 👤 {result.author}") if result.likes: print(f" ❤️ {result.likes}") if response.summary: print("\n" + "=" * 60) print("📝 AI总结") print("=" * 60) print(response.summary) else: print(f"❌ 搜索失败: {response.message}") except KeyboardInterrupt: print("\n\n再见!") break except Exception as e: logger.error(f"处理失败: {e}") print(f"❌ 发生错误: {e}") if __name__ == "__main__": asyncio.run(main())