feat(fs): update model configurations and enhance summarizer functionality

This commit is contained in:
jinli.yl 2026-02-10 21:57:41 +08:00
parent 011cabc5f1
commit e70d19a201
5 changed files with 85 additions and 18 deletions

View file

@ -6,6 +6,7 @@ from pathlib import Path
from ...core.enumeration import Role, ChunkEnum
from ...core.op import BaseReactStream
from ...core.schema import Message, StreamChunk
from ...tool.fs import BashTool, LsTool, ReadTool, WriteTool, EditTool
class FsCli(BaseReactStream):
@ -52,7 +53,17 @@ class FsCli(BaseReactStream):
# Summarize current conversation and save to memory files
current_date = datetime.now().strftime("%Y-%m-%d")
summarizer = FsSummarizer(tools=self.tools, working_dir=self.working_dir)
summarizer = FsSummarizer(
tools=[
BashTool(cwd=self.working_dir),
LsTool(cwd=self.working_dir),
ReadTool(cwd=self.working_dir),
WriteTool(cwd=self.working_dir),
EditTool(cwd=self.working_dir),
],
working_dir=self.working_dir,
language=self.language,
)
result = await summarizer.call(
messages=self.messages,
@ -113,7 +124,7 @@ class FsCli(BaseReactStream):
left_messages = cut_result.get("left_messages", [])
# Step 2: Generate summary via Compactor
compactor = FsCompactor()
compactor = FsCompactor(language=self.language)
summary_content = await compactor.call(
messages_to_summarize=messages_to_summarize,
turn_prefix_messages=turn_prefix_messages,

View file

@ -13,8 +13,9 @@ from ...core.utils import format_messages
class FsSummarizer(BaseReact):
"""Retrieve personal memories through vector search and history reading."""
def __init__(self, memory_dir: str = "memory", version: str = "default", **kwargs):
def __init__(self, working_dir: str, memory_dir: str = "memory", version: str = "default", **kwargs):
super().__init__(**kwargs)
self.working_dir: str = working_dir
self.memory_dir: str = memory_dir
self.version: str = version
@ -29,6 +30,7 @@ class FsSummarizer(BaseReact):
content=self.prompt_format(
"user_message_default",
conversation=format_messages(messages, add_index=False),
working_dir=self.working_dir,
date=date_str,
memory_dir=self.memory_dir,
),

View file

@ -10,24 +10,78 @@ user_message: |
If nothing to store, reply with [SILENT].
user_message_default: |
Pre-compaction memory flush turn.
The session is near auto-compaction; capture durable memories to disk.
Current Date: {date}
Working Dir: {working_dir}
Store durable memories now (use {memory_dir}/YYYY-MM-DD.md).
Workflow:
1. Use read_tool to read {memory_dir}/YYYY-MM-DD.md (if file doesn't exist, read_tool tool will return an error)
2. Intelligently merge new information with existing content (skip if file doesn't exist):
- Avoid duplicating information that's already recorded
- Enrich existing entries with new details when relevant
- Maintain chronological order when applicable
3. Write the updated content:
- Use edit_tool to update specific sections when possible
- Use write_tool to overwrite the entire file if major restructuring is needed
4. Create {memory_dir}/ if it doesn't exist
Principles:
- Always preserve timestamps, dates, and time-related context
- Only add truly new or enriching information
- Keep entries concise but complete
- If nothing meaningful to store, reply with [SILENT]
user_message_default_zh: |
预压缩内存刷新轮次。
当前会话即将进入自动压缩阶段;请将持久化记忆捕获并写入磁盘。
当前日期:{date}
工作目录:{working_dir}
立即存储持久化记忆(使用路径 {memory_dir}/YYYY-MM-DD.md
工作流程:
1. 使用 read_tool 读取 {memory_dir}/YYYY-MM-DD.md如文件不存在read_tool 会返回错误提示)
2. 智能合并新信息与现有内容(若文件不存在则跳过合并):
- 避免重复已记录的信息
- 在相关时丰富现有条目的新细节
- 在适用时保持时间顺序
3. 写入更新后的内容:
- 尽可能使用 edit_tool 更新特定部分
- 如需大幅重构则使用 write_tool 覆盖整个文件
4. 如 {memory_dir}/ 不存在则创建
原则:
- 始终保留时间戳、日期和时间相关上下文
- 仅添加真正新的或有丰富价值的信息
- 保持条目简洁但完整
- 若无有意义的内容可存储,请回复 [SILENT]
user_message_v1: |
<conversation>
{conversation}
</conversation>
The conversation is about to be compacted. Please extract persistent memories to disk.
Current Date: {date}
Working Dir: {working_dir}
Execution Flow:
1. Determine if the conversation contains information worth storing
- If no: Reply with reason + [SILENT]
- If yes: Continue to step 2
2. Check file {memory_dir}/YYYY-MM-DD.md (use actual date)
- File doesn't exist: Write new memories directly
- File exists:
a) Read existing content
b) Compare and identify new/updated information
c) Prefer edit_tool for precise additions (preserves existing content); write_tool overwrites entire file
2. Use Read tool to read {memory_dir}/YYYY-MM-DD.md (use actual date)
- If file doesn't exist (Read returns error): Write new memories directly
- If file exists:
a) Compare and identify new/updated information from the read content
c) Prefer `edit_tool` for precise additions (preserves existing content); `write_tool` overwrites entire file
d) If no new information: Reply with explanation + [SILENT]
Update Principles:
@ -41,25 +95,25 @@ user_message_default: |
Please store persistent memories, keeping entries concise and well-structured.
user_message_default_zh: |
user_message_v1_zh: |
<conversation>
{conversation}
</conversation>
conversation即将压缩请提取持久性记忆存储至磁盘。
当前日期:{date}
工作目录: {working_dir}
执行流程:
1. 判断对话是否包含值得存储的信息
- 若无:回复原因 + [SILENT]
- 若有:继续步骤 2
2. 检查文件 {memory_dir}/YYYY-MM-DD.md使用实际日期
- 文件不存在:直接写入新记忆
2. 使用 Read 工具读取 {memory_dir}/YYYY-MM-DD.md使用实际日期
- 文件不存在Read 返回错误):直接使用 `write_tool` 写入新记忆
- 文件已存在:
a) 读取现有内容
b) 对比识别新增/更新信息
c) 优先使用 edit_tool 精准添加新信息保留已有内容write_tool 会覆盖整个文件
a) 从读取的内容中对比识别新增/更新信息
c) 优先使用 `edit_tool` 精准添加新信息(保留已有内容)
d) 若无新信息:回复说明 + [SILENT]
更新原则:

View file

@ -20,8 +20,7 @@ flows:
llms:
default:
backend: openai
# model_name: qwen3-30b-a3b-instruct-2507
model_name: qwen3-next-80b-a3b-thinking
model_name: qwen3-30b-a3b-instruct-2507
# model_name: qwen3-30b-a3b-thinking-2507
request_interval: 1
# temperature: 0.0001

View file

@ -4,7 +4,8 @@ llms:
default:
backend: openai
# model_name: qwen3-30b-a3b-instruct-2507
model_name: qwen3-30b-a3b-thinking-2507
# model_name: qwen3-30b-a3b-thinking-2507
model_name: qwen3-235b-a22b-thinking-2507
request_interval: 1
# temperature: 0.0001