Skip to content

让 AI 使用上下文的技巧

如何让 AI 有效地读取和使用项目上下文


三种基本方法

AI 使用上下文的方式主要有三种,每种都有自己的适用场景。

┌─────────────────────────────────────────────────────────┐
│                   AI 使用上下文的方法                     │
├─────────────┬──────────────┬──────────────┬─────────────┤
│    方法     │   难度       │   效果       │   推荐度     │
├─────────────┼──────────────┼──────────────┼─────────────┤
│ 直接引用    │     ⭐       │    ⭐⭐       │    ⭐⭐⭐    │
│ 总结传递    │    ⭐⭐       │   ⭐⭐⭐       │   ⭐⭐⭐⭐   │
│ 自动检索    │   ⭐⭐⭐       │  ⭐⭐⭐⭐⭐     │  ⭐⭐⭐⭐⭐  │
└─────────────┴──────────────┴──────────────┴─────────────┘

方法 1:直接引用

明确告诉 AI 参考哪些文档,让 AI 自己读取。

这种方式适合在使用 Claude Code 这类支持文件读取的工具时,或者你的项目已经有结构化的文档存放在本地。

第一步:确保文档存在

bash
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 工具不支持文件读取,或者上下文信息不多时很实用。

操作步骤

提取关键信息

markdown
技术栈:
- 后端: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

实践建议

使用模板

保存一个项目信息模板,每次使用时填写:

markdown
## 项目信息模板

### 技术栈
- 前端框架:
- 后端框架:
- 数据库:
- 其他:

### 编码规范
- 命名规范:
- 注释要求:
- 错误处理:

### 业务规则
- 规则 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)

python
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

添加元数据

python
# 给文档添加元数据
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 延迟部署方式适合场景
Qdrant4ms25ms开源/托管高性能需求、复杂过滤
Pinecone8ms45ms托管零运维、快速原型
ChromaDB12ms70ms开源本地开发、小规模
pgvector18ms90ms开源扩展已有 PostgreSQL

个人项目用 ChromaDB 或 Pinecone 就够了,大型项目再考虑 Qdrant 或 Milvus。

优缺点

优势:完全自动化,可以处理大量文档,检索精准(如果配置得当)

劣势:搭建复杂,需要额外成本,需要维护


方法选择指南

决策流程

你的情况

    ├─ AI 工具支持文件读取?
    │   ├─ 是 → 直接引用(推荐)
    │   └─ 否 → 继续

    ├─ 文档量 < 10 篇?
    │   ├─ 是 → 总结传递
    │   └─ 否 → 继续

    ├─ 经常需要 AI 帮忙?
    │   ├─ 是 → 考虑 RAG
    │   └─ 否 → 总结传递

    └─ 有技术能力搭建系统?
        ├─ 是 → RAG
        └─ 否 → 总结传递

推荐方案

个人项目:总结传递(简单快捷)

小团队项目:直接引用 + Projects 功能(如 Claude Projects、ChatGPT Projects)

大型项目:Wiki + RAG 系统


实战技巧

技巧 1:上下文卡片

创建"上下文卡片"保存关键信息,使用时直接粘贴:

markdown
---
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 中添加:

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-githubGitHub PR、Issuenpx @modelcontextprotocol/server-github
@modelcontextprotocol/server-postgresPostgreSQL 查询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 使用上下文的技巧后,我们将学习:


← 返回文章目录 | 继续学习:"拉了么"项目深度剖析 →

最近更新

基于 Apache 2.0 许可发布