如何给网站做关键词优化怎么用网站做chm
2026/3/26 18:10:45 网站建设 项目流程
如何给网站做关键词优化,怎么用网站做chm,电脑企业网站设计,wordpress编辑权限设置密码在前面的内容中#xff0c;我们学会了如何构建基于大语言模型#xff08;LLM#xff09;的智能链条。然而#xff0c;LLM本身的知识是有限且有“截止日期”的。当我们需要LLM回答关于最新信息、企业内部文档或特定领域知识的问题时#xff0c;仅仅依靠LLM的“记忆”是远远…在前面的内容中我们学会了如何构建基于大语言模型LLM的智能链条。然而LLM本身的知识是有限且有“截止日期”的。当我们需要LLM回答关于最新信息、企业内部文档或特定领域知识的问题时仅仅依靠LLM的“记忆”是远远不够的。这就是 RAGRetrieval-Augmented Generation检索增强生成 技术的用武之地。RAG 的核心思想是在LLM生成答案之前先从一个外部知识库中检索出与用户问题最相关的事实依据然后将这些依据作为上下文提供给LLM让LLM基于这些事实来生成更准确、更可靠的回答。而“数据连接”正是RAG的第一步如何把你的私有数据或特定领域数据转化为LLM可以“理解”并“检索”的格式 这就涉及到数据加载、切分和向量化。核心概念Document——LangChain的数据载体在 LangChain 中所有外部数据无论是文本文件、网页、PDF还是数据库记录在被处理和传递时都会被封装成 Document 对象。一个 Document 对象非常简单主要包含两个核心字段page_content (字符串) 这是文档的主要文本内容。metadata (字典) 这是一个可选的字典用于存储关于文档的附加信息如源文件路径、作者、创建日期、页码等。这些元数据在后续的检索和过滤中非常有用。手动创建一个 Document 对象from langchain_core.documents import Document my_document Document( page_contentLangChain是一个用于开发大语言模型应用的框架。, metadata{source: tutorial_intro, date: 2025-06-02} ) print(my_document) print(my_document.page_content) print(my_document.metadata)一、Document Loaders——数据源的桥梁Document Loaders 的任务是从各种数据源文件、网页、数据库、SaaS应用等读取数据并将其转换为 LangChain Document 对象的列表。LangChain langchain-community 包提供了海量的 Document Loaders。你需要根据数据来源安装对应的额外依赖。常用 Document Loaders 示例TextLoader加载普通文本文件最简单直接的加载器。通常会把文件路径作为 metadata。# 1. 准备一个文本文件 (先手动创建一个 example.txt) # 文件内容 # LangChain是一个开源框架。 # 它的主要目标是帮助开发者构建大语言模型应用。 # RAG是LangChain的重要应用之一。 with open(example.txt, w, encodingutf-8) as f: f.write(LangChain是一个开源框架。\n) f.write(它的主要目标是帮助开发者构建大语言模型应用。\n) f.write(RAG是LangChain的重要应用之一。) from langchain_community.document_loaders import TextLoader loader TextLoader(example.txt, encodingutf-8) documents loader.load() # load() 返回一个 Document 列表 print(\n--- TextLoader 示例 ---) print(f加载的文档数量: {len(documents)}) print(f第一个文档内容:\n{documents[0].page_content}) print(f第一个文档元数据:\n{documents[0].metadata})WebBaseLoader加载网页内容需要安装 bs4 (BeautifulSoup) 库pip install beautifulsoup4从指定的URL抓取网页内容。from langchain_community.document_loaders import WebBaseLoader loader WebBaseLoader(https://www.langchain.com/langsmith) # LangChain官方博客页 web_documents loader.load() print(\n--- WebBaseLoader 示例 ---) print(f加载的文档数量: {len(web_documents)}) if web_documents: print(f第一个网页文档内容 (部分):\n{web_documents[0].page_content[:200]}...) print(f第一个网页文档元数据:\n{web_documents[0].metadata})PyPDFLoader加载PDF文件需要安装 pypdf 库pip install pypdf每个PDF页面通常会作为一个独立的 Document。from langchain_community.document_loaders import PyPDFLoader try: pdf_loader PyPDFLoader(sample.pdf) # 替换为你的PDF文件路径 pdf_documents pdf_loader.load() print(\n--- PyPDFLoader 示例 ---) print(f加载的PDF文档数量 (按页分): {len(pdf_documents)}) if pdf_documents: print(f第一个PDF页面内容 (部分):\n{pdf_documents[0].page_content[:200]}...) print(f第一个PDF页面元数据:\n{pdf_documents[0].metadata}) except FileNotFoundError: print(\n--- PyPDFLoader 示例 (跳过): 请放置一个 sample.pdf 文件在当前目录 ---) except Exception as e: print(f\n--- PyPDFLoader 示例 (错误): {e} ---)lazy_load() 方法 (推荐)load() 会一次性加载所有内容到内存。对于非常大的文件或大量文件这可能导致内存问题。lazy_load() 返回一个生成器generator。它不会立即加载所有数据而是在你需要时逐个生成 Document 对象。这对于处理大规模数据非常高效。from langchain_community.document_loaders import TextLoader # 假设 example.txt 很大 loader TextLoader(example.txt, encodingutf-8) print(\n--- lazy_load() 示例 ---) for i, doc in enumerate(loader.lazy_load()): print(f正在处理第 {i1} 个文档 (内容部分: {doc.page_content[:50]}...)) if i 1: # 仅处理前2个作为示例 break print(懒加载完成。\n)小结Document Loaders 是将你原始数据转化为 LangChain Document 的第一步。选择合适的加载器并考虑使用 lazy_load() 来优化性能。二、Text Splitters——智能切分优化检索将整个文档直接提供给LLM有几个问题上下文窗口限制 LLM有最大输入Token限制长文档会超出。检索不精确 整个大文档进行检索可能返回大量无关内容稀释了相关性。Text Splitters 的作用就是将一个大的 Document 或文本字符串切分成更小、更易于管理、且语义完整的“块”chunks。RecursiveCharacterTextSplitter (推荐)这是最常用且推荐的文本切分器。它的核心思想是递归地尝试不同的分隔符来切分文本直到满足 chunk_size 要求。它会优先尝试大粒度的分隔符如 \n\n 段落如果不行再尝试小粒度的如 \n 换行符最后是单个字符。这有助于尽可能保持语义完整性。参数chunk_size每个块的最大字符数不是Token数。chunk_overlap相邻块之间重叠的字符数。这有助于确保上下文不会在块的边界处被切断提高检索的鲁棒性。from langchain.text_splitter import RecursiveCharacterTextSplitter long_text LangChain 是一个强大的框架用于开发由大型语言模型驱动的应用程序。 作为一名LangChain教程架构师我负责设计一套全面、深入且易于理解的LangChain系列教程 旨在帮助读者从入门到精通掌握LangChain的核心技术和应用。 RAG检索增强生成是LangChain中的一个关键应用场景。 通过RAG我们可以将LLM与外部知识库相结合从而让LLM能够回答其训练数据之外的问题。 这大大扩展了LLM的应用范围解决了幻觉和知识过时的问题。 text_splitter RecursiveCharacterTextSplitter( chunk_size100, # 每个块的最大字符数 chunk_overlap20, # 相邻块之间的重叠字符数 length_functionlen, # 使用 Python 的 len() 函数来计算长度 is_separator_regexFalse, # 分隔符不是正则表达式 ) # 可以直接切分字符串 chunks_from_str text_splitter.split_text(long_text) print(\n--- RecursiveCharacterTextSplitter 示例 (切分字符串) ---) for i, chunk in enumerate(chunks_from_str): print(f块 {i1} (长度 {len(chunk)}):\n{chunk}\n) # 也可以切分 Document 对象列表 (这是更常见的用法) # 首先创建一个 Document doc_to_split Document(page_contentlong_text, metadata{source: example_doc}) chunks_from_doc text_splitter.split_documents([doc_to_split]) print(\n--- RecursiveCharacterTextSplitter 示例 (切分 Document) ---) for i, chunk_doc in enumerate(chunks_from_doc): print(f块 {i1} 内容 (长度 {len(chunk_doc.page_content)}):\n{chunk_doc.page_content}) print(f块 {i1} 元数据:\n{chunk_doc.metadata}\n)注意 当切分 Document 对象时原始文档的 metadata 会自动复制到每个切分出的 Document 块中。这是非常重要的因为你需要知道每个块的来源。其他常用 Text Splitters (简要提及)CharacterTextSplitter最简单的只根据一个或一组字符进行切分例如每 100 个字符或每个换行符。MarkdownTextSplitter/ HTMLHeaderTextSplitter 结构感知型切分器。它们会识别Markdown或HTML的结构如标题、代码块尽量不破坏这些结构来切分确保语义完整性。TokenTextSplitter基于Token数量而不是字符数量进行切分更精确地控制LLM的上下文。小结 文本切分是RAG中至关重要的一步。RecursiveCharacterTextSplitter 是你的首选并根据需求调整 chunk_size 和 chunk_overlap。三、Embedding Models——从文本到向量人类理解文本的意义而计算机理解数字。Embedding Models 的任务就是将文本单词、句子、段落或整个文档转换成一个固定长度的数值列表这个列表就叫做向量Vector或嵌入Embedding。这些向量的奇妙之处在于语义相似的文本它们对应的向量在多维空间中的距离也更近。这使得我们能够通过计算向量距离如余弦相似度来判断两段文本的相似性。常用 Embedding Models 示例OpenAIEmbeddings (推荐)由OpenAI提供通常是 text-embedding-3-large模型。性能强大且稳定。需要 OpenAI API Key。from langchain_openai import OpenAIEmbeddings embeddings_model OpenAIEmbeddings(modeltext-embedding-3-large) # 将单个文本转换为向量 text1 苹果是一种水果 embedding1 embeddings_model.embed_query(text1) # embed_query 用于单个文本 print(\n--- OpenAIEmbeddings 示例 ---) print(f{text1} 的向量长度: {len(embedding1)}) # print(f向量:\n{embedding1[:10]}...) # 打印部分向量值 text2 香蕉是一种水果 text3 苹果手机没国产的好用 embedding2 embeddings_model.embed_query(text2) embedding3 embeddings_model.embed_query(text3) # 简单计算相似度 (这里只是示意实际会用向量数据库的相似度计算) from sklearn.metrics.pairwise import cosine_similarity import numpy as np # 将列表转换为 numpy 数组进行计算 sim1_2 cosine_similarity(np.array(embedding1).reshape(1, -1), np.array(embedding2).reshape(1, -1))[0][0] sim1_3 cosine_similarity(np.array(embedding1).reshape(1, -1), np.array(embedding3).reshape(1, -1))[0][0] print(f{text1} 和 {text2} 的相似度: {sim1_2:.4f} (语义相似)) print(f{text1} 和 {text3} 的相似度: {sim1_3:.4f} (语义不相似但词语重合)\n) # 你会发现 sim1_2 远高于 sim1_3因为“苹果”和“香蕉”都是水果语义上更近。HuggingFaceEmbeddings (本地/开源选项)允许你使用 Hugging Face 上托管的各种开源Embedding模型甚至可以在本地运行。需要安装 sentence-transformers 库pip install sentence-transformers模型下载可能需要时间。重要方法embed_documents() 和 embed_query()embed_documents(texts: List[str]) - List[List[float]]: 接受一个字符串列表通常是切分后的文档块返回每个字符串对应的向量列表。embed_query(text: str) - List[float]: 接受单个字符串通常是用户查询返回其向量。在RAG中我们会把用户查询也向量化然后去向量数据库中找相似的文档块。小结 Embedding 模型是 RAG 的核心。选择一个适合你语言和应用场景的模型将文本转化为高维向量为下一步的相似度检索做好准备。四、LCEL整合数据准备流水线现在我们将数据加载、切分和向量化这三个步骤用LCEL串联起来形成一个完整的RAG数据准备流水线。from dotenv import load_dotenv import os from langchain_community.document_loaders import TextLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_openai import OpenAIEmbeddings from langchain_core.runnables import RunnableLambda load_dotenv() # --- 1. 定义数据加载器 --- loader TextLoader(example.txt, encodingutf-8) # 使用我们之前创建的 example.txt # --- 2. 定义文本切分器 --- text_splitter RecursiveCharacterTextSplitter( chunk_size100, chunk_overlap20, length_functionlen ) # --- 3. 定义Embedding模型 --- embeddings_model OpenAIEmbeddings(modeltext-embedding-3-large) # --- 4. 构建LCEL数据准备流水线 --- # 步骤 A: 加载文档 (loader.load() 返回 List[Document]) # 步骤 B: 切分文档 (text_splitter.split_documents() 接受 List[Document]返回 List[Document]) # 步骤 C: 提取每个 Document 的 page_content形成 List[str] # 步骤 D: 将 List[str] 转换为 List[List[float]] (Embedding 向量) data_preparation_pipeline ( RunnableLambda(lambda x: loader.load()) # A: 加载文档 | RunnableLambda(lambda docs: text_splitter.split_documents(docs)) # B: 切分文档 | RunnableLambda(lambda chunks: [chunk.page_content for chunk in chunks]) # C: 提取文本内容 | RunnableLambda(lambda texts: embeddings_model.embed_documents(texts)) # D: 生成向量 ) print(\n--- LCEL 数据准备流水线示例 ---) # 运行流水线 # 注意这里 invoke() 的输入可以为空字典 {}因为 loader.load() 不依赖外部输入 all_embeddings data_preparation_pipeline.invoke({}) print(f生成的块数量: {len(all_embeddings)}) if all_embeddings: print(f第一个块的向量长度: {len(all_embeddings[0])}) # print(f第一个块的向量 (部分):\n{all_embeddings[0][:10]}...)代码解析我们用 RunnableLambda 将普通的函数调用封装成 Runnable使其能够通过 | 连接。流水线清晰地展示了数据如何从文件加载经过切分最终被向量化。invoke({}) 用于启动流水线因为 loader.load() 内部不依赖用户输入。小结 至此我们已经成功地将原始文本数据转化为了一系列带有元数据的、语义上更紧凑的、数值化的向量块。这些向量块就是我们构建 RAG 知识库的基础本期小结数据加载 掌握了 Document 对象和各种 Document Loaders 的使用尤其强调了 lazy_load() 的高效性。文本切分 理解了 Text Splitters 的重要性并学会了使用 RecursiveCharacterTextSplitter 进行智能切分。向量化 了解了 Embedding Models 的原理并实践了如何将文本转换为数值向量。现在你手中的数据不再是散乱的文本而是一系列高维向量它们是理解语义的数字指纹。在下一期教程中我们将学习如何存储这些向量向量数据库以及如何利用它们进行高效的检索与召回为RAG的核心功能打上坚实的基础敬请期待想入门 AI 大模型却找不到清晰方向备考大厂 AI 岗还在四处搜集零散资料别再浪费时间啦2025 年AI 大模型全套学习资料已整理完毕从学习路线到面试真题从工具教程到行业报告一站式覆盖你的所有需求现在全部免费分享扫码免费领取全部内容​一、学习必备100本大模型电子书26 份行业报告 600 套技术PPT帮你看透 AI 趋势想了解大模型的行业动态、商业落地案例大模型电子书这份资料帮你站在 “行业高度” 学 AI1. 100本大模型方向电子书2. 26 份行业研究报告覆盖多领域实践与趋势报告包含阿里、DeepSeek 等权威机构发布的核心内容涵盖职业趋势《AI 职业趋势报告》《中国 AI 人才粮仓模型解析》商业落地《生成式 AI 商业落地白皮书》《AI Agent 应用落地技术白皮书》领域细分《AGI 在金融领域的应用报告》《AI GC 实践案例集》行业监测《2024 年中国大模型季度监测报告》《2025 年中国技术市场发展趋势》。3. 600套技术大会 PPT听行业大咖讲实战PPT 整理自 2024-2025 年热门技术大会包含百度、腾讯、字节等企业的一线实践安全方向《端侧大模型的安全建设》《大模型驱动安全升级腾讯代码安全实践》产品与创新《大模型产品如何创新与创收》《AI 时代的新范式构建 AI 产品》多模态与 Agent《Step-Video 开源模型视频生成进展》《Agentic RAG 的现在与未来》工程落地《从原型到生产AgentOps 加速字节 AI 应用落地》《智能代码助手 CodeFuse 的架构设计》。二、求职必看大厂 AI 岗面试 “弹药库”300 真题 107 道面经直接抱走想冲字节、腾讯、阿里、蔚来等大厂 AI 岗这份面试资料帮你提前 “押题”拒绝临场慌1. 107 道大厂面经覆盖 Prompt、RAG、大模型应用工程师等热门岗位面经整理自 2021-2025 年真实面试场景包含 TPlink、字节、腾讯、蔚来、虾皮、中兴、科大讯飞、京东等企业的高频考题每道题都附带思路解析2. 102 道 AI 大模型真题直击大模型核心考点针对大模型专属考题从概念到实践全面覆盖帮你理清底层逻辑3. 97 道 LLMs 真题聚焦大型语言模型高频问题专门拆解 LLMs 的核心痛点与解决方案比如让很多人头疼的 “复读机问题”三、路线必明 AI 大模型学习路线图1 张图理清核心内容刚接触 AI 大模型不知道该从哪学起这份「AI大模型 学习路线图」直接帮你划重点不用再盲目摸索路线图涵盖 5 大核心板块从基础到进阶层层递进一步步带你从入门到进阶从理论到实战。L1阶段:启航篇丨极速破界AI新时代L1阶段了解大模型的基础知识以及大模型在各个行业的应用和分析学习理解大模型的核心原理、关键技术以及大模型应用场景。L2阶段攻坚篇丨RAG开发实战工坊L2阶段AI大模型RAG应用开发工程主要学习RAG检索增强生成包括Naive RAG、Advanced-RAG以及RAG性能评估还有GraphRAG在内的多个RAG热门项目的分析。L3阶段跃迁篇丨Agent智能体架构设计L3阶段大模型Agent应用架构进阶实现主要学习LangChain、 LIamaIndex框架也会学习到AutoGPT、 MetaGPT等多Agent系统打造Agent智能体。L4阶段精进篇丨模型微调与私有化部署L4阶段大模型的微调和私有化部署更加深入的探讨Transformer架构学习大模型的微调技术利用DeepSpeed、Lamam Factory等工具快速进行模型微调并通过Ollama、vLLM等推理部署框架实现模型的快速部署。L5阶段专题集丨特训篇 【录播课】四、资料领取全套内容免费抱走学 AI 不用再找第二份不管你是 0 基础想入门 AI 大模型还是有基础想冲刺大厂、了解行业趋势这份资料都能满足你现在只需按照提示操作就能免费领取扫码免费领取全部内容​2025 年想抓住 AI 大模型的风口别犹豫这份免费资料就是你的 “起跑线”

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询