【LangChain4j从入门到精通实战教学】003、LangChain4j核心概念拆解:Model、Prompt、Chain、Agent、Memory
003、LangChain4j核心概念拆解Model、Prompt、Chain、Agent、Memory从一次深夜调试说起我在本地跑一个文档问答的Demo代码看起来一切正常但每次调用都返回完全无关的答案。折腾半小时后才发现我传的Prompt里忘了加“请基于以下文档回答”这句指令——AI直接把我的问题当成了闲聊。这个坑让我重新审视LangChain4j里那几个最基础的概念它们看似简单实则每个背后都有门道。今天我们就拆开看看Model、Prompt、Chain、Agent、Memory这五个核心部件到底该怎么用。Model不只是“模型”那么简单在LangChain4j里Model通常指语言模型本身比如OpenAI的GPT、本地的Llama。但新手容易忽略的是这里其实封装了两层东西// 常见写法直接调模型Stringresponsemodel.generate(今天天气怎么样);// 更好的写法明确指定模型参数ChatLanguageModelmodelOpenAiChatModel.builder().apiKey(your-key).modelName(gpt-4)// 这里一定要显式指定默认可能是旧版本.temperature(0.7)// 创造性程度0.0~1.0业务场景建议0.3以下.maxTokens(500)// 不设的话可能收到长篇大论.build();踩过的坑temperature设成0.9时生成的产品描述每次都不一样测试用例直接崩了。生产环境建议0.1~0.3保证输出稳定。Prompt指令的艺术Prompt不是简单地把问题丢进去。它更像是在给AI写任务说明书。// 反面教材太随意StringbadPrompt给我写个Java单例模式;// 正面教材结构化PromptStringgoodPrompt 你是一个资深Java架构师请完成以下任务 1. 用双重检查锁实现线程安全的单例模式 2. 加上详细的注释说明关键步骤 3. 最后用一句话总结这种写法的优缺点 要求 - 代码必须能直接编译 - 禁止使用已废弃的写法 - 变量名用英文 开始写代码吧 ;更专业的做法是用PromptTemplatePromptTemplatetemplatePromptTemplate.from(请把{{input}}翻译成{{language}}要求专业术语准确。);MapString,ObjectvariablesnewHashMap();variables.put(input,neural network);variables.put(language,法语);Promptprompttemplate.apply(variables);// 这里会生成完整指令个人经验Prompt里加上角色设定“你是一个XX专家”效果提升明显。重要指令放开头和结尾——AI对这两个位置更敏感。Chain把任务串起来Chain才是LangChain4j的灵魂。它把多个步骤连成一个工作流。// 典型场景先查资料再总结最后格式化输出ChainString,StringchainChain.builder().addStep(retrievalStep)// 第一步从向量库检索相关文档.addStep(summarizationStep)// 第二步提取关键信息.addStep(formattingStep)// 第三步按模板格式化.build();Stringresultchain.execute(LangChain4j有哪些核心特性);调试技巧复杂Chain建议先拆开测试每个Step确认单个环节没问题再串联。曾经有个Bug折腾半天最后发现是第二个Step的输出格式第三个Step解析不了。Agent让AI自己“动脑子”Agent是能自主决定调用哪些工具的智能体。这是最像“AI助手”的部分。AgentagentAgent.builder().tools(Arrays.asList(newCalculatorTool(),// 数学计算工具newSearchTool(),// 网络搜索工具newFileReaderTool()// 文件读取工具)).maxIterations(10)// 重要防止无限循环.build();Stringansweragent.execute(请计算公司去年营收增长率然后搜索行业平均数据做对比);这里有个经典陷阱Agent可能陷入思考循环。比如“我需要计算增长率→调用计算工具→结果需要对比→需要行业数据→搜索工具→搜索结果需要分析→我需要计算增长率…”设置maxIterations和合理的超时机制是必须的。Memory记住上下文Memory让对话有了连续性。分两种短期记忆当前会话和长期记忆向量存储。// 会话记忆MessageWindowChatMemorymemoryMessageWindowChatMemory.withMaxMessages(10);memory.add(UserMessage.from(我喜欢吃苹果));memory.add(AiMessage.from(苹果富含维生素));// 下次对话时AI记得之前的内容Stringresponsemodel.generate(memory.messages());实际项目中的建议对话类应用建议保留最近10-20轮消息重要信息可以手动存入长期记忆比如用户偏好敏感信息别往Memory里存——隐私合规问题定期清理Memory避免token超限个人实战心得从简单开始别一上来就搞复杂Chain。先用ModelPrompt跑通最小原型再加Memory最后上Chain和Agent。Prompt要迭代优化把成功的Prompt存成模板文件建立自己的“Prompt库”。同一个任务优化前后的效果可能差三倍。Chain的边界要清晰每个Step只做一件事。Step之间用明确的数据结构传递数据别用含糊的字符串。Agent需要约束给Agent明确的工具列表和调用规则。生产环境建议加监控记录每次工具调用和结果。Memory不是万能的关键信息建议让用户确认一遍“您说的是XXX对吗”而不是完全依赖Memory。测试要覆盖异常流网络超时、模型返回空、格式错乱——这些才是线上真正的问题。正常流大家都好异常流才见功夫。最后说个真事我见过最优雅的LangChain4j代码是把每个Chain都写成了可配置的YAML文件用工厂模式动态组装。而最烂的代码是把所有逻辑堆在一个2000行的类里。工具本身只是基础怎么用才见水平。下次我们聊聊实际项目里怎么设计Chain的拓扑结构——什么时候用顺序链什么时候用路由链什么时候该上Agent。