package main import ( "bufio" "fmt" "learning-assistant/internal/ai" "learning-assistant/internal/tui" "os" "os/signal" "syscall" tea "github.com/charmbracelet/bubbletea" "gopkg.in/yaml.v3" ) func main() { // 加载配置 config, err := loadConfig("../config/config.yaml") if err != nil { fmt.Printf("加载配置文件失败: %v\n", err) os.Exit(1) } // 创建AI客户端 client := ai.NewClient(config.API) // 创建提示词管理器 promptManager := ai.NewPromptManager() // 读取用户输入 fmt.Println("🎓 学习助手") fmt.Println("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━") fmt.Println() fmt.Print("请输入您想学习的知识点: ") scanner := bufio.NewScanner(os.Stdin) if !scanner.Scan() { return } knowledge := scanner.Text() if knowledge == "" { fmt.Println("输入不能为空") return } // 创建模型 model := tui.NewModel(client, promptManager) model.SetInput(knowledge) // 设置信号处理 sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM) // 创建程序 p := tea.NewProgram(&model, tea.WithAltScreen()) // 启动程序 if _, err := p.Run(); err != nil { fmt.Printf("启动失败: %v\n", err) os.Exit(1) } } // Config 配置 type Config struct { API ai.Config } func loadConfig(path string) (*Config, error) { data, err := os.ReadFile(path) if err != nil { return nil, err } var config Config if err := yaml.Unmarshal(data, &config); err != nil { return nil, err } return &config, nil } // getAPIKey 获取API密钥 func getAPIKey() string { // 优先从环境变量获取 if key := os.Getenv("SILICON_API_KEY"); key != "" { return key } return "" }