15.2 Skills 上下文管理

上下文管理概述

上下文管理是 Skills 能够理解项目、代码和用户需求的关键机制。本节将深入探讨 Skills 如何收集、存储、检索和利用上下文信息。

上下文类型

1. 项目上下文

1.1 项目结构

项目结构上下文

包含信息

  • 目录层次结构
  • 文件组织方式
  • 模块划分
  • 资源位置

收集方式

  • 扫描文件系统
  • 解析目录结构
  • 识别关键目录
  • 构建结构树

示例

 
    ├── src/
   ├── main.py
   ├── utils/
   ├── helpers.py
   └── validators.py
   └── api/
       ├── routes.py
       └── models.py
    ├── tests/
   ├── test_main.py
   └── test_utils.py
    ├── docs/
   └── api.md
    ├── config/
   ├── settings.py
   └── logging.yaml
    ├── requirements.txt
    ├── setup.py
    └── README.md
    ~~~#### 1.2 技术栈
 
    ## 技术栈上下文
    ### 包含信息
    - 编程语言
    - 框架和库
    - 构建工具
    - 测试框架
    - 部署平台
    ### 收集方式
    - 解析依赖文件
    - 检测配置文件
    - 分析导入语句
    - 识别工具链
    ### 示例
    ~~~`yaml
    `yaml
 
    technology_stack:
    language: Python
    version: "3.9"
    frameworks:
     - Flask 2.3.0
     - SQLAlchemy 2.0.0
    libraries:
     - requests 2.28.0
     - numpy 1.24.0
    build_tools:
     - setuptools
     - wheel
    test_frameworks:
     - pytest 7.3.0
     - pytest-cov
    deployment:
     - Docker
     - Kubernetes
 
    #### 1.3 配置信息
 
    ## 配置上下文
    ### 包含信息
    - 应用配置
    - 环境变量
    - 构建配置
    - 部署配置
    ### 收集方式
    - 读取配置文件
    - 解析环境变量
    - 分析设置文件
    - 检测 CI/CD 配置
    ### 示例
    ~~~`python
    `python
 
    # config/settings.py
    class Config:
    DEBUG = False
    TESTING = False
    DATABASE_URI = os.getenv('DATABASE_URI')
    SECRET_KEY = os.getenv('SECRET_KEY')
    LOG_LEVEL = os.getenv('LOG_LEVEL', 'INFO')
 
    class DevelopmentConfig(Config):
    DEBUG = True
 
    class ProductionConfig(Config):
    DEBUG = False
 
    ### 2. 代码上下文
 
    #### 2.1 代码结构
 
    ## 代码结构上下文
    ### 包含信息
    - 模块组织
    - 类层次结构
    - 函数定义
    - 变量作用域
    ### 收集方式
    - 解析源代码
    - 构建抽象语法树(AST)
    - 分析符号表
    - 追踪依赖关系
    ### 示例
 
    src/
    ├── main.py
   ├── class Application
   ├── method __init__
   ├── method run
   └── method shutdown
   └── function main
    ├── utils/
   ├── helpers.py
   ├── function format_date
   └── function validate_email
   └── validators.py
       └── class Validator
           ├── method validate
           └── method sanitize
 
```python
 
    ```> > ~~~
 
    #### 2.2 代码依赖
 
    ## 代码依赖上下文
 
    ### 包含信息
 
    - 导入关系
    - 函数调用
    - 类继承
    - 模块引用
 
    ### 收集方式
 
    - 分析 import 语句
    - 追踪函数调用
    - 解析类定义
    - 构建依赖图
 
    ### 示例
 
    ~~~`python
    `python
 
    # 依赖图
 
    main.py
    ├─> utils/helpers.py
> datetime (标准库)
> utils/validators.py
> re (标准库)
    ├─> api/routes.py
> flask (外部库)
> api/models.py
    └─> config/settings.py
    └─> os (标准库)
 
    ```> >
 
    ~~~
    #### 2.3 代码模式
 
    ## 代码模式上下文
    ### 包含信息
    - 设计模式
    - 编码风格
    - 命名约定
    - 代码规范
    ### 收集方式
    - 模式识别算法
    - 风格分析
    - 命名分析
    - 规则检查
    ### 示例
    ~~~`yaml
    `yaml
 
    code_patterns:
    design_patterns:
     - singleton: Application
     - factory: create_validator
     - strategy: validate_input
 
    coding_style:
    naming_convention: snake_case
    max_line_length: 88
    docstring_style: Google
 
    conventions:
     - use_type_hints: true
     - include_docstrings: true
     - follow_pep8: true
 
    ```> > ~~~
 
    ### 3. 用户上下文
 
    #### 3.1 用户偏好
 
    ## 用户偏好上下文
 
    ### 包含信息
 
    - 编码风格偏好
    - 工具使用偏好
    - 输出格式偏好
    - 交互方式偏好
 
    ### 收集方式
 
    - 读取用户配置
    - 分析历史操作
    - 收集用户反馈
    - 学习使用模式
 
    ### 示例
 
    ~~~`yaml
    `yaml
 
    user_preferences:
    coding_style:
    language: Python
    style_guide: PEP8
    formatter: black
    linter: pylint
 
    output_preferences:
    format: markdown
    verbosity: normal
    include_code_blocks: true
 
    interaction_preferences:
    auto_confirm: false
    show_progress: true
    color_output: true
 
    ```> >
 
    ~~~
    #### 3.2 历史记录
 
    ## 历史记录上下文
    ### 包含信息
    - 执行过的命令
    - 使用过的 Skills
    - 修改过的文件
    - 生成的内容
    ### 收集方式
    - 记录操作日志
    - 追踪文件变更
    - 统计使用频率
    - 分析操作模式
    ### 示例
    ~~~`json
    `json
 
    {
    "history": [
    {
    "timestamp": "2024-01-15T10:30:00Z",
    "command": "claude --skill code-review --file src/main.py",
    "skill": "code-review",
    "files": ["src/main.py"],
    "result": "success"
    },
    {
    "timestamp": "2024-01-15T10:35:00Z",
    "command": "claude --skill generate-tests --file src/utils.py",
    "skill": "generate-tests",
    "files": ["src/utils.py", "tests/test_utils.py"],
    "result": "success"
    }
    ]
    }
 
    ```#### 3.3 学习进度
 
    ~~~
```markdown
 
    ## 学习进度上下文
 
    ### 包含信息
 
    - 掌握的 Skills
    - 常用的功能
    - 遇到的问题
    - 改进建议
 
    ### 收集方式
 
    - 跟踪使用情况
    - 分析错误模式
    - 收集反馈
    - 评估熟练度
 
    ### 示例
 
    learning_progress:
    mastered_skills:
 
     - code-review: 85%
     - generate-tests: 70%
     - refactor: 60%
 
    frequently_used:
 
     - code-review: 45
     - generate-tests: 30
     - format-code: 25
 
    common_issues:
 
     - type: parameter_validation
 
    frequency: 10
    suggestion: "使用 --help 查看参数说明"
 
    improvement_suggestions:
 
     - "尝试使用更多高级功能"
     - "学习自定义 Skill 开发"
 
    `> >
 
    ~~~
 
    ### 4. 会话上下文
 
    #### 4.1 对话历史
 
    ~~~
```markdown
 
    ## 对话历史上下文
 
    ### 包含信息
 
    - 用户请求
    - 系统响应
    - 执行的操作
    - 中间结果
 
    ### 收集方式
 
    - 记录对话
    - 追踪操作
    - 保存结果
    - 维护状态
 
    ### 示例
 
    {
    "conversation": [
    {
    "role": "user",
    "message": "帮我审查 src/main.py 的代码质量",
    "timestamp": "2024-01-15T10:30:00Z"
    },
    {
    "role": "assistant",
    "message": "正在执行代码审查...",
    "action": "execute_skill",
    "skill": "code-review",
    "timestamp": "2024-01-15T10:30:01Z"
    },
    {
    "role": "assistant",
    "message": "审查完成!发现 5 个问题。",
    "result": {...},
    "timestamp": "2024-01-15T10:30:15Z"
    }
    ]
    }
 
    `> >
 
    #### 4.2 执行状态
 
    ~~~markdown
```markdown
 
    ## 执行状态上下文
 
    ### 包含信息
 
    - 当前任务
    - 执行进度
    - 中间结果
    - 错误信息
 
    ### 收集方式
 
    - 跟踪执行
    - 记录进度
    - 保存状态
    - 捕获错误
 
    ### 示例
 
    ~~~yaml
 
    ```yaml
 
    execution_state:
      current_task:
        skill: code-review
        step: 3/5
        status: in_progress
 
      progress:
        completed_steps:
          - analyze_structure
          - check_security
        current_step: evaluate_quality
        remaining_steps:
          - generate_report
          - save_results
 
      intermediate_results:
        issues_found: 3
        security_issues: 1
        quality_score: 75
 
      errors: []
 
    #### 4.3 资源状态
 
    ```markdown
 
    ## 资源状态上下文
 
    ### 包含信息
 
    > - 打开的文件
    > - 使用的工具
    > - 占用的资源
    > - 网络连接
 
    ### 收集方式
 
    > - 监控资源
    > - 追踪连接
    > - 统计使用
    > - 检测泄漏
 
    ### 示例
 
    ~~~yaml
 
    ```yaml
 
    resource_state:
      open_files:
        - src/main.py
        - src/utils.py
        - tests/test_main.py
 
      active_tools:
        - read_file
        - search_codebase
        - run_command
 
      resource_usage:
        memory: "256MB"
        cpu: "15%"
        disk_io: "10MB/s"
 
      network_connections:
        - type: mcp
          server: github
          status: connected
 
    ## 上下文收集
 
    ### 收集策略
 
    #### 1. 按需收集
 
    ## 按需收集策略
    ### 原则
    - 只收集需要的上下文
    - 避免不必要的开销
    - 动态调整收集范围
    ### 实现方式
    - 分析 Skill 需求
    - 识别必需的上下文
    - 延迟加载非关键上下文
    - 按需扩展收集范围
    ### 示例
    ~~~`python
    `python
 
    def collect_context(skill_name, parameters):
     # 分析 Skill 需求
    requirements = analyze_skill_requirements(skill_name)
 
     # 收集必需的上下文
    context = {}
    for req in requirements.required:
    context[req] = collect_required_context(req)
 
     # 延迟加载可选上下文
    for req in requirements.optional:
    if should_collect(req, parameters):
    context[req] = collect_optional_context(req)
 
    return context
 
    ```> >
 
    ~~~
 
    #### 2. 增量收集
 
    ## 增量收集策略
 
    ### 原则
 
    - 基于已有上下文
    - 只收集变更部分
    - 减少重复工作
 
    ### 实现方式
 
    - 维护上下文快照
    - 检测变更
    - 只更新变更部分
    - 复用未变更部分
 
    ### 示例
 
    ~~~`python
    `python
 
```python
    def incremental_collect(previous_context, changes):
    new_context = previous_context.copy()
 
    for change in changes:
    if change.type == "file_modified":
 

只更新变更的文件

new_context["code"][change.file] = analyze_file(change.file) elif change.type == "file_added":

添加新文件

new_context["code"][change.file] = analyze_file(change.file) elif change.type == "file_deleted":

删除文件

del new_context["code"][change.file]

    return new_context
 
 
#### 3. 并行收集
 
## 并行收集策略
### 原则
- 同时收集多个上下文
- 提高收集效率
- 合理分配资源
### 实现方式
- 识别独立任务
- 并行执行
- 合并结果
- 处理依赖关系
### 示例
~~~`python
`python
 
async def parallel_collect(context_types):
tasks = []
 
 # 创建并行任务
for ctx_type in context_types:
if is_independent(ctx_type):
task = asyncio.create_task(collect_context(ctx_type))
tasks.append(task)
 
 # 等待所有任务完成
results = await asyncio.gather(*tasks)
 
 # 合并结果
context = merge_results(results)
return context
 
```> >
 
~~~
 
### 收集优化
 
#### 1. 缓存机制
 
## 缓存机制
 
### 缓存策略
 
- 内存缓存(快速访问)
- 磁盘缓存(持久化)
- 分布式缓存(多节点)
 
### 缓存键
 
- 上下文类型
- 文件路径
- 时间戳
- 版本号
 
### 缓存失效
 
- 文件变更
- 配置更新
- 时间过期
- 手动清除
 
### 示例
 
~~~`python
`python
 
```python
class ContextCache:
def __init__(self):
self.memory_cache = {}
self.disk_cache = DiskCache()
 
def get(self, key):
 

先查内存缓存

    if key in self.memory_cache:
    return self.memory_cache[key]
 

再查磁盘缓存

value = self.disk_cache.get(key)

    if value:
    self.memory_cache[key] = value
    return value
 
    return None
 
    def set(self, key, value, ttl=3600):
 

设置内存缓存

    self.memory_cache[key] = value
 

设置磁盘缓存

    self.disk_cache.set(key, value, ttl)
 
 
#### 2. 智能过滤
 
## 智能过滤
### 过滤策略
- 相关性分析
- 重要性评分
- 优先级排序
- 数量限制
### 过滤维度
- 文件类型
- 代码复杂度
- 修改频率
- 使用频率
### 示例
~~~`python
`python
 
def filter_context(context, requirements):
filtered = {}
 
 # 按相关性过滤
for item in context.items():
relevance = calculate_relevance(item, requirements)
if relevance > threshold:
filtered[item.key] = item.value
 
 # 按重要性排序
sorted_items = sort_by_importance(filtered)
 
 # 限制数量
limited = limit_items(sorted_items, max_items)
 
return limited
 
```> >
 
~~~
 
#### 3. 压缩技术
 
## 压缩技术
 
### 压缩策略
 
- 摘要压缩
- 去重压缩
- 结构压缩
- 算法压缩
 
### 压缩方法
 
- 提取关键信息
- 移除冗余数据
- 简化结构
- 使用压缩算法
 
### 示例
 
~~~`python
`python
 
```python
def compress_context(context):
compressed = {}
 
for key, value in context.items():
 

摘要压缩

    if is_large(value):
    compressed[key] = summarize(value)
 

去重压缩

elif has_duplicates(value): compressed[key] = deduplicate(value)

结构压缩

else: compressed[key] = simplify_structure(value)

    return compressed
 
 
### 存储结构
 
#### 1. 层次结构
 
~~~
 
```````markdown
## 层次存储结构
 
### 存储层次
 
### 存储策略
- 热数据存内存
- 温数据存磁盘
- 冷数据存远程
 
### 示例
Context Storage
├── Memory Layer
│   ├── Current Session
│   ├── Active Skills
│   └── Frequently Used
├── Disk Layer
│   ├── Project Context
│   ├── User Preferences
│   └── Historical Data
└── Remote Layer
│   ├── Backup Data
│   ├── Shared Context
│   └── Archive Data
 
`````> >
 
~~~
 
#### 2. 索引结构
 
~~~markdown
 
``````markdown
## 索引结构
 
### 索引类型
 
- 文件索引
- 符号索引
- 依赖索引
- 时间索引
 
### 索引优化
 
- B+ 树索引
- 哈希索引
- 全文索引
- 倒排索引
 
### 示例
 
class ContextIndex:
def __init__(self):
self.file_index = BPlusTree()
self.symbol_index = HashIndex()
self.dependency_index = GraphIndex()
self.time_index = TimeSeriesIndex()
 
def add(self, context_item):
 
 # 添加到多个索引
 
self.file_index.add(context_item.path, context_item)
self.symbol_index.add(context_item.symbols, context_item)
self.dependency_index.add(context_item.dependencies, context_item)
self.time_index.add(context_item.timestamp, context_item)
 
def query(self, query):
 
 # 组合查询
 
results = []
if query.path:
results.extend(self.file_index.query(query.path))
if query.symbols:
results.extend(self.symbol_index.query(query.symbols))
return deduplicate(results)
 
`````> > ~~~
 
### 存储优化
 
#### 1. 增量更新
 
~~~markdown
 
````markdown
## 增量更新
 
### 更新策略
- 检测变更
- 只更新变更部分
- 维护版本历史
- 支持回滚
 
### 实现方式
- 文件监控
- 变更检测
- 差异计算
- 增量应用
 
### 示例
 
```python
def incremental_update(context, changes):
for change in changes:
if change.type == "modified":

计算差异

diff = calculate_diff(context[change.file], change.new_content)

应用差异

context[change.file] = apply_diff(context[change.file], diff) elif change.type == "added":

添加新文件

context[change.file] = change.new_content elif change.type == "deleted":

删除文件

del context[change.file]

    return context
 
    `````> >
 
    ~~~
 

2. 版本控制

 
```````markdown
## 版本控制
 
### 版本策略
 
- 时间戳版本
- 增量版本
- 标签版本
- 分支版本
 
### 版本操作
 
- 创建版本
- 切换版本
- 比较版本
- 合并版本
 
### 示例
 
class ContextVersionManager:
def __init__(self):
self.versions = {}
self.current_version = None
 
def create_version(self, label=None):
version = {
"id": generate_id(),
"timestamp": datetime.now(),
"label": label,
"context": copy.deepcopy(self.current_context)
}
self.versions[version["id"]] = version
self.current_version = version["id"]
return version["id"]
 
def switch_version(self, version_id):
if version_id in self.versions:
self.current_version = version_id
self.current_context = copy.deepcopy(self.versions[version_id]["context"])
return True
return False
 
`````> > ~~~
 
## 上下文检索
 
### 检索策略
 
#### 1. 精确检索
 
~~~markdown
 
```````markdown
## 精确检索
 
### 检索方式
- 按键检索
- 按路径检索
- 按符号检索
- 按时间检索
 
### 示例
 
``````python
def exact_retrieve(context, query):
if query.type == "key":
return context.get(query.key)
elif query.type == "path":
return context.get_file(query.path)
elif query.type == "symbol":
return context.get_symbol(query.symbol)
elif query.type == "time":
return context.get_by_time(query.time_range)
 
`````> >
 

```

```

    #### 2. 模糊检索

    ~~~markdown

``````markdown
    ## 模糊检索

    ### 检索方式

    - 模糊匹配
    - 相似度检索
    - 语义检索
    - 关联检索

    ### 示例

    def fuzzy_retrieve(context, query):
    results = []

    for item in context.items():

     # 计算相似度

    similarity = calculate_similarity(item, query)
    if similarity > threshold:
    results.append((item, similarity))

     # 按相似度排序

    results.sort(key=lambda x: x[1], reverse=True)

    return [item for item, _ in results]

    #### 3. 组合检索

    ~~~

`````markdown
    ## 组合检索

    ### 检索方式

    - 多条件组合
    - 逻辑运算
    - 权重组合
    - 分级检索

    ### 示例

    ~~~python

    ```python

    def combined_retrieve(context, query):
        results = []

        # 执行多个检索
        for condition in query.conditions:
            partial_results = retrieve(context, condition)
            results.extend(partial_results)

        # 应用逻辑运算
        if query.operator == "AND":
            results = intersect(results)
        elif query.operator == "OR":
            results = union(results)

        # 应用权重
        weighted_results = apply_weights(results, query.weights)

        return weighted_results

    ### 检索优化

    #### 1. 预计算

    ~~~`markdown

    ````markdown

    ## 预计算

    ### 预计算内容

    > - 统计信息
    > - 关联关系
    > - 索引数据
    > - 聚合结果

    ### 预计算时机

    > - 上下文更新时
    > - 定期批处理
    > - 按需触发

    ### 示例

    ~~~python

    ```python

```python
    def precompute_context(context):
```
`````
``````

````

        # 计算统计信息
        stats = calculate_statistics(context)
        context.statistics = stats

        # 计算关联关系
        relations = calculate_relations(context)
        context.relations = relations

        # 构建索引
        index = build_index(context)
        context.index = index

    ```> >

    #### 2. 查询优化

    ~~~`markdown
    `markdown

    ## 查询优化

    ### 优化策略

    > - 查询重写
    > - 执行计划优化
    > - 索引选择
    > - 结果缓存

    ### 示例

    ~~~python

    ```python

```python
    def optimize_query(query, context):
```

        # 查询重写
        optimized = rewrite_query(query)

        # 选择最佳索引
        best_index = select_best_index(optimized, context.indexes)

        # 生成执行计划
        plan = generate_execution_plan(optimized, best_index)

```bash
        return plan

```

    ## 总结

    Skills 的上下文管理是一个复杂而精密的系统,涉及多种上下文类型、收集策略、存储机制和检索方法。有效的上下文管理能够:

    1. **提高准确性**:提供更准确的上下文信息
    2. **提升性能**:优化上下文收集和检索效率
    3. **增强体验**:提供更流畅的用户体验
    4. **支持扩展**:为功能扩展提供基础

    在下一节中,我们将探讨 Skills 与主代理的交互机制,了解 Skills 如何与主代理协同工作。

    ~~~

```

```
````