13 · langchain_core 全地图:那个”地基包”里到底有什么
本片目标:把 langchain_core 的 36 个模块全部过一遍——哪些你已天天用、哪些以后用得上、哪些是历史包袱要避开。学完你能看着任何from langchain_core.xxx import yyy说出它属于哪一族、干嘛的。 新增规定性:—(本片不新增概念,是对前 12 篇用过的模块做全景收束——规定性展开链条的一次”中场盘点”) 数据字典:36 个模块 + 5 大家族 + 每个模块的核心类清单(实测)。 进程线程模型:无网络、无并发——纯代码阅读 + 一次dir()检查。 网络模型:0 网络请求。
1. 上集回顾
第 12 篇我们钻进了langchain_core.runnables.config 的源码,看到了 ContextThreadPoolExecutor、run_in_executor。你意识到:你一直在用 langchain_core,但只用了它的冰山一角。
回头看看前 12 篇,你其实已经用过这些模块:
9 个模块,11 篇。 但 langchain_core 有 36 个模块。剩下 27 个是什么?哪些值得学?哪些是坑?
2. 数据字典:36 个模块全清单(实测,langchain_core 1.5.1)
2.1 五大家族分类
3. 数据字典:⭐ 必须掌握(你已经在用的 9 个模块)
3.1 messages(56 个导出)——消息对象全集
3.2 prompts(21 个导出)——模板
ChatPromptTemplate / MessagesPlaceholder / PromptTemplate——03 篇全用过。
3.3 language_models(19 个导出)——模型的”爹”
3.4 output_parsers(17 个导出)——输出处理
StrOutputParser(04 篇)、BaseOutputParser(接口)、PydanticOutputParser(05 篇的底层)。
3.5 embeddings(3 个导出)——向量接口
Embeddings(08 篇):embed_query / embed_documents / 异步版。
3.6 documents(3 个导出)——知识盒子
Document(07 篇)、BaseDocumentTransformer(切分器接口的爹)、BaseDocumentCompressor(压缩器接口的爹)。
3.7 retrievers(24 个导出)——检索器
BaseRetriever(08 篇):invoke(query) -> list[Document]。
3.8 vectorstores(4 个导出)——向量库接口
VectorStore(08 篇:add_texts/similarity_search/as_retriever)、VectorStoreRetriever、InMemoryVectorStore(内存版向量库,测试神器——不用装 Chroma)。
3.9 runnables(29 个导出)——组合协议(规定性 9 的核心)
4. 数据字典:✅ 了解即可(进阶/生产才用)
4.1 callbacks(34 个导出)——生命周期监听
BaseCallbackHandler:监听 on_llm_start / on_llm_end / on_tool_start……做生产应用想看”每次调用多少 token、耗时多久”就写它的子类。LangSmith 追踪的底层就是它。
4.2 chat_history(13 个导出)——记忆存储抽象
BaseChatMessageHistory / InMemoryChatMessageHistory——06 篇的”正规军”。接口统一,生产换 Redis 实现即可。
4.3 stores(19 个导出)——通用 KV 存储
BaseStore / InMemoryStore:比 chat_history 更底层,存任意键值数据、跨会话共享。
4.4 load(6 个导出)——序列化
dumps / loads:把 prompt/消息存成 JSON,下次加载。生产配置管理用。
4.5 indexing(8 个导出)——增量索引
index() / RecordManager:生产文档更新时才需要——只处理新文档,不用每次全量重建(13 篇的 indexer 是简化版)。
4.6 rate_limiters(7 个导出)——限速
InMemoryRateLimiter / BaseRateLimiter:批量调用防 429(11 篇讲过 API 限流)。
4.7 example_selectors(5 个导出)——few-shot 选例
SemanticSimilarityExampleSelector:给模型例子(few-shot)时自动挑最相关的。
4.8 cross_encoders(3 个导出)——重排序接口
BaseCrossEncoder:10 篇重排的接口抽象(我们直接用的 sentence-transformers)。
4.9 outputs(7 个导出)——内部结构
LLMResult / ChatResult:generate() 批量接口和回调里的原始结构。invoke() 直接给 AIMessage,日常碰不到。
4.10 其他(知道存在即可)
document_loaders(文档加载接口)、structured_query(结构化查询翻译)、caches(缓存)、chat_loaders/chat_sessions(聊天记录导入)、tracers(追踪)、utils(工具函数)、exceptions(下一节)、env/globals/version/sys_info/_api/_security/_import_utils(内部基础设施)。
5. 数据字典:⚠️ 避坑(这些是”坑”不是”知识”)
5.1 agents 模块(14 个导出)——历史包袱
里面有 AgentAction / AgentStep / AgentFinish——这是 LangChain 0.x 时代 AgentExecutor 的数据结构。看到旧教程里的 AgentExecutor/AgentAction 就知道是历史遗留。本系列不用 agent(你要求的),直接避开。
5.2 根本没有 structured_output 模块!
BaseChatModel.with_structured_output() 方法 + output_parsers 里的 Pydantic 系列实现的(05 篇)。
5.3 exceptions(8 个导出)——报错认类型
LangChainException(所有异常的爹)、OutputParserException(解析失败)。catch LangChainException 不会漏。
6. 关键方法(本片主角:怎么”看”这个包)
7. 进程线程模型
8. 网络模型
0 网络请求。 本片是纯代码考古——翻site-packages/langchain_core/ 目录和 dir() 输出。这正是 langchain_core 的定位:它是协议层,不发请求;发请求的是集成包(langchain-anthropic 等)。
9. 验证:跑起来
配套代码code/13_core_map.py:
- 打印 langchain_core 版本和全部模块;
- 验证”没有 structured_output 模块”(ImportError 演示);
- 验证
ChatAnthropic是BaseChatModel的子类(你天天用的东西的”族谱”); - 打印
RunnableWithMessageHistory的废弃警告。
10. 边界
- 模块数量会随版本变——1.5.1 是 36 个,升级可能增减。以
dir()实测为准,别背死。 - 下划线开头的模块(_api/_security 等)是内部的——别 import,别学,API 随时变。
agents模块 ≠ 本系列说的”不用 agent”——那是旧 AgentExecutor 的历史数据结构,和 create_agent(LangGraph)无关。两者都不是我们要用的。RunnableWithMessageHistory已废弃——网上旧教程大量用它,看到就换手动方案(06 篇)。
推荐资料(延伸阅读)
- langchain-core API 参考(全目录) —— 36 个模块的完整类清单
- LangChain 官方文档 · 总览 —— 包结构官方说明