mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-07-10 14:28:43 +02:00
Add files via upload
This commit is contained in:
+58
-10
@@ -459,6 +459,57 @@ func appendAttachmentsToMessage(msg string, attachments []ChatAttachment, savedP
|
|||||||
return b.String()
|
return b.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// appendAssistantMessageNotice 在助手消息末尾追加提示,避免覆盖已生成内容。
|
||||||
|
// 若消息为空则直接写入提示;若已包含相同提示则保持不变。
|
||||||
|
func (h *AgentHandler) appendAssistantMessageNotice(messageID, notice string) error {
|
||||||
|
trimmedNotice := strings.TrimSpace(notice)
|
||||||
|
if strings.TrimSpace(messageID) == "" || trimmedNotice == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
_, err := h.db.Exec(
|
||||||
|
`UPDATE messages
|
||||||
|
SET content = CASE
|
||||||
|
WHEN content IS NULL OR TRIM(content) = '' THEN ?
|
||||||
|
WHEN INSTR(content, ?) > 0 THEN content
|
||||||
|
ELSE content || '\n\n' || ?
|
||||||
|
END,
|
||||||
|
updated_at = ?
|
||||||
|
WHERE id = ?`,
|
||||||
|
trimmedNotice,
|
||||||
|
trimmedNotice,
|
||||||
|
trimmedNotice,
|
||||||
|
time.Now(),
|
||||||
|
messageID,
|
||||||
|
)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// mergeAssistantMessagePartialOnCancel 将取消前已生成的部分回复尽量合并进消息:
|
||||||
|
// - content 为空或仅占位(处理中...)时,直接替换为 partial;
|
||||||
|
// - 已有正文时,仅在尚未包含 partial 时追加,避免丢失与重复。
|
||||||
|
func (h *AgentHandler) mergeAssistantMessagePartialOnCancel(messageID, partial string) error {
|
||||||
|
trimmedPartial := strings.TrimSpace(partial)
|
||||||
|
if strings.TrimSpace(messageID) == "" || trimmedPartial == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
_, err := h.db.Exec(
|
||||||
|
`UPDATE messages
|
||||||
|
SET content = CASE
|
||||||
|
WHEN content IS NULL OR TRIM(content) = '' OR TRIM(content) = '处理中...' THEN ?
|
||||||
|
WHEN INSTR(content, ?) > 0 THEN content
|
||||||
|
ELSE content || '\n\n' || ?
|
||||||
|
END,
|
||||||
|
updated_at = ?
|
||||||
|
WHERE id = ?`,
|
||||||
|
trimmedPartial,
|
||||||
|
trimmedPartial,
|
||||||
|
trimmedPartial,
|
||||||
|
time.Now(),
|
||||||
|
messageID,
|
||||||
|
)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// ChatResponse 聊天响应
|
// ChatResponse 聊天响应
|
||||||
type ChatResponse struct {
|
type ChatResponse struct {
|
||||||
Response string `json:"response"`
|
Response string `json:"response"`
|
||||||
@@ -1573,11 +1624,12 @@ func (h *AgentHandler) AgentLoopStream(c *gin.Context) {
|
|||||||
h.tasks.UpdateTaskStatus(conversationID, taskStatus)
|
h.tasks.UpdateTaskStatus(conversationID, taskStatus)
|
||||||
|
|
||||||
if assistantMessageID != "" {
|
if assistantMessageID != "" {
|
||||||
if _, updateErr := h.db.Exec(
|
if result != nil {
|
||||||
"UPDATE messages SET content = ?, updated_at = ? WHERE id = ?",
|
if updateErr := h.mergeAssistantMessagePartialOnCancel(assistantMessageID, result.Response); updateErr != nil {
|
||||||
cancelMsg,
|
h.logger.Warn("合并取消前的部分回复失败", zap.Error(updateErr))
|
||||||
time.Now(), assistantMessageID,
|
}
|
||||||
); updateErr != nil {
|
}
|
||||||
|
if updateErr := h.appendAssistantMessageNotice(assistantMessageID, cancelMsg); updateErr != nil {
|
||||||
h.logger.Warn("更新取消后的助手消息失败", zap.Error(updateErr))
|
h.logger.Warn("更新取消后的助手消息失败", zap.Error(updateErr))
|
||||||
}
|
}
|
||||||
h.db.AddProcessDetail(assistantMessageID, conversationID, "cancelled", cancelMsg, nil)
|
h.db.AddProcessDetail(assistantMessageID, conversationID, "cancelled", cancelMsg, nil)
|
||||||
@@ -2638,11 +2690,7 @@ func (h *AgentHandler) executeBatchQueue(queueID string) {
|
|||||||
}
|
}
|
||||||
// 更新助手消息内容
|
// 更新助手消息内容
|
||||||
if assistantMessageID != "" {
|
if assistantMessageID != "" {
|
||||||
if _, updateErr := h.db.Exec(
|
if updateErr := h.appendAssistantMessageNotice(assistantMessageID, cancelMsg); updateErr != nil {
|
||||||
"UPDATE messages SET content = ?, updated_at = ? WHERE id = ?",
|
|
||||||
cancelMsg,
|
|
||||||
time.Now(), assistantMessageID,
|
|
||||||
); updateErr != nil {
|
|
||||||
h.logger.Warn("更新取消后的助手消息失败", zap.String("queueId", queueID), zap.String("taskId", task.ID), zap.Error(updateErr))
|
h.logger.Warn("更新取消后的助手消息失败", zap.String("queueId", queueID), zap.String("taskId", task.ID), zap.Error(updateErr))
|
||||||
}
|
}
|
||||||
// 保存取消详情到数据库
|
// 保存取消详情到数据库
|
||||||
|
|||||||
@@ -206,7 +206,14 @@ func (h *AgentHandler) EinoSingleAgentLoopStream(c *gin.Context) {
|
|||||||
h.tasks.UpdateTaskStatus(conversationID, taskStatus)
|
h.tasks.UpdateTaskStatus(conversationID, taskStatus)
|
||||||
cancelMsg := "任务已被用户取消,后续操作已停止。"
|
cancelMsg := "任务已被用户取消,后续操作已停止。"
|
||||||
if assistantMessageID != "" {
|
if assistantMessageID != "" {
|
||||||
_, _ = h.db.Exec("UPDATE messages SET content = ?, updated_at = ? WHERE id = ?", cancelMsg, time.Now(), assistantMessageID)
|
if result != nil {
|
||||||
|
if err := h.mergeAssistantMessagePartialOnCancel(assistantMessageID, result.Response); err != nil {
|
||||||
|
h.logger.Warn("合并取消前的部分回复失败", zap.Error(err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := h.appendAssistantMessageNotice(assistantMessageID, cancelMsg); err != nil {
|
||||||
|
h.logger.Warn("更新取消后的助手消息失败", zap.Error(err))
|
||||||
|
}
|
||||||
_ = h.db.AddProcessDetail(assistantMessageID, conversationID, "cancelled", cancelMsg, nil)
|
_ = h.db.AddProcessDetail(assistantMessageID, conversationID, "cancelled", cancelMsg, nil)
|
||||||
}
|
}
|
||||||
sendEvent("cancelled", cancelMsg, map[string]interface{}{
|
sendEvent("cancelled", cancelMsg, map[string]interface{}{
|
||||||
|
|||||||
@@ -217,7 +217,14 @@ func (h *AgentHandler) MultiAgentLoopStream(c *gin.Context) {
|
|||||||
h.tasks.UpdateTaskStatus(conversationID, taskStatus)
|
h.tasks.UpdateTaskStatus(conversationID, taskStatus)
|
||||||
cancelMsg := "任务已被用户取消,后续操作已停止。"
|
cancelMsg := "任务已被用户取消,后续操作已停止。"
|
||||||
if assistantMessageID != "" {
|
if assistantMessageID != "" {
|
||||||
_, _ = h.db.Exec("UPDATE messages SET content = ?, updated_at = ? WHERE id = ?", cancelMsg, time.Now(), assistantMessageID)
|
if result != nil {
|
||||||
|
if err := h.mergeAssistantMessagePartialOnCancel(assistantMessageID, result.Response); err != nil {
|
||||||
|
h.logger.Warn("合并取消前的部分回复失败", zap.Error(err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := h.appendAssistantMessageNotice(assistantMessageID, cancelMsg); err != nil {
|
||||||
|
h.logger.Warn("更新取消后的助手消息失败", zap.Error(err))
|
||||||
|
}
|
||||||
_ = h.db.AddProcessDetail(assistantMessageID, conversationID, "cancelled", cancelMsg, nil)
|
_ = h.db.AddProcessDetail(assistantMessageID, conversationID, "cancelled", cancelMsg, nil)
|
||||||
}
|
}
|
||||||
sendEvent("cancelled", cancelMsg, map[string]interface{}{
|
sendEvent("cancelled", cancelMsg, map[string]interface{}{
|
||||||
|
|||||||
Reference in New Issue
Block a user