在实际 AI 开发和应用中,模型能力的每一次跃升都意味着新的可能性与挑战。当“百万上下文”这样的关键词出现时,它指向的不仅是技术参数的提升,更是对复杂任务处理、长文档理解、多轮对话连贯性等场景的彻底革新。对于开发者、研究者和技术爱好者而言,理解如何获取、验证并有效利用这种能力,是当前阶段一个非常实际且关键的技术课题。
本文将以一个具体的实践案例为线索,探讨如何通过现有工具链(如 Codex)来接触和测试传闻中的大上下文模型能力。我们将从核心概念澄清开始,逐步深入到环境准备、工具配置、能力验证以及过程中必然遇到的各种问题与排查方法。无论你是想评估模型能力以进行技术选型,还是希望在自己的项目中集成长上下文处理功能,这篇文章都将提供一条从零到一的实践路径。
1. 理解“百万上下文”与相关技术栈
在深入操作之前,必须厘清几个关键概念,这能帮助我们在后续步骤中做出正确的判断,避免因概念混淆而走入技术误区。
1.1 什么是“上下文窗口”?
上下文窗口(Context Window),在大型语言模型中,特指模型在一次推理过程中能够“看到”并处理的文本长度上限。这个长度通常以“令牌”(Token)为单位进行计量。对于英文文本,一个令牌大约相当于0.75个单词;对于中文,一个汉字通常对应1到2个令牌。
一个“百万上下文”的模型,理论上能够一次性处理约100万个令牌的输入文本。这相当于数百页的文档、数万行的代码库或长达数小时的对话记录。其核心价值在于:
- 信息完整性:无需对超长文档进行切割、总结或丢失细节,模型可以基于完整信息进行推理。
- 对话连贯性:在极长的多轮对话中,模型能记住更早的对话历史,保持回答的一致性。
- 复杂任务处理:能够综合分析代码库、法律合同、研究论文等结构复杂的长文本。
1.2 GPT-5.6 Sol 与现有生态
根据网络上的讨论,“GPT-5.6 Sol”常被提及为一个具备百万上下文能力的模型。然而,一个至关重要的前提是:截至当前,OpenAI 官方并未发布名为“GPT-5.6 Sol”的模型。在 OpenAI 的官方 API 模型列表中,也查询不到此型号。
因此,当我们看到“通过 Codex 使用 GPT-5.6 Sol”这类信息时,需要保持高度警惕。这通常指向以下几种情况:
- 社区项目或第三方封装:可能是某个开源项目或第三方服务,对现有 API(如 GPT-4 Turbo 128K)进行了封装或命名,并声称具备扩展能力。
- 测试版或内部版本泄露:极小范围流传的未公开测试版本,其稳定性、可用性和访问方式均无保障。
- 概念混淆或误导信息:将其他平台或研究项目的模型能力错误地关联到了 OpenAI 或 Codex 上。
Codex本身是 OpenAI 的一个产品系列,最初以代码生成能力闻名(如 GitHub Copilot 的背后模型)。但现在“Codex”也可能指代一些社区开发的、用于连接不同 AI 模型 API 的客户端或工具。
1.3 当前可用的长上下文方案
在实践层面,我们应关注官方、稳定且可验证的方案。以下是截至当前(请注意技术迭代迅速)几种主流的处理长上下文的方法:
| 方案类型 | 代表模型/服务 | 官方上下文长度(约) | 核心实现方式 | 适用场景 |
|---|---|---|---|---|
| 原生大窗口 | OpenAI GPT-4 Turbo | 128K tokens | 模型原生支持,一次性输入。 | 处理百页以内的文档、长对话、代码文件分析。 |
| API 参数扩展 | Anthropic Claude 3 | 200K tokens | 通过API调用直接指定超大上下文。 | 超长文档摘要、书籍分析、复杂研究。 |
| 外部记忆/检索 | LangChain, LlamaIndex | 理论上无限 | 将长文本切片存入向量数据库,通过检索获取相关片段输入模型。 | 知识库问答、海量文档分析、个性化AI应用。 |
| 滑动窗口/流式处理 | 一些开源模型 | 可变 | 只处理当前最相关的文本片段,动态更新上下文。 | 实时长文本流处理、成本敏感场景。 |
对于绝大多数开发者,结合检索增强生成(RAG)的技术方案,是处理超长上下文最可行、最经济且可控性最高的方法。它不依赖于某个特定“百万上下文”模型,而是通过工程架构解决信息过载问题。
2. 环境准备与工具选择
我们的目标是搭建一个能够测试和验证长文本处理能力的本地环境。这里不依赖任何未经证实的模型名称,而是使用稳定、可复现的工具链。
2.1 基础开发环境
首先,确保你的本地开发环境满足以下要求:
- 操作系统:Windows 10/11, macOS, 或 Linux 发行版(如 Ubuntu 20.04+)。
- Python:版本 3.8 至 3.11。推荐使用 3.10 以获得最佳的库兼容性。
- 包管理工具:
pip(最新版)。 - 代码编辑器:VS Code(推荐),并安装 Python 扩展。
可以通过以下命令检查你的 Python 环境:
python --version pip --version2.2 核心依赖库安装
我们将使用openai官方库来调用 OpenAI API,并使用tiktoken库来精确计算文本的令牌数,这是评估上下文长度的关键。
创建一个新的项目目录,并在其中初始化虚拟环境并安装依赖:
# 创建项目目录并进入 mkdir long-context-test cd long-context-test # 创建并激活虚拟环境(以 macOS/Linux 为例) python -m venv venv source venv/bin/activate # 在 Windows 上激活命令为:venv\Scripts\activate # 安装核心依赖 pip install openai tiktoken # 可选:安装用于文档处理的库 pip install pypdf2 # 用于读取PDF pip install langchain langchain-openai # 用于构建RAG应用2.3 获取并配置 API 密钥
要使用 OpenAI 的服务,你需要一个有效的 API 密钥。
- 访问 OpenAI 平台网站 。
- 登录或注册账号。
- 进入 “API Keys” 页面,点击 “Create new secret key” 生成一个新密钥。
- 妥善保管此密钥,它一旦生成将只显示一次。
在项目中,永远不要将 API 密钥硬编码在代码中或上传到版本控制系统(如 Git)。推荐使用环境变量管理:
在项目根目录创建一个名为.env的文件,内容如下:
OPENAI_API_KEY=你的实际API密钥然后,安装python-dotenv库来加载环境变量:
pip install python-dotenv2.4 关于“Codex”客户端的辨析
网络热词中频繁出现的“Codex”,可能指代多种事物:
- OpenAI Codex 模型:已基本被更新的 GPT 模型系列取代,不再推荐用于新项目。
- 第三方客户端/桌面应用:一些社区开发者创建的、集成了多个 AI 服务商 API 的图形化或命令行工具。这类工具的质量和安全性参差不齐。
- VS Code 扩展:可能与代码辅助相关的扩展。
重要建议:对于严肃的开发和生产工作,优先使用官方 SDK(如openaiPython 库)和 API。这能确保:
- 稳定性:直接对接官方服务,避免中间层引入的不稳定因素。
- 安全性:API 密钥的传输和处理更可控。
- 功能时效性:第一时间获得官方模型更新和新功能。
- 可维护性:代码依赖清晰,问题易于排查。
如果你遇到类似codex could not start the extension或the ‘gpt-5.6-sol’ model is not supported的错误,这几乎可以肯定你正在使用一个第三方客户端,并且它尝试调用了一个不存在的模型。此时,最直接的解决方案是回归官方渠道。
3. 构建长上下文测试验证方案
我们将设计两个实验来验证模型的长文本处理能力:一是使用原生 API 处理长文本,二是构建一个简单的 RAG 系统来处理超长文本。
3.1 实验一:使用官方 API 测试上下文边界
这个实验的目标是确认你使用的模型实际支持的上下文长度,并观察其在边界附近的行为。
首先,创建一个test_context_window.py文件:
import os from openai import OpenAI from dotenv import load_dotenv import tiktoken # 加载环境变量 load_dotenv() # 初始化客户端 client = OpenAI(api_key=os.getenv(“OPENAI_API_KEY”)) def count_tokens(text, model=“gpt-4”): “””使用 tiktoken 计算文本的令牌数。””” try: encoding = tiktoken.encoding_for_model(model) except KeyError: encoding = tiktoken.get_encoding(“cl100k_base”) # GPT-4, GPT-3.5-Turbo 的编码 return len(encoding.encode(text)) def test_model_with_long_text(model_name, long_text): “””向指定模型发送长文本,并测试其响应。””” input_tokens = count_tokens(long_text, model_name) print(f“输入文本长度: {len(long_text)} 字符,约 {input_tokens} tokens。”) # 构造一个需要理解全文才能回答的问题 prompt = f“””以下是提供给您的文本: “{long_text}” 问题:请用一句话概括上述文本的核心主题。“”” try: response = client.chat.completions.create( model=model_name, messages=[ {“role”: “user”, “content”: prompt} ], temperature=0.5, max_tokens=150 # 限制回答长度 ) answer = response.choices[0].message.content print(f“模型 {model_name} 回复: {answer}”) print(f“本次调用消耗令牌: {response.usage.total_tokens}”) return True except Exception as e: print(f“模型 {model_name} 调用失败: {e}”) return False if __name__ == “__main__”: # 1. 准备长文本(这里用重复文本来模拟,实际应用应使用真实长文档) sample_text = “大型语言模型上下文窗口的扩展是AI发展的一个重要方向。 “ * 5000 # 或者从文件读取 # with open(“long_document.txt”, “r”, encoding=“utf-8”) as f: # sample_text = f.read() # 2. 测试不同模型 models_to_test = [“gpt-3.5-turbo”, “gpt-4-turbo-preview”] # 使用官方可用模型 for model in models_to_test: print(f“\n{‘=’*50}”) print(f“正在测试模型: {model}”) test_model_with_long_text(model, sample_text)关键解释与操作:
- 令牌计算:
tiktoken库是 OpenAI 开源的令牌化工具,计算方式与 API 计费一致,是评估文本是否超长的准确依据。 - 模型选择:代码中使用了
gpt-3.5-turbo(16K上下文)和gpt-4-turbo-preview(128K上下文)这两个官方模型。请勿使用不存在的模型名称。 - 运行与观察:运行脚本
python test_context_window.py。观察输出,重点是:- 输入的令牌数是否接近或超过模型官方宣称的上下文限制。
- 模型是否能成功回复。
- 如果失败,错误信息是什么(如
context_length_exceeded)。
3.2 实验二:构建简易 RAG 系统处理超长文本
当文本长度远超单个模型上下文时,RAG 是标准解决方案。下面构建一个最小化的 RAG 流程。
创建simple_rag.py文件:
import os from openai import OpenAI from dotenv import load_dotenv import tiktoken from typing import List import hashlib load_dotenv() client = OpenAI(api_key=os.getenv(“OPENAI_API_KEY”)) EMBEDDING_MODEL = “text-embedding-3-small” # 用于创建文本向量的模型 class SimpleRAG: def __init__(self): self.chunks = [] # 存储文本片段 self.embeddings = [] # 存储向量(此处简化,实际应用需向量数据库) def split_text(self, text: str, chunk_size: int = 1000, overlap: int = 200): “””将长文本按固定大小和重叠度切分成块。””” encoding = tiktoken.get_encoding(“cl100k_base”) tokens = encoding.encode(text) chunks = [] for i in range(0, len(tokens), chunk_size - overlap): chunk_tokens = tokens[i:i + chunk_size] chunk_text = encoding.decode(chunk_tokens) chunks.append({ “text”: chunk_text, “start_token”: i, “end_token”: i + len(chunk_tokens) }) return chunks def get_embedding(self, text: str): “””获取文本的向量表示。””” response = client.embeddings.create( model=EMBEDDING_MODEL, input=text ) return response.data[0].embedding def index_document(self, file_path: str): “””索引文档:切分并计算向量(此处简化,仅存储文本块)。””” with open(file_path, “r”, encoding=“utf-8”) as f: full_text = f.read() self.chunks = self.split_text(full_text) print(f“文档已切分为 {len(self.chunks)} 个块。”) # 实际项目中,这里应将 (chunk_text, embedding) 存入向量数据库(如 Chroma, Pinecone) # 为简化,我们只存储文本,并模拟一个基于关键词的简单检索 def retrieve(self, query: str, top_k: int = 3) -> List[str]: “””检索:根据查询找到最相关的文本块(此处为简单关键词匹配模拟)。""" # 这是一个极其简化的模拟检索。生产环境必须使用向量相似度搜索。 query_lower = query.lower() relevant_chunks = [] for chunk in self.chunks: if query_lower in chunk[“text”].lower(): relevant_chunks.append(chunk[“text”]) # 如果没找到关键词,返回前几个块 if not relevant_chunks: relevant_chunks = [c[“text”] for c in self.chunks[:top_k]] else: relevant_chunks = relevant_chunks[:top_k] return relevant_chunks def ask(self, query: str): “””问答:检索相关上下文,并发送给大模型生成答案。””” context_chunks = self.retrieve(query) context = “\n\n---\n\n”.join(context_chunks) prompt = f“””请基于以下提供的上下文信息回答问题。如果上下文不包含答案,请直接说“根据提供的信息无法回答”。 上下文: {context} 问题:{query} 答案:“”” try: response = client.chat.completions.create( model=“gpt-4-turbo-preview”, # 使用能力较强的模型生成最终答案 messages=[ {“role”: “system”, “content”: “你是一个基于提供文档进行问答的助手。”}, {“role”: “user”, “content”: prompt} ], temperature=0.2, max_tokens=500 ) return response.choices[0].message.content except Exception as e: return f“生成答案时出错: {e}” if __name__ == “__main__”: rag = SimpleRAG() # 假设你有一个长文档 `long_document.txt` rag.index_document(“long_document.txt”) while True: user_query = input(“\n请输入你的问题 (输入 ‘quit’ 退出): “) if user_query.lower() == ‘quit’: break answer = rag.ask(user_query) print(f“\n答案: {answer}”)这个简易 RAG 的工作流程:
- 索引:读取超长文档,将其切分成大小可控的文本块(Chunk)。
- 检索:当用户提问时,系统从所有文本块中找出与问题最相关的几个块(示例中为简化使用了关键词匹配,生产环境必须替换为向量相似度检索)。
- 生成:将检索到的相关文本块作为“上下文”,连同用户问题,一起发送给大语言模型,让其生成最终答案。
通过这种方式,无论原始文档有多长,最终送入模型的都是经过筛选的、长度可控的上下文,从而绕过了模型本身的上下文长度限制。
4. 关键配置、参数与性能考量
在实现长文本处理时,以下几个配置点至关重要,直接影响效果、成本和稳定性。
4.1 文本分块(Chunking)策略
分块是 RAG 的基石,糟糕的分块策略会导致信息割裂,严重影响答案质量。
| 参数 | 说明 | 推荐值/策略 | 不当设置的后果 |
|---|---|---|---|
| 块大小 (chunk_size) | 每个文本块包含的令牌数。 | 取决于模型: • GPT-4 (128K): 可设 2000-4000 • GPT-3.5 (16K): 建议 500-1500 • 嵌入模型:通常 500-1000 | 过大:检索精度下降,仍可能超模型限制。 过小:语义不完整,模型缺乏足够上下文。 |
| 块重叠 (overlap) | 相邻文本块之间重叠的令牌数。 | 通常为块大小的 10%-20%。 | 为零:可能导致句子或关键信息被切分,检索时丢失边界信息。 |
| 分块依据 | 按什么边界切分。 | 优先按语义(段落、章节),其次按句子,最后按固定长度。 | 纯按固定长度切分:极易割裂完整的语义单元。 |
改进的分块示例(使用 LangChain):
from langchain.text_splitter import RecursiveCharacterTextSplitter text_splitter = RecursiveCharacterTextSplitter( chunk_size=1000, chunk_overlap=200, length_function=len, # 可以用 tiktoken 计算函数更准 separators=[“\n\n”, “\n”, “。”, “.”, “,”, “ “, “”] # 按此优先级尝试分割 ) chunks = text_splitter.split_text(long_text)4.2 API 调用参数与成本控制
使用大上下文模型或频繁调用 API,成本是需要严肃考虑的问题。
| 参数 | 影响 | 建议 |
|---|---|---|
max_tokens | 限制模型回答的长度。 | 根据问题复杂度设置,避免无意义的冗长回答以节省费用。 |
temperature | 控制回答的随机性(0-2)。 | 事实性问答建议 0.1-0.3;创意生成可调高。 |
top_p | 核采样,影响词汇选择的集中度。 | 通常与 temperature 二选一调整。 |
| 模型选择 | 不同模型价格差异巨大。 | 对性能要求不高的内部工具,可用gpt-3.5-turbo;对质量要求高的生产答案,用gpt-4-turbo。 |
成本估算示例: 假设处理一个 100 万令牌的文档(纯输入)。
- 使用
gpt-4-turbo-preview(输入 $10 / 1M tokens):费用约为$10。 - 使用 RAG 方案,假设嵌入模型处理所有文本(
text-embedding-3-small输入 $0.02 / 1M tokens),再检索出 5K tokens 上下文用gpt-4-turbo生成答案:嵌入费用约$0.02,生成答案费用约$0.05,总计约$0.07。
RAG 在成本上的优势是压倒性的。
4.3 错误处理与重试机制
网络请求和 API 调用总会遇到失败,必须设计健壮的错误处理。
from tenacity import retry, stop_after_attempt, wait_exponential from openai import APIError, RateLimitError, APITimeoutError @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10)) def robust_chat_completion(messages, model=“gpt-3.5-turbo”): “””一个带有重试机制的聊天补全函数。””” try: response = client.chat.completions.create( model=model, messages=messages, timeout=30.0 # 设置超时 ) return response except RateLimitError: print(“速率限制达到,等待后重试…”) raise # 让 tenacity 捕获并重试 except APITimeoutError: print(“API 请求超时,重试…”) raise except APIError as e: # 处理其他API错误,如上下文超长、模型不可用等 print(f“API 错误: {e}”) if “context_length” in str(e): # 专门处理上下文超长错误 return handle_context_too_long(messages) else: # 非重试性错误,直接抛出 raise e def handle_context_too_long(messages): “””当上下文超长时的降级处理策略。””” # 策略1:尝试切换到上下文更大的模型(如果可用且成本可接受) # 策略2:自动触发摘要或RAG流程 # 策略3:返回友好错误信息,提示用户缩短输入 return {“error”: “输入内容过长,请尝试缩短或分段处理。”}5. 常见问题排查与实践陷阱
在实际操作中,你会遇到各种预期之外的问题。以下是一些典型问题及其排查思路。
5.1 模型调用失败与错误信息解读
| 错误现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
AuthenticationError | API 密钥无效、过期或未设置。 | 1. 检查.env文件中的OPENAI_API_KEY是否正确。2. 在终端执行 echo $OPENAI_API_KEY(Linux/macOS) 或echo %OPENAI_API_KEY%(Windows) 确认环境变量已加载。3. 登录 OpenAI 平台确认密钥状态。 |
RateLimitError | 免费额度用完或付费账户速率超限。 | 1. 检查账户余额和用量。 2. 实现指数退避重试机制(如上文 tenacity示例)。3. 对于生产系统,考虑申请提升速率限制。 |
InvalidRequestError: context_length_exceeded | 输入文本超过模型上下文限制。 | 1. 使用tiktoken精确计算输入令牌数。2. 实施文本分块(Chunking)策略。 3. 考虑使用上下文更大的模型(如从 gpt-3.5-turbo 切换到 gpt-4-turbo)。 |
InvalidRequestError: model not found | 使用了不存在的模型名称。 | 1.立即停止使用gpt-5.6-sol等非官方名称。2. 查阅 OpenAI 官方模型列表 获取当前可用模型。 3. 使用 client.models.list()API 列出所有可用模型。 |
APIConnectionError / Timeout | 网络连接问题或服务器响应慢。 | 1. 检查本地网络。 2. 增加 timeout参数值。3. 实现重试逻辑。 |
5.2 RAG 效果不佳的调试路径
如果你的 RAG 系统回答质量差,可以按以下顺序排查:
检索阶段问题:
- 症状:答案与文档无关,或遗漏关键信息。
- 检查:打印出
retrieve函数返回的上下文块。它们真的与问题相关吗? - 解决:将关键词匹配替换为向量检索。使用
text-embedding-3-small模型为文档块和问题生成向量,然后计算余弦相似度,返回最相似的块。这是 RAG 有效的核心。
分块阶段问题:
- 症状:答案支离破碎,无法理解跨块的逻辑。
- 检查:查看分块后的文本,是否在句子中间、段落中间被切断?
- 解决:调整分块策略,使用
RecursiveCharacterTextSplitter并按语义分隔符(如\n\n)分割,并设置合理的重叠度。
提示工程问题:
- 症状:模型无视提供的上下文,基于自身知识胡编乱造。
- 检查:构造给模型的最终 Prompt。是否清晰指示了“仅基于上下文回答”?
- 解决:在 System Prompt 和 User Prompt 中加强指令。例如:
system_prompt = “””你是一个严谨的文档助手。你必须严格根据用户提供的上下文来回答问题。如果上下文中没有明确答案,你必须说‘根据提供的资料,我无法回答这个问题’。绝对不要编造信息。”””
5.3 关于“Codex”第三方客户端的特别警告
如果你因为搜索“Codex”而安装了某个桌面应用或 CLI 工具,并遇到如下错误:
The ‘gpt-5.6-sol’ model is not supportedCodex could not start the extensionFailed to load config.toml
这强烈表明该工具:
- 集成了不存在的或未经验证的模型接口。
- 可能存在配置错误、版本兼容性问题或安全风险。
- 其开发可能已停止,无法跟上官方 API 的更新。
行动建议:
- 对于学习和开发,卸载不稳定的第三方客户端。
- 直接使用
openaiPython/Node.js SDK 或通过官方 Playground 进行测试。 - 如果需要一个集成的桌面环境,可以考虑一些成熟的开源项目(如
Open WebUI),并确保其配置指向合法的官方 API 或你自行部署的开源模型。
6. 生产环境最佳实践与扩展方向
将长文本处理能力从实验推向生产,需要额外的工程化考量。
6.1 生产就绪的架构建议
一个健壮的生产级长文本处理系统应包含以下组件:
- 文档加载与解析器:支持 PDF、Word、HTML、Markdown、TXT 等多种格式。
- 智能文本分块器:结合语义分割和固定长度,确保块内语义完整。
- 向量数据库:使用专业的向量数据库(如Chroma、Qdrant、Weaviate、Pinecone)存储和检索嵌入向量。它们支持高效的相似性搜索和元数据过滤。
- 检索器:结合密集向量检索和稀疏检索(如 BM25),提升召回率。
- 重排序器:对检索出的多个文档块进行精排,选择最相关的几个送入 LLM。
- 提示模板与模型路由:根据问题类型和复杂度,动态选择不同的提示词或模型(如简单问题用便宜模型,复杂分析用强模型)。
- 缓存层:对相同的查询和文档块进行缓存,大幅降低成本和延迟。
- 监控与日志:记录每次调用的令牌数、成本、延迟和用户反馈,用于优化和审计。
6.2 使用 LangChain 快速搭建原型
对于快速验证和原型开发,LangChain 框架极大地简化了流程:
from langchain_community.document_loaders import TextLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_openai import OpenAIEmbeddings, ChatOpenAI from langchain_community.vectorstores import Chroma from langchain.chains import RetrievalQA # 1. 加载文档 loader = TextLoader(“long_document.txt”) documents = loader.load() # 2. 分割文本 text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200) texts = text_splitter.split_documents(documents) # 3. 创建向量存储 embeddings = OpenAIEmbeddings(model=“text-embedding-3-small”) vectorstore = Chroma.from_documents(texts, embeddings, persist_directory=“./chroma_db”) retriever = vectorstore.as_retriever(search_kwargs={“k”: 4}) # 检索前4个相关块 # 4. 创建问答链 llm = ChatOpenAI(model=“gpt-4-turbo-preview”, temperature=0) qa_chain = RetrievalQA.from_chain_type( llm=llm, chain_type=“stuff”, # 还有其他如 map_reduce, refine 等处理长上下文的方式 retriever=retriever, return_source_documents=True # 返回参考来源 ) # 5. 提问 result = qa_chain.invoke({“query”: “文档中主要讨论了哪几个方面?”}) print(“答案:”, result[“result”]) print(“来源:”, result[“source_documents”])6.3 扩展方向:超越简单问答
掌握了基础的长文本处理能力后,可以考虑以下更复杂的应用:
- 多文档问答:扩展系统,使其能够同时索引和检索来自多个文件或数据源的信息。
- 对话历史管理:在 RAG 基础上,加入对多轮对话历史的有效管理,使 AI 能参考之前的问答上下文。
- 混合检索:结合关键词检索、向量检索和知识图谱,提供更精准的信息查找。
- 智能摘要:针对超长文档,实现多粒度摘要(全文摘要、章节摘要、主题摘要)。
- 代码库分析:专门针对代码仓库进行解析、检索和问答,用于辅助编程和理解项目。
长上下文模型的进化不会停止,但作为应用开发者,我们的重点不应是追逐某个未经证实的模型代号,而是掌握以 RAG 为代表的可控、可扩展、成本效益高的工程架构。通过本文的实践路径,你已经可以构建出能够处理海量文本信息的智能应用。接下来,深入优化检索质量、提示工程和系统架构,将是提升应用效果的关键。