← 返回术语百科

📏 Context Window

上下文窗口

📖 定义

Context Window(上下文窗口)是指AI模型在单次交互中能够处理的最大Token数量。它决定了模型能够"记住"多少对话历史和输入内容。

例如:一个32K上下文的模型,一次对话最多可以处理约32,000个Token(约24,000个英文单词或16,000个中文字)。

⚙️ 原理

工作方式

技术挑战

💡 主流模型上下文窗口

模型 上下文窗口 备注
GPT-4 8K / 32K / 128K 128K版本为GPT-4 Turbo
Claude 3 200K 目前最长之一
Gemini 1.5 1M / 2M 支持超长上下文
LLaMA 3 8K 开源模型
Mistral 8x7B 32K 开源支持较长上下文

💡 应用场景

💻 代码示例

# 计算是否超出上下文窗口
import tiktoken

def count_tokens(text, model="gpt-4"):
    enc = tiktoken.get_encoding("cl100k_base")
    return len(enc.encode(text))

def truncate_to_context(messages, max_tokens, model="gpt-4"):
    """将消息列表截断到指定上下文限制"""
    enc = tiktoken.get_encoding("cl100k_base")
    
    # 计算总token数
    total = 0
    truncated = []
    
    for msg in reversed(messages):
        content = msg["content"]
        tokens = len(enc.encode(content))
        
        if total + tokens <= max_tokens:
            truncated.insert(0, msg)
            total += tokens
        else:
            # 截断内容
            remaining = max_tokens - total
            if remaining > 0:
                truncated_content = enc.decode(enc.encode(content)[:remaining])
                truncated.insert(0, {**msg, "content": truncated_content})
            break
    
    return truncated

# 使用示例
messages = [
    {"role": "system", "content": "你是一个AI助手"},
    {"role": "user", "content": "请分析这段代码..." * 1000},  # 假设很长
    {"role": "assistant", "content": "好的,我来帮你分析..."},
    {"role": "user", "content": "继续"}
]

truncated = truncate_to_context(messages, max_tokens=8000)
print(f"截断后保留 {len(truncated)} 条消息")

🔗 相关链接