手机wap网站免费制作,seo在线优化技术,怎样利用网站做推广的方法,哎呦视频在线资源观看当RAG对话时#xff0c; 用户想知道信息来源哪个文件#xff0c; 这样可信度更高#xff0c; 可以确定不是大模型胡编乱造#xff0c;我们就需要告诉用户信息的来源#xff1a;
实现步骤#xff1a;第一步#xff1a;给片段加入文件信息
在文档切片入库时#xff0c;千…当RAG对话时 用户想知道信息来源哪个文件 这样可信度更高 可以确定不是大模型胡编乱造我们就需要告诉用户信息的来源实现步骤第一步给片段加入文件信息在文档切片入库时千万别只存文本。一定要利用向量数据库的font stylecolor:rgb(0, 0, 0);Metadata/font字段把文件名source“焊死”在每一个切片上。**✅******实际在我们利用TikaDocumentReader 进行读取文档的时候 就会自动写入文件名source到Metadata中TikaDocumentReader reader new TikaDocumentReader(resource);ListDocument documents reader.read();及时你用别的XXXReader没有写入文件名 你也可以自己维护documents.forEach(document - {document.getMetadata().put(source,originalFilename)});第二步检索时的“显性组装”LLM 是“盲”的它看不到 Metadata。所以检索回来后我们需要用 Java 代码把 Metadata 里的文件名取出来拼接到文本内容的前面。**✅**** **这里我建议采用advisor的方式实现 更加优雅定义advisorpublic class MetadataAwareQuestionAnswerAdvisor implements BaseAdvisor { privatestaticfinal PromptTemplate DEFAULT_PROMPT_TEMPLATE new PromptTemplate( {query} Context information is below, surrounded by --------------------- --------------------- {question_answer_context} --------------------- Given the context and provided history information and not prior knowledge, reply to the user comment. If the answer is not in the context, inform the user that you cant answer the question. ); Override public ChatClientRequest before(ChatClientRequest baseRequest, AdvisorChain advisorChain) { // 获取检索到的文档 ListDocument documents (ListDocument) baseRequest.context().get(QuestionAnswerAdvisor.RETRIEVED_DOCUMENTS); String userMessage (String) baseRequest.context().get(userMessage); if(!CollectionUtils.isEmpty(documents)) { String documentContext documents null ? : documents.stream().map(doc - doc.getText()\n来源文件:doc.getMetadata().getOrDefault(source, unknown).toString()).collect(Collectors.joining(System.lineSeparator())); // 重新构建prompt在末尾添加source信息 String augmentedUserText DEFAULT_PROMPT_TEMPLATE .render(Map.of(query, userMessage, question_answer_context, documentContext)); return baseRequest.mutate() .prompt(baseRequest.prompt().augmentUserMessage(augmentedUserText)) .build(); } else { return baseRequest; } } Override public ChatClientResponse after(ChatClientResponse chatClientResponse, AdvisorChain advisorChain) { return chatClientResponse; } Override public int getOrder() { // 优先级最低、因为要保证负责RAG的questionAnswerAdvisor执行完.才能拿到文档信息 // 为什么不直接设置MAX_VALUE 因为ChatModelCallAdvisor负责实际调用AI模型的advisor也使用了Integer.MAX_VALUE 如果在他之后AI对话完成不会执行 return Integer.MAX_VALUE-1; }}2.使用this.chatClient ChatClient.builder(chatModel) // 隐式 .defaultSystem( 你是XS知识库系统的对话助手请以乐于助人的方式进行对话 如果涉及RAG请提供文件来源我会通过source提供给你文件来源 今天的日期{current_data} ) .defaultAdvisors( PromptChatMemoryAdvisor.builder(chatMemory).build(), SimpleLoggerAdvisor.builder().build(), new MetadataAwareQuestionAnswerAdvisor() ) .defaultTools(ragTool) .build(); this.vectorStorevectorStore; } plaintext private FluxString processNormalRagQuery(ListString sources, String message) { Long userId BaseContext.getCurrentId(); ChatClient.ChatClientRequestSpec clientRequestSpec chatClient.prompt() .user(message) .advisors(a - a.param(current_data, LocalDate.now().toString())) // 为什么要存userMessage 为了MetadataAwareQuestionAnswerAdvisor中获取 .advisors(a - a.param(userMessage, message)) .advisors(a - a.param(ChatMemory.CONVERSATION_ID, userId)); // 如果提供了sources参数使用向量数据库查询 if (sources ! null !sources.isEmpty()) { SearchRequest.Builder searchRequestBuilder SearchRequest.builder() .query(message) .similarityThreshold(0.2d).topK(5) // source in [xxx.pdf,xxxx] .filterExpression(source in JSON.toJSONString(sources)); clientRequestSpecclientRequestSpec.advisors(QuestionAnswerAdvisor.builder(vectorStore) .searchRequest(searchRequestBuilder.build()) .build()); } FluxString content clientRequestSpec .stream()// 流式方式 .content(); return content; }第三步引导大模型提供文件来源最后在 System Prompt 中给大模型下达“死命令”如果不设置大模型可能不会告诉用户。this.chatClient ChatClient.builder(chatModel) // 隐式 .defaultSystem( 你是XS知识库系统的对话助手请以乐于助人的方式进行对话 如果涉及RAG请提供文件来源我会通过source提供给你文件来源 今天的日期{current_data} ) .defaultAdvisors( PromptChatMemoryAdvisor.builder(chatMemory).build(), SimpleLoggerAdvisor.builder().build(), new MetadataAwareQuestionAnswerAdvisor() ) .defaultTools(ragTool) .build();如何学习大模型 AI 由于新岗位的生产效率要优于被取代岗位的生产效率所以实际上整个社会的生产效率是提升的。但是具体到个人只能说是“最先掌握AI的人将会比较晚掌握AI的人有竞争优势”。这句话放在计算机、互联网、移动互联网的开局时期都是一样的道理。我在一线科技企业深耕十二载见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事早已在效率与薪资上形成代际优势我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套AI 大模型突围资料包✅ 从零到一的 AI 学习路径图✅ 大模型调优实战手册附医疗/金融等大厂真实案例✅ 百度/阿里专家闭门录播课✅ 大模型当下最新行业报告✅ 真实大厂面试真题✅ 2025 最新岗位需求图谱所有资料 ⚡️ 朋友们如果有需要《AI大模型入门进阶学习资源包》下方扫码获取~① 全套AI大模型应用开发视频教程包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点② 大模型系统化学习路线作为学习AI大模型技术的新手方向至关重要。 正确的学习路线可以为你节省时间少走弯路方向不对努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划带你从零基础入门到精通③ 大模型学习书籍文档学习AI大模型离不开书籍文档我精选了一系列大模型技术的书籍和学习文档电子版它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。④ AI大模型最新行业报告2025最新行业报告针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。⑤ 大模型项目实战配套源码学以致用在项目实战中检验和巩固你所学到的知识同时为你找工作就业和职业发展打下坚实的基础。⑥ 大模型大厂面试真题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我精心整理了一份大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。以上资料如何领取为什么大家都在学大模型最近科技巨头英特尔宣布裁员2万人传统岗位不断缩减但AI相关技术岗疯狂扩招有3-5年经验大厂薪资就能给到50K*20薪不出1年“有AI项目经验”将成为投递简历的门槛。风口之下与其像“温水煮青蛙”一样坐等被行业淘汰不如先人一步掌握AI大模型原理应用技术项目实操经验“顺风”翻盘这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。以上全套大模型资料如何领取