SpringAI的使用

360影视 日韩动漫 2025-09-10 20:36 3

摘要:提示词模板:通过 system或者 defaultSystem方法设置系统提示词;若提示词模板中有动态的变化的参数,使用占位符{参数名}来表示,通过 chatClient 的 system方法来传递参数值;

org.springframework.aispring-ai-bom1.0.0-SNAPSHOTpomimport #技术分享org.springframework.aispring-ai-starter-model-ollama1.0.0

对话模型类:OllamaChatModel; Ollama 属性配置类:OllamaOptions

关闭思考模式:在 SpringAI1.0之前通过在提示词后面添加 no_think 方式关闭:OllamaChatModel.call("你是谁?/no_think")

流式输出:OllamaChatModel.stream("你是谁?/no_think")

通用客户端 api:ChatClient,获取 ChatClient 的方式:

方式一:通过默认的构造器获取:ChatClient.Builder.build;

方式二:通过制定 chatModel 来获取,ChatClient.builder(chatModel).build;

提示词类型: user(用户)、Assistant(AI 回复)、system(系统)、Tool(工具)等

提示词模板:通过 system或者 defaultSystem方法设置系统提示词;若提示词模板中有动态的变化的参数,使用占位符{参数名}来表示,通过 chatClient 的 system方法来传递参数值;

用户提示词中有动态变化的参数,使用占位符{参数名}来表示,通过 chatClient 的 user方法来传递参数值;

提示词内容较多时,可使用提示词模板文件:xxx.st 文件,加载提示词文件:

@Value("classpath:提示词文件路径")private org.springframework.core.io.Resource txtResource;

已有内置的 Advisor:SimpleLogAdvisor,SafeGuardVisor 等;自定义 Advisor,使用 BaseAdvisor

5、大模型记忆

一、多轮对话实现,每次将上次的问题和回复都记录下来,在下次时传递。SpringAI 中使用 ChatMemory 接口实现,默认存储在内存当中,chatMemory 对象默认需要手动创建,通过 MessageWindowChatMemory 创建;若要通过 Spring 自动维护引入以下依赖,以及使用 MessageChatMemoryAdvisor 或者 PromptChatMemoryAdvisor 拦截器:

org.springframework.aispring-ai-autoconfigure-model-chat-memory1.0.0

记录聊天记录的最大数量,不建议太长,默认20条,淘汰策略;先进先出 多用户隔离:设置唯一标识,通过 ChatMemory.CONVERSATION_ID 属性 其他存储方式:数据库存储,redis 存储(alibaba-ai 有现成的),要使用第三方存储方式,需要引入对应依赖,例如:

org.springframework.aispring-ai-model-chat-memory-repository-jdbc1.0.0

多层记忆架构(模仿人类):近期记忆(保留窗口最近的几轮对话,通过 ChatMeomry),中期记忆(通过 RAG 检索对话历史),长期记忆(关键信息的固化总结,通过定时任务,使用大模型提取关键信息;关键点实时提取)

格式化输出:在 Call方法链后,使用 ChatClient 的 entity方法,指定结果类型

6、Tools1、声明工具@Componentpublic class AiTool {@Tool(description = "姓名查询") public String test(@ToolParam(description = "名称") String name){ return name+":"+new Date; } } 2、注入该工具 Bean,并在调用回话时将该 bean 加入到 chatClient 对象当中 Tool 的幻觉:防止大模型为了强行适配工具参数,而造一些假的信息。对于参数的描述进行限制;程序进行限制;从提示词方面限制 Tool 中的参数:参数名称要有意义,不能随便起名字 Tool 的鉴权:使用 springsecurity 进行鉴权;将 Tool 和资源一起存储,动态设置 ToolC 7、MCP

将公共的 tools 抽取出来,进行分布式部署的外部工具服务

MCP 的传输方式:SSE;Streamable(长连接):面向服务,支持高并发;stdio(标准输入输出):面向个人用户的应用,在本地运行 springAI 中使用 MCP

org.springframework.aispring-ai-starter-mcp-client-webflux1.0.0配置 mcp 信息 spring.ai.mcp.client.request-timeout=60000 #mcp 配置文件信息 spring.ai.mcp.client.stdio.servers-configuration=classpath:/mcp-server-config.json# 开启mcp日志logging.level.io.modelcontextprotocol.client=debuglogging.level.io.modelcontextprotocol.spec=debugjson文件内容:{ "mcpServers": { "baidu-map": { "command": "cmd", "args": [ "/c", "npx", "-y", "@baidumap/mcp-server-baidu-map" ], "env": { "BAIDU_MAP_API_KEY": "API_KEY" } } }}

向量:通常用来做相似性搜索;向量化:使用向量模型;

SpringAi 中的 API:

1、VectorStore:查询和向量化文本

3、文档读取器:springAI 和 springAIalibaba 提供了很多文本器:TextReader、JsonReader 等。对于 pdf,markdown 等文本需要额外引入依赖

4、文档分割器:TokenTextSpliter、TextSplitter、SentenceSpliter

5、分块经验实践:短文本--句子级分块,论文--段落级分块,法律合同--条款,小说--章节等

6、KeywordMetadataEnricher:标签提取器,SummaryMetadataEnricher:提取上一篇,当前,下一篇文档的摘要,作用:通过这些元数据过滤数据

7、检索增强器:RetrievalAugmentationAdvisor;查询重写转换器:RewriteQueryTransformer;翻译转换器:TranslationQueryTransformer

8、rerank(重排序):粗排+精排,粗排,按照正常的顺序去检索,topk 给一个较大的值(建议200),精排时调用重排序模型进行排序,其 topK 可以使用默认的值(5)。使用 SpringAialibaba 提供的 RetrievalRerankAdvisor 转换器,

来源:墨码行者

相关推荐