LangChain 目录结构

0 阅读2分钟

LangChain 标准目录结构(主干)

langchain-project/
├── README.md
├── .env
├── .gitignore
├── requirements.txt
│
├── app/                    # 应用层(入口与编排)
│   ├── main.py             # 主入口
│   ├── settings.py         # 配置集中管理
│   └── lifecycle.py        # 启动/初始化逻辑
│
├── chains/                 # 业务链(Chain / Runnable)
│   ├── __init__.py
│   ├── qa_chain.py
│   ├── summary_chain.py
│   └── agent_chain.py
│
├── prompts/                # Prompt 资产(核心资产)
│   ├── __init__.py
│   ├── system/
│   │   └── qa_system.txt
│   ├── user/
│   │   └── question.txt
│   └── templates.py        # PromptTemplate / ChatPromptTemplate
│
├── models/                 # 模型封装层
│   ├── __init__.py
│   ├── openai.py
│   ├── anthropic.py
│   └── embeddings.py
│
├── loaders/                # 数据加载
│   ├── __init__.py
│   ├── pdf_loader.py
│   ├── doc_loader.py
│   └── web_loader.py
│
├── vectorstore/            # 向量存储
│   ├── __init__.py
│   ├── faiss_store.py
│   ├── chroma_store.py
│   └── retriever.py
│
├── tools/                  # Agent 工具
│   ├── __init__.py
│   ├── search.py
│   ├── calculator.py
│   └── custom_tool.py
│
├── memory/                 # 记忆机制
│   ├── __init__.py
│   ├── buffer.py
│   ├── summary.py
│   └── redis_memory.py
│
├── services/               # 领域服务(非 LangChain 逻辑)
│   ├── __init__.py
│   ├── user_service.py
│   └── document_service.py
│
├── api/                    # 对外接口(FastAPI / Flask)
│   ├── __init__.py
│   ├── router.py
│   └── schemas.py
│
├── tests/                  # 测试
│   ├── test_chains.py
│   ├── test_tools.py
│   └── test_retrieval.py
│
└── scripts/                # 一次性脚本
    ├── ingest_docs.py
    └── rebuild_index.py

每一层为什么存在(不是形式主义)

app/ —— 系统中枢

这里只有「组合」,不写业务逻辑

  • 初始化模型
  • 装配 chain / agent
  • 注入配置、依赖

原则

app 不思考业务,只拉线


chains/ —— 真正的“智能行为”

这里是 LangChain 的心脏:

prompt | llm | parser
  • 一个文件 = 一个稳定能力
  • 不掺杂 I/O、不直接读 API

📌 经验法则

chain 是“能被复用的思考方式”


prompts/ —— 最值钱的资产

Prompt ≠ 字符串 Prompt = 产品逻辑 + 认知约束

为什么单独拆?

  • 要版本化
  • 要 A/B 测试
  • 要被产品经理“调教”

千万不要把 prompt 写死在 chain 里。


models/ —— 模型隔离层

def get_chat_model():
    return ChatOpenAI(...)

好处:

  • OpenAI → Anthropic 无痛切换
  • 多模型策略(便宜 / 高质量)

模型是可替换件,不是业务核心


loaders/ + vectorstore/ —— RAG 的左右手

  • loaders:把“世界”读进来
  • vectorstore:把“记忆”存下来

你未来换:

  • FAISS → Milvus
  • Chroma → PGVector

上层代码不用改


tools/ —— Agent 的手和脚

一个 tool = 一种外部能力

  • 查数据库
  • 调接口
  • 算数 / 搜索 / 控制系统

📌 经验之谈:

Tool 要小、要确定、要可失败


memory/ —— 对话的时间维度

  • Buffer:短期记忆
  • Summary:长期压缩
  • Redis:多用户

不要在 chain 里硬编码 memory。


services/ —— 反腐层

这是很多人会忽略的一层。

用途:

  • 放业务规则
  • 放数据库逻辑
  • 放非 AI 判断

不要让 LLM 直接碰业务数据


api/ —— 产品化出口

当你开始:

  • 接前端
  • 接第三方
  • 上生产

这一层是 唯一对外的门


三个铁律(实话)

Prompt ≠ Chain ≠ Model

混在一起,后期必死。

LangChain 只负责“认知编排”

业务判断放 services。

能测试的,才是工程

Chain 不可测 = 不可维护。


最小可用结构(如果你刚起步)

project/
├── main.py
├── chains/
├── prompts/
├── models/
└── vectorstore/

先活下来,再优雅。

更多精彩内容请关注微信公众号 “学GIS的小宝同学”

qrcode_for_gh_c97ecdcb886c_344.jpg