stateManagementExample 状态管理示例
(ctx context.Context, service *postgres.Service, sessionID string)
| 140 | |
| 141 | // stateManagementExample 状态管理示例 |
| 142 | func stateManagementExample(ctx context.Context, service *postgres.Service, sessionID string) { |
| 143 | // 1. 添加不同作用域的状态 |
| 144 | event := &session.Event{ |
| 145 | ID: "evt-" + generateID(), |
| 146 | Timestamp: time.Now(), |
| 147 | InvocationID: "inv-002", |
| 148 | AgentID: "agent-customer-support", |
| 149 | Branch: "root", |
| 150 | Author: "system", |
| 151 | Content: types.Message{ |
| 152 | Role: types.RoleSystem, |
| 153 | Content: "State update", |
| 154 | }, |
| 155 | Actions: session.EventActions{ |
| 156 | StateDelta: map[string]any{ |
| 157 | // App 级状态(所有用户共享) |
| 158 | "app:version": "1.0.0", |
| 159 | "app:feature_flags": map[string]bool{ |
| 160 | "enable_voice": true, |
| 161 | "enable_video": false, |
| 162 | }, |
| 163 | |
| 164 | // User 级状态(该用户所有会话共享) |
| 165 | "user:language": "zh-CN", |
| 166 | "user:theme": "dark", |
| 167 | "user:timezone": "Asia/Shanghai", |
| 168 | |
| 169 | // Session 级状态(当前会话) |
| 170 | "session:start_time": time.Now().Unix(), |
| 171 | "session:conversation_topic": "帮助咨询", |
| 172 | |
| 173 | // Temp 级状态(临时) |
| 174 | "temp:cache_key": "temp-value", |
| 175 | }, |
| 176 | }, |
| 177 | } |
| 178 | |
| 179 | if err := service.AppendEvent(ctx, sessionID, event); err != nil { |
| 180 | log.Fatalf("Failed to update state: %v", err) |
| 181 | } |
| 182 | |
| 183 | // 2. 查询状态 |
| 184 | state, err := service.GetState(ctx, sessionID, "") |
| 185 | if err != nil { |
| 186 | log.Fatalf("Failed to get state: %v", err) |
| 187 | } |
| 188 | |
| 189 | fmt.Printf("✅ State updated (%d keys)\n", len(state)) |
| 190 | fmt.Println(" App state: version =", state["app:version"]) |
| 191 | fmt.Println(" User state: language =", state["user:language"]) |
| 192 | fmt.Println(" Session state: topic =", state["session:conversation_topic"]) |
| 193 | } |
| 194 | |
| 195 | // artifactVersioningExample 工件版本管理示例 |
| 196 | func artifactVersioningExample(ctx context.Context, service *postgres.Service, sessionID string) { |
no test coverage detected