SendWithContent 发送多模态消息
(ctx context.Context, blocks []types.ContentBlock)
| 972 | |
| 973 | // SendWithContent 发送多模态消息 |
| 974 | func (a *Agent) SendWithContent(ctx context.Context, blocks []types.ContentBlock) error { |
| 975 | a.mu.Lock() |
| 976 | defer a.mu.Unlock() |
| 977 | |
| 978 | // 创建用户消息 |
| 979 | message := types.Message{ |
| 980 | Role: types.MessageRoleUser, |
| 981 | ContentBlocks: blocks, |
| 982 | } |
| 983 | |
| 984 | a.messages = append(a.messages, message) |
| 985 | |
| 986 | // ✅ 修复:保存前在内存中修剪 |
| 987 | if a.shouldTrimMessages() { |
| 988 | a.messages = a.trimMessagesInMemory(a.messages, a.config.Store.MaxMessages) |
| 989 | agentLog.Debug(ctx, "messages trimmed in memory before save (multimodal message)", map[string]any{ |
| 990 | "agent_id": a.id, |
| 991 | "max_messages": a.config.Store.MaxMessages, |
| 992 | "actual_count": len(a.messages), |
| 993 | }) |
| 994 | } |
| 995 | |
| 996 | a.stepCount++ |
| 997 | |
| 998 | // 持久化(已修剪的消息) |
| 999 | if err := a.deps.Store.SaveMessages(ctx, a.id, a.messages); err != nil { |
| 1000 | return fmt.Errorf("save multimodal messages: %w", err) |
| 1001 | } |
| 1002 | |
| 1003 | // 触发处理 |
| 1004 | go a.processMessages(ctx) |
| 1005 | |
| 1006 | return nil |
| 1007 | } |
| 1008 | |
| 1009 | // Chat 同步对话(阻塞式) |
| 1010 | func (a *Agent) Chat(ctx context.Context, text string) (*types.CompleteResult, error) { |
no test coverage detected