package main import ( "context" "errors" "fmt" "io" "log" "strings" "github.com/peterh/liner" "myaibot/internal/bot" "myaibot/internal/cli" "myaibot/internal/config" ) func main() { cfg, err := config.Load() if err != nil { log.Fatalf("加载配置失败: %v", err) } b := bot.New(cfg) provider, model := b.Current() fmt.Printf("🤖 %s 已启动 (供应商: %s, 模型: %s)。输入问题开始对话,输入 /help 查看命令。\n", cfg.BotName, provider, model) line := liner.NewLiner() defer line.Close() line.SetCtrlCAborts(true) line.SetCompleter(func(s string) []string { return cli.Complete(s, b.Models()) }) h := cli.New(b) for { input, err := line.Prompt("你: ") if errors.Is(err, io.EOF) || errors.Is(err, liner.ErrPromptAborted) { fmt.Println("再见!") break } input = strings.TrimSpace(input) if input == "" { continue } line.AppendHistory(input) if strings.HasPrefix(input, "/") { if !h.Handle(input) { break } continue } fmt.Printf("%s: ", cfg.BotName) thinkStyle, resetStyle := false, false _, err = b.Chat(context.Background(), input, func(text string) { if !thinkStyle { fmt.Print("\x1b[3;90m🧠 ") thinkStyle, resetStyle = true, true } fmt.Print(text) }, func(text string) { if resetStyle { fmt.Print("\x1b[0m") thinkStyle, resetStyle = false, false } fmt.Print(text) }, ) fmt.Println() if err != nil { fmt.Printf("⚠️ %v\n", err) continue } } }