当前位置: 首页 > news >正文

【AI大模型】LangChain框架:示例选择器与输出解析器携手,编织NLP高效精准之网

在这里插入图片描述


文章目录

  • 前言
  • 一、示例选择器
    • 1.介绍及应用
    • 2.自定义示例选择器
      • 案例:AI点评姓名
    • 3.基于长度的示例选择器
      • 案例:对输入内容取反
    • 4.基于最大边际相关性(MMR)的示例选择器
      • 案例:得到输入的反义词
    • 5.基于n-gram重叠的示例选择器
    • 6.综合案例
  • 二、输出解析器
    • 1.介绍
    • 2.列表解析器
    • 3.日期时间解析器
    • 4.枚举解析器
    • 5.Pydantic 解析器
      • 案例:讲个笑话
      • 案例:订单案例


前言

    本文将聚焦于LangChain框架中的两大璀璨明珠——示例选择器输出解析器,深入探讨它们如何与Prompt精妙结合,共同编织出提升NLP任务效率与准确性的精密网络。示例选择器通过提供精心挑选的示例来增强Prompt,有效引导大型语言模型(LLM)生成更加符合预期的高质量输出。而输出解析器则负责将LLM产生的非结构化文本输出转换为结构化数据,为后续处理和分析提供便利。文章将详细介绍多种类型的示例选择器和输出解析器,并通过实际案例展示它们如何与Prompt协同工作,共同提升NLP任务的效率和准确性。


一、示例选择器

1.介绍及应用

    LangChain 的示例选择器是一个用于从一组示例中动态选择部分示例以构建提示(prompt)的重要组件。在LangChain中,有多种不同类型的示例选择器,包括自定义样例选择器、长度样例选择器、MMR样例选择器、n-gram重叠度样例选择器和相似度样例选择器。以下是这些示例选择器的简要介绍和格式清晰的回答:

1. 自定义样例选择器

  • 允许用户根据自己的业务逻辑和需求来定义样例的选择方式
  • 至少需要实现两个方法:add_example(用于添加新示例)和select_examples(基于输入变量返回一个样例列表)。
  • 用户可以通过继承BaseExampleSelector类并实现所需的方法来创建自定义样例选择器。

2. 长度样例选择器

  • 根据输入的长度来选择要使用的示例。对于较长的输入,它会选择较少的示例,而对于较短的输入,则会选择更多示例。
  • 这在构建提示时需要控制上下文窗口长度时特别有用。
  • 使用时,可以导入LengthBasedExampleSelector类,并传入示例列表来创建长度样例选择器。

3. MMR样例选择器

  • MMR(Maximum Marginal Relevance)是一种常用于信息检索和推荐系统的排序算法,也适用于样例选择。
  • MMR样例选择器通过计算示例与输入之间的相关性以及示例之间的不相似性来选择样例。
  • 具体的实现细节可能因库或框架而异,但通常用户需要指定计算相关性和不相似性的方法。

4. n-gram重叠度样例选择器

  • 基于输入和示例之间的n-gram重叠度来选择样例。
  • n-gram是一种用于表示文本中连续n个词或字符的序列的模型。
  • 通过计算输入和示例之间的n-gram重叠度,可以选择与输入内容最相关的样例。

5.相似度样例选择器

  • 基于输入和示例之间的相似度来选择样例。
  • 相似度可以使用各种方法来计算,如余弦相似度、Jaccard相似度等。
  • 选择与输入内容最相似的样例可以帮助语言模型更好地理解prompt,并给出更准确的回答。

2.自定义示例选择器

    示例选择器是一个接口或抽象类,定义了选择示例的通用方法。根据输入或上下文选择最合适的示例,以提高模型的性能或适应特定的应用场景。

ExampleSelector 必须实现两个方法:

  1. add_example 方法,接受一个示例并将其添加到 ExampleSelector
  2. select_examples 方法,接受输入变量(用于用户输入)并返回要在 few shot prompt 中使用的示例列表。

案例:AI点评姓名

from langchain.prompts import PromptTemplate
from langchain_community.llms import Tongyifrom langchain.prompts.example_selector.base import BaseExampleSelector
import numpy as npnames = ["张伟", "张静", "张磊", "张敏", "张涛","王强", "王芳", "王刚", "王艳", "王超","李娜", "李明", "李静", "李杰", "李浩","刘波", "刘洋", "刘婷", "刘伟", "刘芳"
]
# 示例选择器
class ExampleSelector(BaseExampleSelector):def __init__(self, example):self.examples = exampledef add_example(self, example):self.examples.append(example)def select_examples(self, input_v):return list(filter(lambda e: e.startswith(input_v), names))# return np.random.choice(self.examples,size=5)selector = ExampleSelector(names)
temp = "你是一个玄学大师,我给你一些姓名,你帮我做一些点评,这些姓名如下:{names}"
pt = PromptTemplate.from_template(temp)
prompt = pt.format(names=selector.select_examples("李"))
llm = Tongyi()
ret = llm.invoke(prompt)
print(ret)

在这里插入图片描述

3.基于长度的示例选择器

    这个示例选择器基于长度来选择要使用的示例,特别适用于当构建的提示可能超出上下文窗口长度的情况。它能智能调整:对于较长的输入,会选择较少的示例以避免超出长度限制;而对于较短的输入,则会选择更多的示例以提供更丰富的信息。

案例:对输入内容取反

from langchain.prompts import PromptTemplate
from langchain.prompts import FewShotPromptTemplate
from langchain.prompts.example_selector import LengthBasedExampleSelector
from langchain_community.llms import Tongyi# 这是一个虚构任务的许多示例,用于创建反义词。
examples = [{"input": "面包", "output": "馒头"},{"input": "冰棍", "output": "雪糕"},{"input": "面条", "output": "粉丝"},{"input": "粥", "output": "汤"},{"input": "可口可乐", "output": "百事可乐"},
]example_prompt = PromptTemplate(input_variables=["input", "output"],template="Input: {input}\nOutput: {output}",
)
example_selector = LengthBasedExampleSelector(# 这些是可供选择的示例。examples=examples,# 这是用于格式化示例的PromptTemplate。example_prompt=example_prompt,# 这是格式化示例的最大长度。# 长度由下面的get_text_length函数测量。max_length=25,# 这是用于获取字符串长度的函数,用于确定要包含的示例。# 如果未指定,则提供一个默认值。# get_text_length: Callable[[str], int] = lambda x: len(re.split("\n| ", x))
)
dynamic_prompt = FewShotPromptTemplate(# 我们提供一个ExampleSelector而不是示例。example_selector=example_selector,example_prompt=example_prompt,prefix="给出每个输入的反义词",suffix="输入: {adjective}\n输出:",input_variables=["adjective"],
)# 一个输入较小的示例,因此它选择所有示例。
# print(dynamic_prompt.format(adjective="big"))
prompt1 = dynamic_prompt.format(adjective="big")# 一个输入较长的示例,因此它只选择一个示例。
long_string = "big and huge and massive and large and gigantic and tall and much much much much much bigger than everything else"
# print(dynamic_prompt.format(adjective=long_string))
prompt2 = dynamic_prompt.format(adjective=long_string)# 您还可以将示例添加到示例选择器中。
new_example = {"input": "big", "output": "small"}
dynamic_prompt.example_selector.add_example(new_example)
# print(dynamic_prompt.format(adjective="enthusiastic"))
prompt3 = dynamic_prompt.format(adjective="enthusiastic")llm = Tongyi()
# ret = llm.invoke(prompt1)
print('输入:big')
print(llm.invoke(prompt1))
print('---'*20)
print("输入:",long_string)
print(llm.invoke(prompt2))
print('---'*20)
print("输入:enthusiastic")
print(llm.invoke(prompt3))

在这里插入图片描述

4.基于最大边际相关性(MMR)的示例选择器

MaxMarginalRelevanceExampleSelector根据示例与输入之间的相似性以及多样性进行选择。 它通过找到与输入具有最大余弦相似度的嵌入示例,并在迭代中添加它们,同时对已选择示例的接近程度进行惩罚来实现这一目标。

  • MMR 是一种在信息检索中常用的方法,它的目标是在相关性和多样性之间找到一个平衡
  • MMR 会首先找出与输入最相似(即余弦相似度最大)的样本
  • 然后在迭代添加样本的过程中,对于与已选择样本过于接近(即相似度过高)的样本进行惩罚
  • MMR 既能确保选出的样本与输入高度相关,又能保证选出的样本之间有足够的多样性
  • 关注如何在相关性和多样性之间找到一个平衡

案例:得到输入的反义词

from langchain.prompts import PromptTemplate
from langchain.prompts import FewShotPromptTemplate
from langchain.prompts.example_selector import MaxMarginalRelevanceExampleSelector
from langchain_community.vectorstores import FAISS
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.llms import Tongyi# 假设已经有这么多的提示词示例组:
examples = [{"input": "高兴", "output": "悲伤"},{"input": "乐观", "output": "悲观"},{"input": "光明", "output": "黑暗"},{"input": "干燥", "output": "湿润"},{"input": "善良", "output": "邪恶"},{"input": "复杂", "output": "简单"},{"input": "安静", "output": "喧闹"}
]# 构造提示词模板
example_prompt = PromptTemplate(input_variables=["input", "output"],template="原词:{input}\n反义:{output}"
)# 调用MMR
example_selector = MaxMarginalRelevanceExampleSelector.from_examples(# 传入示例组examples,# 使用阿里云的dashscope的嵌入来做相似性搜索DashScopeEmbeddings(),# 设置使用的向量数据库是什么FAISS,# 结果条数k=2,
)# 使用小样本提示词模版来实现动态示例的调用
dynamic_prompt = FewShotPromptTemplate(example_selector=example_selector,example_prompt=example_prompt,prefix="给出每个输入词的反义词",suffix="原词:{word}\n反义:",input_variables=["word"]
)
prompt = dynamic_prompt.format(word="快乐")
# print(dynamic_prompt.format(word="快乐"))llm = Tongyi()
ret = llm.invoke(prompt)
print(ret)

在这里插入图片描述

5.基于n-gram重叠的示例选择器

NGramOverlapExampleSelector 是一个根据ngram重叠得分选择和排序示例的工具。这个得分是一个介于0.0和1.0之间的浮点数(包含0.0和1.0)。此选择器允许用户设置一个阈值得分,得分小于或等于此阈值的示例将被排除。默认阈值设为-1.0,意味着不会排除任何示例,只会对它们进行重新排序。若将阈值设为0.0,则会排除与输入没有ngram重叠的示例。

6.综合案例

    假设我们正在构建一个基于LangChain的文本生成系统,该系统需要根据用户输入的关键词生成相关的故事或描述。 为了提高生成的准确性和相关性,我们决定使用示例选择器来动态选择最佳的示例,这些示例将被包含在Prompt中以引导模型进行生成。

- 1>示例选择器选择
    在LangChain中,有多种示例选择器可供选择,每种都有其特定的用途和优势。在这个案例中,我们假设选择了以下两种示例选择器:

  1. LengthBasedExampleSelector:基于输入的长度来选择示例。当输入较长时,选择较少的示例以避免Prompt过长;当输入较短时,选择更多的示例以提供更多的上下文。
  2. SemanticSimilarityExampleSelector:基于输入与示例之间的语义相似性来选择示例。这种方法能够确保选择的示例与输入高度相关,从而提高生成的准确性。

- 2>案例步骤

  1. 定义示例列表
    首先,我们需要定义一个包含多个示例的列表。每个示例都应该是一个包含输入和输出的字典
  2. 创建PromptTemplate
    接下来,我们创建一个PromptTemplate,该模板将用于格式化输入和输出示例,以构建最终的Prompt
  3. 创建示例选择器
    然后,我们创建之前提到的两种示例选择器。这里,为了简化案例,此处仅展示如何使用LengthBasedExampleSelector,还可以根据需要添加SemanticSimilarityExampleSelector
  4. 动态选择示例并构建Prompt
    最后,当用户输入关键词时,使用示例选择器动态选择示例,并使用PromptTemplate构建最终的Prompt。

    通过结合使用PromptTemplate和示例选择器(如LengthBasedExampleSelectorSemanticSimilarityExampleSelector),我们能够根据输入动态选择最佳的示例,并将它们包含在Prompt中以引导模型进行生成。这种方法能够提高生成的准确性和相关性,使生成的文本更加符合用户的期望。

- 3>代码实现

from langchain_core.prompts import PromptTemplate
from langchain.prompts.example_selector import LengthBasedExampleSelector
from langchain_community.llms import Tongyi# 示例
examples = [{"input": "好天气", "output": "与好天气相关的故事或描述"},{"input": "坏天气", "output": "与坏天气相关的故事或描述"},
]# 模板
prompt_template = PromptTemplate(input_variables=["input", "output"],template="Input: {input}\nOutput: {output}",
)#
length_based_selector =LengthBasedExampleSelector(# 这些是可供选择的示例。examples=examples,# 这是用于格式化示例的PromptTemplate。example_prompt=prompt_template,# 这是格式化示例的最大长度。# 长度由下面的get_text_length函数测量。max_length=25,# 这是用于获取字符串长度的函数,用于确定要包含的示例。# 如果未指定,则提供一个默认值。# get_text_length: Callable[[str], int] = lambda x: len(re.split("\n| ", x))
)user_input = "春天的天气特别好,我特别喜欢,写一个关于春天的文章"  # 假设用户输入的关键词
selected_examples = length_based_selector.select_examples(input_variables={"key":user_input})prompt = prompt_template.format(input=user_input,output="\n".join([example["output"] for example in selected_examples])
)# 将prompt传递给模型进行生成
print(prompt)
tongyi = Tongyi()
ret = tongyi.invoke(prompt)
print(ret)

在这里插入图片描述


二、输出解析器

1.介绍

输出解析器是一种专门用于结构化语言模型响应的类。其核心功能通过两个主要方法实现:

  1. 获取格式指令(get_format_instructions): 此方法返回一个字符串,详细说明了语言模型输出的期望格式。
  2. 解析(parse): 此方法接受一个字符串作为输入(该字符串假设为语言模型的响应),并将其解析成某种结构化形式。

此外,输出解析器还可以选择实现一个额外的方法:

  • 带提示解析(parse_with_prompt): 此方法除了接受语言模型的响应字符串外,还接受一个提示字符串。提示字符串主要用于在解析过程中提供额外信息,帮助解析器更好地结构化输出,尤其是在需要利用提示中的信息来修复或完善输出时。

综上所述,输出解析器的主要作用是帮助将语言模型的响应转换为更加结构化和易于处理的形式。

2.列表解析器

    列表解析器是输出解析器的一种,专门用于处理大型语言模型生成的列表数据。它能够将逗号或其他分隔符分隔的文本字符串解析为Python列表或其他数据结构,便于后续的程序处理和分析。通过简单的接口,用户可以轻松地将语言模型的输出转换为所需的数据结构。

from langchain_core.output_parsers import CommaSeparatedListOutputParser,NumberedListOutputParser
from langchain.prompts import PromptTemplate, ChatPromptTemplate, HumanMessagePromptTemplate
from langchain_community.llms import Tongyi# 1.定义输出解析器:列表解析器
output_parser = CommaSeparatedListOutputParser()
# 2.获取格式指令
format_instructions = output_parser.get_format_instructions()# 3.创建并格式化提示
promptTemplate = PromptTemplate(template="列出五种{subject}。\n{format_instructions}",input_variables=["subject"],partial_variables={"format_instructions": format_instructions},
)prompt=promptTemplate.format(subject="水果")
print(prompt)# 4.调用模型并获取响应
tongyi = Tongyi()
ret = tongyi.invoke(prompt)
print(ret)
print(type(ret))# 5.使用输出解析器解析模型响应
parsed_list = output_parser.parse(ret)
print(parsed_list)  # eg:输出: ['苹果', '香蕉', '橙子', '葡萄', '梨']

在这里插入图片描述

3.日期时间解析器

    输出解析器中的日期时间解析器是一种专门用于处理大型语言模型(LLMs)生成的日期和时间数据的工具。它的主要作用是将LLMs输出的文本字符串(如日期和时间的自然语言表达) 解析为 Python中的datetime对象或其他日期时间格式,以便于程序进行进一步的日期时间计算、比较或格式化等操作。

from langchain_community.llms import Tongyi
from langchain.prompts import PromptTemplate
from langchain.output_parsers.datetime import DatetimeOutputParser# 1、定义输出解析器:日期时间解析器
output_parser = DatetimeOutputParser()
# 2、获取格式指令
format_instructions = output_parser.get_format_instructions()
print("获取格式指令:\n",format_instructions)template = """请按下面要求回答问题:
{question}
{format_instructions}"""# 3、定义模板
promptTemplate = PromptTemplate.from_template(template,partial_variables={"format_instructions": output_parser.get_format_instructions()},
)# 4、生成prompt
prompt = promptTemplate.format(question="新中国成立的日期是什么?")
print(prompt)# 5、调用大模型并获取响应
llm= Tongyi()
output = llm.invoke(prompt)
print(output)# 6、使用输出解析器解析模型响应
# output_parser.parse(output)
print("使用输出解析器解析模型响应 ",output_parser.parse(output))

在这里插入图片描述

4.枚举解析器

    输出解析器中的枚举解析器是一种专门用于处理大型语言模型(LLMs)输出中预定义值集合的工具。枚举(Enum)是一种数据类型,它包含了一组命名的常量值,这些值在程序中是固定的,不能改变。 在LLMs的应用场景中,有时模型的输出应该是这组预定义值之一,以确保数据的准确性和一致性。这时,枚举解析器就派上了用场。

from langchain.output_parsers.enum import EnumOutputParser
from enum import Enum# 定义一个枚举类Colors,用于列举颜色选项
class Colors(Enum):RED = "red"GREEN = "green"BLUE = "blue"# 创建EnumOutputParser实例,指定Colors枚举作为解析目标
parser = EnumOutputParser(enum=Colors)# 示例:解析字符串"red",预期输出Colors枚举中对应的RED成员
print(parser.parse("red"))
# -> <Colors.RED: 'red'># 包括空格也可以
print(parser.parse(" green"))
# -> <Colors.GREEN: 'green'># 包括\n\t也可以
print(parser.parse("blue\n\t"))
# -> <Colors.BLUE: 'blue'># 其他字符不可以
# print(parser.parse("blue?"))
# -> <Colors.BLUE: 'blue'>

在这里插入图片描述

5.Pydantic 解析器

    输出解析器中的 Pydantic解析器 是一种专门用于处理大型语言模型(LLMs)或其他数据源输出的工具,它利用Pydantic库的数据验证和解析能力来确保输出数据符合预期的数据模型。
    Pydantic 是一个基于Python类型注解的数据验证和设置管理工具,特别适合于构建复杂的数据模型并自动验证数据的有效性和完整性。

案例:讲个笑话

from typing import Listfrom langchain.output_parsers import PydanticOutputParser
from langchain.prompts import PromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field, validatorfrom langchain_community.llms import Tongyi# 定义一个笑话模型,用于规范和解析语言模型生成的笑话
class Joke(BaseModel):joke: str = Field(description="设置笑话的问题部分",title="笑话")answer: str = Field(description="解答笑话的答案部分")# 设置一个解析器 + 将指令注入到提示模板中。
# 初始化PydanticOutputParser解析器,用于将语言模型的输出解析为Joke模型
parser = PydanticOutputParser(pydantic_object=Joke)
# 打印解析器的格式化指令,用于指导语言模型生成符合格式的输出
print(parser.get_format_instructions())
print("="*50)# 创建一个提示模板,用于格式化输入的问题,并注入解析器的格式化指令
promptTemplate = PromptTemplate(template="回答用户的问题:\n{format_instructions}\n{query}\n",input_variables=["query"],partial_variables={"format_instructions": parser.get_format_instructions()},
)# 使用提示模板格式化一个关于笑话的问题
prompt = promptTemplate.format(query="讲一个中文的笑话。")
print(prompt)
print("="*50)# 使用通义大模型生成符合提示要求的笑话
llm = Tongyi()
ret = llm.invoke(prompt)
print(ret)

在这里插入图片描述

案例:订单案例

如下代码中,order_data验证Order模型失败时触发 ValidationError

from pydantic import BaseModel,Field,ValidationError
class Order(BaseModel):product_id: int = Field(...,gt=0)quantity: int = Field(...,gt=0,le=100)payment_method: str = Field(...,pattern=r'^(cash|credit_card|bank_transfer)$')# 订单数据示例,用于验证Order模型
order_data = {"product_id": -123, #不符合规则,必须大于0"quantity": 50,"payment_method": "cash"
}try:order = Order(**order_data)print(order)
except ValidationError as e:print(e.errors())

在这里插入图片描述


在这里插入图片描述

相关文章:

【AI大模型】LangChain框架:示例选择器与输出解析器携手,编织NLP高效精准之网

文章目录 前言一、示例选择器1.介绍及应用2.自定义示例选择器案例&#xff1a;AI点评姓名 3.基于长度的示例选择器案例&#xff1a;对输入内容取反 4.基于最大边际相关性(MMR)的示例选择器案例&#xff1a;得到输入的反义词 5.基于n-gram重叠的示例选择器6.综合案例 二、输出解…...

苹果电脑玩的游戏有哪些 Mac电脑怎么玩Windows游戏 苹果电脑可以装模拟器玩游戏吗

苹果电脑虽然在游戏生态上可能不及Windows平台那么广泛&#xff0c;但其强大的硬件和macOS系统的优化&#xff0c;足以支持一系列高质量游戏的流畅运行。从策略游戏《文明VI》到动作冒险游戏《黑暗之魂III》&#xff0c;再到解谜游戏《传送门2》和角色扮演游戏《神界&#xff1…...

【mathtype】word中如何输入4×4的矩阵,甚至阶数更多

在写论文或者使用word操作的时候&#xff0c;我们可能会使用矩阵插入我们所写的word中&#xff0c;今天小编就分享一下如何在word中输入矩阵。首先&#xff0c;我们word中需要安装mathtype的插件。 ①打开word&#xff0c;鼠标点击mathtype&#xff0c;再点击内联 ② 出现以下…...

ByteArrayOutputStream

ByteArrayOutputStream 是 Java 中的一个类,它属于 java.io 包。这个类实现了一个字节输出流,其中数据被写入到一个字节数组中。这个缓冲区在数据写入时会自动增长,以适应需要存储的数据量。下面是对 ByteArrayOutputStream 的详细解释: 构造函数 ByteArrayOutputStream…...

使用CLIP模型进行零样本图像分类的分步指南

零样本学习允许AI系统对未明确训练过的类别进行图像分类,标志着计算机视觉和机器学习的重大进步。本文将介绍使用CLIP实现零样本图像分类的详细分步指南,从环境设置到最终的图像处理和分类。我们首先介绍零样本学习的概念及其在现代AI应用中的重要性。然后深入探讨CLIP模型的概…...

Llama 3.1用了1.6万个英伟达H100 GPU,耗费......

目录 Llama 3.1发布简介 Llama 3.1模型规模与训练 大模型企业发展面临的问题与困境 算力和能耗算力方面 数据和资金方面 技术和人才方面 Llama 3.1发布简介 当地时间 2024年 7月 23号&#xff0c;Meta 公司发布了迄今为止最强大的开源 AI 模型 Llama 3.1。该模型不仅规模…...

学习c语言第24天(练习)

编程题 第一题 最大公约数最小公倍数求和 //求最大公约数和最小公倍数之和 //暴力求解 //int main() //{ // int n 0; // int m 0; // while (scanf("%d %d", &n, &m)2) // { // int min n < m ? n : m; // int max n > m ? n : m; //…...

【微信小程序开发】——奶茶点餐小程序的制作(一)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…...

鱼眼相机去畸变和矫正

基于smart3D计算完空三进行导出opt文件 xx.opt文件,类似于xml文件 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <OpticalProperties version="1.0"><Id>0</Id><Name>201空三任务_1_…...

Llama 3.1论文中文对照翻译

The Llama 3 Herd of Models 模型群 Llama 3 Llama Team, Al Meta 1 {}^{1} 1 Llama 团队&#xff0c;Meta Al 1 {}^{1} 1 1 {}^{1} 1 A detailed contributor list can be found in the appendix of this paper. 1 {}^{1} 1 详细的贡献者名单可在本文附录中找到。 Mod…...

Vue js-cookie的使用存储token操作

在Vue项目中使用js-cookie库存储token可以按照下面的步骤进行操作&#xff1a; 首先&#xff0c;安装js-cookie库&#xff0c;可以使用npm安装&#xff0c;命令为&#xff1a; npm install js-cookie 然后&#xff0c;在需要存储token的组件中引入js-cookie库&#xff1a; imp…...

C到C++——C++基础

C是一种通用的、静态类型的、跨平台的编程语言。它是在1979年由Bjarne Stroustrup创建的&#xff0c;最初是作为C语言的扩展来支持面向对象编程。 C在保留C语言的特性的同时&#xff0c;添加了许多其他的功能&#xff0c;包括类、对象、继承、多态、模板等。这使得C成为了一种…...

trie算法

1、定义 高效的存储和查找字符串集合的数据结构 它的优点是&#xff1a;利用字符串的公共前缀来减少查询时间&#xff0c;最大限度地减少无谓的字符串比较&#xff0c;查询效率比哈希树高 2、构建 我们可以使用数组来模拟实现Trie树。 我们设计一个二维数组 son[N] [26] 来…...

Kubernetes之pod的基本概念

目录 什么是pod 启动一个pod 说明 Pod 和控制器 Pod 模板 Pod 更新与替换 资源共享和通信 Pod 中的存储 Pod 联网 Pod 安全设置 什么是pod Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。 Pod&#xff08;就像豌豆荚中&#xff09;是一组&#…...

PostgreSQL的学习心得和知识总结(一百五十)|[performance]更好地处理冗余 IS [NOT] NULL 限定符

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…...

sqllabs游戏

文章目录 总体思路&#xff1a;less-1:less-2:less-3:less-4:less-5:less-6:less-7:less-8:布尔盲注less-9:时间盲注less-21:less-24: 总体思路&#xff1a; 1、第一件事情 逃脱出单引号的控制 闭合单引号 2、单双引号需要成对出现 在python php Java中 3、2个办法 继续把多出…...

React Native Firebase:移动应用后端集成

React Native Firebase 是一个强大的库&#xff0c;它允许你在 React Native 应用中集成 Firebase 后端服务。Firebase 提供了一系列的服务&#xff0c;包括实时数据库、身份验证、云存储、云消息推送等&#xff0c;这些服务可以帮助你构建功能丰富、可扩展的移动应用。 安装和…...

趣味算法------开灯问题

题目描述 有 n 盏灯&#xff0c;编号为 1~n&#xff0c;第 1 个人把所有灯打开&#xff0c;第 2 个人按下所有编号为 2 的倍数的开关&#xff08;这些灯将被关掉&#xff09;&#xff0c;第 3 个人按下所有编号为 3 的倍数的开关&#xff08;其中关掉的灯将被打开&#xff0c;…...

如何长生?重要的是对内求索!

文章目录 1. 世界上没有仙丹2. 长生只能对内求索 1. 世界上没有仙丹 小说中的九转大还丹&#xff0c;修仙中的仙丹&#xff0c;蟠桃是不存在的。这是理所当然的废话。但是世界上总有很多广告词&#xff0c;用老山参、野生、纯天然&#xff0c;补肾、补肝等词来形容自己的产品&…...

SD-WAN解决方案

联通国际公司企业SD-WAN解决方案 产品介绍 随着数字化转型的加速推进&#xff0c;企业对网络连接的需求也在不断提高。联通国际公司推出的SD-WAN&#xff08;Software-Defined Wide Area Network&#xff0c;软件定义广域网&#xff09;解决方案&#xff0c;旨在为企业提供更…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...