4.3 KiB
4.3 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
项目概述
这是一个基于 LangChain 的学习演示项目,展示如何使用大语言模型进行各种应用场景的开发,包括基础调用、提示词模板、输出解析、向量存储、RAG 检索增强和 Agent。
环境配置
依赖管理
- Python 项目,依赖列表在
requirements.txt - 安装依赖:
pip install -r requirements.txt - 关键依赖包括: langchain, langchain-openai, langchain-community, python-dotenv, faiss-cpu
环境变量配置
项目根目录的 .env 文件包含 API 配置:
OPENAI_BASE_URL: OpenAI API 基础 URLOPENAI_API_KEY1: OpenAI API 密钥LANGSMITH_TRACING: LangSmith 追踪开关(必须设置为 "true")LANGSMITH_API_KEY: LangSmith API 密钥LANGSMITH_PROJECT: LangSmith 项目名称
注意: 代码中使用 OPENAI_API_KEY1 而不是标准的 OPENAI_API_KEY
代码结构
目录组织
lang-demo1/
├── notebooks/ # 学习笔记和示例
│ ├── demo1.ipynb # 主要演示: LLM调用、提示词、解析器、向量、RAG、Agent
│ └── sample.ipynb # 环境配置和基础调用示例
├── src/ # 可复用的源代码
│ ├── utils/ # 工具函数
│ └── chains/ # 自定义链
├── tests/ # 单元测试
├── data/ # 数据文件
├── models/ # 模型文件
├── .env # 环境变量 (不提交到 Git)
├── .gitignore # Git 忽略配置
├── requirements.txt # Python 依赖
├── README.md # 项目说明
└── CLAUDE.md # 本文件
核心功能模块
1. 基础 LLM 调用
使用 ChatOpenAI 调用大模型:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4.1-nano")
response = llm.invoke("你的问题")
2. 提示词模板系统
使用 ChatPromptTemplate 创建结构化提示:
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "系统角色描述"),
("user", "{input}")
])
chain = prompt | llm
3. 输出解析
使用 JsonOutputParser 将 LLM 输出解析为 JSON:
- 使用
output_parser.get_format_instructions()获取格式要求 - 将格式要求注入到提示词模板中
4. 向量存储与检索
使用 FAISS 向量数据库:
- 通过
WebBaseLoader抓取网页内容 - 使用
RecursiveCharacterTextSplitter分割文档(chunk_size=500, chunk_overlap=50) - 使用
OpenAIEmbeddings(model="text-embedding-3-small") 生成向量 - 使用
FAISS.from_documents()创建向量存储
5. RAG (检索增强生成)
核心流程:
- 使用
vector.as_retriever()创建检索器(k=3) - 检索相关文档片段
- 将检索结果作为上下文注入提示词
- LLM 基于上下文生成回答
6. Agent 系统
使用 LangChain Agent 实现工具调用:
- 使用
create_retriever_tool()创建检索工具 - 使用
create_openai_functions_agent()创建 Agent - 使用
AgentExecutor执行 Agent(verbose=True 可查看执行过程)
开发工作流
运行 Jupyter Notebooks
主要开发工作在 Jupyter notebook 中进行:
- 启动 Jupyter:
jupyter notebook或jupyter lab - 主要演示代码位于
notebooks/demo1.ipynb - 基础示例位于
notebooks/sample.ipynb
环境初始化模式
代码使用严格的环境变量检查:
import dotenv
dotenv.load_dotenv()
# 必须在 .env 中配置所有必需变量,否则会抛出异常
模型配置
当前项目使用的模型:
- LLM:
gpt-4.1-nano(通过 OpenAI 兼容接口) - Embeddings:
text-embedding-3-small
技术要点
链式调用 (Chain)
使用管道操作符 | 组合组件:
chain = prompt | llm | output_parser
result = chain.invoke({"input": "问题"})
向量检索配置
- 默认检索 top-k=3 个最相关文档
- 文档分割使用重叠策略避免语义断裂
- 向量数据当前存储在内存中,未做持久化
Web 数据加载
使用 WebBaseLoader 抓取特定网页内容:
- 支持使用
bs4.SoupStrainer精确定位内容区域 - 示例中抓取中国政府网站的法律条文内容