小白是个刚入行的程序员,每天被各种 bug 折磨。有一天,他得到了一个神器------Claude Code CLI ,可以在终端里直接跟 AI 结对编程。但小白发现,每次问问题都要把代码复制粘贴一遍,累到手抽筋。
直到他学会了
/context命令------就像拥有了一个 "魔法背包" ,可以把文件、文件夹甚至整个项目丢进去,Claude 就能自动"看见"所有内容,秒变贴身专家!
一、/context 是什么?------你的"AI 上下文背包"
想象一下:你背着背包去请教一位隐居的代码大师(Claude)。
- 没有背包:你只能口述代码(复制粘贴),大师记不住太多,经常答非所问。
- 有了
/context:你可以把代码文件、日志、配置文件统统塞进背包,大师随时翻看背包里的资料,给出精准建议。
/context 的本质 :一个会话级别的上下文管理器,用来告诉 Claude 当前要关注哪些文件、目录或文本片段。这些内容会作为 AI 的"背景知识",与你的问题一起发送给大模型。
二、实现原理------背包的"内部机关"
我们用 Python 写一个简化版 Claude Code CLI,让你看清 /context 是如何工作的。
1. 数据结构:背包里有什么?
python
# context_manager.py
class ContextManager:
def __init__(self):
self.context_items = [] # 每个元素是 {"type": "file", "path": "...", "content": "..."}
self.max_tokens = 100000 # 防止撑爆背包
def add_file(self, file_path):
"""把文件内容读进来,塞进背包"""
try:
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
self.context_items.append({
"type": "file",
"path": file_path,
"content": content
})
return f"✅ 已添加 {file_path} ({len(content)} 字符)"
except Exception as e:
return f"❌ 添加失败: {e}"
def list_context(self):
"""查看背包里有什么"""
if not self.context_items:
return "🪶 背包空空如也,用 /context add <文件> 添加吧"
lines = ["📦 当前上下文背包内容:"]
for item in self.context_items:
lines.append(f" - {item['path']} ({len(item['content'])} 字符)")
return "\n".join(lines)
def clear(self):
"""清空背包"""
count = len(self.context_items)
self.context_items = []
return f"🧹 已清空 {count} 个上下文项"
def build_prompt(self, user_question):
"""把背包里的所有内容 + 用户问题,拼成发给 Claude 的完整消息"""
context_text = ""
for item in self.context_items:
if item["type"] == "file":
context_text += f"\n--- 文件: {item['path']} ---\n{item['content']}\n"
# 添加一个系统提示,告诉 Claude 如何使用上下文
system_hint = "以下是用户提供的文件内容。请根据这些内容回答用户的问题。\n"
return system_hint + context_text + f"\n--- 用户问题 ---\n{user_question}"
2. 命令解析器:识别 /context 魔法指令
python
# cli.py
import sys
from context_manager import ContextManager
def main():
ctx = ContextManager()
print("🤖 Claude Code CLI 启动!输入 /help 查看命令")
while True:
user_input = input("\n> ")
# 处理内置命令(以 / 开头)
if user_input.startswith("/"):
parts = user_input.strip().split()
cmd = parts[0].lower()
if cmd == "/exit" or cmd == "/quit":
print("👋 再见!")
break
elif cmd == "/context":
# /context 子命令
if len(parts) == 1:
print(ctx.list_context())
elif parts[1] == "add" and len(parts) == 3:
print(ctx.add_file(parts[2]))
elif parts[1] == "clear":
print(ctx.clear())
elif parts[1] == "list":
print(ctx.list_context())
else:
print("用法: /context add <文件路径> | /context list | /context clear")
elif cmd == "/help":
print("""
可用命令:
/context list - 查看背包内容
/context add <文件> - 添加文件到上下文
/context clear - 清空所有上下文
/exit - 退出
""")
else:
print(f"未知命令: {cmd}")
else:
# 普通对话:把用户问题和背包内容一起发给 Claude(这里模拟 API 调用)
full_prompt = ctx.build_prompt(user_input)
# 假装调用 Claude API
print("🤔 Claude 正在思考(根据背包里的文件回答)...")
# 实际调用: response = claude_api.chat(full_prompt)
print("💡 [模拟响应] 根据你提供的文件,我发现了以下问题...")
3. API 发送流程:背包里的东西怎么交给 Claude?
真实场景中,CLI 会调用 Anthropic 的 API,build_prompt() 生成的文本会被放入 messages 数组或 system 提示中。例如:
python
# 真实 API 调用示例(伪代码)
def call_claude_api(context_manager, user_question):
prompt = context_manager.build_prompt(user_question)
response = anthropic_client.messages.create(
model="claude-3-opus-20240229",
max_tokens=4096,
system="你是一个资深的编程助手,会根据用户提供的文件内容回答问题。",
messages=[{"role": "user", "content": prompt}]
)
return response.content
关键点 :每次普通对话(不以
/开头)都会自动携带 当前背包里的所有文件内容。所以/context add只需要执行一次,后续提问都能享受"全知视角"。
三、最佳用法------如何把背包用出神装效果?
✅ 1. 只添加相关文件,别当"垃圾佬"
bash
/context add src/main.py
/context add src/utils.py
# 别把整个 node_modules 塞进去,AI 会疯
✅ 2. 用 list 检查背包重量
bash
/context list
# 📦 当前上下文背包内容:
# - src/main.py (2847 字符)
# - src/utils.py (1250 字符)
✅ 3. 及时清空,避免"记忆污染"
bash
# 完成一个 bug 修复后
/context clear
# 再添加新问题的相关文件
✅ 4. 结合 glob 或自动扫描(高级用法)
实际 Claude Code CLI 支持 /context add src/**/*.py,自动递归添加。原理就是遍历匹配的文件,循环调用 add_file。
✅ 5. 处理超大文件------自动截断或摘要
真实 CLI 会检查 token 数量,超过限制时只保留文件的关键部分(比如函数签名 + 注释),而不是全文。可以用 tiktoken 库计算 token。
四、时序图------一次完整的 /context + 提问过程
五、小结:从"复制粘贴搬运工"到"AI 背包客"
没有 /context |
有了 /context |
|---|---|
| 每问一次就要贴一堆代码 | 添加一次,反复使用 |
| 上下文容易超限,记不住 | 自动管理 token,智能截断 |
| 问复杂问题要手打多个文件路径 | 批量添加,一键携带 |
| 换话题时历史干扰 | 随时 clear,干净利落 |
记住口诀:
遇到 bug 别慌张,
/context add来帮忙;文件塞满背包后,Claude 秒变诸葛亮;
记得
list和clear,会话清爽又高效。
现在,你就是那个会使用魔法背包的聪明程序员了!🎒✨