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

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(聊天模板)一共用了三个步骤:

  1. 分别实例化了 系统消息提示模板 和 人类消息提示模板
  2. 声明ChatPromptTemplate对象的同时把相关模板实例也放进去
  3. 对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脚本技术也在不断发展和壮大。在本文中&#xf…...

要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 17 章:对话提示

要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 17 章:对话提示 对话提示是一种允许模型生成模拟两个或多个实体之间对话的文本的技术。 通过向模型提供上下文和一组角色或实体,以及他们的角色和背景,并要求模型生成他…...

urllib爬虫 应用实例(三)

目录 一、 ajax的get请求豆瓣电影第一页 二、ajax的get请求豆瓣电影前十页 三、ajax的post请求肯德基官网 一、 ajax的get请求豆瓣电影第一页 目标:获取豆瓣电影第一页的数据,并保存为json文件 设置url,检查 --> 网络 --> 全部 -…...

Linux下载加速:Qwen2.5-32B-Instruct优化方案

Linux下载加速:Qwen2.5-32B-Instruct优化方案 如果你经常在Linux系统上下载软件包、模型权重或者大型数据集,肯定遇到过下载速度慢、连接不稳定、甚至中途断掉需要重来的情况。特别是下载几十GB的大模型文件时,那种看着进度条半天不动的感觉…...

重生之我用 AI 复活了我的同事

阅读本文大概需要 2.8 分钟。在写这篇文章之前先解答上篇文章评论区反映的两个问题:第一个问题,有人读完文章说,张哥,那以后是用 AI 还是不用呢?当然要用了,而且是鼓励大家全面使用。我文章本意是 AI 发展之…...

VVC/VTM编码分析进阶:如何利用DecoderAnalyserApp深度解读CU划分与语法元素

VVC/VTM编码分析进阶:如何利用DecoderAnalyserApp深度解读CU划分与语法元素 在视频编码领域,VVC(Versatile Video Coding)作为新一代标准,其编码效率相比前代HEVC有显著提升。而VTM(VVC Test Model&#xf…...

DAB SG(信号发生器)的频道与频率设置详解

1. DAB SG信号发生器基础入门 第一次接触DAB SG信号发生器时,很多人会被那些专业术语搞得一头雾水。其实说白了,这就是个能模拟DAB广播信号的设备,主要用在广播设备测试、信号覆盖测试等场景。我刚开始用的时候也犯迷糊,后来才发现…...

Windows Cleaner完全指南:如何快速解决C盘爆红和系统卡顿问题

Windows Cleaner完全指南:如何快速解决C盘爆红和系统卡顿问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款专为Windows系统设…...

第21课:把 Qt 常用能力串成实战链路,打通文本、绘图、线程、网络与多媒体

本节路线图 为什么这节课看起来很散, → 先把程序的输入输出拿下: → 让界面真正活起来:`QP 兔兔建议 先顺着路线图跑一遍,再抄命令和代码,学习体验会轻松很多。 前两课我们已经把 Qt 的“界面底座”搭起来了,但真正做项目时,很多同学还是会卡在另一个问题上:界面会做了…...

Qwen3-0.6B-FP8数据库智能查询:用自然语言生成SQL语句

Qwen3-0.6B-FP8数据库智能查询:用自然语言生成SQL语句 你有没有过这样的经历?面对一个数据库,明明知道数据就在里面,却因为不懂SQL而束手无策。想查“上个月哪个产品卖得最好”,或者“找出最近三个月复购率最高的客户…...

C++学习笔记——初始化列表、创建和实例化对象、new 关键字、隐式构造与 explicit 关键字、运算符与运算符重载

目录 1. 初始化列表 1.1 基本语法 1.2 为什么使用初始化列表? 1.3 初始化顺序 2. 创建和实例化对象 2.1 栈上分配(自动存储期) 2.2 堆上分配(动态存储期) 2.3 栈 vs 堆:Cherno 的建议 3. new 关键…...

嵌入式开发中的静态代码分析工具实战指南

1. 嵌入式代码静态分析工具概述作为一名嵌入式开发工程师,我深知在资源受限的MCU环境中,代码质量直接决定了产品的稳定性和可靠性。传统的C语言编译器虽然能发现语法错误,但对代码设计缺陷和潜在风险往往无能为力。这正是静态代码分析工具的价…...

[Python3高阶编程] - 横跨同步异步的利器: asgiref.sync

一、asgiref.sync 是什么?asgiref.sync 是 ASGI(Asynchronous Server Gateway Interface)参考实现库 asgiref 中的核心子模块,主要用于安全地桥接同步代码与异步代码。📌 一句话总结: 它让你在异步环境中调…...