SDU软件学院创新实训 (一)
从项目正式提交任务书开始,我开始了学习技术的过程,这段时间重点学习了langchain4j的相关技术知识,下面写一些自己的收获和思考。
一、技术选择
在 Java 生态中,LangChain4j 是一个非常重要的工具,它类似于 Python 里的 LangChain,专门为 Java 开发者设计,无需切换技术栈,即可完成相关的配置和使用,使用方式逻辑也与Java高度吻合,符合开发习惯,所以我们小组最终决定使用 LangChain4j 作为智能体开发的关键技术。
我对LangChain4j的理解:它是Java生态中连接大语言模型与应用业务的工具。
首先,它不做模型训练,也不做底层推理引擎,它做的就是让Java开发者能用最熟悉的方式调用AI能力 。你不需要懂Transformer、不需要知道什么是注意力机制,你只需要像写Spring Boot代码一样写几个接口、加几个注解,就能构建一个能理解自然语言的应用程序。极大提高了开发效率并且降低了学习成本!
LangChain4j的整体架构可以分为几个层次。最底层是对各种LLM提供商(OpenAI、阿里云千问、智谱等)的统一封装,让开发者切换模型就像切换数据库驱动一样简单 。中间层是各种功能组件,比如对话记忆(ChatMemory)、文档加载器(DocumentLoader)、向量存储(EmbeddingStore)等。最上层是AI Service——一种声明式的开发方式,你只需要定义一个接口,框架就会自动帮你生成实现类 。
这种分层设计让我想起了Java生态中的JDBC:底层统一接口,上层可以自由扩展。不同之处在于,LangChain4j的“数据库”是大模型,“SQL”是自然语言。
二、ChatLanguageModel 的学习理解
ChatLanguageModel 是LangChain4j中最底层的接口,也是我们与AI模型交互的直接通道。
我当时写了下面这段最基础的代码:
ChatLanguageModel model = OpenAiChatModel.builder()
.apiKey(System.getenv("OPENAI_API_KEY"))
.modelName("gpt-3.5-turbo")
.temperature(0.7)
.build();
String response = model.generate("请介绍一下Java的Stream API");
这段代码看起来简单,但充分体现了消息封装的设计思想。generate方法接收的不是一个简单的字符串,而是一个ChatMessage列表 。为什么要这样设计?因为AI对话本质上是一来一回的消息交换,不是一问一答的请求响应。用户发来的UserMessage、AI返回的AiMessage、系统预设的SystemMessage,这些消息类型各有其语义,LangChain4j 把它们封装成了对象,让代码能够更清晰地表达意图。
我踩过的一个坑是temperature参数的理解。刚开始我觉得这个参数无所谓,随便设了个1。结果在写单元测试的时候,同样的输入每次输出都不一样,测试用例直接崩溃了 。后来经过搜索学习才明白,temperature控制的是模型回答的随机性:值越高回答越多样,值越低回答越稳定。在企业级业务场景中,我们通常需要稳定的输出,所以temperature应该设置在0.3以下。
还有一点让我印象深刻的是 LangChain4j 对多模态的支持(虽然本项目并不需要多模态,但作为学习有进行一定了解)。UserMessage不仅可以包含文本,还可以包含图片、PDF等多媒体内容 。我写了一个简单的多模态测试,想让模型识别一张图片,结果发现不是所有模型都支持多模态(qwen-max就不支持),调用直接报错,所以实际项目中一定要先确认模型支持哪些功能。
三、智能体记忆与RAG
如果说 ChatLanguageModel是AI的大脑,那 ChatMemory就是AI的记忆系统
LangChain4j 提供了两种主要的记忆实现:MessageWindowChatMemory和TokenWindowChatMemory 。前者按消息数量来管理记忆窗口,保留最近的N条消息;后者按Token数量来管理,保留最近的N个Token。
除了记忆模块,我还学习了RAG(检索增强生成)机制。这是解决大模型知识时效性问题和幻觉问题的关键技术。
简单来说,RAG就是给大模型配一个“知识库”——当用户提问时,先从知识库里检索相关的内容,然后把检索结果和问题一起交给大模型,让它基于这些内容来回答。这样一来,大模型不仅能回答通用问题,还能回答私有领域的问题,而且回答的内容有据可查,能大大减少“幻觉”现象。这也是本项目落地的重要技术。
其工作流程大致如下:
-
用户提问
-
将问题转换成向量
-
在向量数据库中搜索与问题向量最相似的知识片段
-
把检索到的片段作为上下文,连同问题一起提交给大模型
-
大模型基于上下文生成答案
这就是第四周的学习内容,后续将针对 LangChain4j 进行实操落地的学习和实践。
更多推荐


所有评论(0)