Files
agent-chain/cmd/main.go
T
2026-03-20 20:34:28 +08:00

93 lines
1.7 KiB
Go

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 ""
}