让 AI 使用上下文的技巧
如何让 AI 有效地读取和使用项目上下文
三种基本方法
AI 使用上下文的方式主要有三种,每种都有自己的适用场景。
┌─────────────────────────────────────────────────────────┐
│ AI 使用上下文的方法 │
├─────────────┬──────────────┬──────────────┬─────────────┤
│ 方法 │ 难度 │ 效果 │ 推荐度 │
├─────────────┼──────────────┼──────────────┼─────────────┤
│ 直接引用 │ ⭐ │ ⭐⭐ │ ⭐⭐⭐ │
│ 总结传递 │ ⭐⭐ │ ⭐⭐⭐ │ ⭐⭐⭐⭐ │
│ 自动检索 │ ⭐⭐⭐ │ ⭐⭐⭐⭐⭐ │ ⭐⭐⭐⭐⭐ │
└─────────────┴──────────────┴──────────────┴─────────────┘方法 1:直接引用
明确告诉 AI 参考哪些文档,让 AI 自己读取。
这种方式适合在使用 Claude Code 这类支持文件读取的工具时,或者你的项目已经有结构化的文档存放在本地。
第一步:确保文档存在
wiki/
├── tech-stack.md
├── coding-standards.md
└── api/
└── users.md第二步:在对话中引用
你:帮我写一个用户登录功能
参考文档:
- wiki/tech-stack.md(技术栈)
- wiki/coding-standards.md(编码规范)
- wiki/api/users.md(用户 API 示例)第三步:AI 自动读取
AI:我读取了你的文档:
从 tech-stack.md 得知:
- 使用 Nest.js + TypeORM
- 数据库:PostgreSQL
- 认证:JWT
从 coding-standards.md 得知:
- 函数名用 camelCase
- 必须有 JSDoc 注释
- 错误要抛出自定义异常
现在我来实现用户登录功能...实践建议
引用具体章节
"参考项目文档"这种说法太模糊。更好的方式是明确指出位置:
✓ "参考 wiki/tech-stack.md 的后端部分
参考 wiki/coding-standards.md 的错误处理章节"按重要性排序
参考(按重要性):
1. wiki/development/coding-standards.md
2. wiki/modules/user-module.md
3. wiki/overview/tech-stack.md说明关注点
你:帮我写用户登录功能
参考:
- wiki/tech-stack.md(关注认证方案)
- wiki/coding-standards.md(关注错误处理)
- src/modules/user/auth.service.ts(参考现有实现)优缺点
优势:简单直接,AI 总是读取最新内容,不占用对话 token
劣势:需要手动引用,依赖文件系统访问,AI 可能读错文件
方法 2:总结传递
把关键信息提取出来,直接告诉 AI,不需要 AI 自己去读文档。
这种方法在 AI 工具不支持文件读取,或者上下文信息不多时很实用。
操作步骤
提取关键信息
技术栈:
- 后端:Nest.js + TypeORM + PostgreSQL
- 前端:React + TypeScript + Tailwind
编码规范:
- 命名:camelCase
- 必须有 JSDoc
- 错误用 CustomError
业务规则:
- 用户手机号唯一
- 密码至少 8 位组织成结构化信息
你:帮我写一个用户登录功能
项目信息:
## 技术栈
- 框架:Nest.js
- ORM:TypeORM
- 数据库:PostgreSQL
- 认证:JWT
## 编码规范
- 函数名:camelCase
- 必须有 JSDoc 注释
- 错误处理:抛出 CustomError
## 业务规则
- 手机号必须唯一
- 密码至少 8 位,包含字母和数字
- 登录失败 5 次锁定账号
## 参考代码
现有实现:src/modules/user/auth.service.ts实践建议
使用模板
保存一个项目信息模板,每次使用时填写:
## 项目信息模板
### 技术栈
- 前端框架:
- 后端框架:
- 数据库:
- 其他:
### 编码规范
- 命名规范:
- 注释要求:
- 错误处理:
### 业务规则
- 规则 1:
- 规则 2:
### 参考代码
- 相关文件:
- 类似实现:控制长度
复制整个 Wiki(5000+ tokens)会适得其反。只提取关键信息,控制在 500-1000 token,详细内容让 AI 需要时再问。
用代码块配置
你:帮我写用户登录
配置:
```typescript
// 技术栈配置
export const CONFIG = {
framework: 'Nest.js',
orm: 'TypeORM',
database: 'PostgreSQL',
auth: 'JWT'
}
// 编码规范
export const STANDARDS = {
naming: 'camelCase',
comments: 'JSDoc',
errors: 'CustomError'
}这样更清晰,AI 更容易理解。
### 优缺点
**优势**:不需要文件访问,信息明确不会误解,适合任何 AI 工具
**劣势**:手动总结费时,可能遗漏细节,占用对话 token
---
## 方法 3:自动检索(RAG)
搭建 RAG 系统,让 AI 自动从文档库中检索相关信息。
当文档量很大,或者频繁需要 AI 帮忙时,这个一次性投入是值得的。
### 工作原理┌─────────────────────────────────────────────────┐ │ 用户提问 │ │ "如何实现订单取消功能?" │ └──────────────────┬──────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────┐ │ RAG 系统 │ │ │ │ 1. 理解问题意图 → "订单"、"取消" │ │ 2. 向量化查询 → Embedding │ │ 3. 检索相关文档 → 找到 3-5 个最相关的文档 │ │ 4. 排序和过滤 → 去重、评分 │ └──────────────────┬──────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────┐ │ 检索到的文档 │ │ │ │ - business/rules.md(订单规则章节) │ │ - api/orders.md(取消订单 API) │ │ - modules/order-service.md(订单服务) │ └──────────────────┬──────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────┐ │ LLM 生成答案 │ │ │ │ 基于检索到的文档,生成符合项目的答案 │ └─────────────────────────────────────────────────┘
### 技术实现
> 以下代码示例基于 2025-2026 年的最新框架 API
**方案 1:使用 LangChain 0.3+**
```python
from langchain_core.documents import Document
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_chroma import Chroma
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate
# 1. 准备文档并切分
documents = [
Document(page_content="...", metadata={"source": "tech-stack.md"}),
# ... 更多文档
]
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200,
length_function=len,
)
splits = text_splitter.split_documents(documents)
# 2. 创建向量存储(ChromaDB)
vectorstore = Chroma.from_documents(
documents=splits,
embedding=OpenAIEmbeddings(model="text-embedding-3-small"),
persist_directory="./chroma_db",
)
retriever = vectorstore.as_retriever(
search_type="similarity_score_threshold",
search_kwargs={"k": 3, "score_threshold": 0.5},
)
# 3. 创建 RAG 链
llm = ChatOpenAI(model="gpt-4o", temperature=0)
prompt = ChatPromptTemplate.from_template("""
根据以下文档回答问题。如果你不知道答案,就说不知道,不要编造。
上下文:
{context}
问题:{input}
答案:
""")
# 创建组合链
retrieve_chain = create_retrieval_chain(
retriever,
create_stuff_documents_chain(llm, prompt)
)
# 4. 查询
response = retrieve_chain.invoke({"input": "如何实现订单取消功能?"})
print(response["answer"])方案 2:使用 LlamaIndex
数据来源:Real Python - LlamaIndex RAG Guide (2025-12-24)
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.llms.openai import OpenAI
# 配置模型(推荐使用最新版本)
Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-small")
Settings.llm = OpenAI(model="gpt-4o", temperature=0)
# 1. 加载文档
documents = SimpleDirectoryReader('./wiki').load_data()
# 2. 创建索引(自动分块和向量化)
index = VectorStoreIndex.from_documents(documents)
# 3. 创建查询引擎(支持多种检索模式)
query_engine = index.as_query_engine(
similarity_top_k=5,
vector_store_query_mode="default",
alpha=0.7, # 混合检索权重(0=纯向量,1=纯关键词)
)
# 4. 查询
response = query_engine.query("如何实现订单取消功能?")
print(response)
# 5. 高级:创建聊天引擎(支持多轮对话)
chat_engine = index.as_chat_engine(
chat_mode="condense_question",
verbose=True,
)
response = chat_engine.chat("用户登录失败怎么办?")实践建议
文档切片
整篇文档太长会影响检索精准度。按章节或主题切片效果更好:
切片前:
- tech-stack.md(一篇长文)
切片后:
- tech-stack/frontend.md
- tech-stack/backend.md
- tech-stack/database.md添加元数据
# 给文档添加元数据
documents = [
Document(
page_content="...",
metadata={
"category": "api",
"module": "user",
"version": "v1"
}
)
]
# 检索时过滤
results = vectorstore.similarity_search(
"用户登录",
filter={"category": "api", "module": "user"}
)选择向量数据库
数据来源:Vector Database Benchmark 2026 (2026-02-15)
根据 2026 年性能测试(1M 向量,1536 维):
| 数据库 | p50 延迟 | p99 延迟 | 部署方式 | 适合场景 |
|---|---|---|---|---|
| Qdrant | 4ms | 25ms | 开源/托管 | 高性能需求、复杂过滤 |
| Pinecone | 8ms | 45ms | 托管 | 零运维、快速原型 |
| ChromaDB | 12ms | 70ms | 开源 | 本地开发、小规模 |
| pgvector | 18ms | 90ms | 开源扩展 | 已有 PostgreSQL |
个人项目用 ChromaDB 或 Pinecone 就够了,大型项目再考虑 Qdrant 或 Milvus。
优缺点
优势:完全自动化,可以处理大量文档,检索精准(如果配置得当)
劣势:搭建复杂,需要额外成本,需要维护
方法选择指南
决策流程
你的情况
│
├─ AI 工具支持文件读取?
│ ├─ 是 → 直接引用(推荐)
│ └─ 否 → 继续
│
├─ 文档量 < 10 篇?
│ ├─ 是 → 总结传递
│ └─ 否 → 继续
│
├─ 经常需要 AI 帮忙?
│ ├─ 是 → 考虑 RAG
│ └─ 否 → 总结传递
│
└─ 有技术能力搭建系统?
├─ 是 → RAG
└─ 否 → 总结传递推荐方案
个人项目:总结传递(简单快捷)
小团队项目:直接引用 + Projects 功能(如 Claude Projects、ChatGPT Projects)
大型项目:Wiki + RAG 系统
实战技巧
技巧 1:上下文卡片
创建"上下文卡片"保存关键信息,使用时直接粘贴:
---
Context Card: User Module
---
## 技术信息
- 框架:Nest.js
- ORM:TypeORM
- 数据库:PostgreSQL
## 编码规范
- 命名:camelCase
- 必须有 JSDoc
- 错误:CustomError
## 业务规则
- 手机号唯一
- 密码 >= 8 位
- 失败 5 次锁定
## 相关代码
- src/modules/user/
- wiki/api/users.md技巧 2:渐进式提供
第一次可以给基础信息,如果 AI 理解不够再补充。找到"最小有效集"后记录下来,以后都用这个级别。
第 1 次:"用 Nest.js 写用户注册"
↓ AI 不够理解
第 2 次:"用 Nest.js + TypeORM,手机号唯一,密码加密"
↓ AI 理解了
记录:以后都用这个级别的信息技巧 3:让 AI 询问
你:写用户注册功能
AI:我需要了解:
1. 用什么框架?
2. 有什么业务规则?
3. 需要哪些字段?
你:
1. Nest.js
2. 手机号唯一,密码加密
3. 手机号、密码、验证码让 AI 主动收集信息可以避免提供过多或过少,确保理解正确。
技巧 4:使用 Projects 功能
Claude Projects
1. 创建项目:拉了么
2. 上传文档:wiki/overview/tech-stack.md 等
3. 设置项目指令:"这是一个外卖订餐系统,
使用 Nest.js + PostgreSQL。回答问题时参考上传的文档。"
4. 开始对话ChatGPT Projects
流程类似,创建项目 → 添加知识文件 → 设置自定义指令 → 开始对话
技巧 5:使用 Claude Code MCP 扩展上下文(2025 新功能)
数据来源:Claude Code MCP Complete Guide (2025-12-24)
MCP(Model Context Protocol)是 Claude Code 的开放标准协议,让 AI 能够连接外部数据源和工具,无需手动提供上下文。
配置 MCP 服务器
在 ~/.claude/settings.json 中添加:
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "your-github-token"
}
},
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres"],
"env": {
"POSTGRES_CONNECTION_STRING": "postgresql://user:pass@localhost/db"
}
}
}
}使用场景
你:检查最新的 GitHub PR,看看是否影响用户模块
Claude Code:(自动调用 GitHub MCP)
1. 获取最新 PR 列表
2. 查找与用户模块相关的 PR
3. 分析代码变更
4. 给出影响评估MCP 可以自动获取实时数据,无需手动复制粘贴。2026 年新增的 Tool Search 功能可以减少 95% 的上下文占用。
常用 MCP 服务器
| 服务器 | 功能 | 安装命令 |
|---|---|---|
@modelcontextprotocol/server-github | GitHub PR、Issue | npx @modelcontextprotocol/server-github |
@modelcontextprotocol/server-postgres | PostgreSQL 查询 | npx @modelcontextprotocol/server-postgres |
@modelcontextprotocol/server-filesystem | 文件系统访问 | npx @modelcontextprotocol/server-filesystem |
技巧 6:验证理解
你:写用户注册功能
项目信息:[提供上下文]
你(追问):在我继续之前,请确认你理解了:
1. 使用什么框架?
2. 有什么业务规则?
3. 需要哪些验证?
AI:我理解了:
1. Nest.js + TypeORM
2. 手机号唯一,密码 >= 8 位
3. 手机号格式、密码强度、验证码
你:正确,请继续让 AI 先复述理解,确认正确后再继续,可以避免很多返工。
常见问题
AI 忽略了我提供的上下文
原因:上下文太长被截断、不清晰、或 AI 注意力在其他地方
解决:缩短上下文只保留关键信息,用结构化格式(Markdown、表格),在每次回复时强调"参考上面的项目信息"
AI 理解错了我的项目
原因:上下文不够具体、有歧义、AI 做了错误假设
解决:提供代码示例,明确说明"不要假设,按文档来",让 AI 先复述理解确认正确
每次都要重复提供上下文,太麻烦
解决:
- 使用 Projects 功能
- 保存上下文模板,复制粘贴
- 搭建 RAG 系统(一次性投入)
Wiki 更新了,AI 还在用旧信息
解决:
- 在 Projects 中重新上传文档
- 在对话中明确说明"最新信息如下"
- RAG 系统自动更新(重新索引)
总结
三种方法各有适用场景:直接引用适合有文件访问的工具,总结传递适合任何工具但费时,自动检索适合大型项目但复杂。
个人项目用总结传递就够了,团队项目可以考虑直接引用加 Projects 功能,大型项目再投入 RAG 系统。
实践中,上下文卡片、渐进式提供、让 AI 询问、验证理解这些小技巧很实用。
最佳实践
- 结构化提供上下文(Markdown、表格)
- 控制上下文长度(关键信息优先)
- 使用 Projects 功能(避免重复)
- 配置 MCP 服务器(自动获取外部数据)
- 验证 AI 的理解(确认后继续)
- 记录有效的上下文组合
2025-2026 新趋势
智能上下文管理
- Claude Skills:三层上下文架构(主上下文、技能元数据、按需加载)
- MCP Tool Search:2026 年新增,自动懒加载工具,减少 95% 上下文占用
- 提示缓存:Claude 4 系列支持,重复上下文无需重复付费
外部知识库集成
传统方式是手动复制粘贴,浪费时间且容易出错。现在用 MCP 服务器可以自动获取、实时更新。
混合检索成为主流
语义检索加关键词检索,加上 ReRanker 二次排序。GraphRAG(知识图谱增强)和 Self-RAG(AI 自我评估检索需求)也开始应用。
上下文窗口突破
Claude 4 系列最高支持 200K token(约 15 万汉字),GPT-4o 支持 128K token。不过实践中仍需精简上下文,质量比数量更重要。
下一步
掌握了让 AI 使用上下文的技巧后,我们将学习:
- "拉了么"项目深度剖析 → 真实项目实践
- 不同规模项目的上下文策略 → 如何根据项目规模选择策略