故事:“魔法背包”—— /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,会话清爽又高效。

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

相关推荐
叠层归一研究院29 分钟前
基于极限自指的叠层归一宇宙结构理论——无元外部封闭系统的内生区分模型
人工智能·经验分享·算法·agi
IT_陈寒31 分钟前
Java线程池用错参数,我的服务居然悄悄崩溃了
前端·人工智能·后端
why-geo39 分钟前
Hermes Agent 与 Python 的会产生什么样的碰撞
人工智能·python·ai编程
正经教主1 小时前
【FDE系列】阶段2:Day 29:FastAPI 进阶 — Pydantic 模型与完整 CRUD 实战
人工智能·python·fde
时速GEO系统1 小时前
初元 AI V1.1 版本升级,首个正式版发布一周・实现生成、部署、上线、优化全流程自动化闭环
人工智能·数据挖掘·node.js
咕泡科技1 小时前
咕泡科技FDE系列最新产品重磅发布!
人工智能·大模型·ai落地·fde·前沿部署工程师
犀利豆1 小时前
为什么全世界的 AI 都画不好一只骑自行车的鹈鹕
人工智能·llm·aigc
天天被压力1 小时前
【跨市场数据实战 #08】可转债折价机会怎么筛:3个接口抓比价、列表和实时盘口
java·人工智能·python
baopixiaoz2 小时前
BeeQuant × BeeAgent:用AI加速策略验证
大数据·人工智能·python·区块链
咸鱼老弟2 小时前
AI Agent 的"自主性悖论"——为什么给它的自由度越大,越要配一套更硬的护栏
前端·人工智能