LangChain学习二:提示-实战(上半部分)
文章目录
- 上一节内容:LangChain学习一:模型-实战
- 学习目标:提示词及提示词模板的运用
- 学习内容一:什么是提示词?
- 学习内容二:提示词模板
- 2.1 入门
- 2.2 模板格式
- 2.3 验证模板
- 2.4 序列化提示模板
- 2.5 将少量示例传递给提示模板(few_shot)
- 2.6 选择提示模板的示例
- 2.6.1 基于长度的示例选择器
- 学习内容三:聊天提示模板
- 3.1 聊天提示模板
- 3.1 .1 实战:首先需要声明和定义一个模板
- 3.1 .2 实战:把提示词模板放入系统消息提示模板、人类消息提示模板等,并进行组合放入大模型
- 3.1.2.1 提示词模板放入SystemMessagePromptTemplate、HumanMessagePromptTemplate、ChatPromptTemplate等
- 3.1.2.2 不同类型的 MessagePromptTemplate
- 3.2 实例选择器
上一节内容:LangChain学习一:模型-实战
LangChain学习一:模型-实战
学习目标:提示词及提示词模板的运用
学习内容一:什么是提示词?
大白话就是我们问大模型的问题
学习内容二:提示词模板
提示模板是生成提示的可重复方法。
就是一个字符串,这个字符串里面包含{变量},我们要用的时候把变量进行赋值,赋值之后我们的模板就实例化成了一句话
提示模板可能包含:
对语言模型的指导,
一组少量示例,以帮助语言模型生成更好的响应,
对语言模型的提问。
2.1 入门
from langchain import PromptTemplatetemplate = """
给我介绍一下{product}?
"""prompt = PromptTemplate(input_variables=["product"],template=template,
)
out=prompt.format(product="华为")
print(out)

{product}这里声明了一个变量,也可以说是占位符(可以是多个),
然后PromptTemplate进行实例化input_variables代表变量的列表,这里的值一定要和我们声明的相同,template就是我们的定义模板是那句话
prompt.format就是通过变量名='实际值’进行实例化
还有一种方式是,先声明后赋值
from langchain import PromptTemplatetemplate = """
给我介绍一下{product}?
"""prompt_template = PromptTemplate.from_template(template)
out=prompt_template.format(product="华为")
print(out)
效果和上面一样

2.2 模板格式
以上2种情况是默认Python f-string处理的,比如说,下面这个例子,我们就想让字符串里面包含{ok}
from langchain import PromptTemplatetemplate = """
给我介绍一下{product}{ok}?
"""prompt = PromptTemplate(input_variables=["product"],template=template,
)
out=prompt.format(product="华为")
print(out)

这时候我们就可以通过 template_format 参数指定其他模板格式:
这里我们介绍一下 jinja2

需要加载依赖包
pip install jinja2
from langchain import PromptTemplate# Make sure jinja2 is installed before running thistemplate = "请给我介绍一下 {{ project }} {ok}"
prompt_template = PromptTemplate.from_template(template=template, template_format="jinja2")out=prompt_template.format(project="华为")
print(out)

这时候我们发现{ok}就可以显示了
2.3 验证模板
我们在实例化PromptTemplate的时候input_variables可以帮我们校验
template里面是否包含变量,如果不包含就会报错
prompt_template = PromptTemplate(template=template,input_variables=["project", "foo"])

我们可以通过validate_template=False来禁止此行为
template = "请给我介绍一下 {project}"
prompt_template = PromptTemplate(template=template,input_variables=["project", "foo"],validate_template=False) out=prompt_template.format(project="华为")

注意注意,这里out=prompt_template.format(project="华为")project一定要在template 里面存在,并且不能有其他的变量,不然都会报错
2.4 序列化提示模板
from langchain import PromptTemplatetemplate = "请给我介绍一下 {project}"
prompt_template = PromptTemplate.from_template(template=template)
# 保存
prompt_template.save("awesome_prompt.json") # Save to JSON file

from langchain.prompts import load_prompt
loaded_prompt = load_prompt("awesome_prompt.json")
out=loaded_prompt.format(project="华为")
print(out)

2.5 将少量示例传递给提示模板(few_shot)
from langchain import PromptTemplate, FewShotPromptTemplate# 首先,创建少数快照示例的列表。
examples = [{"word": "开心", "antonym": "悲伤"},{"word": "高", "antonym": "低"},
]#接下来,我们指定模板来格式化我们提供的示例。
#为此,我们使用“PromptTemplate”类。
example_formatter_template = """
单词: {word}
反义词: {antonym}\n
"""
example_prompt = PromptTemplate(input_variables=["word", "antonym"],template=example_formatter_template,
)# 最后,我们创建“FewShotPromptTemplate”对象。
few_shot_prompt = FewShotPromptTemplate(# 以下是我们要插入到提示中的示例。examples=examples,# 当我们将示例插入到提示中时,这就是我们想要格式化示例的方式。example_prompt=example_prompt,#前缀是位于提示中示例之前的一些文本。#通常,这包括入侵。prefix="给出每个输入的反义词",#后缀是在提示中的示例后面的一些文本。#通常,这是用户输入的位置suffix="单词: {input}\n反义词:",# 输入变量是整个提示所期望的变量.input_variables=["input"],#example_separator是用于将前缀、examples和后缀连接在一起的字符串。example_separator="",
)#我们现在可以使用“format”方法生成提示。
print(few_shot_prompt.format(input="big"))
结果
给出每个输入的反义词
单词: 开心
反义词: 悲伤单词: 高
反义词: 低单词: 大
反义词:
2.6 选择提示模板的示例
通俗点来说就是通过方法找到相似的示例,有以下几种方式
-
LengthBased ExampleSelector(基于长度的示例选择器):这是一种示例选择器,它根据示例的长度来选择要使用的示例。较长的示例可能包含更多的细节和信息,因此可以更全面地回答用户的问题。
-
最大边际相关性 ExampleSelector:这种示例选择器基于与输入之间的边际相关性来选择示例。它计算每个示例与输入之间的相关性,并选择具有最高相关性的示例作为回答。
-
NGram 重叠 ExampleSelector:NGram 重叠示例选择器根据输入和示例之间的共享 N-gram 片段来选择示例。它通过匹配输入和示例之间的共同 N-gram 片段来确定最相关的示例。
-
相似度 ExampleSelector:相似度示例选择器使用文本相似度度量来选择最相关的示例。它计算输入和示例之间的相似度,然后选择与输入最相似的示例作为回答。
这里举个例子介绍下,后面单独出一节来介绍
2.6.1 基于长度的示例选择器
总长度是由max_length控制的,如果我们输入的长一些,就会少从examples 拿一些,输入短,则反之
from langchain import PromptTemplate, FewShotPromptTemplate# 首先,创建少数快照示例的列表。
from langchain.prompts import LengthBasedExampleSelectorexamples = [{"word": "开心", "antonym": "悲伤"},{"word": "高", "antonym": "低"},
]# 接下来,我们指定模板来格式化我们提供的示例。
# 为此,我们使用“PromptTemplate”类。
example_formatter_template = """
单词: {word}
反义词: {antonym}\n
"""
example_prompt = PromptTemplate(input_variables=["word", "antonym"],template=example_formatter_template,
)
#我们将使用' LengthBasedExampleSelector '来选择示例。
example_selector = LengthBasedExampleSelector(# 这些是可供选择的例子。examples=examples,#这是用于格式化示例的PromptTemplate。example_prompt=example_prompt,# 这是格式化示例的最大长度。# 长度由下面的get_text_length函数测量。max_length=25,
)
# 我们现在可以使用' example_selector '来创建' FewShotPromptTemplate '。
dynamic_prompt = FewShotPromptTemplate(# We provide an ExampleSelector instead of examples.example_selector=example_selector,example_prompt=example_prompt,prefix="给出每个输入的反义词",suffix="单词: {input}\n反义词:",input_variables=["input"],example_separator="",
)# We can now generate a prompt using the `format` method.
print(dynamic_prompt.format(input="big"))
学习内容三:聊天提示模板
本次介绍一下几个
- 聊天提示模板
- LLM提示模板
- 示例选择器
- 输出解析器
3.1 聊天提示模板
上一节介绍了,模型有聊天模型,也是我们常用的。这一节,我们看一下如何更好地使用聊天模型。聊天模型和LLM模型在上一节也说过了,是有不同的,聊天模型的每条信息
都与一个角色 进行关联
因此,LangChain提供了几个相关的提示模板,以便轻松构建和处理提示。在查询聊天模型时,建议您使用这些与聊天相关的提示模板,而不是PromptTemplate,以充分发挥基础聊天模型的潜力。
"""
@FileName:chat_prompt.py
@Description:
@Author:lucky
@Time:2023/12/9 10:41
"""
from langchain.prompts import (ChatPromptTemplate,PromptTemplate,SystemMessagePromptTemplate,AIMessagePromptTemplate,HumanMessagePromptTemplate,
)
from langchain.schema import (AIMessage,HumanMessage,SystemMessage
)template = "你是一个很有帮助的翻译助手{input_language} 翻译成 {output_language}."
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
print(system_message_prompt)
human_template = "{text}"
print("====================")
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
print(human_message_prompt)

简单介绍一下
-
ChatPromptTemplate (聊天模板):
这个模板用于生成对话的开头,它通常包含一些问候语或提醒用户如何使用机器人的信息。 -
PromptTemplate (提示模板):
这个模板用于为用户提供特定主题或任务的提示。它可以是一个问题,要求用户提供更多信息,或者是一个指导性的陈述,告诉用户下一步该做什么 -
SystemMessagePromptTemplate(系统消息提示模板):
这个模板用于生成系统消息,向用户提供一些重要的信息,比如机器人无法回答某个问题、请求用户提供更多细节等等。 -
AIMessagePromptTemplate (AI消息提示模板):
这个模板用于生成 AI 机器人的回答。它基于预训练的模型,使用大量的数据和算法来生成针对用户问题的响应。 -
HumanMessagePromptTemplate(人类消息提示模板):
这个模板用于生成人类操作者的回答,当机器人无法回答某个问题时,会将问题转交给人类操作者进行回答。
其中{}里面是变量名称,所以不要用{}在你的提示词中,如果用,那就不要用LangChain提示词模板。
3.1 .1 实战:首先需要声明和定义一个模板
from langchain.callbacks import StreamingStdOutCallbackHandler
from langchain.chat_models import ChatOpenAI
from langchain.prompts import (ChatPromptTemplate,PromptTemplate,SystemMessagePromptTemplate,AIMessagePromptTemplate,HumanMessagePromptTemplate,
)
from langchain.prompts.chat import ChatPromptValue
from langchain.schema import (AIMessage,HumanMessage,SystemMessage
)
声明一个模板,注意:{变量} 提示词模板的意思就是一个框架里面有一些变量,这些变量也可以理解成为占位符。后面使用提示词模板只要把里面的变量进行具体化就可以了
template = "你是一个很有帮助的翻译助手{input_language} 翻译成 {output_language}."
3.1 .2 实战:把提示词模板放入系统消息提示模板、人类消息提示模板等,并进行组合放入大模型
SystemMessagePromptTemplate、HumanMessagePromptTemplate等都有一个from_template方法,用于把我们提示词模板放入
3.1.2.1 提示词模板放入SystemMessagePromptTemplate、HumanMessagePromptTemplate、ChatPromptTemplate等
from langchain.callbacks import StreamingStdOutCallbackHandler
from langchain.chat_models import ChatOpenAI
from langchain.prompts import (ChatPromptTemplate,PromptTemplate,SystemMessagePromptTemplate,AIMessagePromptTemplate,HumanMessagePromptTemplate,
)
from langchain.prompts.chat import ChatPromptValue
from langchain.schema import (AIMessage,HumanMessage,SystemMessage
)
template = "你是一个很有帮助的翻译助手{input_language} 翻译成 {output_language}."
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
print(f"========system_message_prompt的格式化结果:{system_message_prompt}============\n\n\n")
human_template = "{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
print(f"========human_template的格式化结果:{human_template}============\n\n\n")

这时候我们可以构建一个ChatPromptTemplate(聊天模板),把我们的(系统消息提示模板)和(人类消息提示模板)组合起来,放入大模型。
组合方式:ChatPromptTemplate提供了from_messages方法
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])print(f"========chat_prompt的格式化结果:{chat_prompt}============3\n\n\n")
组合之后我们可以看一下chat_prompt 这个对象里面有什么,
input_variables:包含了所有的变量
messages:是个列表:包含了所有的模板对象

我们可以format_prompt实例化(就是把模板里面的变量进行赋值),然后通过to_messages打印他的实例结构结果
output_to_messages=chat_prompt.format_prompt(input_language="English", output_language="French", text="I love programming.").to_messages()
print(output_to_messages)

或者你也可以直接使用format,与上面不同的是,format直接返回的是值,或者你也可以用上面的方式使用to_string方法,都是可行的
output = chat_prompt.format(input_language="English", output_language="French", text="I love programming.")
print(f"========format的结果:{output}============4\n\n\n")# or alternatively
output_2 = chat_prompt.format_prompt(input_language="English", output_language="French",text="I love programming.").to_string()

总结一下:以上把我们的(系统消息提示模板)和(人类消息提示模板)组合起来,放入ChatPromptTemplate(聊天模板)一共用了三个步骤:
- 分别实例化了 系统消息提示模板 和 人类消息提示模板
- 声明ChatPromptTemplate对象的同时把相关模板实例也放进去
- 对ChatPromptTemplate对象模板进行使用,把变量名换成我们想要的
其上以上三个步骤可以作为一个步骤直接使用,也就是不使用模板的方式,我们观察一下,上面的多有工作都是为了节省一些重复的工作,但是送进大模型的就是具体的话,所以直接用下面的方式
output_3=ChatPromptValue(messages=[SystemMessage(content='你是把英语翻译成法语的得力助手。', additional_kwargs={}),HumanMessage(content='I love programming.', additional_kwargs={})])
print(f"========format_prompt的结果:{output_3}===========5\n\n\n")

把他送入我们的模型,就可以轻易的获得我们想要的结果了
chat = ChatOpenAI(streaming=True, callbacks=[StreamingStdOutCallbackHandler()],verbose=True,# callbacks=[callback],openai_api_key="none",openai_api_base="http://127.0.0.1:8000/v1",model_name="Qwen-7B-Chat"
)
resp = chat(output_3.messages)
print(f"=======模型返回结果:\n{resp}\n\n")

3.1.2.2 不同类型的 MessagePromptTemplate
LangChain 提供了不同类型的 MessagePromptTemplate。其中最常用的是 AIMessagePromptTemplate、SystemMessagePromptTemplate 和 HumanMessagePromptTemplate,分别用于创建 AI 消息、系统消息和人类消息。
同样自定义也有两种方式
- 使用模板
- 直接实例化
使用模板
chat_message_prompt = ChatMessagePromptTemplate.from_template(role="Jedi", template=prompt)
chat_message_out=chat_message_prompt.format(subject="force")
print(f"========chat_message_prompt的格式化结果:{chat_message_out}============7\n\n\n")
直接实例化
out=ChatMessage(content='May the force be with you', additional_kwargs={}, role='Jedi')
print(f"========chat_message_prompt的格式化结果:{out}============8\n\n\n")

效果是一样的
至于这个做啥的,这个就是看你自己的场景了。
LangChain 还提供了 MessagesPlaceholder,该占位符可以在格式化期间完全控制要呈现的消息。当您不确定应该使用哪个消息提示模板的角色或者希望在格式化期间插入消息列表时,这可能非常有用。
就是再上一个小节里面,我们把不同的提示模板进行组合,但是前提条件都是我们知道有几个,占位符就是让我们在前提不知道几个的情况下进行的
from langchain.prompts import MessagesPlaceholderhuman_prompt = "总结一下我们到目前为止的谈话 {word_count}单词."
human_message_template = HumanMessagePromptTemplate.from_template(human_prompt)chat_prompt = ChatPromptTemplate.from_messages([MessagesPlaceholder(variable_name="conversation"), human_message_template])
这里就是使用了conversation占位符。下面我们就可再次组合
human_message = HumanMessage(content="What is the best way to learn programming?")
ai_message = AIMessage(content="""\
1. Choose a programming language: Decide on a programming language that you want to learn. 2. Start with the basics: Familiarize yourself with the basic programming concepts such as variables, data types and control structures.3. Practice, practice, practice: The best way to learn programming is through hands-on experience\
""")out=chat_prompt.format_prompt(conversation=[human_message, ai_message], word_count="10").to_messages()
print(out)
[HumanMessage(content='What is the best way to learn programming?', additional_kwargs={}),AIMessage(content='1. Choose a programming language: Decide on a programming language that you want to learn. 2. Start with the basics: Familiarize yourself with the basic programming concepts such as variables, data types and control structures. 3. Practice, practice, practice: The best way to learn programming is through hands-on experience', additional_kwargs={}),HumanMessage(content='Summarize our conversation so far in 10 words.', additional_kwargs={})]
3.2 实例选择器
说白了就是选择一些例子,给大模型。让大模型参考给出答案
下面介绍一些常用的
-
LengthBased ExampleSelector(基于长度的示例选择器):这是一种示例选择器,它根据示例的长度来选择要使用的示例。较长的示例可能包含更多的细节和信息,因此可以更全面地回答用户的问题。
-
最大边际相关性 ExampleSelector:这种示例选择器基于与输入之间的边际相关性来选择示例。它计算每个示例与输入之间的相关性,并选择具有最高相关性的示例作为回答。
-
NGram 重叠 ExampleSelector:NGram 重叠示例选择器根据输入和示例之间的共享 N-gram 片段来选择示例。它通过匹配输入和示例之间的共同 N-gram 片段来确定最相关的示例。
-
相似度 ExampleSelector:相似度示例选择器使用文本相似度度量来选择最相关的示例。它计算输入和示例之间的相似度,然后选择与输入最相似的示例作为回答。
相关文章:
LangChain学习二:提示-实战(上半部分)
文章目录 上一节内容:LangChain学习一:模型-实战学习目标:提示词及提示词模板的运用学习内容一:什么是提示词?学习内容二:提示词模板2.1 入门2.2 模板格式2.3 验证模板2.4 序列化提示模板2.5 将少量示例传递…...
SpringBoot集成i18n(多语言)
配置文件 spring: messages: basename: il8n/messages # 配置国际化资源文件路径 fallback-to-system-locale: true # 是否使用系统默认的语言环境作为备选项 国际化配置 import org.springframework.context.annotation.Bean; import org.spr…...
Volumetric Lights 2 HDRP
高清晰度渲染管道,包括先进的新功能,如半透明阴影图和直接灯光投射加上许多改进。 插件是一个快速,灵活和伟大的前瞻性光散射解决方案的高清晰度渲染管道。只需点击几下,即可改善场景中的照明视觉效果。 兼容: 点光源 聚光灯 碟形灯 矩形灯 通过覆盖摄像机周围大面积区域的…...
蓝桥杯 java基础
1. AB问题I 时间限制:2.000S 空间限制:32MB 题目描述 你的任务是计算ab。 输入描述 输入包含一系列的a和b对,通过空格隔开。一对a和b占一行。 输出描述 对于输入的每对a和b,你需要依次输出a、b的和。 如对于输入中的第二…...
火狐,要完了!
在过去几年中,关于Firefox 浏览器的衰落有过不少讨论。目前来说,很多公共的以及私营的大型网站都缺乏对Firefox的适当支持。但是Firefox也多次试图“自救”,甚至就在不久前,Mozilla 通过官博发文,表示 Firefox 在 2023…...
在AWS Lambda上部署EC2编译的FFmpeg工具——自定义层的方案
大纲 1 确定Lambda运行时环境1.1 Lambda系统、镜像、内核版本1.2 运行时1.2.1 Python1.2.2 Java 2 环境准备2.1 创建EC2实例 3 编译FFmpeg3.1 连接EC2 4 编译5 上传S3存储桶5.1 创建S3桶5.2 创建IAM策略5.3 创建IAM角色5.4 EC2关联角色5.5 修改桶策略5.6 打包并上传 6 创建Lamb…...
情深不必纠缠
那一年,男孩女孩在万千人中相遇了。多年后女人的一封邮件,让男人与女人的灵魂相遇了。他们无缘夫妻,却发现彼此是灵魂的陪伴。不能携手相守,却懂得彼此的心灵。 有一天,女人告诉男人要回家了,问男人心里会不…...
AIGC之Image2Video(一)| Animate Anyone:从静态图像生成动态视频,可将任意图像角色动画化
近日,阿里发布了Animate Anyone,只需一张人物照片,结合骨骼动画,就能生成人体动画视频。 项目地址:https://humanaigc.github.io/animate-anyone/ 论文地址:https://arxiv.org/pdf/2311.17117.pdf Github…...
区块链的可拓展性研究【04】分片
分片属于layer1扩容 区块链分片是一种技术实现,可以将区块链网络分成多个片段,每个片段负责处理一部分的交易数据。这种方法可以提高区块链网络的处理速度和吞吐量,降低交易确认时间和费用,同时也可以减轻节点运行负担。 在传统…...
blender 粒子系统 roughness 属性
粒子系统中的Roughness是一种用来控制粒子的随机性和不规则性的属性,它可以影响粒子的发射方向、速度、大小、旋转等。Roughness有以下几个子属性: - **Uniform**:这个属性用来控制粒子的发射方向的随机性,即粒子在法线方向上的偏…...
npm ERR! notarget No matching version found for @eslint/eslintrc@^2.1.4.
文章目录 Intro解决流程总结前置信息了解npm 镜像源三个要用到的npm命令 官方源确认查看当前镜像源的详情解决: 切换镜像源后重试重新操作 事后感受华为云再测试 Intro 事由是今天我在用 create-react-app 新建一个用于测试的前端项目。 然后就出现以下报错&#x…...
截取字符串
输入一个字符串和一个整数 k ,截取字符串的前k个字符并输出。 数据范围:字符串长度满足 1≤n≤1000, 1≤k≤n 输入描述: 1.输入待截取的字符串 2.输入一个正整数k,代表截取的长度 输出描述:截取后的字符串…...
【Python】Faker库详解:创建测试数据轻而易举
Python Faker库详解:创建测试数据轻而易举 在软件开发和测试过程中,通常需要大量的测试数据来模拟真实环境。Python的Faker库为开发者提供了一个方便、灵活且强大的工具,用于生成各种虚构数据。本文将深入介绍Faker库,演示其基本…...
Spring boot -- 学习HttpMessageConverter
文章目录 1. Json格式数据获取2. 为什么返回Json格式的数据2.1 注解SpringBootAppliaction2.1.1 SpringBootConfiguration2.1.2 ComponentScan2.1.3 EnableAutoConfiguration2.1.3.1 HttpMessageConvertersAutoConfiguration2.1.3.2 WebMvcAutoConfiguration 2.2 注解RestContr…...
如何选择合适的运筹优化求解器?
文章目录 前言求解器对比问题延伸:商用求解器和开源求解器的差别是什么? 求解器PK总结参考资料 前言 求解器对于运筹算法工程师而言,常常像一个黑盒,我们扔进去输入数据和数学模型,求解器给我们吐出一个解出来。这种状…...
Python 精讲 | 奇葩的 is
大家好,欢迎来到 Crossin的编程教室 ! 接下来的几个例子,可能会颠覆你对 Python 的认知。 我们知道,Python 判断两个数值是否相等的运算符是「」。比如有一个变量 a 是整数 1,另一个变量 b 是小数 1.0,尽管…...
遥感卫星综述(下载和预处理)(持续更新)
遥感卫星综述(下载和预处理) 目录 遥感卫星综述(下载和预处理)一、国产卫星GF-1 WFV 二、国外卫星Sentinel-1Sentinel-2 一、国产卫星 GF-1 WFV 下载 分辨率波段16m4(蓝、绿、红、近红) 预处理: ENVI预处理GF-1号W…...
Nmap脚本未来的发展趋势
Nmap脚本技术的发展趋势和前景 Nmap脚本是一种基于Lua语言开发的脚本,可以扩展Nmap的功能,用于自动化扫描、漏洞检测、服务探测、设备管理等方面。随着网络安全的不断发展和漏洞的不断出现,Nmap脚本技术也在不断发展和壮大。在本文中…...
要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 17 章:对话提示
要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 17 章:对话提示 对话提示是一种允许模型生成模拟两个或多个实体之间对话的文本的技术。 通过向模型提供上下文和一组角色或实体,以及他们的角色和背景,并要求模型生成他…...
urllib爬虫 应用实例(三)
目录 一、 ajax的get请求豆瓣电影第一页 二、ajax的get请求豆瓣电影前十页 三、ajax的post请求肯德基官网 一、 ajax的get请求豆瓣电影第一页 目标:获取豆瓣电影第一页的数据,并保存为json文件 设置url,检查 --> 网络 --> 全部 -…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
