#LLM入门|Prompt#2.6_Prompt_链_Chaining_Prompts

news2024/9/22 1:29:33

第六章 处理输入-链式

链式提示是将复杂任务分解为多个简单Prompt的策略。在本章中,我们将学习如何通过使用链式 Prompt 将复杂任务拆分为一系列简单的子任务。你可能会想,如果我们可以通过思维链推理一次性完成,那为什么要将任务拆分为多个 Prompt 呢?
主要是因为链式提示它具有以下优点:

  1. 分解复杂度,每个 Prompt 仅处理一个具体子任务,避免过于宽泛的要求,提高成功率。这类似于分阶段烹饪,而不是试图一次完成全部。
  2. 降低计算成本。过长的 Prompt 使用更多 tokens ,增加成本。拆分 Prompt 可以避免不必要的计算。
  3. 更容易测试和调试。可以逐步分析每个环节的性能。
  4. 融入外部工具。不同 Prompt 可以调用 API 、数据库等外部资源。
  5. 更灵活的工作流程。根据不同情况可以进行不同操作。

综上,链式提示通过将复杂任务进行科学拆分,实现了更高效、可靠的提示设计。它使语言模型集中处理单一子任务,减少认知负荷,同时保留了多步骤任务的能力。随着经验增长,开发者可以逐渐掌握运用链式提示的精髓。

一、 提取产品和类别

我们所拆解的第一个子任务是,要求 LLM 从用户查询中提取产品和类别。

from tool import get_completion_from_messages

delimiter = "####"

system_message = f"""
您将获得客户服务查询。
客户服务查询将使用{delimiter}字符作为分隔符。
请仅输出一个可解析的Python列表,列表每一个元素是一个JSON对象,每个对象具有以下格式:
'category': <包括以下几个类别:Computers and Laptops、Smartphones and Accessories、Televisions and Home Theater Systems、Gaming Consoles and Accessories、Audio Equipment、Cameras and Camcorders>,
以及
'products': <必须是下面的允许产品列表中找到的产品列表>

类别和产品必须在客户服务查询中找到。
如果提到了某个产品,它必须与允许产品列表中的正确类别关联。
如果未找到任何产品或类别,则输出一个空列表。
除了列表外,不要输出其他任何信息!

允许的产品:

Computers and Laptops category:
TechPro Ultrabook
BlueWave Gaming Laptop
PowerLite Convertible
TechPro Desktop
BlueWave Chromebook

Smartphones and Accessories category:
SmartX ProPhone
MobiTech PowerCase
SmartX MiniPhone
MobiTech Wireless Charger
SmartX EarBuds

Televisions and Home Theater Systems category:
CineView 4K TV
SoundMax Home Theater
CineView 8K TV
SoundMax Soundbar
CineView OLED TV

Gaming Consoles and Accessories category:
GameSphere X
ProGamer Controller
GameSphere Y
ProGamer Racing Wheel
GameSphere VR Headset

Audio Equipment category:
AudioPhonic Noise-Canceling Headphones
WaveSound Bluetooth Speaker
AudioPhonic True Wireless Earbuds
WaveSound Soundbar
AudioPhonic Turntable

Cameras and Camcorders category:
FotoSnap DSLR Camera
ActionCam 4K
FotoSnap Mirrorless Camera
ZoomMaster Camcorder
FotoSnap Instant Camera
    
只输出对象列表,不包含其他内容。
"""

user_message_1 = f"""
 请告诉我关于 smartx pro phone 和 the fotosnap camera 的信息。
 另外,请告诉我关于你们的tvs的情况。 """

messages =  [{'role':'system', 'content': system_message},    
             {'role':'user', 'content': f"{delimiter}{user_message_1}{delimiter}"}] 

category_and_product_response_1 = get_completion_from_messages(messages)

print(category_and_product_response_1)

[{‘category’: ‘Smartphones and Accessories’, ‘products’: [‘SmartX ProPhone’]}, {‘category’: ‘Cameras and Camcorders’, ‘products’: [‘FotoSnap DSLR Camera’, ‘FotoSnap Mirrorless Camera’, ‘FotoSnap Instant Camera’]}, {‘category’: ‘Televisions and Home Theater Systems’, ‘products’: [‘CineView 4K TV’, ‘CineView 8K TV’, ‘CineView OLED TV’, ‘SoundMax Home Theater’, ‘SoundMax Soundbar’]}]C
可以看到,输出是一个对象列表,每个对象都有一个类别和一些产品。如 “SmartX ProPhone” 和 “Fotosnap DSLR Camera” 、“CineView 4K TV”。
我们再来看一个例子。

user_message_2 = f"""我的路由器不工作了"""
messages =  [{'role':'system','content': system_message},
             {'role':'user','content': f"{delimiter}{user_message_2}{delimiter}"}] 
response = get_completion_from_messages(messages)
print(response)

[]

二、检索详细信息

我们提供大量的产品信息作为示例,要求模型提取产品和对应的详细信息。限于篇幅,我们产品信息存储在 products.json 中。
首先,让我们通过 Python 代码读取产品信息。

import json
# 读取产品信息
with open("products_zh.json", "r") as file:
    products = json.load(file)

接下来,定义 get_product_by_name 函数,是我们能够根据产品名称获取产品:

def get_product_by_name(name):
    """
    根据产品名称获取产品

    参数:
    name: 产品名称
    """
    return products.get(name, None)

def get_products_by_category(category):
    """
    根据类别获取产品

    参数:
    category: 产品类别
    """
    return [product for product in products.values() if product["类别"] == category]

调用 get_product_by_name 函数,输入产品名称 “TechPro Ultrabook”:
get_product_by_name(“TechPro Ultrabook”)

{'名称': 'TechPro 超极本',
 '类别': '电脑和笔记本',
 '品牌': 'TechPro',
 '型号': 'TP-UB100',
 '保修期': '1 year',
 '评分': 4.5,
 '特色': ['13.3-inch display', '8GB RAM', '256GB SSD', 'Intel Core i5 处理器'],
 '描述': '一款时尚轻便的超极本,适合日常使用。',
 '价格': 799.99}

接下来,我们再看一个例子,调用 get_product_by_name 函数,输入产品名称 “电脑和笔记本”:
get_products_by_category(“电脑和笔记本”)

[{'名称': 'TechPro 超极本',
  '类别': '电脑和笔记本',
  '品牌': 'TechPro',
  '型号': 'TP-UB100',
  '保修期': '1 year',
  '评分': 4.5,
  '特色': ['13.3-inch display', '8GB RAM', '256GB SSD', 'Intel Core i5 处理器'],
  '描述': '一款时尚轻便的超极本,适合日常使用。',
  '价格': 799.99},
 {'名称': 'BlueWave 游戏本',
  '类别': '电脑和笔记本',
  '品牌': 'BlueWave',
  '型号': 'BW-GL200',
  '保修期': '2 years',
  '评分': 4.7,
  '特色': ['15.6-inch display',
   '16GB RAM',
   '512GB SSD',
   'NVIDIA GeForce RTX 3060'],
  '描述': '一款高性能的游戏笔记本电脑,提供沉浸式体验。',
  '价格': 1199.99},
 {'名称': 'PowerLite Convertible',
  '类别': '电脑和笔记本',
  '品牌': 'PowerLite',
  '型号': 'PL-CV300',
  '保修期': '1 year',
  '评分': 4.3,
  '特色': ['14-inch touchscreen', '8GB RAM', '256GB SSD', '360-degree hinge'],
  '描述': '一款多功能的可转换笔记本电脑,具有灵敏的触摸屏。',
  '价格': 699.99},
 {'名称': 'TechPro Desktop',
  '类别': '电脑和笔记本',
  '品牌': 'TechPro',
  '型号': 'TP-DT500',
  '保修期': '1 year',
  '评分': 4.4,
  '特色': ['Intel Core i7 processor',
   '16GB RAM',
   '1TB HDD',
   'NVIDIA GeForce GTX 1660'],
  '描述': '一款功能强大的台式电脑,适用于工作和娱乐。',
  '价格': 999.99},
 {'名称': 'BlueWave Chromebook',
  '类别': '电脑和笔记本',
  '品牌': 'BlueWave',
  '型号': 'BW-CB100',
  '保修期': '1 year',
  '评分': 4.1,
  '特色': ['11.6-inch display', '4GB RAM', '32GB eMMC', 'Chrome OS'],
  '描述': '一款紧凑而价格实惠的Chromebook,适用于日常任务。',
  '价格': 249.99}]

三、生成查询答案

3.1 解析输入字符串

定义一个 read_string_to_list 函数,将输入的字符串转换为 Python 列表

def read_string_to_list(input_string):
    """
    将输入的字符串转换为 Python 列表。

    参数:
    input_string: 输入的字符串,应为有效的 JSON 格式。

    返回:
    list 或 None: 如果输入字符串有效,则返回对应的 Python 列表,否则返回 None。
    """
    if input_string is None:
        return None

    try:
        # 将输入字符串中的单引号替换为双引号,以满足 JSON 格式的要求
        input_string = input_string.replace("'", "\"")  
        data = json.loads(input_string)
        return data
    except json.JSONDecodeError:
        print("Error: Invalid JSON string")
        return None   

category_and_product_list = read_string_to_list(category_and_product_response_1)
print(category_and_product_list)Copy to clipboardErrorCopied

[{‘category’: ‘Smartphones and Accessories’, ‘products’: [‘SmartX ProPhone’]}, {‘category’: ‘Cameras and Camcorders’, ‘products’: [‘FotoSnap DSLR Camera’, ‘FotoSnap Mirrorless Camera’, ‘FotoSnap Instant Camera’]}, {‘category’: ‘Televisions and Home Theater Systems’, ‘products’: [‘CineView 4K TV’, ‘CineView 8K TV’, ‘CineView OLED TV’, ‘SoundMax Home Theater’, ‘SoundMax Soundbar’]}]Copy to clipboardErrorCopied

3.2 进行检索

定义函数 generate_output_string 函数,根据输入的数据列表生成包含产品或类别信息的字符串:

def generate_output_string(data_list):
    """
    根据输入的数据列表生成包含产品或类别信息的字符串。

    参数:
    data_list: 包含字典的列表,每个字典都应包含 "products" 或 "category" 的键。

    返回:
    output_string: 包含产品或类别信息的字符串。
    """
    output_string = ""
    if data_list is None:
        return output_string

    for data in data_list:
        try:
            if "products" in data and data["products"]:
                products_list = data["products"]
                for product_name in products_list:
                    product = get_product_by_name(product_name)
                    if product:
                        output_string += json.dumps(product, indent=4, ensure_ascii=False) + "\n"
                    else:
                        print(f"Error: Product '{product_name}' not found")
            elif "category" in data:
                category_name = data["category"]
                category_products = get_products_by_category(category_name)
                for product in category_products:
                    output_string += json.dumps(product, indent=4, ensure_ascii=False) + "\n"
            else:
                print("Error: Invalid object format")
        except Exception as e:
            print(f"Error: {e}")

    return output_string 

product_information_for_user_message_1 = generate_output_string(category_and_product_list)
print(product_information_for_user_message_1)Copy to clipboardErrorCopied
{
    "名称": "SmartX ProPhone",
    "类别": "智能手机和配件",
    "品牌": "SmartX",
    "型号": "SX-PP10",
    "保修期": "1 year",
    "评分": 4.6,
    "特色": [
        "6.1-inch display",
        "128GB storage",
        "12MP dual camera",
        "5G"
    ],
    "描述": "一款拥有先进摄像功能的强大智能手机。",
    "价格": 899.99
}
{
    "名称": "FotoSnap DSLR Camera",
    "类别": "相机和摄像机",
    "品牌": "FotoSnap",
    "型号": "FS-DSLR200",
    "保修期": "1 year",
    "评分": 4.7,
    "特色": [
        "24.2MP sensor",
        "1080p video",
        "3-inch LCD",
        "Interchangeable lenses"
    ],
    "描述": "使用这款多功能的单反相机,捕捉惊艳的照片和视频。",
    "价格": 599.99
}
{
    "名称": "FotoSnap Mirrorless Camera",
    "类别": "相机和摄像机",
    "品牌": "FotoSnap",
    "型号": "FS-ML100",
    "保修期": "1 year",
    "评分": 4.6,
    "特色": [
        "20.1MP sensor",
        "4K video",
        "3-inch touchscreen",
        "Interchangeable lenses"
    ],
    "描述": "一款具有先进功能的小巧轻便的无反相机。",
    "价格": 799.99
}
{
    "名称": "FotoSnap Instant Camera",
    "类别": "相机和摄像机",
    "品牌": "FotoSnap",
    "型号": "FS-IC10",
    "保修期": "1 year",
    "评分": 4.1,
    "特色": [
        "Instant prints",
        "Built-in flash",
        "Selfie mirror",
        "Battery-powered"
    ],
    "描述": "使用这款有趣且便携的即时相机,创造瞬间回忆。",
    "价格": 69.99
}
{
    "名称": "CineView 4K TV",
    "类别": "电视和家庭影院系统",
    "品牌": "CineView",
    "型号": "CV-4K55",
    "保修期": "2 years",
    "评分": 4.8,
    "特色": [
        "55-inch display",
        "4K resolution",
        "HDR",
        "Smart TV"
    ],
    "描述": "一款色彩鲜艳、智能功能丰富的惊艳4K电视。",
    "价格": 599.99
}
{
    "名称": "CineView 8K TV",
    "类别": "电视和家庭影院系统",
    "品牌": "CineView",
    "型号": "CV-8K65",
    "保修期": "2 years",
    "评分": 4.9,
    "特色": [
        "65-inch display",
        "8K resolution",
        "HDR",
        "Smart TV"
    ],
    "描述": "通过这款惊艳的8K电视,体验未来。",
    "价格": 2999.99
}
{
    "名称": "CineView OLED TV",
    "类别": "电视和家庭影院系统",
    "品牌": "CineView",
    "型号": "CV-OLED55",
    "保修期": "2 years",
    "评分": 4.7,
    "特色": [
        "55-inch display",
        "4K resolution",
        "HDR",
        "Smart TV"
    ],
    "描述": "通过这款OLED电视,体验真正的五彩斑斓。",
    "价格": 1499.99
}
{
    "名称": "SoundMax Home Theater",
    "类别": "电视和家庭影院系统",
    "品牌": "SoundMax",
    "型号": "SM-HT100",
    "保修期": "1 year",
    "评分": 4.4,
    "特色": [
        "5.1 channel",
        "1000W output",
        "Wireless subwoofer",
        "Bluetooth"
    ],
    "描述": "一款强大的家庭影院系统,提供沉浸式音频体验。",
    "价格": 399.99
}
{
    "名称": "SoundMax Soundbar",
    "类别": "电视和家庭影院系统",
    "品牌": "SoundMax",
    "型号": "SM-SB50",
    "保修期": "1 year",
    "评分": 4.3,
    "特色": [
        "2.1 channel",
        "300W output",
        "Wireless subwoofer",
        "Bluetooth"
    ],
    "描述": "使用这款时尚而功能强大的声音,升级您电视的音频体验。",
    "价格": 199.99
}Copy to clipboardErrorCopied

3.3 生成用户查询的答案

system_message = f"""
您是一家大型电子商店的客服助理。
请以友好和乐于助人的口吻回答问题,并尽量简洁明了。
请确保向用户提出相关的后续问题。
"""

user_message_1 = f"""
请告诉我关于 smartx pro phone 和 the fotosnap camera 的信息。
另外,请告诉我关于你们的tvs的情况。
"""

messages =  [{'role':'system','content': system_message},
             {'role':'user','content': user_message_1},  
             {'role':'assistant',
              'content': f"""相关产品信息:\n\
              {product_information_for_user_message_1}"""}]

final_response = get_completion_from_messages(messages)
print(final_response)Copy to clipboardErrorCopied
关于SmartX ProPhone和FotoSnap相机的信息如下:

SmartX ProPhone是一款由SmartX品牌推出的智能手机。它拥有6.1英寸的显示屏,128GB的存储空间,12MP的双摄像头和5G网络支持。这款手机的特点是先进的摄像功能。它的价格是899.99美元。

FotoSnap相机有多个型号可供选择。其中包括DSLR相机、无反相机和即时相机。DSLR相机具有24.2MP的传感器、1080p视频拍摄、3英寸的LCD屏幕和可更换镜头。无反相机具有20.1MP的传感器、4K视频拍摄、3英寸的触摸屏和可更换镜头。即时相机具有即时打印功能、内置闪光灯、自拍镜和电池供电。这些相机的价格分别为599.99美元、799.99美元和69.99美元。

关于我们的电视产品,我们有CineView和SoundMax品牌的电视和家庭影院系统可供选择。CineView电视有不同的型号,包括4K分辨率和8K分辨率的电视,以及OLED电视。这些电视都具有HDR和智能电视功能。价格从599.99美元到2999.99美元不等。SoundMax品牌提供家庭影院系统和声音棒。家庭影院系统具有5.1声道、1000W输出、无线低音炮和蓝牙功能,价格为399.99美元。声音棒具有2.1声道、300W输出、无线低音炮和蓝牙功能,价格为199.99美元。

请问您对以上产品中的哪个感Copy to clipboardErrorCopied

在这个例子中,我们只添加了一个特定函数或函数的调用,以通过产品名称获取产品描述或通过类别名称获取类别产品。但是,模型实际上擅长决定何时使用各种不同的工具,并可以正确地使用它们。这就是 ChatGPT 插件背后的思想。我们告诉模型它可以访问哪些工具以及它们的作用,它会在需要从特定来源获取信息或想要采取其他适当的操作时选择使用它们。在这个例子中,我们只能通过精确的产品和类别名称匹配查找信息,但还有更高级的信息检索技术。检索信息的最有效方法之一是使用自然语言处理技术,例如命名实体识别和关系提取。
另一方法是使用文本嵌入(Embedding)来获取信息。嵌入可以用于实现对大型语料库的高效知识检索,以查找与给定查询相关的信息。使用文本嵌入的一个关键优势是它们可以实现模糊或语义搜索,这使您能够在不使用精确关键字的情况下找到相关信息。因此,在此例子中,我们不一定需要产品的确切名称,而可以使用更一般的查询如 “手机” 进行搜索。

四、总结

在设计提示链时,我们并不需要也不建议将所有可能相关信息一次性全加载到模型中,而是采取动态、按需提供信息的策略,原因如下:

  1. 过多无关信息会使模型处理上下文时更加困惑。尤其是低级模型,处理大量数据会表现衰减。
  2. 模型本身对上下文长度有限制,无法一次加载过多信息。
  3. 包含过多信息容易导致模型过拟合,处理新查询时效果较差。
  4. 动态加载信息可以降低计算成本。
  5. 允许模型主动决定何时需要更多信息,可以增强其推理能力。
  6. 我们可以使用更智能的检索机制,而不仅是精确匹配,例如文本 Embedding 实现语义搜索。

因此,合理设计提示链的信息提供策略,既考虑模型的能力限制,也兼顾提升其主动学习能力,是提示工程中需要着重考虑的点。希望这些经验可以帮助大家设计出运行高效且智能的提示链系统。
在下一章中我们将讨论如何评估语言模型的输出。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA类和方法注释模板设置

一、概述 IDEA自带的注释模板不是太好用&#xff0c;我本人到网上搜集了很多资料系统的整理了一下制作了一份比较完整的模板来分享给大家&#xff0c;我不是专业玩博客的&#xff0c;写这篇文章只是为了让大家省事。 这里设置的注释模板采用Eclipse的格式&#xff0c;下面先贴…

十五 超级数据查看器 讲解稿 外观设置

十五 超级数据查看器 讲解稿 外观设置 视频讲座地址 讲解稿全文: 大家好&#xff0c;今天讲解超级数据查看器,详情界面的外观设置。 首先&#xff0c;我们打开超级数据查看器。 本节课以成语词典为例来做讲述。 我们打开成语词典这个表&#xff0c;随便选一条记录点击&#x…

导轨安装模拟量直流信号隔离转换放大器0-±5V/0-±10V/0-10V/0-20mA/4-20mA/0-±10mA/0-±20mA

概述&#xff1a; 导轨安装DIN11 IPO EM系列模拟信号隔离放大器是一种将输入信号隔离放大、转换成按比例输出的直流信号混合集成电路。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等需要电量隔离测控的行业。该模块内部嵌入了一个高效微功率的电源&#xff0…

kettle下载及安装

JDK下载 安装kettle之前需要安装JDK JDK下载链接&#xff1a;JDK下载 配置环境变量&#xff1a; 新建系统变量&#xff1a;变量值为JDK安装路径 Path新增&#xff1a; kettle下载 链接地址&#xff1a;PDI&#xff08;kettle&#xff09; 点击下载 同意 Click here to a…

python和nodejs一键安装当前项目所有依赖

python和nodejs一键安装当前项目所有依赖。群里有人问怎么快速安装网上下载的源码里面的依赖。所以在这里分享一下。更多问题可以自己加群917400262问我。 目录导航 1.0 python一键安装当前项目所有依赖2.0 nodejs一键安装当前项目所有依赖 1.0 python一键安装当前项目所有依赖…

Java数据结构-----ArrayList与顺序表

目录 一、线性表 二、顺序表 接口的实现 三、ArrayList简介 四、 ArrayList使用 1. ArrayList的构造 2.ArrayList常见操作 3. ArrayList的遍历 4.ArrayList的扩容机制 五、ArrayList的具体使用 简单的洗牌算法 一、线性表 线性表&#xff08;linear l…

WordPress上传图片错误:不是合法的JSON响应

最近在进行WordPress迁移至新服务器的过程中&#xff0c;遭遇到一个棘手的问题&#xff0c;即在编辑文章并上传图片时&#xff0c;不断遭遇“此响应不是合法的JSON响应”的错误。经过多次验证和搜索&#xff0c;最终确定问题的根本原因并不在于禁用 Gutenberg 编辑器或安装经典…

ensp路由启动失败41错误及ensp安装【附安装包】(亲测!!!)

我用夸克网盘分享了 「eNSP安装教程&#xff08;非常详细&#xff09;从零基础入门到精通&#xff0c;看完这一篇就够了【附安装包】_ensp下载安装教程-CSDN博客.pdf」&#xff0c;点击链接即可保存。打开「夸克APP」在线查看&#xff0c;支持多种文档格式转换。 链接&#xf…

神经网络结构——CNN、RNN、LSTM、Transformer !!

文章目录 前言 一、什么是CNN 网络结构 解决问题 工作原理 实际应用 二、什么是RNN 网络结构 解决问题 工作原理 应用场景 三、什么是LSTM 网络结构 解决问题 工作原理 应用场景 四、什么是Transformer 网络结构 解决问题 工作原理 BERT GPT 前言 本文将从什么是CNN&#xff1…

现货黄金交易商运作模式大解密

也许现货黄金投资者都知道自己需要通过交易平台才能进入市场买卖&#xff0c;但很多人却并不知道交易平台如何处理自己的交易订单。其实交易商主要分为四种类型&#xff1a;交易员平台、无交易员平台、直接处理式平台以及电子通信网络平台&#xff0c;本文将为大家介绍一下它们…

WP外贸营销型网站模板

WordPress外贸独立站主题 简洁实用的WordPress外贸独立站主题&#xff0c;适合时尚服装行业搭建wordpress企业官网使用。 零件配件WordPress外贸建站模板 汽车行业零配件WordPress外贸建站模板&#xff0c;卖配件、零件的外贸公司可以使用的WordPress主题。 https://www.jia…

李沐动手学习深度学习——3.5练习

减少batch_size&#xff08;如减少到1&#xff09;是否会影响读取性能&#xff1f; 肯定会影响&#xff0c;计算机io性能而言&#xff0c;随着batch_size增大&#xff0c;读取越来越快&#xff0c;需要的时间越少。这里会涉及到计算机操作系统的知识点&#xff0c;内存与硬盘之…

获取 Windows 通知中心弹窗通知内容(含工具汉化)

目录 前言 技术原理概述 测试代码和程序下载连接 本文出处链接&#xff1a;https://blog.csdn.net/qq_59075481/article/details/136440280。 前言 从 Windows 8.1 开始&#xff0c;Windows 通知现在以 Toast 而非 Balloon 形式显示&#xff08; Bollon 通知其实现在是应用…

ARM总结and复习

安装交叉编译工具链 a. 为什么安装 因为arm公司的指令集在不断迭代升级&#xff0c;指令集日益增多,而架构是基于指令集研发的&#xff0c;所以架构不一样&#xff0c;指令集也不一样 eg:arm架构使用的是arm指令集 x86架构使用的是x86指令集 而我们日常开发环境中linux的架构…

QueryDet代码解析

配置文件 # 表示该配置文件是基于另一个配置文件BaseRetina.yaml进行扩展和覆盖的 _BASE_: "../BaseRetina.yaml" # 指定输出目录&#xff0c;训练过程中的日志、模型权重和评估结果将保存在该目录下。 OUTPUT_DIR: "work_dirs/visdrone_querydet" # 指定…

前端面试 跨域理解

2 实现 2-1 JSONP 实现 2-2 nginx 配置 2-2 vue 开发中 webpack自带跨域 2 -3 下载CORS 插件 或 chrome浏览器配置跨域 2-4 通过iframe 如&#xff1a;aaa.com 中读取bbb.com的localStorage 1)在aaa.com的页面中&#xff0c;在页面中嵌入一个src为bbb.com的iframe&#x…

Mybatis批量更新对象数据的两种方法

说明&#xff1a;遇到一次需要批量修改对象的场景。传递一个对象集合&#xff0c;需要根据对象ID批量修改数据库数据&#xff0c;使用的是MyBatis框架。查了一些资料&#xff0c;总结出两种实现方式。 创建Demo 首先&#xff0c;创建一个简单的Demo&#xff1b; &#xff08…

SOCKS55代理 VS Http代理,如何选择?

在使用IPFoxy全球代理时&#xff0c;选择 SOCKS55代理还是HTTP代理&#xff1f;IPFoxy代理可以SOCKS55、Http协议自主切换&#xff0c;但要怎么选择&#xff1f;为解决这个问题&#xff0c;得充分了解两种代理的工作原理和配置情况。 在这篇文章中&#xff0c;我们会简要介绍 …

java自动化之自动化框架项目(第五天-解析并执行初始化sql)

1.实现目标 先将常用变量占位符替换为实际值&#xff0c;然后解析并执行初始化sql&#xff0c;保证用例中的数据可用&#xff0c;这样不用每次执行测试前修改测试数据。 2.添加pom依赖 连接操作数据库&#xff08;pom.xml文件中添加&#xff09; <!-- https://mvnreposi…

深度学习PyTorch 之 RNN-中文多分类【代码解析】

上篇文章给出了RNN-中文多分类的代码实现&#xff0c;本次主要是对RNN的架构进行一个详细的解析 1、主代码 class RNN(nn.Module):def __init__(self, vocab_size, embedding_dim, hidden_dim, output_dim, n_layers, bidirectional, dropout):super().__init__()# 初始化函数…