100个问题学langchain入门(2/10)

在这里插入图片描述

问题 11 在 LangChain 中,如何将文档转化为向量以存储到 Vectorstore 中?具体使用了哪些技术或工具?

在 LangChain 中,将文档转化为向量以存储到 Vectorstore 中,主要通过以下步骤和技术完成:

转化流程:

  1. 加载文档
    使用文档加载器(Document Loaders)将外部数据(如 PDF、网页、数据库内容)加载到内存中。

  2. 文本预处理
    对文档内容进行分块(Chunking)和清洗,确保数据适合嵌入模型的输入长度。

  3. 生成嵌入向量
    使用嵌入模型(Embeddings)将分块的文本转化为固定维度的向量表示。常用的嵌入模型包括:

    • OpenAI 的文本嵌入模型:例如 text-embedding-ada-002
    • Hugging Face 提供的 Transformers
    • Cohere、SentenceTransformers 等
  4. 存储到 Vectorstore
    通过向量存储工具(如 FAISS、Pinecone、Weaviate、Chroma)将生成的向量存储并索引,以支持高效的语义检索。

使用的技术和工具:

  • 嵌入模型(Embeddings)
    转化文本为语义向量,如 OpenAI、Sentence-BERT。

  • 向量存储(Vectorstore)
    主要工具包括:

    • FAISS:Meta 开源的高效向量检索库。
    • Pinecone:分布式向量存储服务。
    • Weaviate、Milvus:适合大规模语义检索的工具。
  • 分块技术
    将长文档分割为适合模型处理的小段,通常通过 RecursiveCharacterTextSplitter 等工具实现。

示例代码:

from langchain.document_loaders import TextLoader
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS

# 加载文档
loader = TextLoader('sample.txt')
documents = loader.load()

# 分块处理
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
docs = splitter.split_documents(documents)

# 嵌入生成
embeddings = OpenAIEmbeddings(model="text-embedding-ada-002")
doc_vectors = [embeddings.embed_query(doc.page_content) for doc in docs]

# 存储到 Vectorstore
vectorstore = FAISS.from_documents(docs, embeddings)

核心优势:

  • 支持大规模语义搜索。
  • 与嵌入模型结合,实现高效的语义理解和数据检索。

问题 12 LangChain 支持哪些常见的向量数据库?在选择向量数据库时需要考虑哪些因素?

LangChain 支持多种常见的向量数据库,包括:

  • Chroma:开源向量数据库,支持本地和云端部署。

  • FAISS:由 Facebook 开发的高效相似度搜索库,适用于大规模数据集。

  • Qdrant:开源向量数据库,提供云托管服务,简化运维。

  • Pinecone:托管向量数据库服务,性能优异,易于使用。

  • Milvus:开源向量数据库,支持多种向量类型,适合处理多种类型的向量数据。

  • Weaviate:开源知识图谱和向量数据库,支持多种数据类型,可构建复杂关系图谱。

  • Redis:内存数据结构存储系统,支持向量存储功能,实现快速向量检索。

在选择向量数据库时,应考虑以下因素:

  1. 数据规模:确定需要处理的数据量大小,选择适合的大规模数据处理方案。

  2. 性能需求:根据应用场景的查询速度和实时性要求,选择性能匹配的数据库。

  3. 部署环境:考虑是本地部署还是云服务,选择相应的数据库类型。

  4. 预算和维护成本:评估托管服务的费用与自托管方案的维护成本。

  5. 数据类型:如果涉及多种类型的向量数据,选择支持多数据类型的数据库。

  6. 社区支持和文档资源:选择有活跃社区和良好文档支持的数据库,确保技术支持和问题解决。

问题 13 在 LangChain 中,如何将向量数据库与检索增强生成(RAG)应用集成?请描述其工作流程和关键步骤。

在 LangChain 中,将向量数据库与检索增强生成(RAG)应用集成的关键步骤如下:

  1. 文档加载与拆分:使用 LangChain 的文档加载器(如 PyPDFLoader)读取文档,并通过文本分割器(如 CharacterTextSplitter)将文档拆分成适合模型处理的小块。

  2. 向量化表示:利用嵌入模型(如 OpenAI 的嵌入模型)将文本块转换为向量表示,以捕捉其语义信息。

  3. 存储至向量数据库:将生成的向量及其关联的元数据存储到向量数据库中(如 Chroma、FAISS、Milvus 等)。

  4. 查询处理与检索:当用户提出查询时,将其转换为向量,并在向量数据库中进行相似度搜索,检索出与查询最相关的文本块。

  5. 生成答案:将检索到的相关文本块与用户查询一起传递给语言模型,生成增强的回答。

通过上述流程,LangChain 实现了向量数据库与 RAG 的集成,提升了生成内容的准确性和相关性。

问题 14 在 LangChain 中,什么是回调函数(Callbacks)?它们在应用程序的各个阶段中起到什么作用?

在 LangChain 中,回调函数(Callbacks) 是一种用于在应用程序执行过程中捕获事件并记录相关信息的机制。它们允许开发者对应用程序运行的各个阶段进行监控、调试和分析。

回调函数的作用:

回调函数能够捕获 LangChain 在运行期间的各种事件,提供对链、工具、模型等执行过程的透明视图。


应用阶段及作用:

  1. 链的初始化和执行

    • 作用:监控链的输入、输出以及每一步的执行时间。
    • 场景:查看数据在链中的流转是否正确。
  2. 模型调用

    • 作用:捕获语言模型的输入和输出,包括查询内容和生成的响应。
    • 场景:分析生成的结果是否符合预期。
  3. 工具执行

    • 作用:记录工具的调用情况,包括参数和返回值。
    • 场景:诊断工具是否被正确触发。
  4. 错误捕获

    • 作用:记录运行过程中产生的错误。
    • 场景:便于调试和解决运行问题。
  5. 性能分析

    • 作用:记录各阶段的时间消耗。
    • 场景:优化应用性能。

使用方式:

LangChain 提供内置的回调处理程序,也允许开发者定义自定义回调,支持实时监控或持久化存储运行数据。例如,可以通过 langchain.callbacks 模块实现回调函数。

回调函数是开发者调试和优化 LangChain 应用的强大工具,能显著提高开发效率和模型可靠性。

问题 15 在 LangChain 中,如何使用回调函数(Callbacks)实现令牌计数?请描述实现步骤和相关代码示例。

在 LangChain 中,可以通过回调函数(Callbacks)实现对令牌(Token)计数的功能。这种功能通常用于监控模型的输入输出长度,从而控制令牌的使用量,优化成本和性能。


实现步骤:

  1. 导入必要模块
    使用 LangChain 的 CallbackHandler 类来自定义回调函数。

  2. 定义自定义回调类

    • 继承 BaseCallbackHandler
    • 重写所需的方法,例如 on_llm_starton_llm_end
    • 使用这些方法记录或计算输入和输出的令牌数量。
  3. 注册回调
    将自定义回调类实例化并传递给链或模型。

  4. 执行链或模型调用
    在运行时自动统计和输出令牌使用信息。


代码示例:

from langchain.callbacks.base import BaseCallbackHandler
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.chains import LLMChain

# 自定义回调类
class TokenCounterCallback(BaseCallbackHandler):
    def __init__(self):
        self.total_tokens = 0

    def on_llm_start(self, serialized, prompts, **kwargs):
        # 记录输入令牌数量
        print(f"Input prompts: {prompts}")

    def on_llm_end(self, response, **kwargs):
        # 记录输出令牌数量
        for generation in response.generations:
            output = generation[0].text
            print(f"Generated text: {output}")
        
        # 输出令牌计数信息
        self.total_tokens += response.llm_output["token_usage"]["total_tokens"]
        print(f"Total tokens used: {self.total_tokens}")

# 创建回调实例
token_counter = TokenCounterCallback()

# 创建模型和链
llm = ChatOpenAI(model="gpt-3.5-turbo", callbacks=[token_counter])
prompt = ChatPromptTemplate.from_template("Translate the following text to French: {text}")
chain = LLMChain(llm=llm, prompt=prompt)

# 执行链调用
response = chain.run({"text": "Hello, how are you?"})

# 输出总令牌计数
print(f"Final total tokens used: {token_counter.total_tokens}")

关键点解析:

  1. on_llm_start:触发于模型调用前,用于记录输入的提示信息。
  2. on_llm_end:触发于模型返回结果后,用于提取输出和令牌使用数据。
  3. 令牌使用数据:通过 OpenAI API 返回的 llm_output["token_usage"] 提供详细的令牌统计信息。

通过以上方法,开发者可以精准监控模型的令牌使用量,从而优化成本和提升效率。

问题 16 如何在 LangChain 中使用自定义工具(Custom Tools),并将其集成到 Agents 中?

在 LangChain 中,自定义工具(Custom Tools)可以扩展系统的功能,使 Agents 能够调用外部服务或自定义逻辑。以下是使用自定义工具并集成到 Agents 中的详细步骤和示例。


实现步骤

  1. 定义自定义工具

    • 创建一个函数,实现自定义逻辑。
    • 使用 Tool 类封装该函数,包括名称、描述和参数信息。
  2. 注册工具到 Agents

    • 将自定义工具传递给 Agent,通过工具调用函数。
  3. 创建 Agent

    • 使用 LangChain 提供的 Agent 类型(如 ZeroShotAgentConversationalAgent),将工具集成。
  4. 执行 Agent 调用

    • 向 Agent 提供用户查询,Agent 根据需要调用自定义工具完成任务。

示例代码

from langchain.agents import Tool, initialize_agent, AgentType
from langchain.chat_models import ChatOpenAI

# 定义自定义工具逻辑
def calculate_area_circle(radius: float) -> str:
    area = 3.14159 * radius ** 2
    return f"The area of the circle with radius {radius} is {area:.2f}."

# 创建自定义工具
custom_tool = Tool(
    name="CircleAreaCalculator",
    func=calculate_area_circle,
    description="Calculate the area of a circle given its radius."
)

# 初始化 LLM
llm = ChatOpenAI(model="gpt-3.5-turbo")

# 将工具集成到 Agent
tools = [custom_tool]
agent = initialize_agent(
    tools=tools,
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

# 测试 Agent
query = "What is the area of a circle with a radius of 5?"
response = agent.run(query)
print(response)

关键点解析

  1. 定义工具

    • 工具函数需要完成实际的业务逻辑。
    • 使用 Tool 封装时,需提供工具的名称和简要描述,帮助 Agent 理解工具功能。
  2. 集成 Agent

    • Agent 会根据用户输入的自然语言,决定是否调用工具。
    • 工具的名称和描述在 Agent 的决策中起关键作用。
  3. 工具类型支持

    • 工具可以处理 API 调用、本地计算、数据库查询等多种任务。
  4. Agent 类型

    • 可根据需求选择不同类型的 Agent,如 ZeroShotAgent 用于无上下文任务。

通过上述方法,自定义工具可以无缝集成到 LangChain 的 Agents 中,扩展其处理复杂任务的能力。

问题 17 如何在 LangChain 中实现流式输出(Streaming Output)?这种功能在哪些场景下特别有用?

在 LangChain 中实现流式输出(Streaming Output)

流式输出 是指在生成响应时逐步显示内容,而不是等待完整结果。这种功能通常用于改善用户体验,尤其是长文本生成场景。


实现步骤

  1. 启用流式输出

    • 在使用 OpenAI 或其他支持流式输出的模型时,将参数 streaming=True 传递给模型实例。
  2. 定义回调函数

    • 使用回调函数(CallbackHandler)实时捕获和处理模型生成的每一部分响应。
  3. 集成回调到模型

    • 将自定义回调函数与模型绑定,在生成时触发实时更新。

示例代码

from langchain.chat_models import ChatOpenAI
from langchain.callbacks.base import BaseCallbackHandler

# 定义回调函数
class StreamingCallbackHandler(BaseCallbackHandler):
    def on_llm_new_token(self, token: str, **kwargs):
        # 每次生成新令牌时调用
        print(token, end="", flush=True)

# 初始化支持流式输出的模型
llm = ChatOpenAI(model="gpt-3.5-turbo", streaming=True, callbacks=[StreamingCallbackHandler()])

# 执行流式输出
response = llm("Write a short story about a brave knight.")

核心流程解析

  1. streaming=True

    • 启用流式输出模式,模型会逐字或逐句生成响应。
  2. 回调处理

    • on_llm_new_token 方法捕获每个生成的令牌(token),实时处理(如显示到屏幕)。
  3. 模型绑定回调

    • 将回调实例通过 callbacks 参数绑定到模型,保证生成期间调用回调逻辑。

流式输出的适用场景

  1. 用户体验优化

    • 在聊天机器人或交互式应用中,逐步显示响应减少用户等待感。
  2. 长文本生成

    • 对于生成长段文本(如文章、小说),流式输出有助于实时查看内容。
  3. 实时监控

    • 在调试或测试时,方便观察生成的每个令牌,确保模型生成方向正确。
  4. 低延迟场景

    • 需要快速响应的应用(如客户服务),可用流式输出优先返回部分内容。

总结

流式输出是 LangChain 的一项重要特性,在需要实时生成和显示内容的场景中尤为有用。通过启用 streaming=True 和自定义回调函数,可以轻松实现并优化用户体验。

问题 18 LangChain 中如何实现带有上下文记忆的对话?有哪些常用的 Memory 类型可以选择?

在 LangChain 中,实现带有上下文记忆的对话可以通过集成 Memory 模块来完成。
Memory 允许对话系统在多轮交互中保留上下文信息,从而生成更连贯和个性化的响应。

实现步骤

  1. 导入必要模块

    from langchain import OpenAI, ConversationChain
    from langchain.memory import ConversationBufferMemory
    
  2. 初始化语言模型和记忆模块

    llm = OpenAI(temperature=0)
    memory = ConversationBufferMemory()
    
  3. 创建对话链并集成记忆模块

    conversation = ConversationChain(llm=llm, memory=memory)
    
  4. 进行对话

    response = conversation.run("你好!")
    print(response)
    

通过上述步骤,系统会在每轮对话中记录用户输入和模型输出,确保后续交互能够参考之前的上下文。

常用的 Memory 类型

LangChain 提供了多种 Memory 类型,以满足不同的对话需求:

  • ConversationBufferMemory:将所有对话历史存储在缓冲区中,适用于需要完整对话上下文的场景。

  • ConversationBufferWindowMemory:仅保留最近的 N 条对话记录,适用于关注近期上下文的应用。

  • ConversationSummaryMemory:通过总结的方式保存对话历史,适用于长对话且需要简洁上下文的情况。

  • ConversationKnowledgeGraphMemory:将对话信息存储为知识图谱,适用于需要结构化信息的高级应用。

选择合适的 Memory 类型,可以根据具体应用场景的需求来决定。

问题 19 在 LangChain 中,如何通过使用 Document Loaders 加载和处理外部文档数据?支持哪些常见的数据格式?

LangChain 中使用 Document Loaders 加载和处理外部文档数据

LangChain 的 Document Loaders 模块允许从外部文档中提取数据,以便用于问答、搜索或生成任务。它支持多种数据格式,提供了一致的接口来加载、分割和预处理文档。


实现步骤

  1. 安装必要的依赖
    确保安装与特定文档格式相关的库(如 PyPDF2python-docx 等)。

    pip install langchain PyPDF2 python-docx
    
  2. 导入 Document Loaders
    根据文档格式选择合适的加载器。

  3. 加载文档数据
    使用加载器将外部文档读取为可处理的文档对象。

  4. 处理和分割文档
    使用 TextSplitter 等工具对文档进行分割,以便后续处理。


示例代码

加载 PDF 文件
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import CharacterTextSplitter

# 初始化 PDF 加载器
loader = PyPDFLoader("example.pdf")

# 加载文档
documents = loader.load()

# 分割文档
splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
split_docs = splitter.split_documents(documents)

# 输出分割后的结果
for doc in split_docs:
    print(doc.page_content)
加载 Word 文档
from langchain.document_loaders import Docx2txtLoader

# 初始化 Word 文档加载器
loader = Docx2txtLoader("example.docx")

# 加载文档内容
documents = loader.load()

# 输出文档内容
for doc in documents:
    print(doc.page_content)
加载纯文本文件
from langchain.document_loaders import TextLoader

# 初始化纯文本加载器
loader = TextLoader("example.txt")

# 加载文档内容
documents = loader.load()

# 输出文档内容
for doc in documents:
    print(doc.page_content)

支持的常见数据格式

LangChain 提供了对多种常见数据格式的支持,包括但不限于:

  1. PDF

    • 加载器:PyPDFLoaderPDFPlumberLoader
    • 适用于书籍、论文等 PDF 文档。
  2. Word 文档

    • 加载器:Docx2txtLoaderUnstructuredWordDocumentLoader
    • 适用于 .doc.docx 文件。
  3. 纯文本

    • 加载器:TextLoader
    • 适用于 .txt 文件。
  4. HTML/网页

    • 加载器:UnstructuredHTMLLoaderBSHTMLLoader
    • 适用于网页内容解析。
  5. CSV

    • 加载器:CSVLoader
    • 适用于表格数据。
  6. 其他格式

    • Markdown (MarkdownLoader)
    • Excel (ExcelLoader)
    • 数据库 (SQLDatabaseLoader)

使用场景

  1. 问答系统:将文档作为知识库加载,供用户查询。
  2. 信息提取:提取文档中的关键信息进行处理。
  3. 生成任务:基于文档内容生成摘要、翻译等结果。

通过 Document Loaders,LangChain 能轻松处理多种数据源,为丰富的应用场景提供支持。

问题 20 如何在 LangChain 中构建检索增强生成(RAG)工作流?这种工作流的核心优势是什么?

在 LangChain 中构建检索增强生成(RAG)工作流

检索增强生成(RAG,Retrieval-Augmented Generation)是一种结合检索和生成模型的方法,能有效提升生成内容的准确性和相关性。在 LangChain 中,RAG 工作流主要包含以下核心步骤:


实现步骤

  1. 加载文档数据

    • 使用 Document Loaders 将外部文档加载到系统中。
  2. 嵌入文档内容

    • 利用嵌入模型(如 OpenAI Embeddings、Hugging Face)将文档内容向量化,生成语义嵌入。
  3. 存储到向量数据库

    • 使用向量数据库(如 FAISS、Pinecone、Milvus)存储嵌入向量和关联的文档元数据。
  4. 构建检索器

    • 基于向量数据库创建检索模块,用于在查询时查找最相关的文档。
  5. 与生成模型结合

    • 将检索到的上下文信息传递给生成模型(如 GPT-3.5、GPT-4),生成增强的回答。
  6. 整合到工作流中

    • 使用 LangChain 的链模块(如 RetrievalQA)将检索与生成功能整合。

代码示例

构建 RAG 工作流
from langchain.document_loaders import TextLoader
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI

# 加载文档数据
loader = TextLoader("example.txt")
documents = loader.load()

# 嵌入文档内容
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(documents, embeddings)

# 创建检索器
retriever = vectorstore.as_retriever(search_type="similarity", search_kwargs={"k": 3})

# 初始化生成模型
llm = ChatOpenAI(model="gpt-3.5-turbo")

# 构建检索增强生成链
qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=retriever)

# 执行查询
query = "What is the main topic discussed in the document?"
response = qa_chain.run(query)

print(response)

核心优势

  1. 提升准确性

    • 通过检索真实的上下文信息,减少生成模型的“幻觉”现象(即生成虚假信息)。
  2. 动态知识扩展

    • 检索外部文档内容,使模型能够处理实时性或领域特定的知识,而无需直接更新模型权重。
  3. 节省计算成本

    • 模型只需要处理相关的上下文信息,而非全部文档,从而降低生成的复杂度。
  4. 增强用户体验

    • 提供基于文档内容的具体回答,使系统更具解释性和可信度。

应用场景

  • 企业知识库问答:为客户或员工提供基于公司文档的准确解答。
  • 学术和法律研究:根据论文或法律文件生成专业摘要或回答。
  • 实时内容支持:动态检索并结合最新数据进行生成(如新闻或技术文档)。

通过 RAG 工作流,LangChain 能够高效结合检索与生成技术,为构建智能应用提供强大的支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/939984.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#winform引入DLL,DLL嵌入exe

C#winform将DLL嵌入exe 1 项目引入DLL1.1 项目-鼠标右击-点击添加引用;1.2 点击“浏览”;1.3 添加选中DLL1.4 勾选引入的DLL,点击“确定”1.5 添加成功后 2 DLL嵌入exe2.1 打开引入DLL属性窗口2.2 将“复制本地”项设为“false”2.3 双击打开…

828华为云征文 | 华为云Flexus云服务器X实例搭建企业内部VPN私有隧道,以实现安全远程办公

VPN虚拟专用网络适用于企业内部人员流动频繁和远程办公的情况,出差员工或在家办公的员工利用当地ISP就可以和企业的VPN网关建立私有的隧道连接。 通过拨入当地的ISP进入Internet再连接企业的VPN网关,在用户和VPN网关之间建立一个安全的“隧道”&#xff…

wxpyton+wxFormBuilder加法运算示例

wxpythonwxFormBuilder加法运算示例 在wxFormBuilder里设计一个窗体,生成如下代码:calc_From.py 放在lib文件夹下面 import gettext import wx import wx.xrc _ gettext.gettext class MyFrame1(wx.Frame):def __init__(self, parent):wx.Frame.__init…

【AI驱动的数据结构:包装类的艺术与科学】

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 包装类装箱和拆箱阿里巴巴面试题 包装类 在Java中基本数据类型不是继承来自Object,为了…

springBoot Maven 剔除无用的jar引用

目录 Used undeclared dependencies found Unused declared dependencies found 当项目经过一段时间的开发和维护后,经常会遇到项目打包速度变慢的问题。这通常与项目中包含大量的jar依赖有关,这些依赖之间的关系错综复杂。这种情况在项目维护过程中是…

电脑玩《刺客信条》时中,遇到找不到d3dx9_42.dll的问题是什么原因?缺失d3dx9_42.dll应该怎么解决呢?下面一起来看看吧!

电脑玩《刺客信条》时,找不到d3dx9_42.dll的原因及解决办法 对于许多热爱《刺客信条》这款游戏的玩家来说,在游戏中遇到找不到d3dx9_42.dll的问题无疑是非常令人头疼的。这一错误不仅会导致游戏无法启动,还可能引发运行过程中的图形错误、卡…

【CSS in Depth 2 精译_083】13.3:CSS 混合模式的用法及相关注意事项 + 13.4:本章小结

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 13 章 渐变、阴影与混合模式】 ✔️ 13.1 渐变 13.1.1 使用多个颜色节点(上)13.1.2 颜色插值方法(中)13.1.3 径向渐变…

环境变量的知识

目录 1. 环境变量的概念 2. 命令行参数 2.1 2.2 创建 code.c 文件 2.3 对比 ./code 执行和直接 code 执行 2.4 怎么可以不带 ./ 2.4.1 把我们的二进制文件拷贝到 usr/bin 路径下,也不用带 ./ 了 2.4.2 把我们自己的路径添加到环境变量里 3. 认识PATH 3.…

Linux Swap: 深入解析 mkswap, mkfs.swap, 和 swapon

文章目录 Linux Swap: 深入解析 mkswap, mkfs.swap, 和 swapon什么是 Swap?主要命令介绍1. mkswap2. mkfs.swap3. swapon 创建和管理 Swap 的步骤1. 创建 Swap 分区2. 初始化 Swap3. 激活 Swap4. 持久化配置5. 查看 Swap 状态 删除 Swap 分区或文件1. 停用 Swap2. 删…

模具生产过程中的标签使用流程图

①NFC芯片嵌入周转筐,通过读卡器读取CK_Label_v3的数据,并将这些信息上传至服务器进行存储; ②服务器随后与客户的WMS(仓库管理系统)进行交互,记录和同步注塑机的原始数据; ③当周转筐内的模具…

自己搭建专属AI:Llama大模型私有化部署

前言 AI新时代,提高了生产力且能帮助用户快速解答问题,现在用的比较多的是Openai、Claude,为了保证个人隐私数据,所以尝试本地(Mac M3)搭建Llama模型进行沟通。 Gpt4all 安装比较简单,根据 G…

【笔记】深度学习模型评估指标

推荐链接: (0)多分类器的评价指标 (1)泛化误差的评价方法:【机器学习】模型评估与选择(留出法、交叉验证法、查全率、查准率、偏差、方差) (2)机器学习&…

前端实现页面自动播放音频方法

前端实现页面视频在谷歌浏览器中自动播放音频方法 了解Chrome自动播放策略 在Chrome和其他现代浏览器中,为了改善用户体验,自动播放功能受到了限制。Chrome的自动播放策略主要针对有声音的视频,目的是防止页面在用户不知情的情况下自动播放声…

MinCostMaxFlow-Graph Algorithm

lab要求如下: 1.代码实现思路 图的构建 使用邻接表 adjacencyList 来存储图的结构,每个节点对应一个列表,列表中存储从该节点出发的所有边。 通过 addEdge 方法添加有向边及其反向边,同时设置正向边和反向边的相互引用。 最小费…

简单工厂模式和策略模式的异同

文章目录 简单工厂模式和策略模式的异同相同点:不同点:目的:结构: C 代码示例简单工厂模式示例(以创建图形对象为例)策略模式示例(以计算价格折扣策略为例)UML区别 简单工厂模式和策…

欢迎 PaliGemma 2 – 来自 Google 的新视觉语言模型

我们很高兴迎来 Google 全新的视觉语言模型 PaliGemma 2,这是 PaliGemma 的一个新版本。与其前代产品一样,PaliGemma 2 使用强大的SigLIP进行视觉处理,但在文本解码部分升级到了最新的 Gemma 2。 https://hf.co/collections/google/siglip-65…

Django基础 - 01入门简介

一、 基本概念 1.1 Django说明 Django发布于2005年, 网络框架, 用Python编写的开源的Web应用框架。采用了MVC框架模式,也称为MTV模式。官网: https://www.djangoproject.com1.2 MVC框架 Model: 封装和数据库相关…

华为OD --- 敏感字段加密

华为OD --- 敏感字段加密 题目独立实现思路源码实现 参考实现 题目 独立实现 思路 通过便利字符串把所有“关键字”找出来,然后将第N个关键字替换成******,最后再通过 “_” 拼接起来即可 源码实现 const rl require("readline").createInterface({ input: proce…

WebRTC服务质量(05)- 重传机制(02) NACK判断丢包

WebRTC服务质量(01)- Qos概述 WebRTC服务质量(02)- RTP协议 WebRTC服务质量(03)- RTCP协议 WebRTC服务质量(04)- 重传机制(01) RTX NACK概述 WebRTC服务质量(…

着色器 (三)

今天,是我们介绍opengl着色器最后一章,着色器(Shader)是运行在GPU上的小程序。这些小程序为图形渲染管线的某个特定部分而运行。从基本意义上来说,着色器只是一种把输入转化为输出的程序。着色器也是一种非常独立的程序,因为它们之…