feat: 后端统一消息类型分类 + 更新 API 文档
msg_type 现在由后端在所有消息路径上自动填充,前端无需解析内容猜测类型。
- chat_handler: SendSystemMessage → system_info, parseMultiMessage 返回 proactiveSegment{msgType}
- protocol: MultiMessageItem 增加 MsgType 字段
- useWebSocket: 所有 handler 直接读取 msg_type,移除前端类型推断
- docs/api/gateway-api.md: 文档化 msg_type 分类机制,移除已删除的每日简报章节
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -400,12 +400,13 @@ func (h *ChatHandler) streamResponse(client *ws.Client, mode string, reqBody []b
|
||||
// 如果已有审查消息则跳过,避免与 review_messages 重复
|
||||
multiParts := parseMultiMessage(fullText)
|
||||
if !hasReview && len(multiParts) > 1 {
|
||||
// 发送 multi_message 事件
|
||||
// 发送 multi_message 事件(每条消息带 msg_type)
|
||||
var items []ws.MultiMessageItem
|
||||
for i, part := range multiParts {
|
||||
for i, seg := range multiParts {
|
||||
items = append(items, ws.MultiMessageItem{
|
||||
Index: i,
|
||||
Content: part,
|
||||
Content: seg.content,
|
||||
MsgType: seg.msgType,
|
||||
})
|
||||
}
|
||||
h.broadcastToUser(client.UserID, ws.ServerMessage{
|
||||
@@ -669,6 +670,8 @@ func (h *ChatHandler) SendSystemMessage(userID, sessionID, text string) error {
|
||||
Type: "response",
|
||||
MessageID: "sys_" + generateID(),
|
||||
Text: text,
|
||||
Role: "system",
|
||||
MsgType: "system_info",
|
||||
Timestamp: time.Now().UnixMilli(),
|
||||
}
|
||||
|
||||
@@ -931,18 +934,24 @@ func (h *ChatHandler) broadcastToUser(userID string, msg ws.ServerMessage) {
|
||||
|
||||
// parseMultiMessage 检测并解析多消息格式
|
||||
// 如果文本包含空行分隔的多条消息,拆分为多条;否则返回单条
|
||||
func parseMultiMessage(text string) []string {
|
||||
func parseMultiMessage(text string) []proactiveSegment {
|
||||
if text == "" {
|
||||
return nil
|
||||
}
|
||||
// 按双换行(空行)分割
|
||||
parts := strings.Split(text, "\n\n")
|
||||
// 过滤空字符串并去除首尾空白
|
||||
var result []string
|
||||
// 过滤空字符串并去除首尾空白,检测消息类型
|
||||
var result []proactiveSegment
|
||||
for _, p := range parts {
|
||||
p = strings.TrimSpace(p)
|
||||
if p != "" {
|
||||
result = append(result, p)
|
||||
msgType := "chat"
|
||||
// 检测括号包裹的动作标记
|
||||
if (strings.HasPrefix(p, "(") && strings.HasSuffix(p, ")")) ||
|
||||
(strings.HasPrefix(p, "(") && strings.HasSuffix(p, ")")) {
|
||||
msgType = "action"
|
||||
}
|
||||
result = append(result, proactiveSegment{msgType: msgType, content: p})
|
||||
}
|
||||
}
|
||||
// 如果只有一条,返回 nil 表示不是多消息格式
|
||||
|
||||
@@ -92,6 +92,7 @@ type MultiMessagePayload struct {
|
||||
type MultiMessageItem struct {
|
||||
Index int `json:"index"`
|
||||
Content string `json:"content"`
|
||||
MsgType string `json:"msg_type,omitempty"` // chat | action | system_info
|
||||
}
|
||||
|
||||
// NotificationInfo 通知推送信息
|
||||
|
||||
Reference in New Issue
Block a user