Context Engineering:取代Prompt Engineering的新技能

5 阅读1分钟

原创技术解读 | 探索大模型应用开发的新范式

摘要

随着大模型应用的发展,单纯的Prompt Engineering已经无法满足复杂场景的需求。Context Engineering(上下文工程)作为一种新兴技能,正在成为构建高效AI应用的关键。本文深入探讨Context Engineering的核心理念、实践方法和未来趋势。

一、从Prompt Engineering到Context Engineering

1.1 Prompt Engineering的局限性

Prompt Engineering(提示工程)在过去两年中得到了广泛应用,但随着应用场景的复杂化,其局限性日益明显:

主要局限

  1. 上下文长度限制:长提示词容易超出模型上下文窗口
  2. 信息密度低:提示词中往往包含大量冗余信息
  3. 难以维护:复杂的提示词难以版本管理和迭代优化
  4. 复用性差:针对特定场景的提示词难以迁移

1.2 Context Engineering的兴起

Context Engineering关注的是如何高效地构建、管理和利用上下文信息,而非仅仅优化提示词的表述。

核心理念

Prompt Engineering          Context Engineering
      ↓                            ↓
"如何问得更好"              "如何提供更好上下文"
      ↓                            ↓
  提示词优化                  信息架构设计
  表述技巧                    知识管理
  模板工程                    动态上下文构建

二、Context Engineering的核心要素

2.1 上下文分层模型

有效的上下文应该分层组织:

┌─────────────────────────────────────────┐
  Layer 4: 会话上下文 (Session Context)   
  - 当前对话历史                         
  - 用户当前意图                         
├─────────────────────────────────────────┤
  Layer 3: 任务上下文 (Task Context)      
  - 任务目标                             
  - 执行步骤                             
├─────────────────────────────────────────┤
  Layer 2: 用户上下文 (User Context)      
  - 用户画像                             
  - 历史偏好                             
├─────────────────────────────────────────┤
  Layer 1: 系统上下文 (System Context)    
  - 系统指令                             
  - 功能说明                             
├─────────────────────────────────────────┤
  Layer 0: 知识上下文 (Knowledge Context) 
  - 领域知识                             
  - 实时信息                             
└─────────────────────────────────────────┘

2.2 上下文构建原则

2.2.1 相关性原则

只提供与当前任务相关的信息:

class ContextBuilder:
    def __init__(self, knowledge_base):
        self.kb = knowledge_base
        self.embedder = SentenceTransformer()
    
    async def build_context(self, query: str, max_tokens: int = 4000):
        # 1. 理解查询意图
        intent = await self.extract_intent(query)
        
        # 2. 检索相关知识
        query_embedding = self.embedder.encode(query)
        relevant_docs = self.kb.search(query_embedding, top_k=10)
        
        # 3. 过滤和排序
        scored_docs = []
        for doc in relevant_docs:
            relevance_score = self.calculate_relevance(doc, intent)
            scored_docs.append((doc, relevance_score))
        
        scored_docs.sort(key=lambda x: x[1], reverse=True)
        
        # 4. 构建上下文(控制在token限制内)
        context = []
        current_tokens = 0
        for doc, score in scored_docs:
            doc_tokens = self.estimate_tokens(doc.content)
            if current_tokens + doc_tokens > max_tokens:
                break
            context.append(doc)
            current_tokens += doc_tokens
        
        return context

2.2.2 结构化原则

使用结构化格式组织上下文:

{
  "system": {
    "role": "专业助手",
    "capabilities": ["数据分析", "代码生成", "文档编写"],
    "constraints": ["不回答敏感问题", "不提供医疗建议"]
  },
  "user": {
    "profile": {
      "role": "软件工程师",
      "level": "高级",
      "interests": ["AI", "分布式系统"]
    },
    "history": [
      {"role": "user", "content": "..."},
      {"role": "assistant", "content": "..."}
    ]
  },
  "task": {
    "type": "代码审查",
    "requirements": ["检查性能问题", "识别安全漏洞"],
    "code": "..."
  },
  "knowledge": [
    {"source": "文档A", "content": "..."},
    {"source": "文档B", "content": "..."}
  ]
}

三、Context Engineering实践方法

3.1 动态上下文管理

3.1.1 上下文窗口管理

class SlidingWindowContext:
    def __init__(self, max_tokens=8000):
        self.max_tokens = max_tokens
        self.messages = []
        self.token_counts = []
    
    def add_message(self, role: str, content: str):
        tokens = self.count_tokens(content)
        
        # 如果超出限制,移除最早的消息
        while sum(self.token_counts) + tokens > self.max_tokens:
            self.messages.pop(0)
            self.token_counts.pop(0)
        
        self.messages.append({"role": role, "content": content})
        self.token_counts.append(tokens)
    
    def get_context(self):
        return self.messages

3.1.2 上下文摘要

对于长对话,使用摘要技术压缩历史:

class ContextSummarizer:
    def __init__(self, llm):
        self.llm = llm
    
    async def summarize(self, messages: List[dict]) -> str:
        """将长对话历史压缩为摘要"""
        prompt = f"""
        请将以下对话历史压缩为简洁的摘要,保留关键信息:
        
        对话历史:
        {json.dumps(messages, ensure_ascii=False)}
        
        要求:
        1. 保留用户的所有关键需求和约束
        2. 保留已确认的事实和决策
        3. 去除冗余的寒暄和重复内容
        4. 控制在200字以内
        """
        
        summary = await self.llm.generate(prompt)
        return summary

3.2 知识库集成

3.2.1 向量检索增强

class VectorContextRetriever:
    def __init__(self, vector_store):
        self.vector_store = vector_store
    
    async def retrieve_relevant_context(
        self, 
        query: str, 
        filters: dict = None,
        top_k: int = 5
    ) -> List[ContextChunk]:
        # 生成查询向量
        query_embedding = self.embed(query)
        
        # 检索相关文档
        results = self.vector_store.search(
            query_embedding,
            filter=filters,
            top_k=top_k
        )
        
        # 格式化上下文
        context_chunks = []
        for doc in results:
            chunk = ContextChunk(
                content=doc.content,
                source=doc.metadata.source,
                relevance_score=doc.score,
                timestamp=doc.metadata.timestamp
            )
            context_chunks.append(chunk)
        
        return context_chunks

3.2.2 多源知识融合

class MultiSourceContextBuilder:
    def __init__(self):
        self.sources = {
            'docs': DocumentRetriever(),
            'db': DatabaseRetriever(),
            'api': APIRetriever(),
            'web': WebSearchRetriever()
        }
    
    async def build_comprehensive_context(self, query: str):
        context = {}
        
        # 并行从多个源获取信息
        tasks = []
        for source_name, retriever in self.sources.items():
            task = retriever.retrieve(query)
            tasks.append((source_name, task))
        
        results = await asyncio.gather(*[t[1] for t in tasks])
        
        for (source_name, _), result in zip(tasks, results):
            context[source_name] = result
        
        # 去重和融合
        return self.deduplicate_and_merge(context)

3.3 上下文个性化

3.3.1 用户画像构建

class UserContextManager:
    def __init__(self):
        self.user_profiles = {}
    
    async def build_user_context(self, user_id: str) -> UserContext:
        # 获取用户历史行为
        history = await self.get_user_history(user_id)
        
        # 分析用户偏好
        preferences = self.analyze_preferences(history)
        
        # 构建用户上下文
        return UserContext(
            expertise_level=preferences.expertise,
            communication_style=preferences.style,
            common_topics=preferences.topics,
            preferred_formats=preferences.formats
        )

3.3.2 自适应上下文调整

class AdaptiveContextEngine:
    def __init__(self):
        self.user_feedback = []
    
    async def optimize_context(
        self, 
        base_context: dict, 
        user_id: str
    ) -> dict:
        user_context = await self.get_user_context(user_id)
        
        # 根据用户水平调整技术深度
        if user_context.expertise_level == "beginner":
            base_context = self.simplify_technical_terms(base_context)
            base_context = self.add_explanations(base_context)
        
        # 根据用户偏好调整格式
        if user_context.preferred_format == "concise":
            base_context = self.make_concise(base_context)
        
        return base_context

四、Context Engineering工具与框架

4.1 上下文管理工具

工具/框架功能适用场景
LangChain上下文链管理复杂工作流
LlamaIndex知识库集成RAG应用
Semantic Kernel上下文规划企业级应用
Vercel AI SDK流式上下文实时应用

4.2 上下文版本控制

class ContextVersionControl:
    def __init__(self):
        self.versions = {}
    
    def save_version(self, context_id: str, context: dict):
        """保存上下文版本"""
        version = {
            'timestamp': datetime.now(),
            'hash': self.compute_hash(context),
            'content': context
        }
        
        if context_id not in self.versions:
            self.versions[context_id] = []
        
        self.versions[context_id].append(version)
    
    def get_version(self, context_id: str, version_idx: int = -1):
        """获取指定版本的上下文"""
        return self.versions[context_id][version_idx]
    
    def diff_versions(self, context_id: str, v1: int, v2: int):
        """比较两个版本的差异"""
        ctx1 = self.versions[context_id][v1]
        ctx2 = self.versions[context_id][v2]
        return self.compute_diff(ctx1, ctx2)

五、最佳实践与案例分析

5.1 代码助手场景

# 构建代码助手的上下文
code_assistant_context = {
    "system": {
        "role": "资深软件工程师",
        "expertise": ["Python", "JavaScript", "系统设计"],
        "code_style": "遵循PEP8,注重可读性"
    },
    "project": {
        "tech_stack": ["FastAPI", "PostgreSQL", "Redis"],
        "architecture": "微服务架构",
        "coding_standards": "..."
    },
    "current_file": {
        "path": "src/services/user.py",
        "content": "...",
        "dependencies": ["models/user.py", "utils/auth.py"]
    },
    "related_files": [
        {"path": "models/user.py", "summary": "..."}
    ]
}

5.2 客服机器人场景

# 构建客服机器人的上下文
customer_service_context = {
    "system": {
        "role": "专业客服",
        "tone": "友好、耐心、专业",
        "escalation_rules": "..."
    },
    "customer": {
        "id": "C12345",
        "tier": "VIP",
        "history_summary": "近期有3次退换货记录",
        "preferences": "偏好文字沟通"
    },
    "order_context": {
        "current_order": {...},
        "recent_orders": [...]
    },
    "knowledge_base": {
        "policies": [...],
        "faqs": [...],
        "products": [...]
    }
}

六、未来展望

6.1 发展趋势

  1. 自动化上下文构建:AI自动识别和构建最优上下文
  2. 多模态上下文:整合文本、图像、音频等多种模态
  3. 上下文共享:跨应用、跨会话的上下文共享机制
  4. 隐私保护上下文:在保护隐私的前提下利用上下文

6.2 技能要求

Context Engineering要求开发者具备:

  • 信息架构设计能力
  • 知识管理专业知识
  • 大模型行为理解
  • 系统性能优化经验

七、总结

Context Engineering是Prompt Engineering的自然演进,代表了AI应用开发的新范式。掌握Context Engineering,意味着从"如何问"转向"如何组织信息",这是构建高效、可维护AI应用的关键能力。

随着大模型应用的深入发展,Context Engineering将成为AI应用开发者的核心技能之一。


参考资源

  • Anthropic: "Contextual Retrieval"
  • OpenAI: "Best Practices for Context Management"
  • LangChain Context Documentation

标签:#ContextEngineering #PromptEngineering #大模型 #AI应用 #上下文管理