package main
import (
"context"
"flag"
"log"
"os"
"trpc.group/trpc-go/trpc-agent-go/agent/llmagent"
"trpc.group/trpc-go/trpc-agent-go/memory"
memoryinmemory "trpc.group/trpc-go/trpc-agent-go/memory/inmemory"
memoryredis "trpc.group/trpc-go/trpc-agent-go/memory/redis"
"trpc.group/trpc-go/trpc-agent-go/model"
"trpc.group/trpc-go/trpc-agent-go/model/openai"
"trpc.group/trpc-go/trpc-agent-go/runner"
"trpc.group/trpc-go/trpc-agent-go/session/inmemory"
)
func main() {
var (
memServiceName = flag.String("memory", "inmemory", "记忆服务类型 (inmemory, redis)")
redisAddr = flag.String("redis-addr", "localhost:6379", "Redis 服务器地址")
modelName = flag.String("model", "deepseek-chat", "要使用的模型名称")
)
flag.Parse()
ctx := context.Background()
// 1. 创建记忆服务(根据参数选择)
var memoryService memory.Service
var err error
switch *memServiceName {
case "redis":
redisURL := fmt.Sprintf("redis://%s", *redisAddr)
memoryService, err = memoryredis.NewService(
memoryredis.WithRedisClientURL(redisURL),
memoryredis.WithToolEnabled(memory.DeleteToolName, true),
memoryredis.WithCustomTool(memory.ClearToolName, customClearMemoryTool),
)
if err != nil {
log.Fatalf("Failed to create redis memory service: %v", err)
}
default: // inmemory
memoryService = memoryinmemory.NewMemoryService(
memoryinmemory.WithInstructionBuilder(func(enabledTools []string, defaultPrompt string) string {
return "[记忆指令] 遵循以下指导原则管理用户记忆。\n\n" + defaultPrompt
}),
memoryinmemory.WithToolEnabled(memory.DeleteToolName, true),
memoryinmemory.WithCustomTool(memory.ClearToolName, customClearMemoryTool),
)
}
// 2. 创建 LLM 模型
modelInstance := openai.New(*modelName)
// 3. 创建 Agent 并集成 Memory
genConfig := model.GenerationConfig{
MaxTokens: intPtr(2000),
Temperature: floatPtr(0.7),
Stream: true,
}
llmAgent := llmagent.New(
"memory-assistant",
llmagent.WithModel(modelInstance),
llmagent.WithDescription("具有记忆能力的智能助手。我可以记住关于你的重要信息,并在需要时回忆起来。"),
llmagent.WithGenerationConfig(genConfig),
llmagent.WithMemory(memoryService), // 自动添加记忆工具和记忆指令
)
// 4. 创建 Runner
sessionService := inmemory.NewSessionService()
appRunner := runner.NewRunner(
"memory-chat",
llmAgent,
runner.WithSessionService(sessionService),
)
// 5. 执行对话(Agent 会自动使用记忆工具)
log.Println("🧠 开始记忆对话...")
message := model.NewUserMessage("你好,我的名字是张三,我喜欢编程")
eventChan, err := appRunner.Run(ctx, "user123", "session456", message)
if err != nil {
log.Fatalf("Failed to run agent: %v", err)
}
// 6. 处理响应 ...
}
// 自定义清空工具
func customClearMemoryTool(memoryService memory.Service) tool.Tool {
// ... 实现逻辑 ...
}
// 辅助函数
func intPtr(i int) *int { return &i }
func floatPtr(f float64) *float64 { return &f }