SpringAI

目录

1大模型应用开发

2对话机器人如何实现?

[3为什么这个可以实现添加会话 id 到 context?](#3为什么这个可以实现添加会话 id 到 context?)

4会话历史和会话记忆有什么区别?

[5 解释如下代码](#5 解释如下代码)

6提示词工程是有几个要点?

7哄哄模拟器怎么做的?

8智能客服怎么做?

9它这个怎么知道去获取serviceClient呢?(有四个ChatClient)

10个人知识库及多模态会话怎么搭建?

11如何把各种不同的知识库文件转为Document呢?

12相似度评分阈值有什么用?

13个人知识库功能怎么实现?

14多模态是什么?

15完结


1大模型应用开发

2对话机器人如何实现?

3为什么这个可以实现添加会话 id 到 context?

4会话历史和会话记忆有什么区别?

5 解释如下代码

java 复制代码
Map<String, List<String>> chatIds = this.objectMapper.readValue (historyResource.getInputStream (), new TypeReference<>() { });
java 复制代码
ObjectWriter objectWriter = this.objectMapper.writerWithDefaultPrettyPrinter();
java 复制代码
Map<String, List<Msg>> memoryToSave = new HashMap<>();
            memory.forEach((chatId, messages) -> memoryToSave.put(chatId, messages.stream().map(Msg::new).toList()));

6提示词工程是有几个要点?

7哄哄模拟器怎么做的?

其实就是提前写好系统提示词,然后将提示词写入即可

8智能客服怎么做?

9它这个怎么知道去获取serviceClient呢?(有四个ChatClient)

10个人知识库及多模态会话怎么搭建?

11如何把各种不同的知识库文件转为Document呢?

注意,VectorStore操作向量化的基本单位是Document,我们在使用时需要将自己的知识库分割转换为一个个的Document,然后写入VectorStore.

那么问题来了,我们该如何把各种不同的知识库文件转为Document呢?

比如PDF文档读取和拆分,SpringAI提供了两种默认的拆分原则:

  • PagePdfDocumentReader :按页拆分,推荐使用

  • ParagraphPdfDocumentReader :按pdf的目录拆分,不推荐,因为很多PDF不规范,没有章节标签

当然,大家也可以自己实现PDF的读取和拆分功能。

java 复制代码
@Test
    public void testVectorStore(){
        Resource resource = new FileSystemResource("中二知识笔记.pdf");
        // 1.创建PDF的读取器
        PagePdfDocumentReader reader = new PagePdfDocumentReader(
                resource, // 文件源
                PdfDocumentReaderConfig.builder()
                        .withPageExtractedTextFormatter(ExtractedTextFormatter.defaults())
                        .withPagesPerDocument(1) // 每1页PDF作为一个Document
                        .build()
        );
        // 2.读取PDF文档,拆分为Document
        List<Document> documents = reader.read();
        // 3.写入向量库
        vectorStore.add(documents);
        // 4.搜索
        SearchRequest request = SearchRequest.builder()
                .query("论语中教育的目的是什么")
                .topK(1)
                .similarityThreshold(0.6)
                .filterExpression("file_name == '中二知识笔记.pdf'")
                .build();
        List<Document> docs = vectorStore.similaritySearch(request);
        if (docs == null) {
            System.out.println("没有搜索到任何内容");
            return;
        }
        for (Document doc : docs) {
            System.out.println(doc.getId());
            System.out.println(doc.getScore());
            System.out.println(doc.getText());
        }
    }

12相似度评分阈值有什么用?

13个人知识库功能怎么实现?

14多模态是什么?

音频需要自定义改造(base64编码)

15完结

本文系统阐述大模型应用开发核心要点:通过会话ID管理会话历史与记忆,实现对话连续性;利用提示词工程优化交互效果;基于SpringAI将PDF等多源知识库按页或段落拆分为Document,写入VectorStore实现向量化存储与检索;结合相似度阈值控制搜索精度;通过自定义改造支持音频等多模态输入;最终构建具备个人知识库与智能客服能力的对话系统。

相关推荐
机器学习之心16 分钟前
DCNN-PINN锂电池SOC估计,因果空洞卷积+物理信息神经网络,把库仑定律写进损失函数,MATLAB代码
人工智能·神经网络·matlab
信马堂4 小时前
WorkBuddy 接入第三方模型 API 全流程:安装与配置实录
人工智能·大模型·token·ai算力·workbuddy
朝朝辞暮i5 小时前
VLA 系统学习第 4 课:一个 Batch 进入神经网络后,模型到底是怎么“学会”的?
人工智能·python·神经网络·vla
IT古董5 小时前
《FDE前沿部署工程师实战教程》33 - Enterprise AI Observability:从Agent Trace到全链路智能运维
数据库·人工智能
xsd202411186 小时前
地网腐蚀AI识别算法全解析:从锈蚀图像到地下腐蚀快速定位
人工智能
oooost6 小时前
pytorch学习笔记2(transformer)
人工智能·机器学习
云杂项6 小时前
Exploring Model Inversion Attacks in the Black-box Setting(个人笔记)
人工智能
还卿一钵无情泪6 小时前
Unsloth 微调 构建自己的大模型 没有GPU也能微调
linux·开发语言·人工智能·python·大模型·nlp·unsloth
冬奇Lab7 小时前
LLM 驱动的自动化测试系列(06):移动端自动化(二)——DroidRun/Mobilerun 的角色级模型拆分
人工智能·测试
冬奇Lab7 小时前
一天一个开源项目(第230篇):HandRaw-Style —— 把 327 种手绘风格、165 种排版、36 种配色编号化,让 AI 画图不再每次都飘
人工智能·开源·资讯