80 lines
2.9 KiB
Go
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()
|
|
}
|