当前位置: 首页 > wzjs >正文

手机音乐网站源码百度电话号码

手机音乐网站源码,百度电话号码,php大型网站设计,b站推广入口在哪概述 工作流程 1、文档收集和切割 文档收集:从网页、PDF、数据库等各种来源收集原始文档。文档预处理:清洗、标准化文本格式。文档切割:将海量文档分割成适当大小的片段,可基于固定大小、语义边界、递归分割策略。 就像把厚重词典…

概述

工作流程

1、文档收集和切割

  • 文档收集:从网页、PDF、数据库等各种来源收集原始文档。
  • 文档预处理:清洗、标准化文本格式。
  • 文档切割:将海量文档分割成适当大小的片段,可基于固定大小、语义边界、递归分割策略。
    • 就像把厚重词典拆解成单词卡片
    • 📌 关键价值:优质的知识切割如同图书馆分类系统,决定了后续检索效率
  • 清洗数据:删除HTML标签、特殊符号,修正错误文本
  • 保留来源:记录每块内容的出处,便于后续引用和验证

2、向量转换和存储

  • 翻译成数字:将文字转换为数字向量,让机器能"理解"含义
  • 向量转换:使用Embedding模型将文本块转换为高维向量表示,以捕获文本的语义特征。
  • 向量存储:将生成的向量和对应文本存入向量数据库,支持高效的相似性搜索。

3、文档过滤和检索

  • 查询处理:将用户问题转换为向量表示,计算用户问题与存储文档片段的相似度
  • 过滤机制:基于元数据、关键词或自定义规则进行过滤。
  • 相似度搜索:在向量数据库中查找与问题向量最相似的文档块,常用算法有余弦相似度、欧氏距离等。
  • 精细排序:对初步结果进行二次筛选,把最相关的放在前面
  • 智能筛选:根据问题背景过滤不相关结果
  • 上下文组装:将检索到的多个文档块组装成连贯上下文。

4、查询增强和关联

  • 提示词组装:将检索到的相关文档与用户问题组合成增强提示。
  • 上下文融合:大模型基于增强提示生成回答。
  • 源引用:在回答中添加信息来源引用。
  • 后处理:格式化、摘要或其他处理以优化最终输出。
  • 理解问题:分析用户真正想知道什么
  • 改进问题:自动调整查询,使其更容易找到相关信息
  • 组合信息:将查询和检索到的文档巧妙结合
  • 事实回答:让AI基于找到的真实信息生成回答,避免编造
相关技术
  • Embedding:将数据转为语义向量,维度越高语义越细、存储越大。
  • 向量数据库:专存向量,高效查相似(Pinecone,Milvus),分专用 / 扩展型(PGVector,Redis-Stack)。
  • 召回:初筛粗相关候选,速度广度:如捕鱼 大范围撒网~
  • 精排:对匹配到的数据进行优劣排序,末段细排序,用 Rank 模型 结合多特征打分,。
  • 混合检索:各大厂商匹配技术,关键词 + 向量检索,调权重。
  • 核心:检索补外部知识,生成更准,解大模型时效与幻觉。

文档加载

将知识库按照主题分类组织,便于管理和后续检索
在这里插入图片描述
利用 SpringAI tika + markdown 解决大部分文件~

  1. DocumentReader读取文档(如PDF,TXT,SON),得到文档列表
  2. DocumentTransformer:转换文档,拆分、加摘要、提关键词,得到处理后的文档列表
  3. DocumentWriter:存文档,将文档列表保存到存储中
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-markdown-document-reader</artifactId><version>1.0.0-M6</version>
</dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-tika-document-reader</artifactId><version>1.0.0-M6</version>
</dependency>

编写文档加载器

import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.document.Document;
import org.springframework.ai.reader.markdown.MarkdownDocumentReader;
import org.springframework.ai.reader.markdown.config.MarkdownDocumentReaderConfig;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.stereotype.Component;import java.io.IOException;
import java.util.*;/*** 智能健康助手文档加载器*/
@Component
@Slf4j
public class HealthAppDocumentLoader {private final ResourcePatternResolver resourcePatternResolver;// 定义文件名关键词到类别的映射private static final Map<String, String> CATEGORY_MAP = new HashMap<>();static {CATEGORY_MAP.put("医院", "医疗机构");CATEGORY_MAP.put("科室", "医疗机构");CATEGORY_MAP.put("口腔科", "医疗机构");CATEGORY_MAP.put("神经内科", "医疗机构");CATEGORY_MAP.put("儿科", "医疗机构");CATEGORY_MAP.put("心血管内科", "医疗机构");CATEGORY_MAP.put("健康食物", "饮食");CATEGORY_MAP.put("高蛋白食物", "饮食");CATEGORY_MAP.put("高纤维蔬菜", "饮食");CATEGORY_MAP.put("低糖食物", "饮食");CATEGORY_MAP.put("健康早餐搭配", "饮食");CATEGORY_MAP.put("糖尿病饮食建议", "饮食");CATEGORY_MAP.put("饮食计划模板", "饮食");CATEGORY_MAP.put("热量估算指南", "营养");CATEGORY_MAP.put("维生素来源", "营养");CATEGORY_MAP.put("热量摄入推荐", "营养");CATEGORY_MAP.put("营养素需求表", "营养");CATEGORY_MAP.put("BMI计算指南", "健康知识");CATEGORY_MAP.put("血压管理常识", "健康知识");CATEGORY_MAP.put("睡眠质量提升", "健康知识");CATEGORY_MAP.put("运动健康指南", "健康知识");}public HealthAppDocumentLoader(@Qualifier("webApplicationContext") ResourcePatternResolver resourcePatternResolver) {this.resourcePatternResolver = resourcePatternResolver;}/*** 加载所有 Markdown 文档并转换为 Document 对象* @return 所有文档列表*/public List<Document> loadMarkdowns() {List<Document> allDocuments = new ArrayList<>();try {Resource[] resources = resourcePatternResolver.getResources("classpath:document/**/*.md");for (Resource resource : resources) {String filename = resource.getFilename();if (filename == null || !filename.endsWith(".md")) continue;String baseName = filename.substring(0, filename.length() - 3); // 去掉 .md 后缀// 根据文件名中的关键词,从 CATEGORY_MAP 中查找匹配的文档类别String category = CATEGORY_MAP.entrySet().stream().filter(entry -> baseName.contains(entry.getKey())).map(Map.Entry::getValue).findFirst().orElse("通用");// 创建 Markdown 解析配置对象// 构建配置MarkdownDocumentReaderConfig config = MarkdownDocumentReaderConfig.builder().withHorizontalRuleCreateDocument(true).withIncludeCodeBlock(false).withIncludeBlockquote(false)//元数据字段.withAdditionalMetadata("filename", filename)  //添加文件名.withAdditionalMetadata("category", category)  //添加分类.build();MarkdownDocumentReader reader = new MarkdownDocumentReader(resource, config);allDocuments.addAll(reader.get());}} catch (IOException e) {log.error("Markdown 文档加载失败", e);}return allDocuments;  //返回所有解析完成的文档列表}
}

假设有如下文件:

文件名提取的 category
北京协和医院.md医疗机构
高蛋白食物.md饮食
BMI计算指南.md健康知识
热量估算指南.md营养
我的自定义文档.md通用

这样就能在每个 Document 中添加合适的分类元数据,供后续用于推荐、过滤、搜索等场景。

向量存储

将上述解析得到的知识库document列表存入向量数据库

不建议在生产中使用基于内存的向量存储。因此这里我们使用PostgreSQL的插件PGVetor作为向量数据库。

环境配置
<!-- PGVector 向量存储 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><scope>runtime</scope>
</dependency>
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-pgvector-store</artifactId><version>1.0.0-M6</version>
</dependency>
@Configuration
public class PgVectorVectorStoreConfig {@Resourceprivate HealthAppDocumentLoader healthAppDocumentLoader;@Bean@Primary// todo 按需使用加载public VectorStore pgVectorVectorStore(@Qualifier("postgresJdbcTemplate") JdbcTemplate jdbcTemplate, EmbeddingModel dashscopeEmbeddingModel) {// 创建PgVectorStore实例,配置向量存储的参数VectorStore vectorStore = PgVectorStore.builder(jdbcTemplate, dashscopeEmbeddingModel).dimensions(1536)                    // 设置向量的维度,可选,默认为模型维度或1536.distanceType(COSINE_DISTANCE)       // 设置计算向量间距离的方法,可选,默认为余弦距离.indexType(HNSW)                     // 设置索引类型,可选,默认为HNSW(高效近似最近邻搜索).initializeSchema(true)              // 是否初始化数据库模式,可选,默认为false.schemaName("public")                // 设置数据库模式名称,可选,默认为"public".vectorTableName("vector_store")     // 设置存储向量数据的表名,可选,默认为"vector_store".maxDocumentBatchSize(10000)         // 设置文档批量插入的最大数量,可选,默认为10000.build();// 加载文档List<Document> documents = healthAppDocumentLoader.loadMarkdowns();int batchSize = 25;for (int i = 0; i < documents.size(); i += batchSize) {int end = Math.min(i + batchSize, documents.size());List<Document> batch = documents.subList(i, end);vectorStore.add(batch); // 分批插入}return vectorStore;}
}

修改yml文件

spring:datasource:mysql:url: jdbc:mysql://localhost:3306/your_mysql_db?useSSL=false&serverTimezone=UTCusername: rootpassword: your_passworddriver-class-name: com.mysql.cj.jdbc.Driverpostgres:url: jdbc:postgresql://localhost:5432/your_postgres_dbusername: postgrespassword: your_passworddriver-class-name: org.postgresql.Driver

文档过滤和检索

a. 预检索:优化用户查询

  • 改写查询:用 AI 让模糊的问题更清晰RewriteQueryTransformer
  • 翻译查询:将非目标语言翻译成模型支持的语言TranslationQueryTransformer
  • 压缩查询:结合对话历史,生成简洁查询CompressionQueryTransformer
  • 扩展查询:生成多个变体,提高召回率MultiQueryExpander

b. 检索:查找相关文档

  • 使用 DocumentRetriever 从向量库中搜索最相关的文档

  • 支持设置:

    • 相似度阈值 .similarityThreshold(0.7)
    • 返回数量 .topK(5)
    • 元数据过滤 .filterExpression(...)
  • 使用 ChatModel(如 dashscopeChatModel)驱动的 RewriteQueryTransformer,将用户输入(如 “怎么治高血压”)改写为更精准的医学术语(如 “高血压的标准治疗方案”)

/*** 查询重写器*/
@Component
public class QueryRewriter {private final QueryTransformer queryTransformer;public QueryRewriter(ChatModel dashscopeChatModel) {ChatClient.Builder builder = ChatClient.builder(dashscopeChatModel);// 创建查询重写转换器queryTransformer = RewriteQueryTransformer.builder().chatClientBuilder(builder).build();}/*** 执行查询重写** @param prompt* @return*/public String doQueryRewrite(String prompt) {Query query = new Query(prompt);// 执行查询重写Query transformedQuery = queryTransformer.transform(query);// 输出重写后的查询return transformedQuery.text();}
}

查询增强和关联

a. 查询增强目标:

  • 提高用户查询质量
  • 增加检索命中率
  • 提供上下文,辅助 AI 生成更准确回答

b. 核心组件:

ⅰ. QuestionAnswerAdvisor

  • 将用户问题 + 检索到的文档拼成新 Prompt,发给 AI。
  • 支持设置:
  • 相似度阈值 .similarityThreshold()
  • 返回数量 .topK()
  • 动态过滤条件 .FILTER_EXPRESSION
  • 可自定义提示词模板。

ⅱ. RetrievalAugmentationAdvisor

  • 更灵活、模块化的 RAG 实现方式。
  • 支持组合使用:
  • 文档检索器 .documentRetriever(...)
  • 查询转换器(如改写、翻译).queryTransformers(...)
  • 上下文增强器 .queryAugmenter(...)

ⅲ. 空上下文处理:ContextualQueryAugmenter

  • 默认不允许空上下文(无文档时不让回答)
  • 可通过 .allowEmptyContext(true) 允许 AI 自由作答
  • 支持自定义提示词模板,包括:
  • 正常情况 .promptTemplate(...)
  • 无文档时 .emptyContextPromptTemplate(...)(如友好提示)
  • 示例

  1. 用户输入:“我最近经常失眠,怎么办?”
  2. QueryRewriter重写为:“最近经常失眠,有哪些有效的改善方法?”
  3. RAG 从 vector store 中检索出与“失眠”相关的医学建议文档
  4. 结合上下文、记忆和检索内容生成最终回答

编写单元测试代码,故意提问一个文档内有回答的问题

http://www.dtcms.com/wzjs/217131.html

相关文章:

  • 阿里云香港节点做的网站西安百度首页优化
  • 合肥 做网站的百度产品
  • 望城区建设局网站谷歌搜索引擎入口2021
  • 电器网站建设策划书东莞推广
  • 夺宝网站开发营销推广型网站
  • 汕头百度关键词搜索seo关键词教程
  • 怎么做类似清风dj网站域名历史查询工具
  • 南通通州区城乡建设局网站1688精品货源网站入口
  • 怎么用腾讯云服务器做网站网站怎么制作
  • nodejs做网站容易被攻击吗南平网站seo
  • 大学精神文明建设专题网站长沙网站seo哪家公司好
  • 做软件用什么编程语言seo外包服务公司
  • wordpress支持多个站点地址百度推广图片尺寸要求
  • 义乌做网站要多少钱杭州seo网站优化
  • 武汉做网站找哪家网站优化seo是什么意思
  • test-又一个wordpress站点网站维护收费标准
  • 做百度联盟用什么做网站seo系统推广
  • 私人做网站搜索引擎优化seo价位
  • 池州网站建设费用seo比较好的优化方法
  • 郓城网站制作长春网站搭建
  • 做外贸怎么打开国外网站东莞网站建设优化排名
  • 刘晓忠 网站建设关键词优化公司电话
  • 网站多久被百度收录朝阳seo排名优化培训
  • 二手交易平台网站的建设全自动引流推广软件免费
  • 产品网站建设公司分析网站推广和优化的原因
  • 青岛网站建设软件附近的计算机培训班
  • 泗水网站建设北京正规seo搜索引擎优化价格
  • 做网站需要哪些软件鞍山做网站的公司
  • 比较好的能组数学卷的网站做教案的鼓楼网站seo搜索引擎优化
  • 做a的视频在线观看网站电商平台运营方案思路