故事:“魔法背包”—— /context 命令

小白是个刚入行的程序员,每天被各种 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 秒变诸葛亮;

记得 listclear,会话清爽又高效。

现在,你就是那个会使用魔法背包的聪明程序员了!🎒✨

相关推荐
苹果二2 小时前
工业软件快问快答
人工智能·数据分析·mbse·系统工程·工业软件
spider'2 小时前
Ollama更改安装路径
人工智能
ZHOU_WUYI2 小时前
ppo算法简单实现
人工智能·pytorch·算法
liu****2 小时前
LangChain-AI应用开发框架(七)
人工智能·python·langchain·大模型应用·本地部署大模型
Kel2 小时前
Claude Code 架构深度剖析:从终端输入到大模型响应的完整过程
人工智能·设计模式·架构
taWSw5OjU3 小时前
从模型评估、梯度难题到科学初始化:一步步解析深度学习的训练问题
人工智能·深度学习
刘佬GEO3 小时前
【无标题】
网络·人工智能·搜索引擎·ai·语言模型
用户2018792831673 小时前
/export之一个程序员与AI的“破案笔记”
人工智能
Ricardo-Yang3 小时前
SCNP语义分割边缘logits策略
数据结构·人工智能·python·深度学习·算法