Skip to content

15.2 Skills 上下文管理

上下文管理概述

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

上下文类型

1. 项目上下文

1.1 项目结构

项目结构上下文

包含信息

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

收集方式

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

示例

bash

    ├── 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]
bash
    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):
 # 先查内存缓存
python
    if key in self.memory_cache:
    return self.memory_cache[key]
 # 再查磁盘缓存

value = self.disk_cache.get(key)
bash
    if value:
    self.memory_cache[key] = value
    return value

    return None

    def set(self, key, value, ttl=3600):
 # 设置内存缓存
python
    self.memory_cache[key] = value
 # 设置磁盘缓存
python
    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():
 # 摘要压缩
bash
    if is_large(value):
    compressed[key] = summarize(value)
 # 去重压缩

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

 # 结构压缩

else:
compressed[key] = simplify_structure(value)
bash
    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]
bash
    return context

    `````> >

    ~~~
#### 2. 版本控制

~~~markdown
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 如何与主代理协同工作。

~~~

基于 MIT 许可发布