LangChain 核心功能
核心功能
LangChain 的能力可以按「输入 — 处理 — 输出 — 编排 — 观测」五层来理解。下面这张表是最常用的十块,覆盖了绝大多数项目会用到的部分。
| 模块 | 作用 | 常用类 / 函数 |
|---|---|---|
| Models | 统一封装各家对话模型与嵌入模型,屏蔽接口差异 | ChatOpenAI、OpenAIEmbeddings、init_chat_model |
| Prompts | 把提示词做成带变量的模板,支持多角色消息与占位符 | ChatPromptTemplate、MessagesPlaceholder |
| LCEL | 用管道符声明式组合 Runnable,自动获得批处理与流式能力 | prompt | model | parser |
| OutputParser | 把模型返回的文本转成结构化数据,或做格式校验与重试 | StrOutputParser、JsonOutputParser、PydanticOutputParser |
| Memory | 保存多轮对话历史,并在每次请求时回填到提示词里 | RunnableWithMessageHistory、ChatMessageHistory |
| Retriever | 按语义相似度从向量库或其它数据源取回相关片段 | as_retriever()、MultiQueryRetriever |
| Tools | 把普通函数注册成模型可调用的工具,自动生成参数结构 | @tool、StructuredTool |
| Agents | 由模型自主规划并循环调用工具,直到任务完成 | create_react_agent、AgentExecutor |
| Callbacks | 在链执行的关键节点挂钩子,用于日志、计费、埋点、流式推送 | BaseCallbackHandler、astream_events |
| LangGraph | 用状态图编排带分支、循环、人工介入的多步流程 | StateGraph、add_conditional_edges、compile |
关键配置项
| 参数 | 归属 | 含义与取值建议 |
|---|---|---|
temperature | ChatModel | 采样随机性。0 适合抽取、分类、判分这类要求稳定的任务;创意写作可以放到 0.7 左右。它只降低方差,并不保证完全确定。 |
max_tokens | ChatModel | 单次回复的长度上限,直接影响成本与延迟。做结构化抽取时给够就行,不要默认放开到最大。 |
streaming | ChatModel | 设为 True 后逐 token 返回,用户的首字等待时间明显下降。注意流式模式下拿不到完整的用量统计。 |
chunk_size | TextSplitter | 切分后每段的字符数。太小会割裂语义,太大会稀释检索精度。常见起点是几百字符,要按文档类型实测调整。 |
chunk_overlap | TextSplitter | 相邻片段之间重叠的字符数,用来避免一句话被切断后两边都检索不到。一般取 chunk_size 的一到两成。 |
k | Retriever | 每次检索召回的片段数,配合 search_type(相似度检索 / MMR)使用。k 越大上下文越全,噪声与 token 成本也越高。 |
timeout / max_retries | ChatModel | 请求超时与自动重试次数。生产环境必须显式设置,否则一个慢请求会拖住整个工作线程。 |
这些参数没有放之四海而皆准的最佳值,要靠评测集来定:固定一批真实问题,改参数跑一遍,比较命中率和耗时,而不是凭感觉调。接上 LangSmith 之后,追踪面板能看到每次调用的 token 数与耗时,是调参时最直接的依据。

