/image/touxiang.png

AIOPS

切分设置 chunk_size=1024,over_lap=100 标题增强 把每个txt的第一行作为文件名 给每个切分后的node加上 文件前一级路径 + 文件名 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 for node in tqdm(nodes): f_n = extract_txt_prefix(node.metadata['file_name']) f_p = extract_path_prefix(node.metadata['file_path']) node.text = f'{f_p}\n{f_n}\n' + node.text def extract_txt_prefix(file_name): """提取.txt前面的内容""" if file_name.endswith('.txt'): return file_name[:-4] else: return file_name # 如果不是以.txt结尾,则返回整个文件名 def extract_path_prefix(file_path): """提取最后两个斜杠之间的内容""" # 使用正则表达式匹配最后两个斜杠之间的内容 # ([^/]+):匹配一个或多个非/的字符,并将它们作为一个捕获组。 # (?=\/[^/]*$):是一个正向预查(lookahead),用于确保匹配的字符串后面跟随一个/,并且直到字符串末尾可以有任意数量的非/字符。 match = re.search(r'([^/]+)(?=\/[^/]*$)', file_path) if match: return match.

conda换源

先看conda info找到.condarc在哪 直接替换.condarc内容为: 清华源: channels: https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/fastai/ https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/ show_channel_urls: true ssl_verify: false 阿里源 channels: http://mirrors.aliyun.com/anaconda/pkgs/main http://mirrors.aliyun.com/anaconda/pkgs/r http://mirrors.aliyun.com/anaconda/pkgs/msys2 show_channel_urls: true ssl_verify: false 默认源 terminal中输入 conda config –remove-key channels

LlamaIndex

[官方文档]:LlamaIndex 🦙 v0.10.17 新版本大部分llama_index都变成了llama_index.core Document格式 documents = SimpleDirectoryReader("/home/wjm/projects/RAG/test_data").load_data() [Document(id_=’’, embedding, metadata, excluded_embed_metadata_keys, excluded_llm_metadata_keys, relationships, text=‘txt文件内容’, start_char_idx, end_char_idx, text_template=’{metadata_str}\n\n{content}’, metadata_template=’{key}: {value}’, metadata_seperator=’\n’), Document(id…] 1 [Document(id_='4357a4df-eb75-435f-a63a-6e9bb0c9efba', embedding=None, metadata={'file_path': '/home/wjm/projects/RAG/test_data/变电工程电气分册.txt', 'file_name': '/home/wjm/projects/RAG/test_data/变电工程电气分册.txt', 'file_type': 'text/plain', 'file_size': 34775, 'creation_date': '2024-03-07', 'last_modified_date': '2024-03-07'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={}, text='国家电网有限公司输变电工程标准工艺\n变电工程电气分册\n国家电网有限公司基建部 组编\n正文设计:张俊霞\n项目号:XM88543 编辑:翟巧珍\n成品:210*297 版心:245mm*166mm\n字数:44字*44行 正文字号:5号\n天:27 地:25 订:24 切:20\n图数:调图 35 改图 29 画图 153 灰修 5 纯灰 331\n四色\n中国电力出版社\n为更好地适应输变电工程高质量建设及绿色建造要求,国家电网有限公司组织相关单位对\n原标准工艺体系进行了全面修编。将原《国家电网公司输变电工程标准工艺》(一)~(六)系\n列成果,按照变电工程、架空线路工程、电缆工程等专业进行系统优化、整合,单独成册。\n本书为《国家电网有限公司输变电工程标准工艺 变电工程电气分册》,包括主变压器系\n统设备安装、站用变压器及交流系统设备安装、配电装置安装、全站防雷及接地装置安装、主\n控及直流设备安装、全站电缆施工、通信系统设备安装、视频监控及火灾报警系统、智能变电\n站设备安装、换流设备安装10章62节。每节基本包括工艺流程、工艺标准、工艺示范、设计\n图例四部分内容,还有的节设置了工艺视频内容,扫码即可观看。\n本书适用于从事电力输变电工程施工、安装、验收、监理等的工人、技术人员和管理人员\n使用,也可供相关专业人员参考。\n图书在版编目(CIP)数据\n国家电网有限公司输变电工程标准工艺. 变电工程电气分册/国家电网有限公司基建部组编.—北京:中国电力出版社,\n2022.3\nISBN 978-7-5198-6334-0\nⅠ. ①国… Ⅱ.

RAG

https://mp.weixin.qq.com/s/gwEmcxDmc8zGS3uMLXpuyw Retrieval-Augmented Generation 检索增强生成 深入理解LLM RAG检索生成 https://www.bilibili.com/read/cv29676672/ 大语言模型的问题 偏见 幻觉(信息可信度) 过时(时效性) 大语言模型的知识来源 训练的知识 用户的输入 外部索引、知识库 外挂数据 外部向量数据库 外部知识图谱 文档数据 WEB数据等 经过Doc Loader,加载各种数据源的数据,经过embedding向量化后存储进向量数据库。这是Retrieval-augmented基础数据处理器。用户通过 QA向LLM提问,会通过QA问题向向量数据库召回相似度较高的上下文,通过Prompt提示词一起发给LLM,LLM通过问题与上下文一起生成答案返回给用户。 RAG实现 数据加载(Document Loaders) langchain_community.document_loaders 数据处理(Text Splitters) 数据分割 加载完数据后,我们下一步通常需要将数据进行拆分,尤其是在处理长文本的情况下。如何将文本进行分割处理,听起来很简单,比如我按400个字符,直接切片就好了,但往往这样应用效果不甚理想。 我们通常希望能将将语义相关的文本片段保留在一起。 重点其实就在这个“语义相关”,比如中文,我们希望是句号为分割符,比如一段长代码,我们希望以编程语言特点来分割,比如Python中的def、class 以langchain为例,langchain目前支持HTML、字符、MarkdownHeader和多种代码分割,甚至正在实验中的语义分割。 按MarkdownHeader分割 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 from langchain.text_splitter import MarkdownHeaderTextSplitter markdown_document = "# Foo\n\n ## Bar\n\nHi this is Jim\n\nHi this is Joe\n\n ### Boo \n\n Hi this is Lance \n\n ## Baz\n\n Hi this is Molly" headers_to_split_on = [ ("#", "Header 1"), ("##", "Header 2"), ("###", "Header 3"), ] markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on=headers_to_split_on) md_header_splits = markdown_splitter.

外挂知识库

PDF处理 PyPDF2 1 pip install pypdf2 Pdfplumber 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # 打开 PDF 文档 with p.open(pdf_path) as pdf: # 获取 PDF 文本 pages = pdf.pages # 分割节 title_id = 0 for page in tqdm(pages): text = page.extract_text() lines = text.split('\n') for line in lines: # 过滤掉不需要的字符串 if filterate(line): # print(line, filterate(line)) continue PDFminer PDF -> txt 分节 1 2 3 # 初始化PDF阅读器 pdf_reader = PyPDF2.