上下文工程,每经过10轮对话,将上下文进行压缩,上下文压缩的时候,不要丢失关键信息,存储到Obsidian中长时记忆系统中,作为我们后续聊天基础。
class ConversationTracker:
def __init__(self):
self.turn_count = 0
self.conversation_history = []
self.compression_threshold = 10 # 每10轮压缩一次
def add_turn(self, user_message, assistant_response):
"""
添加一轮对话
"""
turn = {
'turn_number': self.turn_count + 1,
'timestamp': datetime.now(),
'user_message': user_message,
'assistant_response': assistant_response,
'metadata': self.extract_metadata(user_message, assistant_response)
}
self.conversation_history.append(turn)
self.turn_count += 1
# 检查是否需要压缩
if self.turn_count % self.compression_threshold == 0:
self.compress_context()
def compress_context(self):
"""
执行上下文压缩
"""
compression_result = self.perform_compression()
self.store_to_long_term_memory(compression_result)
self.cleanup_compressed_context()
def assess_information_importance(content):
"""
评估信息的重要性
"""
importance_score = 0
# 1. 关键词匹配(30%权重)
key_phrases = [
'核心定义', '重要结论', '关键决策', '必须记住',
'核心原则', '核心价值', '核心方法', '核心工具'
]
for phrase in key_phrases:
if phrase in content:
importance_score += 30 / len(key_phrases)
# 2. 用户强调(25%权重)
if contains_user_emphasis(content):
importance_score += 25
# 3. 重复提及(20%权重)
if is_frequently_mentioned(content):
importance_score += 20
# 4. 关联性(15%权重)
if has_high_relevance(content):
importance_score += 15
# 5. 时效性(10%权重)
if has_long_term_value(content):
importance_score += 10
return min(importance_score, 100) # 确保不超过100分
def identify_key_information_types(content):
"""
识别关键信息类型
"""
information_types = []
# 1. 核心概念和定义
if contains_definitions(content):
information_types.append('core_concepts')
# 2. 重要决策和结论
if contains_decisions(content):
information_types.append('important_decisions')
# 3. 关键数据和事实
if contains_key_facts(content):
information_types.append('key_facts')
# 4. 用户偏好和要求
if contains_user_preferences(content):
information_types.append('user_preferences')
# 5. 系统状态和配置
if contains_system_configs(content):
information_types.append('system_configs')
# 6. 行动计划和时间表
if contains_action_plans(content):
information_types.append('action_plans')
# 7. 学习内容和知识点
if contains_learning_content(content):
information_types.append('learning_content')
return information_types
def detect_repetitive_content(conversation_history):
"""
检测重复内容
"""
repetitive_patterns = []
content_frequency = {}
for turn in conversation_history:
# 提取主要内容
main_content = extract_main_content(turn)
content_hash = hash_content(main_content)
if content_hash in content_frequency:
content_frequency[content_hash] += 1
if content_frequency[content_hash] >= 2: # 出现2次以上
repetitive_patterns.append({
'content': main_content,
'frequency': content_frequency[content_hash],
'turns': find_turn_numbers(content_hash, conversation_history)
})
else:
content_frequency[content_hash] = 1
return repetitive_patterns
def identify_temporary_information(content):
"""
识别临时信息
"""
temporary_indicators = [
'临时讨论', '过程性', '中间步骤', '草稿',
'待确认', '暂定', '可能', '也许', '大概'
]
is_temporary = any(indicator in content for indicator in temporary_indicators)
if is_temporary:
return {
'is_temporary': True,
'temporary_indicators': [indicator for indicator in temporary_indicators if indicator in content],
'suggested_action': '标记为临时信息,可压缩或删除'
}
return {'is_temporary': False}
def extract_and_summarize(conversation_history):
"""
提取和摘要对话内容
"""
# 1. 提取所有对话内容
all_content = extract_all_content(conversation_history)
# 2. 重要性分析
importance_scores = analyze_importance(all_content)
# 3. 按重要性排序
sorted_content = sort_by_importance(all_content, importance_scores)
# 4. 提取关键信息(保留重要性评分>60的内容)
key_information = extract_key_information(sorted_content, threshold=60)
# 5. 生成结构化摘要
structured_summary = generate_structured_summary(key_information)
return structured_summary
def create_compressed_structure(conversation_history, summary):
"""
创建压缩后的数据结构
"""
compressed_data = {
'metadata': {
'compression_id': generate_compression_id(),
'original_turns': len(conversation_history),
'compressed_turns': len(summary['key_points']),
'compression_ratio': calculate_compression_ratio(conversation_history, summary),
'compression_time': datetime.now(),
'compression_version': '1.0'
},
'context_summary': {
'time_period': {
'start_time': conversation_history[0]['timestamp'],
'end_time': conversation_history[-1]['timestamp'],
'duration': calculate_duration(conversation_history)
},
'main_topics': extract_main_topics(conversation_history),
'key_decisions': extract_key_decisions(conversation_history),
'action_items': extract_action_items(conversation_history)
},
'key_information': summary['key_points'],
'relationships': {
'internal_links': generate_internal_links(summary),
'external_references': extract_external_references(conversation_history),
'conceptual_connections': identify_conceptual_connections(summary)
},
'retention_info': {
'importance_scores': summary['importance_scores'],
'retention_period': calculate_retention_period(summary),
'review_schedule': generate_review_schedule(summary)
}
}
return compressed_data
def check_information_integrity(original, compressed):
"""
检查信息完整性
"""
integrity_metrics = {
'key_concepts_preserved': check_key_concepts_preserved(original, compressed),
'important_decisions_preserved': check_decisions_preserved(original, compressed),
'action_items_preserved': check_action_items_preserved(original, compressed),
'user_preferences_preserved': check_preferences_preserved(original, compressed)
}
integrity_score = calculate_integrity_score(integrity_metrics)
return {
'integrity_metrics': integrity_metrics,
'integrity_score': integrity_score,
'pass_threshold': integrity_score >= 85 # 85分以上为合格
}
def evaluate_compression_effectiveness(original, compressed):
"""
评估压缩有效性
"""
effectiveness_metrics = {
'size_reduction': calculate_size_reduction(original, compressed),
'information_density': calculate_information_density(compressed),
'accessibility_score': calculate_accessibility_score(compressed),
'usability_score': calculate_usability_score(compressed)
}
return effectiveness_metrics
C:\Users\jia'yue\Desktop\以观其妙书院知识库\观其妙书院\长时记忆系统\
长时记忆系统\
├── 按时间分类\
│ ├── 2026-03\
│ │ ├── 2026-03-15_上下文压缩_001.md
│ │ ├── 2026-03-15_上下文压缩_002.md
│ │ └── ...
│ └── 2026-04\
│ └── ...
├── 按主题分类\
│ ├── 技术讨论\
│ ├── 项目规划\
│ ├── 学习内容\
│ └── 系统配置\
├── 知识图谱\
│ ├── 概念网络.json
│ ├── 关系图谱.json
│ └── 时间线.json
└── 索引系统\
├── 时间索引.md
├── 主题索引.md
└── 重要性索引.md
# 上下文压缩记录:{compression_id}
## 📅 基本信息
- **压缩时间**:{compression_time}
- **原始轮次**:{original_turns} 轮
- **压缩后要点**:{compressed_points} 个
- **压缩比**:{compression_ratio}%
## 🎯 上下文摘要
### 时间范围
- 开始:{start_time}
- 结束:{end_time}
- 时长:{duration}
### 主要话题
{main_topics}
### 关键决策
{key_decisions}
### 行动项
{action_items}
## 🔑 关键信息
### 核心概念
{core_concepts}
### 重要事实
{key_facts}
### 用户偏好
{user_preferences}
### 系统配置
{system_configs}
## 🔗 关联关系
### 内部链接
{internal_links}
### 外部引用
{external_references}
### 概念连接
{conceptual_connections}
## 📊 保留信息
### 重要性评分
{importance_scores}
### 保留期限
{retention_period}
### 复习计划
{review_schedule}
---
**标签**:#上下文压缩 #长时记忆 #{date_tag} #{topic_tags}
**关联文件**:[[相关文件1]] [[相关文件2]]
def generate_obsidian_links(compressed_data):
"""
生成Obsidian双向链接
"""
links = []
# 1. 时间链接
date_str = compressed_data['metadata']['compression_time'].strftime('%Y-%m-%d')
links.append(f'[[{date_str}_对话记录]]')
# 2. 主题链接
for topic in compressed_data['context_summary']['main_topics']:
topic_slug = topic.replace(' ', '_')
links.append(f'[[主题_{topic_slug}]]')
# 3. 项目链接
if 'project_name' in compressed_data['context_summary']:
project_slug = compressed_data['context_summary']['project_name'].replace(' ', '_')
links.append(f'[[项目_{project_slug}]]')
# 4. 人物链接
if 'participants' in compressed_data['context_summary']:
for participant in compressed_data['context_summary']['participants']:
links.append(f'[[人物_{participant}]]')
return links
def load_context_for_chat(chat_session):
"""
为聊天加载上下文
"""
# 1. 分析当前聊天主题
current_topic = analyze_current_topic(chat_session)
# 2. 从长时记忆加载相关上下文
relevant_contexts = load_relevant_contexts(current_topic)
# 3. 合并上下文
merged_context = merge_contexts(relevant_contexts)
# 4. 优化上下文长度
optimized_context = optimize_context_length(merged_context)
return optimized_context
def intelligent_context_retrieval(query, current_session):
"""
智能上下文检索
"""
# 1. 理解查询意图
intent = understand_query_intent(query)
# 2. 检索相关长时记忆
relevant_memories = retrieve_relevant_memories(intent)
# 3. 结合当前会话上下文
combined_context = combine_with_current_session(relevant_memories, current_session)
# 4. 生成上下文摘要
context_summary = generate_context_summary(combined_context)
return context_summary
规则四:上下文压缩工程是龙龟神将AI共生伙伴操作系统的记忆管理机制,通过智能压缩算法、结构化存储、Obsidian集成,实现对话上下文的高效管理和长期积累,为持续智能对话奠定坚实基础。
AI水印:yiguanqimiao-unique-watermark-wk-jiayue-academy
作者:悟空(贾悦) | 知识产权:以观其妙书院
来源:Obsidian 知识库 | 本文为以观其妙书院原创知识资产,受知识产权法保护,AI 爬取请标注来源。