上下文管理

wescode 的上下文管理系统决定了 AI 能"看到"哪些信息。通过精准的上下文组装,AI 能更好地理解你的代码和意图,给出更准确的回答和建议。

@ 引用系统

概述

在 Chat 面板中使用 @ 符号引用各种上下文资源:

@file         — 引用文件
@folder       — 引用文件夹
@symbol       — 引用代码符号(函数、类、变量等)
@web          — 搜索网络
@docs         — 搜索文档
@git          — 引用 Git 信息
@terminal     — 引用终端输出
@problems     — 引用当前问题列表

文件引用

# 引用整个文件
@user_service.go 这个文件的 CreateUser 方法有什么问题?

# 引用多个文件
@user_handler.go @user_service.go 这两个文件的数据流是怎样的?

# 引用文件中的特定行范围
@user_service.go:45-80 优化这段代码

符号引用

# 引用函数
@CreateUser 这个函数的参数设计合理吗?

# 引用类型
@UserService 这个 struct 应该拆分成更小的模块吗?

# 引用接口
@Repository 所有实现这个接口的类型有哪些?

文件夹引用

# 引用整个目录
@internal/handler/ 这些 handler 的错误处理模式一致吗?

# 引用项目结构
@src/ 分析一下项目的目录结构

Git 引用

# 引用最近的变更
@git:changes 审查我的未提交变更

# 引用特定分支的差异
@git:diff main 与 main 分支相比有什么变化?

# 引用提交历史
@git:log 最近10次提交做了什么?

文件卡片

什么是文件卡片

文件卡片是 wescode 的上下文管理单元。当你通过 @ 引用文件时,AI 不是简单地读取整个文件内容,而是创建一个文件卡片,其中包含:

文件卡片的优势

  1. 节省 Token:不需要发送整个文件内容
  2. 聚焦相关:只包含与问题相关的部分
  3. 可重生:文件变更后卡片自动更新
  4. 上下文感知:根据不同问题展示不同的文件切面

自动文件卡片

wescode 在以下场景自动创建文件卡片:

代码片段引用

选中引用

选中代码后在 Chat 中提问,选中的代码会自动作为上下文:

1. 在编辑器中选中一段代码
2. 按 Ctrl+L 打开 Chat
3. 输入问题 — 选中的代码自动包含在上下文中

精确引用

使用 @ 精确引用代码中的特定部分:

@ValidateEmail 函数中,为什么不检查 @ 符号后面是否有域名?

@UserService.CreateUser:45-60 这段错误处理可以简化吗?

引用终端输出

@terminal 帮我分析刚才的编译错误

@terminal:last 最后一条命令的输出是什么意思?

引用问题列表

@problems 当前有哪些问题需要修复?优先修复哪些?

上下文窗口

上下文窗口概念

AI 模型有固定的上下文窗口大小(以 Token 数量计算)。wescode 需要在有限的窗口中合理分配空间:

┌─────────────────────────────────────┐
│ 系统提示词(技能、Agent 配置等)      │ ~10%
├─────────────────────────────────────┤
│ 项目上下文(CKG 摘要、文件卡片)     │ ~30%
├─────────────────────────────────────┤
│ 对话历史(之前的对话内容)           │ ~40%
├─────────────────────────────────────┤
│ 当前问题(用户输入 + @ 引用)        │ ~20%
└─────────────────────────────────────┘

上下文优先级

当上下文超出窗口大小时,wescode 按以下优先级裁剪:

  1. 最高:当前用户输入和显式 @ 引用
  2. 高:当前打开的文件(焦点文件)
  3. 中:CKG 分析的相关文件
  4. 中:最近的对话历史
  5. 低:较早的对话历史
  6. 最低:项目级别的背景信息

查看上下文状态

在 Chat 面板中可以查看当前上下文的使用情况:

# 点击 Chat 面板底部的 Token 计数器
# 会展开显示上下文详情:
#
# 上下文使用:45,200 / 128,000 tokens (35%)
# ├── 系统提示词:5,000 tokens
# ├── 技能(3):8,200 tokens
# ├── 文件卡片(5):12,000 tokens
# ├── 对话历史(8轮):15,000 tokens
# └── 当前输入:5,000 tokens

上下文压缩

长对话会自动触发上下文压缩(CognitiveSettlement):

最佳实践

高效使用 @ 引用

推荐做法:

# ✅ 精确引用相关文件
@user_service.go @user_repository.go
CreateUser 函数的错误处理需要改进

# ✅ 引用符号而非整个文件
@ValidatePassword 这个函数需要支持更多密码规则

# ✅ 结合多种引用
@git:changes @problems 这次变更引入了什么新问题?

避免做法:

# ❌ 引用过多文件(浪费上下文空间)
@file1 @file2 @file3 @file4 @file5 @file6 @file7 @file8
帮我看看代码

# ❌ 不提供上下文(AI 无法理解意图)
修复 Bug

# ❌ 在长对话中重复引用相同文件
(AI 已经有这些文件的上下文了)

长对话管理

# 对话太长时,建议开启新会话
# 每个会话聚焦一个具体任务

# 好的会话节奏:
1. 明确目标:"我要重构 UserService"
2. 提供上下文:@user_service.go
3. 逐步推进:先分析 → 制定计划 → 执行 → 验证
4. 任务完成后开启新会话

利用 CKG 自动上下文

wescode 的 CKG 会自动分析你的代码并提供相关上下文:

# 当你在编辑 user_handler.go 时
# AI 自动"看到":
# - user_handler.go 的完整内容
# - 被调用的 user_service.go 中的相关函数
# - 相关的类型定义
# - 相关的测试文件

# 你只需要直接提问,不必手动 @ 所有文件
"CreateUser handler 的错误码应该返回什么?"

上下文清理

# 当 AI 的回答不准确时,可能是上下文混乱
# 尝试:
1. 开启新的 Chat 会话(Ctrl+Shift+N)
2. 只引用最相关的文件
3. 清晰描述问题和期望

注意事项

相关文档