(done) 吴恩达版提示词工程 8. 聊天机器人 (聊天格式设计,上下文内容,点餐机器人)
视频:https://www.bilibili.com/video/BV1Z14y1Z7LJ/?spm_id_from=333.337.search-card.all.click&vd_source=7a1a0bc74158c6993c7355c5490fc600
别人的笔记:https://zhuanlan.zhihu.com/p/626966526
8. 聊天机器人(Chatbot)
关于大型语言模型的一个令人兴奋的事情是,你只需花费少量的精力,就可以使用它来构建自定义的聊天机器人。
ChatGPT 的 Web 界面,是一种使用大型语言模型进行聊天的对话界面。但一个很酷的事情是,你也可以使用大型语言模型来构建你的自定义聊天机器人,可以扮演一个 AI 客服代理或餐厅的 AI 订单员的角色。在这个视频中,你将学习如何来做聊天机器人。
我将更详细地描述 OpenAI 的聊天完成(Chat Completions)格式,然后你将自己构建一个聊天机器人。
8.1 聊天格式的设计
让我们开始吧。首先,我们将像往常一样设置 OpenAI Python 包。
ChatGPT 这样的聊天模型,实际上被训练成将一系列消息作为输入,并返回模型生成的消息作为输出。因此,尽管聊天格式的设计是为了使这样的多轮对话变得容易而设计的,但我们在之前的视频中已经看到,它对于没有对话的单回合任务也同样有效。
接下来,我们将定义两个辅助函数。
import openai
import os
from openai import OpenAI# 1. 根据环境变量获取 openai key
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())openai.api_key = os.getenv('OPENAI_API_KEY') client = OpenAI()def get_completion(prompt, model="gpt-3.5-turbo", temperature=0):messages = [{"role": "user", "content": prompt}]response = client.chat.completions.create(model=model,messages=messages,temperature=temperature, # this is the degree of randomness of the model's output)return response.choices[0].message.contentdef get_completion_from_messages(messages, model="gpt-3.5-turbo", temperature=0):response = client.chat.completions.create(model=model,messages=messages,temperature=temperature, # this is the degree of randomness of the model's output)return response.choices[0].message.content
一个就是我们在视频中一直使用的 get_completion 函数。但看一下,我们给出了一个提示,在这个函数内部,我们实际是将这个提示放入看起来像某种用户消息的内容中。这是因为 ChatGPT 模型是一个聊天模型,这意味着它被训练成接受一系列消息作为输入,然后返回模型生成的消息作为输出。所以用户消息是一种输入,然后助理(模型)的消息是输出。
在这个视频中,我们将使用一个不同的辅助函数,而不是将单个的提示作为输入,并获得单个的输出结果。我们将传递一个消息列表,这些消息可以来自各种不同的角色。
下面我来描述一下。这里有一个消息列表的例子。第一条消息是系统消息,它给出了一个总体指令,然后在这条消息之后,我们在用户和助理之间有几轮对话,这种对话通常会继续下去。
messages = [
{'role':'system', 'content':'You are an assistant that speaks like Shakespeare.'},
{'role':'user', 'content':'tell me a joke'},
{'role':'assistant', 'content':'Why did the chicken cross the road'},
{'role':'user', 'content':'I don\'t know'} ]
如果你曾经使用过 ChatGPT 的 Web 界面,那么你输入的内容就是用户消息,然后 ChatGPT 输出的内容就是助理消息。
系统消息有助于在某种程度上设置助理的行为和角色,它充当了对话的高级指令。因此,你可以将其视为在助理耳边窃窃私语,并引导它的响应,而用户并不知道系统的消息。所以,作为用户,如果你曾经使用过 ChatGPT,你可能不知道 ChatGPT 的系统消息中有什么,这正是我们的意图。
系统消息的好处是,它为开发人员提供了一种构建对话框架的方法,而无需将请求本身作为对话的一部分。因此,你可以悄悄地引导助理,指导模型的回复,而不让用户意识到。
现在让我们试着在对话中使用这些消息。我们将使用新的辅助函数,从消息中获取完成情况。我们将使用更高的温度值。
response = get_completion_from_messages(messages, temperature=1)
print(response)
系统消息说,你是一个说话像莎士比亚的助理,这是我们向助手描述它应该如何表现。然后第一条用户消息是,给我讲个笑话。然后下一个问题是,鸡为什么过马路?最后的用户信息是,我不知道。
如果我们运行这个程序,系统的响应是:“去另一边”。
to get to the other side!
我们再来一次。这次的输出是:“去另一边,公平的先生/夫人,这是一个古老而经典的方法,永远不会失败。” 这就是我们莎士比亚式的回应。
To get to the other side, fair sir/madam! 'Tis an olden classic that never fails.
让我们再试一次。我想让它更清楚,让我们打印整个消息响应。
{ “content”: “To get to the other side! Oh, that one always gets me.”, “role”: “assistant” } To get to the other side! Oh, that one always gets me.
为了更清楚,这个响应是一个助理消息,角色是助理,内容是消息本身。这就是这个辅助函数中发生的事情。我们只是传递了消息的内容。
8.2 上下文内容
现在,让我们再举一个例子。
这里我们的消息是,系统消息是“你是一个友好的聊天机器人“,第一条用户消息是,“嗨,我的名字是 Isa”。我们想获得第一条用户信息,所以,让我们执行第一条助理消息。
messages = [
{'role':'system', 'content':'You are friendly chatbot.'},
{'role':'user', 'content':'Hi, my name is Isa'} ]
response = get_completion_from_messages(messages, temperature=1)
print(response)
第一条消息是,“”你好 Isa,很高兴认识你。今天我可以帮助的吗?“
{ “content”: “Hello Isa! It is nice to meet you. How can I assist you today?”, “role”: “assistant” } Hello Isa! It is nice to meet you. How can I assist you today?
让我们再试试另一个例子。
这里我们的消息是,系统消息是,“你是一个友好的聊天机器人”,第一条用户消息是,“是的,你能提醒我的名字是什么吗?”。
messages = [
{'role':'system', 'content':'You are friendly chatbot.'},
{'role':'user', 'content':'Yes, can you remind me, What is my name?'} ]
response = get_completion_from_messages(messages, temperature=1)
print(response)
让我们得到输出响应。
I’m sorry, but as an AI language model, I do not have access to information about your personal details like your name or any other kind of personal information. However, I am here to assist you with any general queries or have a friendly conversation.
正如你所看到的,模型实际上并不知道我的名字。因此,与语言模型的每次对话都是一次独立的交互,这意味着你必须提供所有相关的信息,以便模型在当前对话中使用。
如果你想让模型从前期的对话中引用内容,或者记住前期的对话内容,你就必须在模型的输入中提供前期的交流内容。我们将把这称为上下文。让我们试试这个。
messages = [
{'role':'system', 'content':'You are friendly chatbot.'},
{'role':'user', 'content':'Hi, my name is Isa'},
{'role':'assistant', 'content': "Hi Isa! It's nice to meet you. \
Is there anything I can help you with today?"},
{'role':'user', 'content':'Yes, you can remind me, What is my name?'} ]
response = get_completion_from_messages(messages, temperature=1)
print(response)
现在我们已经给出了模型需要的上下文。嗯,这是我在之前的消息中的名字,我们会问同样的问题,会问“我的名字是什么”。
Your name is Isa.
模型能够作出响应,因为它在我们输入的消息列表中,拥有所有上下文内容。
所以现在你要建立自己的聊天机器人了。
8.3 点餐机器人(OrderBot)
这个聊天机器人被称为 OrderBot(点餐机器人)。
为了构建这个 OrderBot,我们将自动收集用户的提示和助理的响应。它将在披萨店接受订单,所以首先我们将定义这个辅助函数。辅助函数将收集我们的用户信息,这样我们就不需要像上面那样手工输入信息。这将从下面建立的用户界面中收集提示,然后将其追加到一个称为“上下文(context)”的列表中,然后它每次都会调用这个带有上下文的模型。然后模型响应也会被添加到上下文中,所以模型消息的被添加到上下文中,用户消息也被添加到上下文中,以此类推,所以它越来越长。通过这种方式,模型就获得了它所需要的信息来决定下一步要做什么。
import panel as pn # GUIdef collect_messages(_):prompt = inp.value_inputinp.value = ''context.append({'role':'user', 'content':f"{prompt}"})response = get_completion_from_messages(context) context.append({'role':'assistant', 'content':f"{response}"})panels.append(pn.Row('User:', pn.pane.Markdown(prompt, width=600)))panels.append(pn.Row('Assistant:', pn.pane.Markdown(response, width=600, styles={'background-color': '#F6F6F6'})))return pn.Column(*panels)
现在我们将设置并运行这个用户界面(UI)来显示订单机器人。这里是上下文,它包含了包括菜单的系统消息。请注意,每次我们调用语言模型时,我们都会使用相同的上下文,并且这个上下文会随着时间的推移而不断构建。
pn.extension()panels = [] # collect display context = [ {'role':'system', 'content':"""
You are OrderBot, an automated service to collect orders for a pizza restaurant. \
You first greet the customer, then collects the order, \
and then asks if it's a pickup or delivery. \
You wait to collect the entire order, then summarize it and check for a final \
time if the customer wants to add anything else. \
If it's a delivery, you ask for an address. \
Finally you collect the payment.\
Make sure to clarify all options, extras and sizes to uniquely \
identify the item from the menu.\
You respond in a short, very conversational friendly style. \
The menu includes \
pepperoni pizza 12.95, 10.00, 7.00 \
cheese pizza 10.95, 9.25, 6.50 \
eggplant pizza 11.95, 9.75, 6.75 \
fries 4.50, 3.50 \
greek salad 7.25 \
Toppings: \
extra cheese 2.00, \
mushrooms 1.50 \
sausage 3.00 \
canadian bacon 3.50 \
AI sauce 1.50 \
peppers 1.00 \
Drinks: \
coke 3.00, 2.00, 1.00 \
sprite 3.00, 2.00, 1.00 \
bottled water 5.00 \
"""} ] # accumulate messagesinp = pn.widgets.TextInput(value="Hi", placeholder='Enter text here…')
button_conversation = pn.widgets.Button(name="Chat!")interactive_conversation = pn.bind(collect_messages, button_conversation)dashboard = pn.Column(inp,pn.Row(button_conversation),pn.panel(interactive_conversation, loading_indicator=True, height=300),
)dashboard
上面的代码用 WSL-vscode-jupyter 是无法运行的,需要在 windows 安装 anaconda 配置 jupyter notebook 才行。具体参考这两篇博客:【windows anaconda 配置 ipynb 环境】 和 【windows anaconda jupyter notebook 怎么才能开飞机?】
大概的样子如下:通过 UI 和点餐机器人交互:
我说:嗨,我想点一份披萨。
助理说:太好了,你想点什么披萨?我们有意大利香肠、奶酪和茄子披萨。
我说:它们多少钱?
助理:(各种比萨的价格)
太好了,助理告诉了我们比萨的价格。我想我觉得可以点中号的茄子披萨。所以,正如你所能想象的,我们可以继续这个对话。
让我们看看我们在系统消息中放了什么。
你是订单机器人,为一家披萨店收集订单的自动化服务,你首先要问候顾客,然后接受订单,然后问是自取还是配送。你等待收集整个订单,然后进行汇总,最后检查客户是否还想添加其他东西。如果是配送,你可以询问配送地址。最后,你收到付款,确保清晰地描述所有选项、附加服务、额外费用和尺寸,以便从菜单中精确地识别项目。你以简短的、健谈的、友好的风格来回答客户。系统信息还包括菜单,这里我们有全部的菜单。
让我们回到我们的对话中,看看助理是否一直在遵循指示。
很好,助理问我们是否需要配料,我们在系统信息中指定了这一点。我回答我们不需要额外的配料。
当然可以。还有什么想要点的吗?嗯,我来点水。事实上,我输入的是薯条。
小份还是大份?很好,因为我们在系统消息中要求助理说明额外配料。
这样你就明白了,你可以随意自己玩这个过程。你可以暂停视频,在左边的 Notebook 上运行这个点餐机器人。
现在我们可以要求模型创建一个 JSON 摘要,可以在对话的基础上生成订单,将其发送到订单系统。所以我们现在要加上另一条系统消息,这是一条指令,要求创建一个关于以上对话中食物订单的 JSON 摘要,逐项列出每种食物的价格,字段应该是一个披萨,包括配菜,两张配料列表,三张饮料列表,四个面列表,最后是总价格。你也可以在这里使用用户消息,这不一定是系统消息。
messages = context.copy()
messages.append(
{'role':'system', 'content':'create a json summary of the previous food order. Itemize the price for each item\The fields should be 1) pizza, include size 2) list of toppings 3) list of drinks, include size 4) list of sides include size 5)total price '},
)#The fields should be 1) pizza, price 2) list of toppings 3) list of drinks, include size include price 4) list of sides include size include price, 5)total price '}, response = get_completion_from_messages(messages, temperature=0)
print(response)
让我们来执行一下。
注意,在这种情况下,我们使用较低的温度参数。因为对于这些类型的任务,我们希望输出是相当可预测的。对于一个对话式助理,你可能希望使用更高的温度值。但对这种点餐机器人,我会使用较低的温度值,因为对于客户助理聊天机器人来说,我们希望输出是更加可预测的。
于是,这里我们得到订单的摘要。如果需要,我们可以将其提交给订单系统。这就是我们所需要的。
Sure, here’s a JSON summary of the order:
{"pizza": [{"type": "pepperoni","size": "large","price": 12.95},{"type": "cheese","size": "medium","price": 9.25}],"toppings": [{"type": "extra cheese","price": 2.00},{"type": "mushrooms","price": 1.50}],"drinks": [{"type": "coke","size": "large","price": 3.00},{"type": "sprite","size": "small","price": 2.00}],"sides": [{"type": "fries","size": "large","price": 4.50}],"total_price": 35.20
}
好的,现在你已经建立了自己的点餐聊天机器人。
你可以自行地定制,可以使用系统消息来改变聊天机器人的行为,让它扮演具有不同知识的不同角色。
相关文章:
(done) 吴恩达版提示词工程 8. 聊天机器人 (聊天格式设计,上下文内容,点餐机器人)
视频:https://www.bilibili.com/video/BV1Z14y1Z7LJ/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 别人的笔记:https://zhuanlan.zhihu.com/p/626966526 8. 聊天机器人(Chatbot) …...
Maven概述
1.maven是什么? Maven 是一个基于项目对象模型(Project Object Model,POM)概念的项目构建工具,主要用于 Java 项目的构建、依赖管理和项目信息管理。(跨平台的项目管理工具,用于构建和管理任何…...
SKLearn - Biclustering
文章目录 Biclustering (双聚类)谱二分聚类算法演示生成样本数据拟合 SpectralBiclustering绘制结果 Spectral Co-Clustering 算法演示使用光谱协同聚类算法进行文档的二分聚类 Biclustering (双聚类) 关于双聚类技术的示例。 谱…...
使用c++实现一个简易的量子计算,并向外提供服务
实现一个简易的量子计算模拟器并提供服务是一个相对复杂的过程,涉及到量子计算的基本概念、C编程以及网络服务的搭建。以下是一个简化的步骤指南,帮助你开始这个项目: 步骤 1: 理解量子计算基础 在开始编码之前,你需要对量子计算…...
京东攻防岗位春招面试题
围绕电商场景,以下是5道具有代表性的技术面试题及其解析,覆盖供应链、电商大促、红蓝对抗等场景。 《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?…...
Kafka批量消费部分处理成功时的手动提交方案
Kafka批量消费部分处理成功时的手动提交方案 当使用Kafka批量消费时,如果500条消息中只有部分处理成功,需要谨慎处理偏移量提交以避免消息丢失或重复消费。以下是几种处理方案示例: 方案1:记录成功消息并提交最后成功偏移量 Co…...
消息中间件
零、文章目录 消息中间件 1、中间件 (1)概述 中间件(Middleware)是位于操作系统、网络与数据库之上,应用软件之下的一层独立软件或服务程序,其核心作用是连接不同系统、屏蔽底层差异,并为应…...
vue3直接操作微信小程序云开发数据库,web网页对云数据库进行增删改查
我们开发好小程序以后,有时候需要编写一个管理后台网页对数据库进行管理,之前我们只能借助云开发自带的cms网页,但是cms网页设计的比较丑,工作量和代码量也不够,所以我们今天就来带大家实现用vue3编写管理后台直接管理…...
重塑编程体验边界:明基RD280U显示器深度体验
重塑编程体验边界:明基RD280U显示器深度体验 写在前面 本文将以明基RD280U为核心,通过技术解析、实战体验与创新案例,揭示专业显示器如何重构开发者的数字工作台。 前言:当像素成为生产力的催化剂 在GitHub的年度开发者调查中&…...
Linux命令-iostat
iostat 命令介绍 iostat 是一个用于监控 Linux 系统输入/输出设备加载情况的工具。它可以显示 CPU 的使用情况以及设备和分区的输入/输出统计信息,对于诊断系统性能瓶颈(如磁盘或网络活动缓慢)特别有用。 语法: iostat [options…...
Hyper-V安装Win10系统,报错“No operating system was loaded“
环境: Win10专业版 Hyper-V 问题描述: Hyper-V安装Win10系统,报错"No operating system was loaded" 已挂载ISO但仍无法启动的深度解决方案 🔧如果已确认ISO正确挂载且启动顺序已调整,但虚拟机仍提…...
Zabbix
zabbix官网: https://www.zabbix.com zabbix中文操作手册:https://www.zabbix.com/documentation/5.0/zh/manual/introduction/features 1、SERVER Zabbix server 是 Zabbix 软件的核心组件。Zabbix Agent 向Zabbix server报告可用性、系统完整性信息和统计信息。…...
NEPCON China 2025 | 具身智能时代来临,灵途科技助力人形机器人“感知升级”
4月22日至24日,生产设备暨微电子工业展(NEPCON China 2025)在上海如期开展。本届展会重磅推出“人形机器人拆解展区”,汇聚35家具身智能产业链领军企业,围绕机械结构、传感器布局、驱动系统与AI算法的落地应用…...
css响应式布局设置子元素高度和宽度一样
css响应式布局设置子元素高度和宽度一样 常常遇到响应式布局 其中父元素(类名为.list)包含多个子元素(类名为.item),每个子元素中显示一张图片,并且这些图片能够根据子元素的宽度和高度进行自适应调整。 …...
【AI论文】RefVNLI:迈向可扩展的主题驱动文本到图像生成评估
摘要:主题驱动的文本到图像(T2I)生成旨在生成与给定文本描述一致的图像,同时保留参考主题图像的视觉特征。 尽管该领域具有广泛的下游适用性——从增强图像生成的个性化到视频渲染中一致的角色表示——但该领域的进展受到缺乏可靠…...
信创系统 sudoers 权限配置实战!从小白到高手
好文链接:实战!银河麒麟 KYSEC 安全中心执行控制高级配置指南 Hello,大家好啊!今天给大家带来一篇关于信创终端操作系统中 sudoers 文件详解的实用文章!在 Linux 系统中,sudo 是一项非常重要的权限控制机制…...
用户行为检测技术解析:从请求头到流量模式的对抗与防御
用户行为检测是反爬机制的核心环节,网站通过分析请求特征、交互轨迹和时间模式,识别异常流量并阻断爬虫。本文从基础特征检测与高级策略分析两个维度,深入解析用户行为检测的技术原理与对抗方案。 一、基础特征检测:请求头与交互…...
关于Android Studio的AndroidManifest.xml的详解
AndroidManifest.xml 是 Android 项目的核心配置文件,它定义了应用的基本信息、所需权限、组件、功能等。它为 Android 系统提供了关于应用如何运行的重要信息。每个 Android 应用程序必须包含这个文件,而且这个文件的配置直接影响到应用的行为和安装要求…...
全栈自动化:从零构建智能CI/CD流水线
1. 基础架构:GitLab Kubernetes 1.1 GitLab CI/CD核心配置 GitLab通过.gitlab-ci.yml定义流水线阶段。以下是一个基础模板: stages:- build- test- deploybuild_job:stage: buildscript:- echo "Compiling the code..."- make…...
xe-upload上传文件插件
1.xe-upload地址:文件选择、文件上传组件(图片,视频,文件等) - DCloud 插件市场 2.由于开发app要用到上传文件组件,uni.chooseFile在app上不兼容,所以找到了xe-upload,兼容性很强&a…...
PySpark中DataFrame应用升阶及UDF使用
目录 1. 加载数据2. 列常见操作2.1 添加新列2.2 重命名列2.3 删除指定列2.4 修改数据 3 空值处理3.1 丢弃空值3.2 空值填充 4 聚合操作4.1 分组聚合 5 用户自定义函数(UDF)5.1 传统UDF函数5.2 Pandas UDF(向量化UDF) 参考资料 imp…...
C++ ——引用
引用定义 引用是一个已存在的变量的别名。 用法 类型 & 别名 引用指向的变量名 关于别名的理解: 别名可以理解为绰号或者小名,比如美猴王、齐天大圣、斗战胜佛等,指的都是孙悟空。 这意味着: ①别名和别名指向的变量其实是同…...
OpenCV 图形API(65)图像结构分析和形状描述符------拟合二维点集的直线函数 fitLine2D()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 拟合一条直线到2D点集。 该函数通过最小化 ∑ i ρ ( r i ) \sum_i \rho(r_i) ∑iρ(ri)来将一条直线拟合到2D点集,其中 ri 是第…...
k8s生成StarRocks集群模版
集群由1个fe3个be组成,满足以下要求: 1、由3个pod组成,每pod分配2c4g 2、第一个pod里有一个be与一个fe,同在一个容器里,fe配置jvm内存设置为1024mb,be的jvm内存设置为1024MB 3、第二第三个pod里分别有一…...
web基础+HTTP+HTML+apache
目录 一.web基础 1.1web是什么 1.2HTTP 1.2.1HTTP的定义 1.2.2 HTTP请求过程 1.2.3 HTTP报文 1 请求报文 2 响应报文 1.2.4 HTTP协议状态码 1.2.5 HTTP方法 1.2.6 HTTP协议版本 二.HTML CSS和JavaScript 2.1HTML 2.1.1HTML的概述 2.1.2 HTML中的部分基本标签&…...
C++修炼:list模拟实现
Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路! 我的博客:<但凡. 我的专栏:《编程之路》、《数据结构与算法之美》、《题海拾贝》、《C修炼之路》 欢迎点赞,关注&am…...
Lua 第12部分 日期和时间
Lua 语言的标准库提供了两个用于操作日期和时间的函数,这两个函数在 C 语言标准库中也存在,提供的是同样的功能。 虽然这两个函数看上去很简单,但依旧可以基于这些简单的功能完成很多复杂的工作。 Lua 语言针对日期和时间使用两种表示方式。 …...
NL2SQL调研
一 背景 1.1 引言 随着数据时代的到来,数据库已成为企业和组织存储、管理和分析数据的核心基础设施。然而,传统的数据库查询需要使用结构化查询语言(SQL),这要求用户具备特定的技术知识,限制了数据库的广…...
服务器ubuntu镜像磁盘空间怎么管理
在 Ubuntu 服务器上,管理镜像磁盘空间是系统维护中的一项关键任务,尤其是在使用虚拟化技术时(如 Docker、LVM、KVM 等)。合理管理磁盘空间可以有效防止磁盘空间不足,提升系统的稳定性和性能。本文将为你介绍如何在 Ubuntu 系统中有效管理镜像…...
uniapp+vue3表格样式
<view class"tableMain" v-if"state.use_scope2"><view class"tableBox"><view class"th"><view class"col">站点名称</view><view class"col">站点状态</view><vi…...
QT中的文件操作
C语言中通过fopen/fread/fwrite/fclose进行文件操作 C中通过fstream/>>/<</close进行文件操作 Linux中通过open/read/write/clos进行文件操作 Qt中同样可以使用上述文件操作 但是Qt同样封装了自己的一套文件操作,,在编写Qt程序时…...
Vue.js 核心特性解析:响应式原理与组合式API实践
引言 Vue.js 作为一款渐进式前端框架,凭借其简洁的API设计和灵活的组件化开发模式,已经成为现代Web开发的主流选择之一。本文将深入探讨Vue 3的核心特性,包括响应式系统原理、组合式API的使用以及实际开发中的最佳实践,帮助开发者…...
李沐动手深度学习(pycharm中运行笔记)——07.自动求导
07.自动求导(与课程对应) 1、导入torch import torch 2、假设我们想对函数 y 2x.Tx,就是 2乘x的内积,关于列向量x求导,也就是4x x torch.arange(4.0) # (1)创建一个列向量 x print("…...
Maven 使用教程
Maven 使用教程 Maven 是一个强大的项目管理和构建工具,主要用于 Java 项目的开发。它通过定义良好的生命周期、插件系统和依赖管理简化了项目的构建过程。本文将详细介绍如何使用 Maven 来进行日常的开发工作。 安装 Maven 下载 Maven 访问 Maven 的官方网站&a…...
ACM会议模板设置单排作者数量
在准备ACM会议的ready版本时涉及到作者设置,ACM会议模板的默认设置是每排三个作者,但是修改为四个一般是可以允许的,可能会节省一些空间。只需要在\documentclass[sigconf,authordraft]{acmart}后面添加代码\settopmatter{authorsperrow4}&am…...
云原生 | K8S中数据存储之StorageClass
在一个大规模的Kubernetes集群里,可能有成千上万个PVC,这就意味着运维人员必须实现创建出这个多个 PV,此外,随着项目的需要,会有新的PVC不断被提交,那么运维人员就需要不断的添加新的,满足要求的PV,否 则新的Pod就会因为PVC绑定不到PV而导致创建失败。而且通过 PVC 请求到一定的…...
衡量矩阵数值稳定性的关键指标:矩阵的条件数
文章目录 1. 定义2. 为什么要定义条件数?2.1 分析线性系统 A ( x Δ x ) b Δ b A(x \Delta x) b \Delta b A(xΔx)bΔb2.2 分析线性系统 ( A Δ A ) ( x Δ x ) b (A \Delta A)(x \Delta x) b (AΔA)(xΔx)b2.3 定义矩阵的条件数 3. 性质及几何意义3…...
蓝桥杯 1. 确定字符串是否包含唯一字符
确定字符串是否包含唯一字符 原题目链接 题目描述 实现一个算法来识别一个字符串的字符是否是唯一的(忽略字母大小写)。 若唯一,则输出 YES,否则输出 NO。 输入描述 输入一行字符串,长度不超过 100。 输出描述 输…...
【Vue】单元测试(Jest/Vue Test Utils)
个人主页:Guiat 归属专栏:Vue 文章目录 1. Vue 单元测试简介1.1 为什么需要单元测试1.2 测试工具介绍 2. 环境搭建2.1 安装依赖2.2 配置 Jest 3. 编写第一个测试3.1 组件示例3.2 编写测试用例3.3 运行测试 4. Vue Test Utils 核心 API4.1 挂载组件4.2 常…...
查回来的数据除了 id,其他字段都是 null
数据结构不完整:您收到的历史对话和知识库文件数据中,几乎所有重要的字段(除了id和title)都是null,包括userId、createdTime等关键字段。这会导致前端无法根据创建时间来正确分类显示(今天、7天内、更早&am…...
Flink02-学习-套接字分词
flatmap() AMapFunction仅适用于执行一对一转换的情况:对于每个进入的流元素,map()都会发出一个转换后的元素。否则,您需要使用 flatmap() DataStream<TaxiRide> rides env.addSource(new TaxiRideSource(...));DataStream<Enric…...
html5:从零构建经典游戏-扫雷游戏
扫雷是Windows系统自带的经典游戏,陪伴了许多人的童年。 本文将详细解析一个用HTML、CSS和JavaScript实现的扫雷游戏代码,带你了解其背后的实现原理。 游戏概述 这个扫雷游戏实现包含以下核心功能: 1010的游戏棋盘 15个随机分布的地雷 左…...
SVT-AV1源码分析-函数svt_aom_motion_estimation_kernel
一 svt_aom_motion_estimation_kernel函数作用 这段代码是EBSDK 中的一个运动估计 内核函数,用于处理视频编码中的运动估计任务。运动估计任务。运动估计是视频编码中的一个关键步骤,目的是在时间域上找到当前块在参考帧中的最佳匹配块,从而减…...
考研系列-计算机组成原理第六章、总线
一、总线概述 1.总线的基本概念 2.总线的分类 (1)按照传输格式 并行总线的传输速度并不一定比串行总线快,因为并行总线之间存在干扰,不能太快。 (2)按照总线功能 片内总线、系统总线、IO总线、通信总线...
HTML基础完全解析
一、HTML基本结构解析 1.1 文档骨架 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>文档标题</title> </head> <body>页面主体内容 </body> </html> dz…...
【读写视频】MATLAB详细代码
MATLAB将视频逐帧输出 在MATLAB中,可以使用VideoReader和imwrite函数将视频逐帧输出为图像文件。以下是具体步骤和示例代码: 读取视频并逐帧保存为图像 首先,使用VideoReader函数读取视频文件,然后使用read函数逐帧读取视频&am…...
NCCL 通信与调试
代码仓库 https://github.com/NVIDIA/nccl-tests 代码编译 编译 nccl-tests (MPI 版本): ” 编译支持 MPI 的 nccl-tests 是整合 nvcc, mpicc 和 NCCL 库的关键步骤 初始编译命令 (基于 README): cd /path/to/your/nccl-tests # 进入源码目录 make clean make MPI1 CUDA_HO…...
Linux 在个人家目录下添加环境变量 如FLINK_PROPERTIES=“jobmanager.rpc.address: jobmanager“
问题: Docker Flink Application Mode 命令行形式部署前,需要在Linux执行以下: $ FLINK_PROPERTIES"jobmanager.rpc.address: jobmanager" $ docker network create flink-network 临时变量只在当前session会话窗口生效…...
Linux中线程池的简单实现 -- 线程安全的日志模块,策略模式,线程池的封装设计,单例模式,饿汉式单例模式,懒汉式单例模式
目录 1. 对线程池的理解 1.1 基本概念 1.2 工作原理 1.3 线程池的优点 2. 日志与策略模式 2.1 日志认识 2.2 策略模式 2.2.1 策略模式的概念 2.2.2 工作原理 2.2 自定义日志系统的实现 3. 线程池设计 3.1 简单线程池的设计 3.2 线程安全的单例模式线程池的设计 3…...
【Web API系列】深入解析 Web Service Worker 中的 WindowClient 接口:原理、实践与进阶应用
前言 在现代 Web 开发领域中,Service Worker 技术已成为构建离线优先应用和实现高级缓存策略的核心支柱。作为 Service Worker API 体系中的重要组成部分,WindowClient 接口为开发者提供了对受控客户端窗口的精准控制能力。本文将从实际工程实践的角度出…...