RAG(检索增强生成)技术通过先检索私有知识库再生成答案的方式,解决了大模型不了解私有数据和产生幻觉的问题。文章详细介绍了RAG的完整流程:文档整理、数据切片、向量化、存储、检索、重排和生成,并通过智能客服实例提供了Python代码实战。这种方法让大模型在回答问题前先"查资料",显著提高了答案的专业性和准确性,特别适用于需要基于私有知识库回答的场景。
近年来,大模型的能力让人惊叹,但它也有致命弱点:它并不了解你的私有知识库,甚至会一本正经地胡说八道(幻觉)。
如何让它像一个真正的“内部知识专家”呢?答案就是——RAG(Retrieval-Augmented Generation)检索增强生成。
本文通过一个贯穿全文的例子,从原理到实现、从流程图到代码实战,带你真正理解 RAG,并能立即应用于你的项目中。
一、为什么需要RAG?用智能客服举例
假设你在为你们公司构建一个智能客服系统,用户可能会问(下面这个 “TwinFun双人游戏机旗舰XPro” 是我瞎编的,并不真实存在):
“TwinFun双人游戏机旗舰XPro的保修政策是什么?”
你把问题丢给大语言模型(如 GPT / Gemini / 千问 / 豆包 / DeepSeek 等),它会信心满满地回答,但……答案不一定是真的。因为:
- LLM 并不知道你公司的产品文档
- 它训练数据有限且不包含你的私有内容
- 没查到的时候,它会“自动编”(也就是根据概率预测)
这就是典型的幻觉(Hallucination)。
下图是我在某大语言模型平台提问的结果,该大模型训练的时候并没有用到 “TwinFun双人游戏机旗舰XPro” 的相关数据,所以它的回答都是基于概率猜的,不一定是准确的:
二、RAG 是什么?用一句话说明白
RAG 全称为检索增强生成(Retrieval Augmented Generation) ,即RAG = Retrieval(检索) + Augmented Generation(增强生成)
核心思想就是:用户提问问题时,先通过检索私有知识库获取相关的知识,将其融入Prompt,再让大模型参考相应的知识生成合理的答案,先【检索】再【生成】,所以叫【检索增强生成】。
如果你还不明白,用一句大白话说就是:让大模型在生成答案之前,先查资料再回答,不瞎编,只说靠谱的。
之前看到过一张图比较形象,这里贴一下:
三、RAG的流程?落地前一定梳理清楚
RAG的流程大致包含两个阶段:索引构建+数据生成。
1. 索引构建
索引构建阶段需要做的事情有:
- 文档整理:通过任何方式(文档、网页、数据库等多种来源)获取、收集让大模型参考的专业知识的文档,通常为我们私有的知识库、公司内部的产品文档等;
- 数据切片:将长文档按照语义切分成完整的小段(如段落或固定大小的文本块),以适配模型的上下文窗口;
- 向量化:使用嵌入模型将每个文本块转换为数学向量(即“嵌入”,embedding),语义相似的文本,其向量在空间中也更接近;
- 存储:将原始文本块和对应的向量存入向量数据库(如Chroma, Milvus, Pinecone等),以便后续快速检索;
2. 数据生成
数据生成阶段的流程就是上面第2章节末尾那张图中所描述的:
用户提问:使用相同的嵌入模型把用户问题转化为查询向量;
相似度检索:在向量数据库中,查找与查询向量最相似的K个文本块;
重排序(可选):有时会使用更精细的模型对初步检索结果进行重排序,以选出最相关的片段;
增强:将前面步骤检索到的与问题语义相近的文本和原问题打包在一起,发送给大模型。通常会用一个包含系统指令、参考资料、原始问题的提示词模板,比如:
你是一位知识助手,请根据用户的问题和参考资料生成准确的回答:
用户问题:{query}
参考资料:{context}
请严格基于上述内容作答,不要编造信息,如果资料中没有答案,请回答“文档中未找到相关信息”。
- 生成:大语言模型基于构建好的增强提示,生成最终回答。模型在生成时,会严格依据提供的上下文信息,而非仅依赖其内部参数化知识。大幅减少了“胡编乱造”并提升了回答的专业性。实际落地的时候,也可以要求模型在回答中引用来源(如文档块ID),提高可信度。
- 评估与优化(可选):在实际操作中,为确保RAG系统高质量运行,需要持续的评估与优化。具体评估指标可以参考检索质量(检索到的文本是否相关)、答案相关性(回答是否解决问题)、事实准确性(是否与给定的上下文一致)等。具体优化手段有查询优化(对用户原始查询进行重写或扩展)、分块策略优化(调整文本块的大小和重叠度,避免信息被割裂)、多路检索与融合(结合关键词检索如BM25与向量检索)等。
3. 以智能客服举例说明
第1章节末尾的例子,我向大模型提问的“TwinFun双人游戏机旗舰XPro的保修政策是什么?”这个问题,它的回答就是胡编的。假如TwinFun双人游戏机旗舰XPro真是我公司的产品,我想通过RAG实现智能客服,就需要经历以下步骤:
(1)文档整理:收集公司所有需要智能客服回答的知识(比如《TwinFun商贸有限公司双十一活动优惠政策》、《TwinFun双人游戏机旗舰XPro的使用说明》、《TwinFun双人游戏机旗舰XPro的保修政策》等各类文档);
(2)数据切片:把这些文档的内容切分成多个语义完整的小段,比如我把每个文档的内容按照段落进行切片;
(3)向量化:把切片结果的每个小段都通过向量模型转化为高维向量,每个高维向量可以用一个数组来表示;
(4)存储:把文本和对应的向量,一块存入向量数据库;
(5)检索:用户提问的时候,把问题通过相同的向量模型转化为一个高维向量,通过这个高维向量在数据库中查询与之语义相近的前N个文本块。
(6)重排:然后对这N个文本块进一步筛选排序,即通过cross-encoder模型计算这N个文本块与用户问题的相关性分数(分数越高,语义越接近),再取分数较高的几个文本块。
(7)增强、生成:把分数较高的文本块和原问题打包发送给大语言模型进行提问,最终大语言模型生成的回答就是我们想要的。
RAG 实战:从文档到最终答案
(含可运行 Python)
光说不练假把式,下面我们从零开始,来实现一套完整的RAG,来帮助你更进一步理解RAG的运行流程,并在实际业务中落地。
1. 前期准备:
- 文档:这里我准备了三个文档来进行测试:TwinFun商贸有限公司双十一活动优惠政策.txt、 TwinFun双人游戏机旗舰XPro的使用说明.txt、 TwinFun双人游戏机旗舰XPro的保修政策.txt。
这几个文件已经上传到Github(https://github.com/DannyHoo/PublicRepository/tree/master/AI/RAG/rag_intelligent_customer_service),访问Github不方便的朋友也可以在公众号“丹尼编程”中回复“rag”关键字进行下载。下载的文件夹中还有一个名为“RAG实现智能客服.ipynb”的jupyter notebook的文件,文件中包含全部代码和执行结果。
- Python环境和依赖
- Python版本:3.12
- 开发环境:PyCharm或者Jupyter
- 安装依赖的库:uv pip install sentence-transformers chromadb google-genai ollama
sentence_transformers:是一个基于 Hugging Face Transformers 的 Python 库,专门用于将文本(尤其是句子或段落)转换为高质量的语义向量(embeddings)。这些向量可以用于衡量文本之间的语义相似度,常用于自然语言处理(NLP)的任务。这里我们主要用于加载embedding模型和cross-encoder模型。
chromadb:chromadb是一款常用的轻量级向量数据库,支持内存/持久化模式。
google-genai:Google的AI SDK,用于调用Gemini模型(如gemini-2.5-flash)。旧版本的库为google-generativeai,2025年12月之后推荐google-genai。官方建议:https://ai.google.dev/gemini-api/docs/libraries?hl=zh-cn
ollama:用于通过Ollama调用本地运行的大模型。
2. 代码实现
2.1 数据切片
对文档的内容,按照段落的维度进行切片:
from typing import List # 对单个文档按段落切片(非空行) def split_doc_into_chunks(doc_file: str) -> List[str]: with open(doc_file, 'r', encoding='utf-8') as file: content = file.read() # 按换行分割,并过滤掉空白段落 return [chunk.strip() for chunk in content.split("\n") if chunk.strip()] # 处理多个文档,并合并所有段落 def split_multiple_docs_into_chunks(doc_files: List[str]) -> List[str]: all_chunks = [] for doc_file in doc_files: print(f"正在处理文档: {doc_file}") chunks = split_doc_into_chunks(doc_file) all_chunks.extend(chunks) # 合并到总列表 return all_chunks # 为所有文档分片,并保存到chunks变量中 doc_paths = [ "./docs/TwinFun商贸有限公司双十一活动优惠政策.txt", "./docs/TwinFun双人游戏机旗舰XPro的使用说明.txt", "./docs/TwinFun双人游戏机旗舰XPro的保修政策.txt" ] chunks = split_multiple_docs_into_chunks(doc_paths) for i, chunk in enumerate(chunks): print(f"[{i+1}] {chunk}\n")运行之后,得到了25个文本片段并保存到了chunks变量中:
[1] 一年一度的双十一消费狂欢已然开启,TwinFun商贸有限公司秉持“感恩回馈,让利消费者”的核心理念,率先推出面向全体新客户的专属优惠政策:活动期间(2025年10月24日-2025年11月11日)首次注册成为TwinFun会员的消费者,无需满足任何消费门槛,可直接在会员中心领取一张价值50元的无门槛现金券,券有效期与活动周期一致,可用于平台内除定制家具、进口奢侈品外的所有品类消费,下单时直接抵扣。
[2] 针对长期支持TwinFun的老客户,公司特别定制了体现专属权益的优惠政策:以2025年1月1日-2025年10月23日为统计周期,依托CRM系统分析客户消费数据,消费金额1万元及以上的高活跃客户,直接赠送“1000减300”“2000减700”“5000减2000”满减券各1张;消费金额3000元-9999元的潜力客户,赠送“500减100”满减券2张+15%复购补贴券(单笔最高补贴200元);消费金额3000元以下的复苏客户,赠送“300减50”满减券3张,所有券种2025年11月1日-2025年11月11日可用。
[3] 为简化购物流程,让消费者直观享受实惠,TwinFun推出“官方直降,一件也打折”的优惠政策:10月24日0点起,平台内1200款热门商品直接标注双十一折扣价,无需凑单、计算满减,其中冰箱、洗衣机这几类大家电全场5折,空调、热水器全场5.5折;潮流服饰、鞋帽箱包类商品直降30%,部分断码款式直降50%;美妆护肤类商品直降20%,且支持叠加品牌优惠券,折扣信息在商品详情页实时更新。
[4] 聚焦家庭消费场景,TwinFun精心设计了“套餐组合更省钱”的优惠政策:针对家电、家居、母婴三大品类推出8款主题套餐,“厨房焕新套餐”包含指定品牌烟机(原价2999元)、灶具(原价1599元)、热水器(原价1899元),组合价4997元,比单独购买立省1500元;“亲子成长套餐”包含1-3岁儿童羽绒服2件、益智玩具3套、婴幼儿洗护用品4件,套餐价899元,较单品总价直降40%;所有套餐支持拆分发货,下单后48小时内安排出库。
此处省略……
2.2 向量化
把文档的所有的分片都转化为向量,这里就需要用到嵌入模型(Embedding Model),嵌入模型有很多种(HuggingFace上列举了各个模型的信息 https://huggingface.co/spaces/mteb/leaderboard),它的核心作用是将文本、图片、音频等非结构化数据,转化为一串能被计算机理解的 “数值向量”(向量维度通常为几百到几千),且向量的 “距离” 能反映数据的 “语义相似度”, 比如“猫” 和 “狗” 的向量距离,会比 “猫” 和 “汽车” 更近。这里我们用"shibing624/text2vec-base-chinese"这个嵌入模型来进行向量转化:
from sentence_transformers import SentenceTransformer # 创建一个embedding模型,首次加载速度可能较慢,需要从Hugging Face上拉取模型 embedding_model= SentenceTransformer("shibing624/text2vec-base-chinese") # 定义一个方法embed_chunk,用于将某一段文本转化为对应的多维向量,返回这段文字所对应的多维向量的数组 def embed_chunk(chunk: str) -> List[float]: embedding = embedding_model.encode(chunk) return embedding; # 把文档的所有分片结果chunks,依次转化为向量,并存到embeddings变量中 embeddings=[embed_chunk(chunk) for chunk in chunks] print(f"所有片段转化为向量数组后的数组数量:{len(embeddings)}") print(f"第1个向量的维度:{len(embeddings[0])}") print(f"第1个向量的内容:{embeddings[0]}")运行之后,可以看到这25段文本被成功转化为25个向量,每个向量的维度为768,向量的内容就是一个长度为768的数组:
所有片段转化为向量数组后的数组数量:25
第1个向量的维度:768
第1个向量的内容:[-2.01269060e-01 8.80607814e-02 -2.36491695e-01 3.39772664e-02
3.34142670e-02 -6.69817388e-01 -4.83846664e-03 7.44304180e-01
1.19527370e-01 3.21651660e-02 1.63980484e-01 6.63809538e-01
此处省略……
-3.94228727e-01 4.92302388e-01 -4.49091822e-01 -5.07175863e-01]
2.3 数据分片
把文本和对应的向量存入向量数据库:
import chromadb # 创建一个文件型的数据库,也可以通过chromadb.EphemeralClient()创建一个内存型的数据库,脚本运行结束之后,会清除数据 chromadb_client=chromadb.PersistentClient("./db/chroma.db") # chromadb表 chromadb_collection = chromadb_client.get_or_create_collection(name="default") # 把文本及对应的向量保存到向量数据库(也可以根据collection的upsert方法按照id更新) def save_embeddings(chunks:List[str], embeddings:List[List[float]]) -> None: ids = [str(i) for i in range(len(chunks))] chromadb_collection.add( documents=chunks, embeddings=embeddings, ids=ids ) # 调用方法将文本列表及对应的向量列表保存到向量数据库 save_embeddings(chunks,embeddings)(初次)执行完成后,会在db/chroma.db目录下产生数据库文件,文本片段和对应的向量就保存在这里:
2.4 检索
当用户提问时,需要先把用户的问题转化为一个向量(暂且称之为“检索向量”),再在向量数据库中查询与之语义相近的前k个向量及文本片段:
# 定义一个方法,用于检索指定文本在向量数据库中语义相近的前k个片段 def retrieve(query:str,top_k:int) -> List[str]: # 把查询文本(也就是用户提问的问题)转化为检索向量 query_embeding=embed_chunk(query) # 根据检索向量在数据库中查询语义相近的前k个片段 results = chromadb_collection.query( query_embeddings=[query_embeding], n_results=top_k ) return results['documents'][0] #question="TwinFun XPro手柄链接不上是什么原因?" question="哪些渠道购买的TwinFun XPro可享受官方保修?主机和无线手柄的免费保修期限分别是多久?" retrieve_chunks=retrieve(question,5) print(f"从向量数据库中查询到的与问题【{question}】语义相近的前n个匹配的结果:\n") for i, result in enumerate(retrieve_chunks): print(f"{i+1}. {result}\n")执行后会发现查询的结果的确都是和问题相关度高的片段:
从向量数据库中查询到的与问题【哪些渠道购买的TwinFun XPro可享受官方保修?主机和无线手柄的免费保修期限分别是多久?】语义相近的前n个匹配的结果:
- 保修范围与期限界定:本保修政策仅适用于通过TwinFun品牌官方商城、线下授权门店及天猫、京东官方旗舰店购买的XPro正品设备,非授权渠道购买的设备不享受官方保修服务。核心部件保修期限差异明确:主机(含主板、芯片、散热模块)享受自购买日起2年免费保修;无线手柄、双人摇杆控台等标配功能性配件保修1年;HDMI线、电源线、充电线等易损耗附件保修期限为3个月。保修起始日期以购机发票开具日期为准,无发票时则以设备首次激活日期或电商平台订单生成日期中最早者计算,且仅在中国内地(不含港澳台)区域有效。
- 维修服务保障与规范:设备经审核符合保修条件后,采取“双向免邮”服务模式,用户寄回故障设备的运费由品牌方承担(需选择顺丰快递到付),维修完成后寄回的运费同样由官方承担。维修周期通常为5-7个工作日,若需更换核心部件(如主机主板),客服会提前通过短信或电话与用户确认部件信息及维修时长,征得同意后方可操作。维修后的设备将享受“双重保障”:若原保修未到期,延续剩余保修时间;若原保修已到期,自维修完成日起额外提供90天保修服务,维修记录可在官方客服中心查询。
- 系统更新与维护:在线更新可在“系统设置-系统更新”中手动触发,系统会自动检测最新固件,更新包大小约500MB-1GB,建议在WiFi稳定环境下进行,更新过程中主机将自动重启。若在线更新失败,可采用USB手动更新:在电脑上登录TwinFun官网下载最新固件,将其保存至FAT32格式的USB硬盘(需新建“XPro”文件夹,子文件夹命名“UPDATE”,固件文件重命名为“XPROUPDATE.PUP”),将USB插入主机USB接口,按住主机背面复位键的同时开机,待指示灯呈橙色闪烁时松开,选择“USB更新”即可。日常维护需每月用压缩空气清理主机散热孔灰尘,避免积尘导致过热。
- 延保服务与增值保障:为延长设备保障周期,用户可在原保修到期前30天内,通过官方APP或客服热线购买延保服务。延保费用明确定价:主机单独延保1年费用199元,延保2年费用349元;全套设备(主机+所有标配配件)延保1年费用299元,延保2年费用549元。延保服务与原保修范围一致,购买后即时生效并与原保修无缝衔接。此外,可额外购买“意外保障服务”,399元/年,覆盖人为摔落、液体泼溅、意外挤压等非人为故障,购买后需在48小时内完成设备外观及功能验机备案,未备案则保障无效。
- 开箱与部件识别:TwinFun XPro标配含1台主机、2个无线手柄、1个双人摇杆控台、1根HDMI 2.1高清线、1根主机电源线、1根摇杆控台Type-C充电线及1份快速指南。主机正面为电源键(带指示灯)和USB 3.0接口,背面依次分布HDMI输出口、电源接口、网线接口及复位键;摇杆控台顶部设1P/2P操作键、暂停键,底部有6个防滑吸盘,手柄则配备方向键、动作键(A/B/X/Y)及配对键。
2.5 重排(增强)
在实际场景中,有时候根据向量相似度查询到的片段可能并不是很准确,因此可以考虑在检索的时候多查一些(比如正常查3条就够了,但查5条)再进一步通过cross-encoder模型对检索到的片段进行深度匹配和排序,然后取分数较高的前3条:
from sentence_transformers import CrossEncoder # 定义一个排序方法,通过cross-encoder模型,对用户问题和多个片段之间的相似度打分、排序 def rerank(query:str, retrieve_chunks: List[str], top_k:int) -> List[str]: # 创建cross_encoder模型 cross_encoder=CrossEncoder('cross-encoder/mmarco-mMiniLMv2-L12-H384-v1') # 用户问题+相似片段 列表 pairs=[(query,chunk) for chunk in retrieve_chunks] # 用户问题和每个相似片段的重排分数 scores=cross_encoder.predict(pairs) # 用户问题+每个相似片段 重排分数的列表 chunk_with_score_list=[ (chunk,score) for chunk,score in zip(retrieve_chunks,scores) ] # 按照分数倒序排序 chunk_with_score_list.sort(key=lambda pair:pair[1],reverse=True) # 取top k return [chunk for chunk,_ in chunk_with_score_list][:top_k] reranked_chunks=rerank(question,retrieve_chunks,3) print(f"对匹配结果增强重排后,与问题【{question}】语义相近的前n个匹配的结果:\n") for i,chunk in enumerate(reranked_chunks): print(f"{i+1}. {chunk}\n")这里取重排后分数较高的前3条片段,看效果是非常符合预期的:
对匹配结果增强重排后,与问题【哪些渠道购买的TwinFun XPro可享受官方保修?主机和无线手柄的免费保修期限分别是多久?】语义相近的前n个匹配的结果:
- 保修范围与期限界定:本保修政策仅适用于通过TwinFun品牌官方商城、线下授权门店及天猫、京东官方旗舰店购买的XPro正品设备,非授权渠道购买的设备不享受官方保修服务。核心部件保修期限差异明确:主机(含主板、芯片、散热模块)享受自购买日起2年免费保修;无线手柄、双人摇杆控台等标配功能性配件保修1年;HDMI线、电源线、充电线等易损耗附件保修期限为3个月。保修起始日期以购机发票开具日期为准,无发票时则以设备首次激活日期或电商平台订单生成日期中最早者计算,且仅在中国内地(不含港澳台)区域有效。
- 延保服务与增值保障:为延长设备保障周期,用户可在原保修到期前30天内,通过官方APP或客服热线购买延保服务。延保费用明确定价:主机单独延保1年费用199元,延保2年费用349元;全套设备(主机+所有标配配件)延保1年费用299元,延保2年费用549元。延保服务与原保修范围一致,购买后即时生效并与原保修无缝衔接。此外,可额外购买“意外保障服务”,399元/年,覆盖人为摔落、液体泼溅、意外挤压等非人为故障,购买后需在48小时内完成设备外观及功能验机备案,未备案则保障无效。
- 维修服务保障与规范:设备经审核符合保修条件后,采取“双向免邮”服务模式,用户寄回故障设备的运费由品牌方承担(需选择顺丰快递到付),维修完成后寄回的运费同样由官方承担。维修周期通常为5-7个工作日,若需更换核心部件(如主机主板),客服会提前通过短信或电话与用户确认部件信息及维修时长,征得同意后方可操作。维修后的设备将享受“双重保障”:若原保修未到期,延续剩余保修时间;若原保修已到期,自维修完成日起额外提供90天保修服务,维修记录可在官方客服中心查询。
2.6 生成
生成阶段,我们可以依赖不同的大语言模型进行生成。如果需要集成多个不同的大模型,可以使用OneAPI等聚合API来实现。
下面我们用两种方式来举例说明:通过Ollama调用本地运行的大语言模型(通过Ollama等方式在本地部署大语言模型如Llama、DeepSeek等)、通过SDK调用三方大语言模型(Gemini、ChatGPT等)。
通过Ollama调用本地大语言模型,需要先在本地通过Ollama运行deepseek-r1:1.5b这个模型:
# 通过Ollama的SDK调用本地大模型生成结果 # 本地要先通过Ollama运行大模型 import ollama def generate(query:str,chunks:List[str] )->str: prompt = f"""你是一位知识助手,请严格根据用户的问题和参考资料生成准确的回答。 用户问题: {query} 参考资料: {"\n\n".join(chunks)} 请严格基于上述内容作答,不要编造信息,如果资料中没有答案,请回答“文档中未找到相关信息”。""" print(f"{prompt}\n\n---\n") try: response = ollama.chat( model='deepseek-r1:1.5b', messages=[{'role': 'user', 'content': prompt}], ) return response['message']['content'] except Exception as e: print(f"API调用失败: {e}") return "API调用失败"; # 生成测试 answer = generate(question,reranked_chunks); print(answer)运行结果如下:
你是一位知识助手,请严格根据用户的问题和参考资料生成准确的回答。
用户问题: 哪些渠道购买的TwinFun XPro可享受官方保修?主机和无线手柄的免费保修期限分别是多久?
参考资料: 保修范围与期限界定:本保修政策仅适用于通过TwinFun品牌官方商城、线下授权门店及天猫、京东官方旗舰店购买的XPro正品设备,非授权渠道购买的设备不享受官方保修服务。核心部件保修期限差异明确:主机(含主板、芯片、散热模块)享受自购买日起2年免费保修;无线手柄、双人摇杆控台等标配功能性配件保修1年;HDMI线、电源线、充电线等易损耗附件保修期限为3个月。保修起始日期以购机发票开具日期为准,无发票时则以设备首次激活日期或电商平台订单生成日期中最早者计算,且仅在中国内地(不含港澳台)区域有效。
延保服务与增值保障:为延长设备保障周期,用户可在原保修到期前30天内,通过官方APP或客服热线购买延保服务。延保费用明确定价:主机单独延保1年费用199元,延保2年费用349元;全套设备(主机+所有标配配件)延保1年费用299元,延保2年费用549元。延保服务与原保修范围一致,购买后即时生效并与原保修无缝衔接。此外,可额外购买“意外保障服务”,399元/年,覆盖人为摔落、液体泼溅、意外挤压等非人为故障,购买后需在48小时内完成设备外观及功能验机备案,未备案则保障无效。
维修服务保障与规范:设备经审核符合保修条件后,采取“双向免邮”服务模式,用户寄回故障设备的运费由品牌方承担(需选择顺丰快递到付),维修完成后寄回的运费同样由官方承担。维修周期通常为5-7个工作日,若需更换核心部件(如主机主板),客服会提前通过短信或电话与用户确认部件信息及维修时长,征得同意后方可操作。维修后的设备将享受“双重保障”:若原保修未到期,延续剩余保修时间;若原保修已到期,自维修完成日起额外提供90天保修服务,维修记录可在官方客服中心查询。
请严格基于上述内容作答,不要编造信息,如果资料中没有答案,请回答“文档中未找到相关信息”。
好的,我现在需要根据用户的问题和提供的相关片段来回答他们的查询。用户的问题是关于购买TwinFun XPro产品的渠道如何享受官方保修,并且想知道主机和无线手柄的免费保修期限分别是多久。
首先,我会仔细阅读用户的问题部分:“哪些渠道购买的TwinFun XPro可享受官方保修?主机和无线手柄的免费保修期限分别是多久?”这表明用户关心的是不同的渠道(包括官方商城、线下授权门店及天猫、京东官方旗舰店)购买的产品是否都能享受官方保修,以及主机和手柄的保修期有多长。
接下来,我查看相关片段。保修范围与期限界定部分明确说明,本保修政策仅适用于通过TwinFun品牌官方商城、线下授权门店及天猫、京东官方旗舰店购买的XPro正品设备,并非授权渠道的产品不享受保修。因此,不同渠道都应可以享受官方保修服务。
然后,核心部件部分详细说明了各部件的保修期限:
- 主机(含主板、芯片、散热模块):自购买日起2年免费保修。
- 无线手柄、双人摇杆控台等标配功能配件:1年免费保修。
- HDMI线、电源线、充电线等易损耗附件:3个月保修。
这意味着主机和无线手柄的保修期分别是2年和1年。此外,手柄的保修时间是1年,主机则是2年。
我还需要确保回答准确无误,并且不涉及编造的信息。根据片段中的内容,可以直接引用保修期限的说明,以保证答案的准确性。
总结一下,购买TwinFun XPro的任何渠道均可享受官方保修服务,主机的保修期为2年,手柄的是1年。
购买TwinFun XPro的产品不论通过官方商城、线下授权门店或京东官方旗舰店均可享受官方保修服务。主机的免费保修期限是2年,无线手柄的免费保修期限是1年。
通过SDK调用三方大语言模型,这里调用的Google的gemini-2.5-flash模型,如果你调不通(比如你遇到诸如这类错误{‘error’: {‘code’: 400, ‘message’: ‘User location is not supported for the API use.’, ‘status’: ‘FAILED_PRECONDITION’}}),也可以调DeepSeek等国内的大模型,当然都需要提前获取秘钥:
# 调用Google的Gemini生成结果,依赖google-genai from google import genai client = genai.Client(api_key="AIzaSyD-l1J5qt0VhDOmLASJPxaG_7If5BXvm8Q") def generate(query:str,chunks:List[str] )->str: prompt = f"""你是一位知识助手,请严格根据用户的问题和参考资料生成准确的回答。 用户问题: {query} 参考资料: {"\n\n".join(chunks)} 请严格基于上述内容作答,不要编造信息,如果资料中没有答案,请回答“文档中未找到相关信息”。""" print(f"{prompt}\n\n---\n") try: response = client.models.generate_content( model="gemini-2.5-flash", contents=prompt, ) return response.text except Exception as e: print(f"API调用失败: {e}") return "API调用失败"; # 生成测试 answer = generate(question,reranked_chunks); print(answer)运行结果如下:
你是一位知识助手,请严格根据用户的问题和参考资料生成准确的回答。
用户问题: 哪些渠道购买的TwinFun XPro可享受官方保修?主机和无线手柄的免费保修期限分别是多久?
参考资料: 保修范围与期限界定:本保修政策仅适用于通过TwinFun品牌官方商城、线下授权门店及天猫、京东官方旗舰店购买的XPro正品设备,非授权渠道购买的设备不享受官方保修服务。核心部件保修期限差异明确:主机(含主板、芯片、散热模块)享受自购买日起2年免费保修;无线手柄、双人摇杆控台等标配功能性配件保修1年;HDMI线、电源线、充电线等易损耗附件保修期限为3个月。保修起始日期以购机发票开具日期为准,无发票时则以设备首次激活日期或电商平台订单生成日期中最早者计算,且仅在中国内地(不含港澳台)区域有效。
延保服务与增值保障:为延长设备保障周期,用户可在原保修到期前30天内,通过官方APP或客服热线购买延保服务。延保费用明确定价:主机单独延保1年费用199元,延保2年费用349元;全套设备(主机+所有标配配件)延保1年费用299元,延保2年费用549元。延保服务与原保修范围一致,购买后即时生效并与原保修无缝衔接。此外,可额外购买“意外保障服务”,399元/年,覆盖人为摔落、液体泼溅、意外挤压等非人为故障,购买后需在48小时内完成设备外观及功能验机备案,未备案则保障无效。
维修服务保障与规范:设备经审核符合保修条件后,采取“双向免邮”服务模式,用户寄回故障设备的运费由品牌方承担(需选择顺丰快递到付),维修完成后寄回的运费同样由官方承担。维修周期通常为5-7个工作日,若需更换核心部件(如主机主板),客服会提前通过短信或电话与用户确认部件信息及维修时长,征得同意后方可操作。维修后的设备将享受“双重保障”:若原保修未到期,延续剩余保修时间;若原保修已到期,自维修完成日起额外提供90天保修服务,维修记录可在官方客服中心查询。
请严格基于上述内容作答,不要编造信息,如果资料中没有答案,请回答“文档中未找到相关信息”。
根据您提供的信息,TwinFun XPro可享受官方保修的渠道包括:
- TwinFun品牌官方商城
- 线下授权门店
- 天猫官方旗舰店
- 京东官方旗舰店
通过非授权渠道购买的设备不享受官方保修服务。
关于免费保修期限:
- 主机(含主板、芯片、散热模块)享受自购买日起2年免费保修。
- 无线手柄享受1年免费保修。
保修起始日期以购机发票开具日期为准,无发票时则以设备首次激活日期或电商平台订单生成日期中最早者计算。
结果是不是跟你预期的一样呢?至此,从0到1建造的一套RAG系统就完成了,如果想真正消化这些知识,就快动手试一试吧。
最后
我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。
我整理出这套 AI 大模型突围资料包:
- ✅AI大模型学习路线图
- ✅Agent行业报告
- ✅100集大模型视频教程
- ✅大模型书籍PDF
- ✅DeepSeek教程
- ✅AI产品经理入门资料
完整的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇
为什么说现在普通人就业/升职加薪的首选是AI大模型?
人工智能技术的爆发式增长,正以不可逆转之势重塑就业市场版图。从DeepSeek等国产大模型引发的科技圈热议,到全国两会关于AI产业发展的政策聚焦,再到招聘会上排起的长队,AI的热度已从技术领域渗透到就业市场的每一个角落。
智联招聘的最新数据给出了最直观的印证:2025年2月,AI领域求职人数同比增幅突破200%,远超其他行业平均水平;整个人工智能行业的求职增速达到33.4%,位居各行业榜首,其中人工智能工程师岗位的求职热度更是飙升69.6%。
AI产业的快速扩张,也让人才供需矛盾愈发突出。麦肯锡报告明确预测,到2030年中国AI专业人才需求将达600万人,人才缺口可能高达400万人,这一缺口不仅存在于核心技术领域,更蔓延至产业应用的各个环节。
资料包有什么?
①从入门到精通的全套视频教程⑤⑥
包含提示词工程、RAG、Agent等技术点
② AI大模型学习路线图(还有视频解说)
全过程AI大模型学习路线
③学习电子书籍和技术文档
市面上的大模型书籍确实太多了,这些是我精选出来的
④各大厂大模型面试题目详解
⑤ 这些资料真的有用吗?
这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。
所有的视频教程由智泊AI老师录制,且资料与智泊AI共享,相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势,构建起"前沿课程+智能实训+精准就业"的高效培养体系。
课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事!
如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!
应届毕业生:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。
零基础转型:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界。
业务赋能 突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓**