概要
本文聚焦如何使用spring-AI来开发大模型应用一些进阶技能,包含一套可落地的技术设计模式,读完你将会学习到:
- 如何使用Spring-AI 开发大模型对话应用
- 如何综合设计一套适用Spring-ai的代码结构,为应用提供更好的扩展能力
本文假设读者已经熟悉spring-ai的基本功能以及大模型开发的入门知识,如果你还不熟悉这些基础知识,可以找我仔细学习。
开发目标
我们会简单的模拟豆包的业务模型,开发一个用户与大模型对话的应用程序,我们会从领域模型开始设计,一直到应用模型和应用实现。
由于篇幅有限,我们不展开细节完成每一个功能,这里只介绍核心领域建模和应用的开发模式。
我们将会聚焦一次对话的处理流程,如下图所示:

- 本地工具集也就是function calling 可以随时添加,删除,并且根据对话上下文动态抉择
- 向量数据库搜索可以根据对话上下文选择是否使用,甚至提供多个选择
# 设计领域模型


- Agent 表示一个大模型agent,包括大模型的命名,SystemPrompt,所属用户等
- Conversation 表示一次对话
- User 表示正在使用系统的用户
- ChatMessage表示一个对话消息,一个对话消息由多个内容组成,因为一次对话可以发送包括文本和媒体多条具体内容。
至此,我们简单模拟了豆包的领域模型

设计应用模型
首先设计一个 ChatContext类,用来表示全部对话的上下文核心,这里我们分析如下:
- 对话上下文包含 when,who,what,where,how 五种元素
- When - 用户发送消息的时间
- Who - 发送消息的用户
- What - 用户发送发的消息
- Where - 用户处于哪一个对话
- How - 本次对话有哪些配置选项
- 对话上下文可以配置标记属性,以便在不同功能之间传递消息,这点类似Servlet技术中方的ServletRequest#getAttribute
- 对话上下文是只读的,不允许修改
