liurenchaxin/jixia_academy/__main__.py

154 lines
4.5 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
稷下学宫AI辩论系统 - 统一入口
Jixia Academy AI Debate System - Unified Entry Point
一个融合中国传统文化与现代AI技术的智能辩论平台
A fusion of traditional Chinese culture and modern AI technology
"""
import argparse
import asyncio
import sys
import os
from pathlib import Path
# 添加项目根目录到Python路径
project_root = Path(__file__).parent.parent
sys.path.insert(0, str(project_root))
from jixia_academy.core.debate_system.main import JixiaAcademy
def create_parser():
"""创建命令行参数解析器"""
parser = argparse.ArgumentParser(
description="稷下学宫AI辩论系统 - 八仙论道智能平台",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
使用示例:
# 启动八仙论道辩论
python -m jixia_academy baxian --topic "当前市场投资策略"
# 启动记忆增强辩论
python -m jixia_academy memory --topic "科技股投资分析"
# 启动Streamlit界面
python -m jixia_academy ui
# 查看系统状态
python -m jixia_academy status
"""
)
subparsers = parser.add_subparsers(dest='command', help='可用命令')
# 八仙论道命令
baxian_parser = subparsers.add_parser('baxian', help='启动八仙论道辩论')
baxian_parser.add_argument('--topic', required=True, help='辩论主题')
baxian_parser.add_argument('--rounds', type=int, default=3, help='辩论轮数')
baxian_parser.add_argument('--participants', nargs='*',
default=["铁拐李", "吕洞宾", "何仙姑", "张果老",
"蓝采和", "汉钟离", "韩湘子", "曹国舅"],
help='参与辩论的八仙')
# 记忆增强辩论命令
memory_parser = subparsers.add_parser('memory', help='启动记忆增强辩论')
memory_parser.add_argument('--topic', required=True, help='辩论主题')
memory_parser.add_argument('--engine', choices=['adk', 'swarm'], default='adk',
help='使用的AI引擎')
# UI界面命令
ui_parser = subparsers.add_parser('ui', help='启动用户界面')
ui_parser.add_argument('--type', choices=['streamlit', 'web'], default='streamlit',
help='界面类型')
ui_parser.add_argument('--port', type=int, default=8501, help='端口号')
# 系统状态命令
status_parser = subparsers.add_parser('status', help='查看系统状态')
return parser
async def run_baxian_debate(args):
"""运行八仙论道辩论"""
academy = JixiaAcademy()
await academy.initialize()
try:
await academy.run_baxian_debate(
topic=args.topic,
rounds=args.rounds,
participants=args.participants
)
finally:
await academy.close()
async def run_memory_debate(args):
"""运行记忆增强辩论"""
academy = JixiaAcademy()
await academy.initialize()
try:
await academy.run_memory_enhanced_debate(
topic=args.topic,
engine=args.engine
)
finally:
await academy.close()
def run_ui(args):
"""启动用户界面"""
if args.type == 'streamlit':
import subprocess
cmd = [
sys.executable, '-m', 'streamlit', 'run',
'jixia_academy/ui/streamlit/streamlit_app.py',
'--server.port', str(args.port)
]
subprocess.run(cmd)
elif args.type == 'web':
print("Web界面开发中...")
# TODO: 启动Web服务器
def run_status():
"""显示系统状态"""
from jixia_academy.core.debate_system.main import check_system_status
check_system_status()
async def main():
"""主函数"""
parser = create_parser()
if len(sys.argv) == 1:
parser.print_help()
return
args = parser.parse_args()
try:
if args.command == 'baxian':
await run_baxian_debate(args)
elif args.command == 'memory':
await run_memory_debate(args)
elif args.command == 'ui':
run_ui(args)
elif args.command == 'status':
run_status()
else:
parser.print_help()
except KeyboardInterrupt:
print("\n🛑 用户中断")
except Exception as e:
print(f"❌ 错误: {e}")
import traceback
traceback.print_exc()
if __name__ == '__main__':
asyncio.run(main())