首页/新闻资讯/正文详情

【ollama】基于ollama的lancedb的RAG

发布时间:2026/11/4 1:59:02 来源:云帆数科 栏目:资讯中心
【ollama】基于ollama的lancedb的RAG
【ollama】基于ollama的lancedb的RAG余弦和L2的区别文本切分然后转成向量入库查询文本转向量ai聚合余弦和L2的区别余弦相似度余弦距离 dist_cosL2 距离 dist_l2相关性0.950.050.316极高相似0.800.200.632高度相似0.700.300.775比较相关0.550.450.949弱相关0.500.501.000临界0.400.601.095基本无关文本切分然后转成向量入库vectorWrite.pyfromlangchain_text_splittersimportRecursiveCharacterTextSplitterimportrequests# 0.34importlancedbfromdocximportDocumentimportreimporttime# 配置区 DOCX_PATHrD:\OneboxBackup\kedd\allword\Flink on hudi 最佳实践.docxDB_FOLDER./lance_kbTABLE_NAMEdocument_knowledge# 这个是要在ollma那边去安装的模型OLLAMA_EMB_MODELbgezh:latestOLLAMA_URLhttp://xxxxx:11434/api/embedVEC_DIM512CHUNK_SIZE500CHUNK_OVERLAP80# defclean_text(s:str)-str:ifnotisinstance(s,str):returnss.strip()ss.replace(\n, )sre.sub(r\s, ,s)returnsdefget_embedding(text:str,is_query:boolFalse,timeout30):raw_txtclean_text(text)ifnotraw_txt:raiseValueError(清洗后文本为空无法生成向量)ifis_query:promptf为这个句子生成表示以用于检索相关文章{raw_txt}else:promptraw_txt payload{model:OLLAMA_EMB_MODEL,input:prompt}resprequests.post(OLLAMA_URL,jsonpayload,timeouttimeout)resp.raise_for_status()res_jsonresp.json()embres_json.get(embeddings)ifnotemborlen(emb)0:raiseRuntimeError(fOllama返回空embedding文本片段{prompt[:100]}...)# 自动兼容二维嵌套 [[向量]]ifisinstance(emb[0],list):embemb[0]vec_list[float(num)fornuminemb]returnvec_listdefload_docx(file_path:str)-str:docDocument(file_path)paragraphs[p.text.strip()forpindoc.paragraphsifp.text.strip()]ifnotparagraphs:raiseValueError(文档读取为空请检查docx文件)return\n\n.join(paragraphs)text_splitterRecursiveCharacterTextSplitter(separators[\n\n,。,,,,\n,],chunk_sizeCHUNK_SIZE,chunk_overlapCHUNK_OVERLAP,length_functionlen)if__name____main__:dblancedb.connect(DB_FOLDER)ifTABLE_NAMEindb.list_tables():db.drop_table(TABLE_NAME)print(f✅ 旧表{TABLE_NAME}已删除\n)full_textload_docx(DOCX_PATH)print(文档读取完成开始切分文本……)chunkstext_splitter.split_text(full_text)print(f一共切分为{len(chunks)}个文本片段\n)data_rows[]skip_count0foridx,seg_textinenumerate(chunks):print(f正在处理片段{idx1}/{len(chunks)})try:vecget_embedding(seg_text,is_queryFalse)iflen(vec)!VEC_DIM:print(f⚠️ 片段{idx1}向量维度异常{len(vec)}跳过)skip_count1continuedata_rows.append({id:fseg_{idx},text:seg_text,vector:vec})time.sleep(0.15)exceptExceptionase:skip_count1print(f❌ 片段{idx1}生成向量失败:{str(e)})continueprint(f\n有效写入片段{len(data_rows)}跳过失败片段{skip_count})iflen(data_rows)0:print(没有任何有效向量终止写入)else:tbldb.create_table(TABLE_NAME,datadata_rows,modeoverwrite)print(✅ 创建新表并写入向量数据)# 兼容0.34.0最终检索写法 print(\n 检索自测【L2距离越小越相似】 )queryFlink 和 Hudi 如何整合实现增量处理q_vecget_embedding(query,is_queryTrue)resultstbl.search(q_vec).limit(3).to_list()foriteminresults:print(fL2距离:{item[_distance]:.4f})print(f文本:\n{item[text]}\n)查询文本转向量ai聚合vectorRead.pyimportlancedbimportrequestsimportre 高度相关0.95 弱相关0.95 ~ 1.05 无关1.05 如果你发现很多相关文档被过滤可以适度把阈值上调到 1.10。 # 配置区 DB_FOLDER./lance_kbTABLE_NAMEdocument_knowledgeOLLAMA_BASE_URLhttp://xxxx:11434OLLAMA_EMB_MODELbgezh:latestOLLAMA_CHAT_MODELds05288b:latestTOP_K3# 【重点修改】改成L2距离阈值DISTANCE_THRESHOLD0.95# defclean_text(s:str)-str:统一文本清洗入库、查询两边保持完全一致ifnotisinstance(s,str):returnss.strip()ss.replace(\n, )# 多个空白压缩为单个空格sre.sub(r\s, ,s)returnsdefget_embedding(text:str,is_query:boolTrue,timeout30): BGE-ZH 专用Embedding和入库代码完全对齐 is_queryTrue用户提问带检索指令 is_queryFalse知识库原始文本 textclean_text(text)ifis_query:promptf为这个句子生成表示以用于检索相关文章{text}else:prompttext urlf{OLLAMA_BASE_URL}/api/embed# 和入库统一使用 input 字符串不再用inputs数组payload{model:OLLAMA_EMB_MODEL,input:prompt}try:resprequests.post(url,jsonpayload,timeouttimeout)resp.raise_for_status()res_jsonresp.json()embres_json[embeddings]# 自动处理嵌套二维 [[向量]]ifisinstance(emb[0],list):embemb[0]returnembexceptExceptionase:print(f【Embedding请求失败】{e})raisedefsearch_kb(query_text:str,limitTOP_K):向量检索lancedb 0.34.0 移除metric参数默认L2距离dblancedb.connect(DB_FOLDER)tbldb.open_table(TABLE_NAME)query_vecget_embedding(query_text,is_queryTrue)# 删除 metriccosineresultstbl.search(query_vec).limit(limit).to_list()returnresultsdefollama_answer(user_question:str,context:str,timeout60):基于知识库上下文生成答案严格禁止幻觉sys_prompt 你是知识库问答助手严格遵守规则 1. 只允许依据【参考知识库内容】作答严禁编造任何不存在信息 2. 如果参考资料不足以回答问题直接回复知识库中暂无相关信息 3. 不要脑补、不要拓展、不要添加原文没有的数据 4. 回答简洁通顺不要冗余。 【参考知识库内容】 {context} urlf{OLLAMA_BASE_URL}/api/chatpayload{model:OLLAMA_CHAT_MODEL,stream:False,temperature:0.0,messages:[{role:system,content:sys_prompt.format(contextcontext)},{role:user,content:user_question}]}try:resprequests.post(url,jsonpayload,timeouttimeout)resp.raise_for_status()res_jsonresp.json()returnres_json[message][content]exceptExceptionase:returnf【请求Ollama对话模型异常】{str(e)}if__name____main__:print( LanceDB RAG查询工具L2距离检索 )print(输入 quit 退出\n)whileTrue:questioninput(请输入查询问题)qquestion.strip()ifq.lower()quit:breakifnotq:continuetry:res_listsearch_kb(q)exceptExceptionase:print(f检索异常{e}\n)continueprint(\n----------原始检索结果----------)valid_context[]foridx,iteminenumerate(res_list,1):distitem[_distance]# 打印文字修改为L2距离防止混淆print(f\n[{idx}] L2距离:{dist:.4f})print(f文本{item[text]})ifdistDISTANCE_THRESHOLD:valid_context.append(item[text])print(\n AI回答 )ifnotvalid_context:print(知识库中暂无相关信息)else:ctx_str\n\n.join(valid_context)ansollama_answer(q,ctx_str)print(ans)print(\n\n)

相关推荐

KoboldCpp 图像生成:一个可执行文件搭起本地文生图链路
KoboldCpp 图像生成:一个可执行文件搭起本地文生图链路

KoboldCpp 图像生成:一个可执行文件搭起本地文生图链路 【免费下载链接】koboldcpp KoboldCpp - Run GGUF AI models locally with a KoboldAI UI. One File. Zero Install. 项目地址: https://gitcode.com/gh_mirrors/ko/koboldcpp 文本模型与 Stable Diffu… · 2026/11/4 1:59:02

一句需求 5 分钟出报告:JoyAgent-JDGenie 多格式报告生成智能体实战
一句需求 5 分钟出报告:JoyAgent-JDGenie 多格式报告生成智能体实战

一句需求 5 分钟出报告:JoyAgent-JDGenie 多格式报告生成智能体实战 【免费下载链接】joyagent-jdgenie 开源的端到端产品级通用智能体 项目地址: https://gitcode.com/gh_mirrors/jo/joyagent-jdgenie 周五下午五点,老板发话:“下班前… · 2026/11/4 1:59:02

许可、安全与社区协作:NotProton 的工程实践与贡献指南全览
许可、安全与社区协作:NotProton 的工程实践与贡献指南全览

【免费下载链接】NotProton Steam Play for macOS 项目地址: https://gitcode.com/gh_mirrors/no/NotProton 点击查看 免费下载 NotProton 是一个让 macOS 版 Steam 启用 Steam Play(Proton 兼容层)的开源工具,它采用 GPL-3.0 主… · 2026/11/4 1:59:02

MoBaiTool系统优化六模块实战:CPU调校、电源与内存清理避坑
MoBaiTool系统优化六模块实战:CPU调校、电源与内存清理避坑

系统优化这事儿,我折腾了快十年,从最早手动改注册表、写批处理,到后来自己攒一套调校脚本,踩过的坑能装满一个移动硬盘。MoBaiTool 这个系统优化工具箱吸引我的地方,不在于它功能多,而在于它把六个最容易互… · 2026/11/4 4:18:39

GitHub周榜怎么读:开源项目评估与技术雷达搭建
GitHub周榜怎么读:开源项目评估与技术雷达搭建

刷周榜这件事,我从最早把它当"每周科技新闻"看,到现在把它当一份需要交叉验证的行业信号源,中间踩过的坑不算少。2026 年 9 月 6 日这一期的 GitHub 周榜出来后,我把整份榜单从头翻了一遍,顺手做了几组数据对… · 2026/11/4 4:18:39

微电网多目标优化系统设计与MOPSO算法实现
微电网多目标优化系统设计与MOPSO算法实现

1. 微电网多目标优化系统概述在分布式能源系统快速发展的今天,如何高效协调风能、太阳能等可再生能源与传统电网、储能系统及负荷之间的关系,成为微电网运行优化的核心挑战。本文介绍的微电网多目标优化系统,正是为解决这一难题而设计的智能决… · 2026/11/4 4:18:39

无人机遥感图像处理链路:去噪、辐射校正与智能裁剪
无人机遥感图像处理链路:去噪、辐射校正与智能裁剪

1. 无人机遥感图像为什么“不能直接用”——从航拍到可交付成果的处理链路拿到无人机落下来的原始影像,绝大多数人第一反应是直接拖进软件里拼图,然后被结果吓一跳:田块边界糊成一团,同一片作物在相邻两张图上颜色一深一浅&#x… · 2026/11/4 4:18:39

ipa转换工具实战:.app打包、重签名与批量出包避坑
ipa转换工具实战:.app打包、重签名与批量出包避坑

简介:这份rar压缩包面向需要了解iOS应用打包与IPA格式转换的开发者、测试人员及越狱/非官方分发场景的学习者,核心解决将.app等软件包整理为可安装IPA、并关联代码签名与配置信息的问题。压缩包共31个文件、约447KB,包含15张png界面或资源图、… · 2026/11/4 4:18:39

pytest框架setup与teardown机制及fixture应用详解
pytest框架setup与teardown机制及fixture应用详解

1. pytest框架的四种级别setup与teardown机制解析在自动化测试领域,环境初始化和清理是保证测试用例独立性的关键。pytest作为Python生态中最主流的测试框架,提供了四种不同粒度的setup/teardown机制:1.1 模块级(module&#xff0… · 2026/11/4 4:17:39

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

AI辅助技术栈评估:提升研发决策效率60%
AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17

从生成Token到直接决策:Jev如何重塑AI Agent工程实践
从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17

32G统一内存跑大模型:内存账、TPS实测与端云分流
32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码