跳至主要內容

SpringAI

HeChuangJun约 953 字大约 3 分钟

SpringAI

功能Spring AILangChain4j
Chat支持支持
Function支持支持
RAG支持支持
对话模型15+15+
向量模型10+15+
向量数据库15+20+
多模态模型5+1
JDK178

1.2 Spring Al的主要功能
·第一、对主流 A1大模型供应商提供了支持,比如:0penAl、Deepfeek、Microsoft、Ollama、Amazon、Google HuggingFace等。
第二、支持AI大模型类型包括:聊天、文本到图像、文本到声音等。
第三、支持主流的Embedding Models(嵌入模型)和向量数据库,比如:Azure Vector Search.
Chroma、Milvus、Neo4j、Redis、Pinecone、PostgreSQL/PGVector 等。
第四、 把 A 大模型输出映射到简单的Java 对象(POJOS)上。
第五、支持了函数调用(Function caling)功能。@
第六、为数据工程提供 ETL(数据抽取、转换和加载)框架
第七、支持 Spring Boot 自动配置和快速启动,便于运行 A1 模型和管理向量库。

对话机器人-快速入门

引入依赖
配置模型
配置客户端
from openai import OpenAI
# 1.初始化0penAI客户端
clien = OpenAI( 
api_key="<DeepSeek API Key>",
base_url="https://api.deepseek.com")
#2.发送http请求到大模型
response =client.chat.completions.create(
model="deepseek-r1",
temperature=0.7,
messages=[
{"role":"system","content":"你是一个热心的AI助手,你的名字叫小团团"},{"role":"user","content":"你好,你是谁?"},
],
stream=False
)
#3.打印返回结果
print(response.choices[0].message.content)

<dependencyManagement>
	<dependencies>
	<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-bom</artifactId>
    <version>${sprlg-ai.version}</version>
    <type>pom</type>
    <scope>import</scope>
    </dependency>
    </dependencies>
</dependencyManagement>

<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>

spring:
    ai:
    	ollama:
    		base-url:http://localhost:11434chat :
    		model: deepseek-rl:7b

spring:
    ai :
    	openai:
    		base-url:https://dashscope.aliyuncs.com/compatible-mode
    		api-key: ${OPENAI_API_KEY}
    		chat:
    			options:
        			model:qwen-max # 模型名称
        			temperature:0.8 # 模型温度,值越大,输出结果越随机:
        			
@Bean
public ChatClient chatclient(0llamachatModel model){
	return ChatClient.builder(model).defaultsystem("你是可爱的助手,名字叫小团团").build();
}

String content =chatClient.prompt().user("你是谁?").call().content();

Flux<String>content = chatClient.prompt().user("你是谁?").stream().content();

@RequestMapping(value = "/chat",produges = "text/event-stream")
public Flux<string> chat(string prompt){
	return  chatClient.prompt().user(prompt).stream().content();
}

对话机器入-会话白志

SpringAI利用AOP原理提供了AI会话时的拦截、增强等功能,也就是Advisor。

@Bean
public chatClient chatclient(0llamachatModel model){
	return ChatClient.builder(model)// 创建chatclient工厂实例
    .defaultSystem("你是可爱的小助手,名字叫小团团。")
    .defaultAdvisors(new SimpleLoggerAdvisor())//配置日志
    .Advisorbuild();//构建ChatClient实例
}
logging:
	level:
		org.springframework.ai.chat.client.advisor: debug
		com.itheima.ai: debug

对话机器人-会话记忆

大模型是不具备记忆能力的,要想让大模型记住之前聊天的内容,唯一的办法就是把之前聊天的内容与新的提示词一起发给大模型。

from openai import OpenAI
#1.初始化0penAI客户端
client = 0penAI(
	api_key="<DeepSeek API Key>"
	base url="https://api.deepseek.com")
# 2.发送http请求到大模型
response =client.chat.completions.create(
	model="deepseek-r1",
	temperature=0.7,
	messages=[{"role":"system","content":"你是一个热心的AI助手,你的名字叫小团团"},
	{"role": "user",,"content":"你好,你是谁?",}]
	,stream=False
)
print(response)

角色描述示例
system优先于 user 指令之前的指令,也就是给大模型设定角色和任务背景的系统指令你是一个乐于助人的编程助手,你的名字叫小团团,请以小团团的风格来回答用户的问题。
user终端用户输入的指令(类似于你在 ChatGPT 聊天框输入的内容)你好,你是谁?
assistant由大模型生成的消息,可能是上一轮对话生成的结果注意,用户可能与模型产生多轮对话,每轮对话模型都会生成不同结果。
定义会话存储方式
public interface ChatMemory{
	void add(String conversationId,List<Message> messages);
	List<Message>get(String conversationId, int lastN);
	void clear(String conversationId);
}
@Bean
public ChatMemory chatMemory(){
return new InMemoryChatMemory()
}
配置会话记忆Advisor
@Bean
public chatclient chatclient(0llamaChatModel model){
	return ChatClient.builder(model)
	.defaultSystem("你是可爱的助手,名字叫小团团")
	.defaultAdvisors(
    new SimpleLoggerAdvisor(),
    new MessageChatMemoryAdvisor(chatMemory)# 设置
    ).
build()
}
添加会话id
Flux<String>content = chatClient.prompt()
.user("你好,我叫小明").abisors(a ->a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId)).stream().content();