feat(chatter): 引入决策历史以增强上下文连续性

为提升语言模型在连续对话中的表现,本次更新引入了决策历史功能。该功能旨在为模型提供一个短期记忆,记录其最近的思考过程与采取的行动。

主要变更包括:
- 新增 `DecisionRecord` 数据模型,用于存储“思考-动作”对。
- 在 `StreamContext` 中添加 `decision_history` 字段,以维护每个聊天流的决策历史。
- 在 `plan_filter` 中实现决策记录的逻辑,并在构建提示词时将其注入,供模型参考。
- 添加 `enable_decision_history` 和 `decision_history_length` 配置项,允许用户启用此功能并调整历史记录的长度。

通过回顾近期的决策,模型可以更好地避免重复行为,并生成更具连贯性和创造性的响应。
This commit is contained in:
tt-P607
2025-10-29 18:58:28 +08:00
parent 76f33134df
commit 57794480b8
5 changed files with 99 additions and 2 deletions

View File

@@ -7,7 +7,7 @@ import asyncio
import time
from dataclasses import dataclass, field
from enum import Enum
from typing import TYPE_CHECKING, Optional
from typing import TYPE_CHECKING, List, Optional
from src.common.logger import get_logger
from src.plugin_system.base.component_types import ChatMode, ChatType
@@ -28,6 +28,14 @@ class MessageStatus(Enum):
PROCESSING = "processing" # 处理中
@dataclass
class DecisionRecord(BaseDataModel):
"""决策记录"""
thought: str
action: str
@dataclass
class StreamContext(BaseDataModel):
"""聊天流上下文信息"""
@@ -56,6 +64,7 @@ class StreamContext(BaseDataModel):
triggering_user_id: str | None = None # 触发当前聊天流的用户ID
is_replying: bool = False # 是否正在生成回复
processing_message_id: str | None = None # 当前正在规划/处理的目标消息ID用于防止重复回复
decision_history: List["DecisionRecord"] = field(default_factory=list) # 决策历史
def add_action_to_message(self, message_id: str, action: str):
"""