跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaAIjava

基于 LangChain4j 的 Java 智能医疗助手实战

本项目基于 LangChain4j 框架,演示了如何在 Java SpringBoot 应用中集成大语言模型。内容涵盖本地 Ollama 部署与阿里云百炼接入,实现了 AIService 动态代理、聊天记忆(内存与持久化)、提示词工程、函数调用及 RAG 检索增强生成。此外还介绍了向量数据库 Pinecone 的集成以及流式输出改造,最终构建了一个具备订单管理功能的智能医疗助手原型。

邪神洛基发布于 2026/1/14更新于 2026/10/24107 浏览
基于 LangChain4j 的 Java 智能医疗助手实战

基于 LangChain4j 的 Java 智能医疗助手实战

LangChain4j 的目标是简化将大语言模型(LLM)集成到 Java 应用程序中的过程。本文将带你一步步构建一个具备聊天记忆、函数调用及 RAG 能力的智能助手。

1. 创建 SpringBoot 项目

1.1 创建 Maven 项目

按照标准流程初始化 SpringBoot 工程。

文章配图

1.2 导入相关依赖项

在 pom.xml 中配置版本管理和核心依赖。

![](https://qiniu.meowparty.cn/coder.2023/2026-01-14/5b4d871e068d4618a0aba6830804fce8.png) ![](https://qiniu.meowparty.cn/coder.2023/2026-01-14/61dda66993314708bfa3e11cf7ffa7ca.png) ![](https://qiniu.meowparty.cn/coder.2023/2026-01-14/e07759cd620d43edad130651328dbb2d.png)

1.3 配置模型参数

在配置文件中设定模型接入信息。

文章配图

1.4 创建测试类

编写简单的单元测试验证连接。

文章配图

输出如下:

文章配图

2. Ollama 本地部署

Ollama 是一个本地部署大模型的工具,适合对数据隐私、离线可用性及成本敏感的场景。

2.1 在 Ollama 上部署 Deepseek

2.1.1 下载安装 Ollama

并在 cmd 中执行 ollama run deepseek-r1:1.5b 命令:

文章配图

2.2 导入 Ollama 相关依赖

引入对应的 SDK 依赖。

文章配图

2.3 添加配置模型参数

配置本地模型的访问地址和名称。

文章配图

2.4 编写测试方法

运行测试验证本地模型连通性。

文章配图

输出结果正常。

文章配图

3. 接入阿里百炼

3.1 导入依赖

引入阿里云百炼相关的 SDK。

文章配图

文章配图

3.2 配置模型参数

设置 API Key 及模型 ID。

文章配图

3.3 测试通义千问和通义万象

验证云端模型调用。

文章配图

3.4 阿里百炼集成 Deepseek

配置模型参数后直接运行测试类 testSpringBoot 即可。

文章配图

4. 人工智能服务 AIService

4.1 AIService

AIService 使用面向接口和动态代理的方式完成程序的编写,更灵活地实现高级功能。它可处理最常见的操作:为大语言模型格式化输入内容、解析大语言模型的输出结果。同时支持聊天记忆、工具调用、检索增强生成等高级功能。

4.2 引入相关依赖

确保包含 AIService 模块依赖。

文章配图

4.3 创建接口

定义业务接口。

文章配图

4.4 编写测试方法

文章配图

输出:

文章配图

4.5 原理

AiServices 会组装 Assistant 接口以及其他组件,并使用反射机制创建一个实现 Assistant 接口的代理对象。这个代理对象会处理输入和输出的所有转换工作。简单理解就是:代理对象的作用是输入转换和输出转换。

5. 聊天记忆 (ChatMemory)

5.1 聊天记忆的简单实现

文章配图

文章配图

5.2 创建 MemoryChatAssistant 接口

文章配图

5.3 创建配置类

文章配图

5.4 编写测试方法

文章配图

输出:

文章配图

5.5 隔离聊天记忆

5.5.1 创建接口

文章配图

5.5.2 配置模型参数

文章配图

5.5.3 编写测试类

文章配图

输出:

文章配图

6. 持久化聊天记忆 Persistence

6.1 优化实体类

文章配图

6.2 创建持久化类

文章配图

文章配图

6.3 完善配置类

文章配图

6.4 运行 Test5 测试方法测试即可

消息已经正确以 JSON 格式存储在了 MongoDB 中。

文章配图

7. 提示词 PromptTest

7.1 系统提示词

系统提示词 @SystemMessage 设定角色,塑造 AI 助手的专业身份,明确助手的能力范围。

7.1.1 配置 @SystemMessage

@SystemMessage 的内容将在后台转换为 SystemMessage 对象,并与大语言模型(LLM)一起发送。SystemMessage 的内容只会发送给大模型一次。如果修改了 SystemMessage 的内容,新的 SystemMessage 会被发送给大模型,之前的聊天记忆会失效。

文章配图

7.1.2 编写测试方法

文章配图

输出结果:

JVM:

文章配图

MongoDB:

文章配图

7.1.3 从资源中加载提示模板

@SystemMessage 注解还可以从资源中加载提示模板。

文章配图

my-prompt-template.txt:

文章配图

7.1.4 用户提示词模板

@UserMessage:获取用户输入。在 MemoryChatAssistant 的 chat 方法中添加注解。

文章配图

7.1.5 编写测试方法

文章配图

输出:

文章配图

7.2 指定参数名称

@V 明确指定传递的参数名称。

文章配图

7.3 多个参数情况

如果有两个或两个以上的参数,必须要用 @V,在 SeparateChatAssistant 中定义方法。

文章配图

7.3.1 编写测试方法

文章配图

输出:

文章配图

7.4 @SystemMessage 和 @V

也可以将 @SystemMessage 和 @V 结合使用。在 SeparateChatAssistant 中添加方法。

文章配图

7.4.1 编写测试方法

文章配图

输出:

文章配图

8. 创建清影小智

8.1 创建小智接口

文章配图

8.2 创建小智配置类

文章配图

8.3 创建小智实体类

文章配图

8.4 创建小智控制器类

文章配图

8.5 创建 xiaozhi-prompt-temple.txt

文章配图

8.6 通过 Swagger 和启动类测试

文章配图

9. Function Calling 函数调用

Function Calling 也叫 Tools。工具大语言模型本身并不擅长数学运算。如果应用场景中偶尔会涉及到数学计算,我们可以为它提供一个'数学工具'。当我们提出问题时,大语言模型会判断是否使用某个工具。

9.1 创建工具类

  1. @Tool 注解有两个可选字段:name(工具名称)、value(工具描述)。
  2. @P 注解 方法参数可以选择使用 @P 注解进行标注。value:参数的描述信息,这是必填字段。required:表示该参数是否为必需项,默认值为 true。
  3. @ToolMemoryId true,此为可选字段。如果你的 AIService 方法中有一个参数使用 @MemoryId 注解,那么你也可以使用 @Tool 方法中的一个参数。

文章配图

9.2 配置工具类

文章配图

9.3 编写测试类

文章配图

输出:

文章配图

10. 优化清影小智

实现清影小智的查询订单、预约订单、取消订单的功能。

10.1 创建 MySQL 数据库表

文章配图

10.2 引入依赖

文章配图

10.3 配置数据库连接

文章配图

10.4 创建实体类

文章配图

10.5 Mapper

文章配图

10.5.1 映射文件

文章配图

10.6 创建服务层接口

文章配图

10.7 创建接口实现类

文章配图

10.8 创建测试方法

文章配图

输出:

文章配图

10.9 完善功能

10.9.1 创建 Tools 工具类

文章配图

文章配图

文章配图

10.9.2 配置工具类

文章配图

10.9.3 运行

运行结果:

文章配图

10.9.4 文档分割器 Document Splitter

LangChain4j 有一个'文档分割器'(DocumentSplitter)接口,并且提供了几种开箱即用的实现方式:按段落、行、句子、单词、字符及正则表达式分割。递归分割默认情况下每个文本片段最多不能超过 300 个 token。

10.9.5 试向量转换和向量存储

Embedding Stores 常见的意思是'嵌入(向量)存储'。Langchain4j 支持的向量存储可参考官方文档。

添加依赖:

文章配图

测试:

文章配图

文章配图

文章配图

10.9.6 工作方式
  1. 实例化一个'文档分割器',指定所需的'文本片段'大小,且可以选择指定 characters 或 token 的重叠部分。
  2. '文档分割器'将给定的文档分割成更小的单元。
  3. 然后组合成'文本片段',尝试在单个'文本片段'中包含尽可能多的单元,同时不超过第一步中设置的限制。

期望的文本片段最大大小

  1. 模型上下文窗口:通常设置为 1000 - 1500 左右。
  2. 数据特点:复杂内容可适当提高,如 500 - 800 个 token。
  3. 检索需求:精确匹配较小片段,如 200 - 300 个 token。

重叠部分大小

  1. 上下文连贯性:建议 50 - 100 个 token。
  2. 数据冗余:一般 20 - 50 个 token。
  3. 模型处理能力:敏感性高则较小,依赖大则适当增加。

例如,在处理一般性的文本资料,且使用的模型上下文窗口较大时,设置文本片段最大大小为 600 - 800 个 token,重叠部分为 30 - 50 个 token 可能是一个不错的选择。

11. 在清影小智中实现 RAG

11.1 创建 Bean 对象

在 xiaozhiAgentConfig 中添加 ContentRetriever。

文章配图

11.2 添加配置

文章配图

11.3 优化工具类的 value 提示

文章配图

11.4 通过 Controller 测试

文章配图

12. 向量模型和向量存储

12.1 向量大模型

通用文本向量模型推荐使用 text-embedding-v3,维度 1024,维度越多,对事务的描述越精准,信息检索的精度越高。

12.2 配置向量模型

langchain4j.community.dashscope.embedding-model.api-key=${ALI_API_KEY}
langchain4j.community.dashscope.embedding-model.model-name=text-embedding-v3

12.3 文本向量化

文章配图

12.4 向量存储

12.4.1 Pinecone 简介

之前使用的是 InMemoryEmbeddingStore 作为向量存储,但是不建议在生产中使用基于内存的向量存储。因此这里我们使用 Pinecone 作为向量数据库。

12.4.2 Pinecone 的使用

得分的含义:衡量查询向量和存储向量之间的相似程度。得分越高,表明相关性越高。 得分的作用:筛选结果,控制召回率和准确率。minScore(0.8) 意味着只有得分大于等于 0.8 的结果才会被返回。

12.5 集成 Pinecone

引入相关依赖。

文章配图

12.6 测试向量存储

文章配图

测试相似度匹配

文章配图

输出:

文章配图

13. 在清影小智中整合向量数据库

13.1 上传知识库到 Pinecone

文章配图

13.2 添加 XiaozhiAgentConfig

文章配图

13.3 修改 XiaozhiAgent

修改 contentRetriever 的配置为 contentRetrieverXiaozhiPincone。

文章配图

14. 改造流式输出

大模型的流式输出是指大模型在生成文本或其他类型的数据时,不是等到整个生成过程完成后再一次性返回所有内容,而是生成一部分就立即发送一部分给用户或下游系统。这样,用户就不需要等待整个文本生成完成再看到结果。

14.1 添加依赖

文章配图

14.2 配置大模型

文章配图

14.3 修改优化

修改 XiaozhiAgent 中 chatModel 改为 streamingChatModel = "qwenStreamingChatModel"。chat 方法的返回值为 Flux。

文章配图

14.4 修改 Controller

将 XiaozhiController 中 chat 方法的返回值修改为 Flux,并添加 produces 属性。

文章配图

至此,清影小智的核心功能开发完成,可以通过运行主程序后,利用 Swagger 在浏览器上进行功能测试。

目录

  1. 基于 LangChain4j 的 Java 智能医疗助手实战
  2. 1. 创建 SpringBoot 项目
  3. 1.1 创建 Maven 项目
  4. 1.2 导入相关依赖项
  5. 1.3 配置模型参数
  6. 1.4 创建测试类
  7. 2. Ollama 本地部署
  8. 2.1 在 Ollama 上部署 Deepseek
  9. 2.1.1 下载安装 Ollama
  10. 2.2 导入 Ollama 相关依赖
  11. 2.3 添加配置模型参数
  12. 2.4 编写测试方法
  13. 3. 接入阿里百炼
  14. 3.1 导入依赖
  15. 3.2 配置模型参数
  16. 3.3 测试通义千问和通义万象
  17. 3.4 阿里百炼集成 Deepseek
  18. 4. 人工智能服务 AIService
  19. 4.1 AIService
  20. 4.2 引入相关依赖
  21. 4.3 创建接口
  22. 4.4 编写测试方法
  23. 4.5 原理
  24. 5. 聊天记忆 (ChatMemory)
  25. 5.1 聊天记忆的简单实现
  26. 5.2 创建 MemoryChatAssistant 接口
  27. 5.3 创建配置类
  28. 5.4 编写测试方法
  29. 5.5 隔离聊天记忆
  30. 5.5.1 创建接口
  31. 5.5.2 配置模型参数
  32. 5.5.3 编写测试类
  33. 6. 持久化聊天记忆 Persistence
  34. 6.1 优化实体类
  35. 6.2 创建持久化类
  36. 6.3 完善配置类
  37. 6.4 运行 Test5 测试方法测试即可
  38. 7. 提示词 PromptTest
  39. 7.1 系统提示词
  40. 7.1.1 配置 @SystemMessage
  41. 7.1.2 编写测试方法
  42. 7.1.3 从资源中加载提示模板
  43. 7.1.4 用户提示词模板
  44. 7.1.5 编写测试方法
  45. 7.2 指定参数名称
  46. 7.3 多个参数情况
  47. 7.3.1 编写测试方法
  48. 7.4 @SystemMessage 和 @V
  49. 7.4.1 编写测试方法
  50. 8. 创建清影小智
  51. 8.1 创建小智接口
  52. 8.2 创建小智配置类
  53. 8.3 创建小智实体类
  54. 8.4 创建小智控制器类
  55. 8.5 创建 xiaozhi-prompt-temple.txt
  56. 8.6 通过 Swagger 和启动类测试
  57. 9. Function Calling 函数调用
  58. 9.1 创建工具类
  59. 9.2 配置工具类
  60. 9.3 编写测试类
  61. 10. 优化清影小智
  62. 10.1 创建 MySQL 数据库表
  63. 10.2 引入依赖
  64. 10.3 配置数据库连接
  65. 10.4 创建实体类
  66. 10.5 Mapper
  67. 10.5.1 映射文件
  68. 10.6 创建服务层接口
  69. 10.7 创建接口实现类
  70. 10.8 创建测试方法
  71. 10.9 完善功能
  72. 10.9.1 创建 Tools 工具类
  73. 10.9.2 配置工具类
  74. 10.9.3 运行
  75. 10.9.4 文档分割器 Document Splitter
  76. 10.9.5 试向量转换和向量存储
  77. 10.9.6 工作方式
  78. 11. 在清影小智中实现 RAG
  79. 11.1 创建 Bean 对象
  80. 11.2 添加配置
  81. 11.3 优化工具类的 value 提示
  82. 11.4 通过 Controller 测试
  83. 12. 向量模型和向量存储
  84. 12.1 向量大模型
  85. 12.2 配置向量模型
  86. 12.3 文本向量化
  87. 12.4 向量存储
  88. 12.4.1 Pinecone 简介
  89. 12.4.2 Pinecone 的使用
  90. 12.5 集成 Pinecone
  91. 12.6 测试向量存储
  92. 13. 在清影小智中整合向量数据库
  93. 13.1 上传知识库到 Pinecone
  94. 13.2 添加 XiaozhiAgentConfig
  95. 13.3 修改 XiaozhiAgent
  96. 14. 改造流式输出
  97. 14.1 添加依赖
  98. 14.2 配置大模型
  99. 14.3 修改优化
  100. 14.4 修改 Controller

更多推荐文章

查看全部
  • 大语言模型 LoRA 微调实战指南
  • 基于指数预定义时间控制的固定翼无人机轨迹跟踪控制(Matlab 仿真)
  • 5 款设计师必备的 Stable Diffusion 模型,涵盖 3D、电商与 B 端场景
  • DeepSeek-R1 大模型基于 MS-Swift 框架部署与微调实践
  • 金仓 KingbaseES 融合架构实践:从多库并存到一库多能
  • Python 海龟绘图实战:绘制哆啦 A 梦、海绵宝宝与皮卡丘
  • 彻底关闭Win10中烦人的365 Copilot弹窗的6种方法
  • 大模型 AI Agent 在企业应用中的 6 种基础类型
  • Neo4j 在 Windows 上的安装与配置指南
  • 国内主流 AI 工具对比:豆包、元宝、千问、Kimi 等七款模型
  • AI 写作辅助平台深度评测:炼字工坊与蛙蛙写作
  • 66 个可直接访问的机器人项目合集!涵盖科研 / 教育 / 工业 / 医疗(附详细介绍与项目代码链接)
  • 前端团队协作最佳实践与效率提升
  • Linux ELF 格式与可执行程序加载全解析:从磁盘文件到运行进程
  • Python 入门指南:初学者友好的编程语言详解
  • GPT-4o 多模态交互与端侧应用玩法解析
  • 用原生 JavaScript 和 Canvas 实现网页截图:从底层原理到下载
  • 2023 年网络安全行业前景预测
  • Transformer 核心机制解析:自注意力与多头机制
  • PX4 与 ROS 集成:无人机 Offboard 控制模式解析与实战

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online