Files
go-tiny-claw/cmd/claw/main.go
T

80 lines
2.9 KiB
Go

package main
import (
"context"
"log"
"os"
"sync"
"time"
"go-tiny-claw/internal/engine"
"go-tiny-claw/internal/provider"
"go-tiny-claw/internal/schema"
"go-tiny-claw/internal/tools"
)
func main() {
// 1. 初始化真实的 Provider大脑
// 这里你可以任意切换 NewZhipuClaudeProvider 或 NewZhipuOpenAIProvider,效果完全一致!
llmProvider := provider.DeepseekOpenAIProvider("deepseek-v4-flash")
registry := tools.NewRegistry()
// 挂载工具全家桶
// registry.Register(tools.NewReadFileTool(workDir))
// registry.Register(tools.NewWriteFileTool(workDir))
// registry.Register(tools.NewBashTool(workDir))
// registry.Register(tools.NewEditFileTool(workDir))
// registry.Register(tools.NewReadSkillTool(workDir))
workDir, _ := os.Getwd()
registry.Register(tools.NewReadFileTool(workDir + "/tmp/project_front"))
// 实例化引擎,开启 EnableThinking = true
eng := engine.NewAgentEngine(llmProvider, registry, false)
reporter := engine.NewTerminalReporter()
var wg sync.WaitGroup
// ================= 模拟并发场景 1:飞书前端群 =================
wg.Add(1)
go func() {
defer wg.Done()
sessionA := engine.GlobalSessionMgr.GetOrCreate("chat_front_001", workDir+"/tmp/project_front")
// 回合 1:获取机密
log.Println("\n>>> 🙋‍♂️ [Session A / Turn 1]: 帮我看看 README.md 里记录了什么密钥?我的操作系统是windows")
sessionA.Append(schema.Message{Role: schema.RoleUser, Content: "帮我看看 README.md 里记录了什么密钥?"})
_ = eng.Run(context.Background(), sessionA, reporter)
// 故意制造大量“废话”对话,刷掉记忆 (假设 Working Memory Limit=6)
for i := 0; i < 6; i++ {
sessionA.Append(schema.Message{Role: schema.RoleUser, Content: "这只是一句闲聊占位符。"})
sessionA.Append(schema.Message{Role: schema.RoleAssistant, Content: "好的,收到闲聊。"})
}
// 回合 2:验证记忆截断 (此时第一轮的密钥已经被挤出 Working Memory 了!)
log.Println("\n>>> 🙋‍♂️ [Session A / Turn 2]: 请直接告诉我,刚才第一轮你查到的那个密钥是什么?")
sessionA.Append(schema.Message{Role: schema.RoleUser, Content: "请直接告诉我,刚才第一轮你查到的那个密钥是什么?不准调用工具!"})
_ = eng.Run(context.Background(), sessionA, reporter)
}()
// ================= 模拟并发场景 2:飞书后端群 =================
wg.Add(1)
go func() {
defer wg.Done()
// 稍微错开一点时间发起请求
time.Sleep(1 * time.Second)
sessionB := engine.GlobalSessionMgr.GetOrCreate("chat_back_002", workDir+"/tmp/project_back")
log.Println("\n>>> 🙋‍♂️ [Session B]: 别人查到了一个密钥,你这里能看到吗?")
sessionB.Append(schema.Message{Role: schema.RoleUser, Content: "别人查到了一个密钥,你这里能看到吗?不准调用工具!"})
_ = eng.Run(context.Background(), sessionB, reporter)
}()
wg.Wait()
}