获课:itazs.fun/16991/
第一层:核心基础
这是构建任何应用的基石。
1. Model I/O (输入/输出)
这是与 LLM 交互最核心的模块。
Prompt Templates: Prompt 是编程 LLM 的方式。必须掌握如何创建包含变量({{variable}})的动态提示词模板。
PromptTemplate.from("写一首关于{{topic}}的诗")
Chat Memory in Prompts: 理解如何将聊天历史自动注入到 Prompt 中。
Output Parsers: 将 LLM 的非结构化文本输出转换为结构化的 Java 对象(如 POJO, List, Enum)。这是保证输出稳定性的关键。
BeanOutputParser, ListOutputParser, EnumOutputParser。
LLM 集成: 熟练配置和使用不同的 Model Provider。
OpenAI: OpenAiChatModel, OpenAiStreamingChatModel
Azure OpenAI: AzureOpenAiChatModel
Local/ Ollama: OllamaChatModel (用于本地模型)
HuggingFace: HuggingFaceChatModel
2. Data Connection (数据连接)
让 LLM 能够访问你的私有数据,解决其“知识截止”问题。
Document Loaders: 从各种来源加载数据成为 Document 对象。
来源:文件系统(TXT, PDF, PPT, Word)、URL、S3、GitHub 等。
Document Transformers: 对加载的文档进行预处理。
操作:分割(Splitter)、过滤、转换元数据。
文本分割策略是关键,直接影响检索效果(递归分割、按标记分割)。
Embedding Models: 将文本转换为数值向量(Embeddings)。
配置:AllMiniLmL6V2EmbeddingModel (本地), OpenAiEmbeddingModel, AzureOpenAiEmbeddingModel。
Vector Stores (向量数据库): 存储和检索 Embeddings。
内存:InMemoryEmbeddingStore (用于原型开发)
持久化:ChromaEmbeddingStore, PineconeEmbeddingStore, ElasticsearchEmbeddingStore, PgVectorEmbeddingStore等。
Retrieval Augmented Generation (RAG): 将以上组件串联起来的标准模式。
Ingestion (注入): 加载 -> 分割 -> 嵌入 -> 存入向量库。
Retrieval (检索): 用户提问 -> 嵌入 -> 从向量库检索最相似的 K 个片段。
Augmentation (增强): 将检索到的片段作为上下文注入到 Prompt 中。
Generation (生成): LLM 根据“上下文+问题”生成最终答案。
第二层:链与代理
用逻辑将多个步骤组合起来,解决复杂问题。
1. Chains (链)
Sequential Chains: 顺序执行多个步骤,前一个步骤的输出是后一个的输入。
Transformational Chains: 用于对文档进行一系列转换(例如,总结、翻译、提取关键词)。
Conditional Chains: 根据 LLM 的输出决定下一步执行哪个分支(if-else逻辑)。
2. Agents (代理)
代理是 LangChain 最强大的概念之一。它让 LLM 拥有“思考”和“使用工具”的能力。
核心概念: Agent = LLM + Tools + ReAct (Reason+Act) 循环。
Tools (工具): 代理可以调用的函数。你必须掌握如何创建和注册自定义工具。
示例工具:搜索数据库、调用 API、执行计算、查看时间。
使用 @Tool 注解可以轻松地将任何方法暴露为工具。
Agent Executor: 驱动代理运行的核心循环,负责调用 LLM、解析其决策、执行工具、并将结果返回给 LLM 进行下一步思考。
Planning: 高级代理可以先制定计划(Plan),然后按计划执行(Execute)。
第三层:内存与历史
管理应用与用户之间的对话状态。
Chat Memory: 用于存储和检索对话历史。
多种实现:
MessageWindowChatMemory: 只保留最近 K 条消息。
TokenWindowChatMemory: 只保留最近 N 个 Token 的消息。
PersistentChatMemory: 持久化到数据库(如 Redis、PostgreSQL)中。
第四层:高级与生产级特性
1. 可观测性 (Observability)
Tracing: 使用 langchain4j-observation 模块自动生成详细的调用链追踪,并集成到 Micrometer 和 OpenTelemetry 中。这对于调试复杂的链和代理至关重要。
Logging: 详细记录所有 LLM 的请求和响应。
2. 稳定性与性能
缓存 (Caching): 对 Embedding 和 LLM 的请求进行缓存,显著降本增效。InMemoryCache, RedisCache, CaffeineCache。
降级 (Fallbacks): 当一个 LLM 提供商出现故障时,自动降级到另一个备用提供商。
重试 (Retry): 为 LLM 调用配置重试机制,处理短暂的网络或 API 故障。
超时 (Timeout): 为 LLM 调用设置超时,防止长时间阻塞。
速率限制 (Rate Limiting): 控制对 LLM API 的请求速率。
3. 安全与合规
内容审查: 在将用户输入发送给 LLM 或向用户展示输出前,使用 Moderation API 进行审查,过滤有害内容。
第五层:实践、架构与进阶
1. 项目结构与设计模式
如何组织一个大型的 LangChain4j 项目?
如何设计松耦合的 Tools 和 Services?
如何对链和代理进行单元测试和集成测试?(使用 Mock LLM)
2. 与 Spring/Spring Boot 集成
使用 langchain4j-spring-boot-starter 进行自动配置。
如何将所有组件(Models, Stores, Tools, Memory)声明为 @Bean,方便依赖注入和管理。
3. 进阶概念
AutoGen: 设计多个代理协同完成复杂任务的模式。
Fine-Tuning: 虽然 LangChain4j 不直接处理,但你需要知道如何为 RAG 准备微调数据。
Validation: 在调用 LLM 前验证用户输入,在解析输出后验证其有效性。
总结:从“会用”到“精通”的 checklist
我能用 Prompt Template 和 Output Parser 可靠地与 LLM 交互。
我成功搭建过一套完整的 RAG 系统,从文档加载到最终生成答案。
我能为我的应用创建多个自定义 Tool,并让 Agent 熟练使用它们解决问题。
我配置了持久化的 Chat Memory,让应用能进行多轮对话。
我在生产环境中配置了 Tracing、Cache 和 Fallback 机制。
我能清晰地向团队解释 LangChain4j 项目的架构设计和核心流程。
有疑问加站长微信联系(非本文作者))
