Context Switch Token Optimizer
技能描述
通过关键词相似度、弱关联子串与时间衰减判断「连续 / 渐变漂移压缩 / 硬切换」,并可监控 Token、触发压缩与清理。实现见 context_manager.py、token_optimizer.py;详细算法见 docs/TOPICAND_CONTINUITY.md。
上下文动作(与代码一致)
| 动作 | 条件 | 行为 |
|---|
| INLINECODE2 | 无当前主题且无历史 | 建主题、可选加载 memory/topic 下记忆 |
| INLINECODE4 |
与上一轮相似度 ≥
similarity_threshold | 追加历史,不压缩 |
|
drift_compress | 相似度 ∈ [
continuity_threshold,
similarity_threshold) | 对话仍连续;压缩与当前弱相关的历史轮(
is_compressed,保留短摘要) |
|
switch_context | 相似度 <
continuity_threshold | 硬切换,换记忆、增
switch_count |
相似度计算:calculate_topic_similarity()(关键词 Jaccard 式重叠 × 时间衰减 + 2 字子串/首字弱关联 + continuity_bonus_for_partial,弱关联封顶 drift_similarity_cap)。
持久化状态格式(memory/context_switch_state.json)
与 ContextState / TopicSummary 一致,主题历史项包含:
- -
topic, keywords, timestamp, tokens_used, content_snippet, is_compressed - 顶层另有:
current_topic, memory_context, last_switch_time, switch_count, INLINECODE29
配置文件(config.json)
所有键名与 load_skill_config() 默认值一致;用户 JSON 按顶层块与默认合并(同一块内键覆盖,未写的子键保留默认)。
context_switch
| 键名 | 类型 | 默认 | 说明 |
|---|
| INLINECODE33 | number | 0.7 | ≥ 此值判为 INLINECODE34 |
| INLINECODE35 |
number | 0.35 | < 此值判为硬切换
switch_context |
|
compress_relevance_threshold | number | 0.3 |
drift_compress 时,历史轮与当前相似度低于此则压缩该轮 |
|
continuity_bonus_for_partial | number | 0.3 | 存在弱关联时的相似度加成 |
|
drift_similarity_cap | number | 0.65 | 弱关联时相似度上限,便于进入
drift_compress |
|
time_decay_factor | number | 0.95 | 按小时衰减的底数 |
|
max_topic_history | int | 10 | 主题历史条数上限 |
|
memory_relevance_threshold | number | 0.5 | 记忆文件匹配阈值 |
|
log_level | string | (不设) | 可由环境变量
CONTEXT_SWITCH_LOG_LEVEL 写入 |
token_optimization
| 键名 | 类型 | 默认 | 说明 |
|---|
enabled | bool | true | 为 false 时不自动触发优化(对应环境变量 TOKEN_OPTIMIZER_ENABLED) |
| INLINECODE50 |
int | 80000 | Token 预算 |
|
compression_threshold | int | 56000 | 压缩参考阈值 |
|
context_cleanup_threshold | number | 0.8 | 上下文清理参考 |
|
memory_load_limit | int | 2000 | 记忆加载参考 |
|
optimization_interval | int | 300 | 优化间隔(秒,预留) |
|
max_history_size | int | 100 | Token 使用记录条数上限 |
memory_search
| 键名 | 类型 | 默认 | 说明 |
|---|
| INLINECODE57 | int | 5 | 最多返回记忆条数 |
| INLINECODE58 |
int | 5 | 每轮提取关键词数 |
|
search_depth | int | 2 | 可由环境变量
MEMORY_SEARCH_DEPTH 覆盖(1–3) |
|
file_types | string[] |
["*.md"] | 记忆目录 glob |
optimization_settings
| 键名 | 说明 |
|---|
| INLINECODE64 | 是否自动优化(策略预留) |
| INLINECODE65 |
健康分阈值 |
|
suggestions_check_interval | 建议检查间隔(秒) |
环境变量(与 apply_environment_overrides() 一致)
| 环境变量 | 映射配置键 | 取值与行为 |
|---|
CONTEXT_HISTORY_SIZE | INLINECODE69 | 正整数,限制在 1–100 |
MEMORY_SEARCH_DEPTH |
memory_search.search_depth | 正整数,限制在
1–3 |
|
TOKEN_OPTIMIZER_ENABLED |
token_optimization.enabled |
true/
1/
yes/
on 为启用;
false/
0/
no/
off 为禁用(禁用后使用率 >70% 也不触发
trigger_optimization) |
|
CONTEXT_SWITCH_LOG_LEVEL |
context_switch.log_level |
DEBUG /
INFO /
WARNING /
ERROR /
CRITICAL;设置根 logger 级别 |
未设置上述环境变量时,行为完全由 config.json 与代码默认决定。
CLI 与入口
- - 主入口: INLINECODE91
- 子模块:
context_manager.py、token_optimizer.py(参数见 --help)
维护: Hermosa
版本: v1.1
最后更新: 2026-03-17
上下文切换令牌优化器
技能描述
通过关键词相似度、弱关联子串与时间衰减判断「连续 / 渐变漂移压缩 / 硬切换」,并可监控 Token、触发压缩与清理。实现见 contextmanager.py、tokenoptimizer.py;详细算法见 docs/TOPICAND_CONTINUITY.md。
上下文动作(与代码一致)
| 动作 | 条件 | 行为 |
|---|
| loadmemory | 无当前主题且无历史 | 建主题、可选加载 memory/topic 下记忆 |
| continuous |
与上一轮相似度 ≥ similaritythreshold | 追加历史,不压缩 |
| drift
compress | 相似度 ∈ [continuitythreshold, similarity
threshold) | 对话仍连续;压缩与当前弱相关的历史轮(iscompressed,保留短摘要) |
| switch
context | 相似度 < continuitythreshold | 硬切换,换记忆、增 switch_count |
相似度计算:calculatetopicsimilarity()(关键词 Jaccard 式重叠 × 时间衰减 + 2 字子串/首字弱关联 + continuitybonusforpartial,弱关联封顶 driftsimilarity_cap)。
持久化状态格式(memory/contextswitchstate.json)
与 ContextState / TopicSummary 一致,主题历史项包含:
- - topic, keywords, timestamp, tokensused, contentsnippet, iscompressed
- 顶层另有:currenttopic, memorycontext, lastswitchtime, switchcount, total_tokens
配置文件(config.json)
所有键名与 loadskillconfig() 默认值一致;用户 JSON 按顶层块与默认合并(同一块内键覆盖,未写的子键保留默认)。
context_switch
| 键名 | 类型 | 默认 | 说明 |
|---|
| similaritythreshold | number | 0.7 | ≥ 此值判为 continuous |
| continuitythreshold |
number | 0.35 | < 此值判为硬切换 switch_context |
| compress
relevancethreshold | number | 0.3 | drift_compress 时,历史轮与当前相似度低于此则压缩该轮 |
| continuity
bonusfor_partial | number | 0.3 | 存在弱关联时的相似度加成 |
| drift
similaritycap | number | 0.65 | 弱关联时相似度上限,便于进入 drift_compress |
| time
decayfactor | number | 0.95 | 按小时衰减的底数 |
| max
topichistory | int | 10 | 主题历史条数上限 |
| memory
relevancethreshold | number | 0.5 | 记忆文件匹配阈值 |
| log
level | string | (不设) | 可由环境变量 CONTEXTSWITCH
LOGLEVEL 写入 |
token_optimization
| 键名 | 类型 | 默认 | 说明 |
|---|
| enabled | bool | true | 为 false 时不自动触发优化(对应环境变量 TOKENOPTIMIZERENABLED) |
| token_limit |
int | 80000 | Token 预算 |
| compression_threshold | int | 56000 | 压缩参考阈值 |
| context
cleanupthreshold | number | 0.8 | 上下文清理参考 |
| memory
loadlimit | int | 2000 | 记忆加载参考 |
| optimization_interval | int | 300 | 优化间隔(秒,预留) |
| max
historysize | int | 100 | Token 使用记录条数上限 |
memory_search
| 键名 | 类型 | 默认 | 说明 |
|---|
| maxsearchresults | int | 5 | 最多返回记忆条数 |
| keyword_limit |
int | 5 | 每轮提取关键词数 |
|
searchdepth | int | 2 | 可由环境变量 MEMORYSEARCH_DEPTH 覆盖(1–3) |
| file_types | string[] | [*.md] | 记忆目录 glob |
optimization_settings
| 键名 | 说明 |
|---|
| autooptimization | 是否自动优化(策略预留) |
| healthscore_threshold |
健康分阈值 |
| suggestions
checkinterval | 建议检查间隔(秒) |
环境变量(与 applyenvironmentoverrides() 一致)
| 环境变量 | 映射配置键 | 取值与行为 |
|---|
| CONTEXTHISTORYSIZE | contextswitch.maxtopichistory | 正整数,限制在 1–100 |
| MEMORYSEARCHDEPTH |
memorysearch.search_depth | 正整数,限制在
1–3 |
|
TOKENOPTIMIZERENABLED | token
optimization.enabled | true/1/yes/on 为启用;false/0/no/off 为禁用(禁用后使用率 >70% 也不触发 triggeroptimization) |
|
CONTEXTSWITCHLOGLEVEL | contextswitch.log_level | DEBUG / INFO / WARNING / ERROR / CRITICAL;设置根 logger 级别 |
未设置上述环境变量时,行为完全由 config.json 与代码默认决定。
CLI 与入口
- - 主入口:python3 context-switch-token-optimizer.py [--config path] --process|--status|--reset|--test
- 子模块:contextmanager.py、tokenoptimizer.py(参数见 --help)
维护: Hermosa
版本: v1.1
最后更新: 2026-03-17