对于一些支持推理模型的LLM(如DeepSeekR1 带有推理解析器的vLLM),除了LLM的直接返回结果,推理结果往往也是一个非常有用的返回信息,对于SpringAI,我们可以通过从返回的 Metadata 中获取推理结果。
使用推理的前提是模型必须支持推理,我们可以使用阿里的 qwen-plus-latest 或者智谱的 glm-4.5-flash;这两个都是支持推理过程的模型。
对于一些支持推理模型的LLM(如DeepSeekR1 带有推理解析器的vLLM),除了LLM的直接返回结果,推理结果往往也是一个非常有用的返回信息,对于SpringAI,我们可以通过从返回的 Metadata 中获取推理结果。
使用推理的前提是模型必须支持推理,我们可以使用阿里的 qwen-plus-latest 或者智谱的 glm-4.5-flash;这两个都是支持推理过程的模型。
前面介绍的教程中,更多的还是是同步调用,对于某些场景,同步调用可能无法满足,比如:
此外,同步调用需要等待LLM处理完,将所有的结果一并返回;因此对用户的体验并不友好,需要一直空等;因此通过流式的逐步返回,无疑是一个非常好的选择;接下来我们看一下SpringAI如何实现LLM的流式访问
鉴于OpenAI在业内的地位,很多大模型的调用接口都是兼容OpenAI的,因此,在接入OpenAI的接口风格大模型时,若官方没有提供高可用的starter,那么直接使用OpenAI的starter就是一个非常好的选择了
接下来我们将演示一下,如何通过OpenAI的starter接入讯飞大模型
本文将演示如何借助LangGraph4j + SpringAI来开发一个完整的智能体应用,实现用户传入地址、大模型通过Function Calling来获取地址天气,调用大模型的旅游项目推荐能力、美食推荐能力,给用返回一个旅游攻略
在 创建一个Langgraph4j示例工程 这一篇文章中,我们介绍了如何创建一个 LangGraph4j 的示例工程;
在上文中介绍到 LangGraph4j 时,就提到了它有一个重要的特性,就是可以定义循环图,使不同的组件(代理、工具或自定义逻辑)能够以有状态的方式进行交互
接下来我们来实际感受一下,上面这个重要的特性是如何表现的
之前介绍的多轮对话,上下文存储主要是SpringAI提供的能力支持;接下来我们看一下,在agent开发时推荐使用的框架LangGraphJ,如何实现多轮对话
沿用阿里的智能体定义,我们将基于SpringAI ChatClient开发的AI应用叫做单智能体应用;对于更复杂的应用场景,比如需要多个工具辅助工作,存在工作流切换的场景(举一个例子:输入一段评价,判断是好评还是差评,如果是好评,则自动回复多谢好评;如果是差评,则提取关键信息,将评价信息转发给人工客服,进行后续的售后维护等)称为多智能体应用
前面介绍了使用关系数据库来存储对话历史,接下来我们更进一步,通过扩展ChatMemoryRepository来实现基于Redis的持久化
上面一篇文章介绍了 SpringAI官方提供的 jdbc start来实现持久化对话历史 使用MySql持久化对话历史,官方实现的几个数据库已经很有代表性了,接下来我们将看一下,如果沿用官方的思路,来为h2添加持久化对话历史功能。
前面介绍了通过SpringAI来实现MCP Server,接下来我们再看一下,通过SpringAI来实现一个支持上次实现的MCP Client的AI对话
现在大模型的快速发展,已经让其不仅只接受文本,也可以接受图像、音频、视频等多模态数据,SpringAI也提供了相应的模型接口,方便开发者进行多模态模型应用开发
如如 OpenAI 的GPT-4o、Google 的Vertex AI Gemini 1.5、Anthropic 的 Claude3,以及开源模型 Llama3.2、LLaVA 和 BakLLaVA,都能接受文本、图像、音频和视频等多种输入,并通过整合这些输入生成文本响应。
SpringAI提供了非常简单的多模态输入集成,接下来我们通过一个简单实例,来看一下在SpringAI中,如何接入多模态模型