体验智能体构建过程:从零开始构建Agent
1. 什么是智能体?
智能体(Agents)是一种能够感知环境、做出决策并采取行动来实现特定目标的自主实体。智能体的复杂程度各不相同,从简单的响应式智能体(对刺激直接做出反应)到更高级的智能体(能够学习和适应)都有。常见的智能体类型包括:
- 响应式智能体:直接对环境变化作出反应,没有内部记忆。
- 基于模型的智能体:使用内部世界模型来做决策。
- 基于目标的智能体:基于特定目标规划行动。
- 基于效用的智能体:通过效用函数评估潜在行动,以优化结果。
智能体的例子包括聊天机器人、推荐系统和自动驾驶汽车,它们各自使用不同类型的智能体来高效智能地执行任务。
我们智能体的核心组件有:
- 模型:智能体的大脑,负责处理输入并生成响应。
- 工具:智能体可以根据用户请求执行的预定义函数。
- 工具箱:智能体可用工具的集合。
- 系统提示:指导智能体如何处理用户输入并选择合适工具的指令集。
2. 实现
现在,让我们卷起袖子开始构建吧!
构建智能体
2.1 前提条件
在运行代码之前,确保你的系统满足以下前提条件:
1. Python环境设置
你需要安装Python来运行AI智能体。按照以下步骤设置环境:
安装Python(如果尚未安装)
- 从python.org下载并安装Python(推荐3.8+版本)
- 验证安装:
python --version
创建虚拟环境(推荐)
- 最好使用虚拟环境来管理依赖项:
python -m venv ai_agents_env source ai_agents_env/bin/activate # Windows上使用:ai_agents_env\Scripts\activate
安装所需依赖
- 导航到仓库目录并安装依赖:
pip install -r requirements.txt
2. 在本地设置Ollama
Ollama用于高效运行和管理本地语言模型。按照以下步骤安装和配置:
下载并安装Ollama
- 访问Ollama官方网站并下载适合你操作系统的安装程序
- 按照平台相应指导进行安装
验证Ollama安装
- 运行以下命令检查Ollama是否正确安装:
ollama --version
拉取模型(如需要)
- 某些智能体实现可能需要特定模型。你可以使用以下命令拉取模型:
ollama pull mistral # 将'mistral'替换为所需模型
我查了下有些模型是在ollama部署下不支持工具调用的。
2.2 实现步骤
步骤1:设置环境
除了Python,我们还需要安装一些基本库。对于本教程,我们将使用requests、json和termcolor。此外,我们将使用dotenv来管理环境变量。
pip install requests termcolor python-dotenv
步骤2:定义模型类
首先,我们需要一个处理用户输入的模型。我们将创建一个OllamaModel类,它与本地API交互以生成响应。
基本实现如下:
from termcolor import colored
import os
from dotenv import load_dotenv
load_dotenv()
### Models
import requests
import json
import operator
class OllamaModel:def __init__(self, model, system_prompt, temperature=0, stop=None):"""使用给定参数初始化OllamaModel。参数:model (str): 要使用的模型名称。system_prompt (str): 要使用的系统提示。temperature (float): 模型的温度设置。stop (str): 模型的停止令牌。"""self.model_endpoint = "http://localhost:11434/api/generate"self.temperature = temperatureself.model = modelself.system_prompt = system_promptself.headers = {"Content-Type": "application/json"}self.stop = stopdef generate_text(self, prompt):"""根据提供的提示从Ollama模型生成响应。参数:prompt (str): 要生成响应的用户查询。返回:dict: 模型响应的字典形式。"""payload = {"model": self.model,"format": "json","prompt": prompt,"system": self.system_prompt,"stream": False,"temperature": self.temperature,"stop": self.stop}try:request_response = requests.post(self.model_endpoint, headers=self.headers, data=json.dumps(payload))print("请求响应", request_response)request_response_json = request_response.json()response = request_response_json['response']response_dict = json.loads(response)print(f"\n\nOllama模型的响应: {response_dict}")return response_dictexcept requests.RequestException as e:response = {"error": f"调用模型时出错!{str(e)}"}return response
这个类以模型名称、系统提示、温度和停止令牌进行初始化。generate_text方法向模型API发送请求并返回响应。
步骤3:为智能体创建工具
下一步是创建我们的智能体可以使用的工具。这些工具是执行特定任务的简单Python函数。以下是一个基本计算器和字符串反转器的例子:
def basic_calculator(input_str):"""根据输入字符串或字典对两个数字执行数学运算。参数:input_str (str或dict): 可以是表示包含'num1'、'num2'和'operation'键的字典的JSON字符串,或直接是字典。例如:'{"num1": 5, "num2": 3, "operation": "add"}'或 {"num1": 67869, "num2": 9030393, "operation": "divide"}返回:str: 操作结果的格式化字符串。异常:Exception: 如果在操作过程中发生错误(例如,除以零)。ValueError: 如果请求了不支持的操作或输入无效。"""try:# 处理字典和字符串输入if isinstance(input_str, dict):input_dict = input_strelse:# 清理并解析输入字符串input_str_clean = input_str.replace("'", "\"")input_str_clean = input_str_clean.strip().strip("\"")input_dict = json.loads(input_str_clean)# 验证必需字段if not all(key in input_dict for key in ['num1', 'num2', 'operation']):return "错误:输入必须包含'num1'、'num2'和'operation'"num1 = float(input_dict['num1']) # 转换为浮点数以处理小数num2 = float(input_dict['num2'])operation = input_dict['operation'].lower() # 不区分大小写except (json.JSONDecodeError, KeyError) as e:return "输入格式无效。请提供有效的数字和操作。"except ValueError as e:return "错误:请提供有效的数值。"# 定义支持的操作及错误处理operations = {'add': operator.add,'plus': operator.add, # add的替代词'subtract': operator.sub,'minus': operator.sub, # subtract的替代词'multiply': operator.mul,'times': operator.mul, # multiply的替代词'divide': operator.truediv,'floor_divide': operator.floordiv,'modulus': operator.mod,'power': operator.pow,'lt': operator.lt,'le': operator.le,'eq': operator.eq,'ne': operator.ne,'ge': operator.ge,'gt': operator.gt}# 检查操作是否支持if operation not in operations:return f"不支持的操作:'{operation}'。支持的操作有:{', '.join(operations.keys())}"try:# 处理除以零的特殊情况if (operation in ['divide', 'floor_divide', 'modulus']) and num2 == 0:return "错误:不允许除以零"# 执行操作result = operations[operation](num1, num2)# 根据类型格式化结果if isinstance(result, bool):result_str = "真" if result else "假"elif isinstance(result, float):# 处理浮点精度result_str = f"{result:.6f}".rstrip('0').rstrip('.')else:result_str = str(result)return f"答案是:{result_str}"except Exception as e:return f"计算过程中出错:{str(e)}"def reverse_string(input_string):"""反转给定字符串。参数:input_string (str): 要反转的字符串。返回:str: 反转后的字符串。"""# 检查输入是否为字符串if not isinstance(input_string, str):return "错误:输入必须是字符串"# 使用切片反转字符串reversed_string = input_string[::-1]# 格式化输出result = f"反转后的字符串是:{reversed_string}"return result
这些函数设计用于根据提供的输入执行特定任务。basic_calculator处理算术运算,而reverse_string则反转给定的字符串。
步骤4:构建工具箱
ToolBox类存储智能体可以使用的所有工具,并为每个工具提供描述:
class ToolBox:def __init__(self):self.tools_dict = {}def store(self, functions_list):"""存储列表中每个函数的字面名称和文档字符串。参数:functions_list (list): 要存储的函数对象列表。返回:dict: 以函数名为键,其文档字符串为值的字典。"""for func in functions_list:self.tools_dict[func.__name__] = func.__doc__return self.tools_dictdef tools(self):"""以文本字符串形式返回store中创建的字典。返回:str: 存储的函数及其文档字符串的字典,以文本字符串形式。"""tools_str = ""for name, doc in self.tools_dict.items():tools_str += f"{name}: \"{doc}\"\n"return tools_str.strip()
这个类将帮助智能体了解哪些工具可用以及每个工具的功能。
步骤5:创建智能体类
智能体需要思考、决定使用哪个工具并执行它。以下是智能体类:
agent_system_prompt_template = """
你是一个拥有特定工具访问权限的智能AI助手。你的回答必须始终使用这种JSON格式:
{{"tool_choice": "工具名称","tool_input": "给工具的输入"
}}工具及其使用时机:1. basic_calculator:用于任何数学计算- 输入格式:{{"num1": 数字, "num2": 数字, "operation": "add/subtract/multiply/divide"}}- 支持的操作:add/plus, subtract/minus, multiply/times, divide- 输入和输出示例:输入:"计算15加7"输出:{{"tool_choice": "basic_calculator", "tool_input": {{"num1": 15, "num2": 7, "operation": "add"}}}}输入:"100除以5等于多少?"输出:{{"tool_choice": "basic_calculator", "tool_input": {{"num1": 100, "num2": 5, "operation": "divide"}}}}2. reverse_string:用于任何涉及文本反转的请求- 输入格式:仅作为字符串的要反转的文本- 当用户提到"反转"、"倒序"或要求反转文本时,始终使用此工具- 输入和输出示例:输入:"'你好世界'的反转是什么?"输出:{{"tool_choice": "reverse_string", "tool_input": "你好世界"}}输入:"Python反过来是什么?"输出:{{"tool_choice": "reverse_string", "tool_input": "Python"}}3. no tool:用于一般对话和问题- 输入和输出示例:输入:"你是谁?"输出:{{"tool_choice": "no tool", "tool_input": "我是一个AI助手,可以帮你进行计算、反转文本以及回答问题。我可以执行数学运算和反转字符串。今天我能为你做些什么?"}}输入:"你好吗?"输出:{{"tool_choice": "no tool", "tool_input": "我运行得很好,谢谢你的关心!我可以帮你进行计算、文本反转或回答任何问题。"}}严格规则:
1. 关于身份、能力或感受的问题:- 始终使用"no tool"- 提供完整、友好的回应- 提及你的能力2. 对于任何文本反转请求:- 始终使用"reverse_string"- 仅提取要反转的文本- 删除引号、"反转"等额外文本3. 对于任何数学运算:- 始终使用"basic_calculator"- 提取数字和操作- 将文本数字转换为数字这是你的工具列表及其描述:
{tool_descriptions}记住:你的回应必须始终是带有"tool_choice"和"tool_input"字段的有效JSON。
"""
class Agent:def __init__(self, tools, model_service, model_name, stop=None):"""使用工具列表和模型初始化智能体。参数:tools (list): 工具函数列表。model_service (class): 带有generate_text方法的模型服务类。model_name (str): 要使用的模型名称。"""self.tools = toolsself.model_service = model_serviceself.model_name = model_nameself.stop = stopdef prepare_tools(self):"""在工具箱中存储工具并返回其描述。返回:str: 工具箱中存储的工具描述。"""toolbox = ToolBox()toolbox.store(self.tools)tool_descriptions = toolbox.tools()return tool_descriptionsdef think(self, prompt):"""使用系统提示模板和工具描述在模型上运行generate_text方法。参数:prompt (str): 要生成回答的用户查询。返回:dict: 模型响应的字典形式。"""tool_descriptions = self.prepare_tools()agent_system_prompt = agent_system_prompt_template.format(tool_descriptions=tool_descriptions)# 创建带有系统提示的模型服务实例if self.model_service == OllamaModel:model_instance = self.model_service(model=self.model_name,system_prompt=agent_system_prompt,temperature=0,stop=self.stop)else:model_instance = self.model_service(model=self.model_name,system_prompt=agent_system_prompt,temperature=0)# 生成并返回响应字典agent_response_dict = model_instance.generate_text(prompt)return agent_response_dictdef work(self, prompt):"""解析从think返回的字典并执行适当的工具。参数:prompt (str): 要生成回答的用户查询。返回:执行适当工具的响应,如果没有找到匹配的工具则返回tool_input。"""agent_response_dict = self.think(prompt)tool_choice = agent_response_dict.get("tool_choice")tool_input = agent_response_dict.get("tool_input")for tool in self.tools:if tool.__name__ == tool_choice:response = tool(tool_input)print(colored(response, 'cyan'))returnprint(colored(tool_input, 'cyan'))return
这个类有三个主要方法:
- prepare_tools:存储并返回工具的描述。
- think:根据用户提示决定使用哪个工具。
- work:执行所选工具并返回结果。
步骤6:运行智能体
最后,让我们把所有内容放在一起并运行我们的智能体。在脚本的主要部分,初始化智能体并开始接受用户输入:
# 示例用法
if __name__ == "__main__":"""使用此智能体的说明:你可以尝试的示例查询:1. 计算器操作:- "计算15加7"- "100除以5等于多少?"- "把23乘以4"2. 字符串反转:- "反转'你好世界'这个词"- "你能反转'Python编程'吗?"3. 一般问题(将得到直接回应):- "你是谁?"- "你能帮我做什么?"Ollama命令(在终端中运行):- 检查可用模型: 'ollama list'- 检查运行中的模型:'ps aux | grep ollama'- 列出模型标签: 'curl http://localhost:11434/api/tags'- 拉取新模型: 'ollama pull mistral'- 运行模型服务器: 'ollama serve'"""tools = [basic_calculator, reverse_string]# 取消下面的注释以使用OpenAI# model_service = OpenAIModel# model_name = 'gpt-3.5-turbo'# stop = None# 使用Ollama的llama2模型model_service = OllamaModelmodel_name = "llama2" # 可以更改为其他模型,如'mistral'、'codellama'等stop = "<|eot_id|>"agent = Agent(tools=tools, model_service=model_service, model_name=model_name, stop=stop)print("\n欢迎使用AI智能体!输入'exit'退出。")print("你可以让我:")print("1. 执行计算(例如,'计算15加7')")print("2. 反转字符串(例如,'反转你好世界')")print("3. 回答一般问题\n")while True:prompt = input("问我任何问题:")if prompt.lower() == "exit":breakagent.work(prompt)
实测效果如下:
3. 总结
在这篇博文中,我们探索了智能体的概念,并一步步实现了它。我们设置了环境,定义了模型,创建了基本工具,并构建了一个结构化的工具箱来支持我们智能体的功能。最后,我们通过运行智能体将所有内容整合在一起。
这种结构化方法为构建能够自动执行任务并做出明智决策的智能交互式智能体提供了坚实的基础。随着AI智能体不断发展,它们的应用将扩展到各个行业,推动效率和创新。敬请关注更多见解和改进,将你的AI智能体提升到新的水平!
相关文章:
体验智能体构建过程:从零开始构建Agent
1. 什么是智能体? 智能体(Agents)是一种能够感知环境、做出决策并采取行动来实现特定目标的自主实体。智能体的复杂程度各不相同,从简单的响应式智能体(对刺激直接做出反应)到更高级的智能体(能…...
如何从项目目标到成功标准:构建可量化、可落地的项目评估体系
引言 在项目管理领域,"项目成功"的定义往往比表面看起来更复杂。根据PMI的行业报告,67%的项目失败源于目标与成功标准的不匹配。当项目团队仅关注"按时交付"或"预算达标"时,常会忽视真正的价值创造。本文将通…...
大模型论文:Language Models are Few-Shot Learners(GPT3)
大模型论文:Language Models are Few-Shot Learners(GPT3) 文章地址:https://proceedings.neurips.cc/paper_files/paper/2020/file/1457c0d6bfcb4967418bfb8ac142f64a-Paper.pdf 一、摘要 我们证明了,扩大语言模型的规模在任务无关的 few…...
驱动学习专栏--字符设备驱动篇--1_chrdevbase
字符设备驱动简介 字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节 流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、 IIC 、 SPI , LCD 等等都是字符设备&…...
muduo库源码分析: TcpConnection
一. 主要成员: socket_:用于保存已连接套接字文件描述符。channel_:封装了上面的socket_及其各类事件的处理函数(读、写、错误、关闭等事件处理函数)。这个Channel中保存的各类事件的处理函数是在TcpConnection对象构造函数中注册…...
【SLAM】ubuntu 18.04 编译安装 OpenCV 3.2.0 时出现哈希错误
本文首发于❄慕雪的寒舍 1. 前言 1.1. 问题说明 在amd64的ubuntu 18.04 desktop上编译安装 OpenCV 3.2.0 的时候,我遇到了cmake构建错误。错误的核心报错如下 for file: [/home/king/slam/pkg/opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32…...
挂马漏洞 asp连接冰蝎webshell (附webshell源码 仅限学习研究)
目录 ASP WebShell代码 代码说明: 部署步骤: 使用冰蝎客户端连接: 注意事项: ASP WebShell代码 <% 冰蝎连接密码(需与冰蝎客户端配置一致) Dim key key "mysecretkey123" 自定义密码…...
Grafana将弃用AngularJS-我们该如何迁移
AngularJS 弃用时间线 AngularJS 支持已在 Grafana 9 中正式弃用。在 2024 年 5 月发布的 Grafana 11 中,所有 Grafana Cloud 和自托管安装默认关闭该功能。到 Grafana 12 版本时,将完全移除对 AngularJS 的支持,包括配置参数开关 angular_s…...
基于单片机的病房呼叫系统设计
2.1 总体方案设计 本课题为基于单片机的病房呼叫系统设计,在此将整个系统架构设计如图2.1所示,在此采用八个按键模拟8个不同的病房号,再通过8个LED指示灯对病房号的状态进行指示,当用户按键按键时,相应的LED灯会点亮…...
简述一下Unity的UnityWebRequest
UnityWebRequest是Unity引擎中用于处理网络请求的强大工具,尤其适用于与Web服务器进行交互,比如获取数据、上传文件或下载资源等。相较于旧版的WWW类,UnityWebRequest提供了更灵活、更高效的API,支持多种HTTP方法,并能…...
文件操作和IO - 2
目录 Java 中操作文件 File 概述 属性 构造方法 方法 getParent getName getPath getAbsolutePath getCanonicalPath exists isFile isDirectory createNewFile delete deleteOnExit list listFiles mkdir mkdirs 完! Java 中操作文件 Java 对于文件操…...
⑪数据中心网络M-LAG实战
一、DeviceA-M-LAG-Mater配置 1、M-LAG 系统配置。 # m-lag mad exclude interface GigabitEthernet1/0/7 m-lag mad exclude interface Vlan-interface100 m-lag mad exclude interface Vlan-interface101 m-lag system-mac 0002-0002-0002 m-lag system-number 1 m-la…...
Win10系统安装WSL2-Ubuntu, 并使用VScode开始工作
本教程基于博主当前需要使用 WSL2(Windows Subsystem for Linux 2) 而编写,将自己使用的经过分享给大家。有什么意见建议敬请大家批评指正。此过程需要打开 Microsoft Store 话不多说,立即开始~ 文章目录 1. 检查系统版本2. 启动 WSL 功能3. 安装Ubuntu4…...
Node.js种cluster模块详解
Node.js 中 cluster 模块全部 API 详解 1. 模块属性 const cluster require(cluster);// 1. isMaster // 判断当前进程是否为主进程 console.log(是否为主进程:, cluster.isMaster);// 2. isWorker // 判断当前进程是否为工作进程 console.log(是否为工作进程:, cluster.isW…...
Window 10使用WSL2搭建Linux版Android Studio应用开发环境
一、背景 公司基于高通SA8155、SA8295等车载芯片进行座舱系统开发,使用repo统一管理系统及应用源码仓库。 Android应用端使用Ubuntu环境Android Studio进行开发,使用repo进行平台性管理,包含所有应用仓库。由于gradle配置使用了linux下文件软链接,无法直接使用Window环境…...
PostgreSQL 的统计信息
PostgreSQL 的统计信息 PostgreSQL 的统计信息是查询优化和性能调优的基础,系统通过多种统计信息来评估数据分布和访问模式,从而生成高效的执行计划。 一 统计信息类型与用途 1.1 核心统计类别 统计类型存储位置主要用途更新机制表和索引扫描统计pg_…...
【Linux】Linux基础指令
Linux系统初步介绍 Linux是一种自由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯托瓦兹在1991年首次发布,之后,在加上用户空间的应用程序之后,就成为了Linux操作系统。 严格来讲,Linux 只是操作系统内核本身,但通常采用“Linux内核”来表达该意思&#…...
【SLAM】在ORB_SLAM2的ROS模式下使用RealSense D435相机
本文介绍了如何在ORB_SLAM2项目中使用RealSense D435相机作为RGB-D输入源,包括ROS下启动D435相机、ORB_SLAM2订阅Topic、ORB_SLAM2读取realsense-viewer录制的rosbag文件等步骤。。 本文首发于❄慕雪的寒舍 1. 前言 先前已经编写了如何用TUM数据集运行ORB_SLAM3以及…...
scapy使用
https://scapy.readthedocs.io/en/latest/introduction.html 在 Mac 上使用 Scapy 抓取特定 IP 的流量并保存到 a.pcap 的步骤如下: 步骤 1:安装 Scapy 在终端中执行以下命令安装: pip install scapy步骤 2:创建 Python 脚本 …...
C2000 系统控制(4) — CPU Memory
CPU 内存 内存控制器 在 C2000 实时微控制器上,RAM 具有不同的特性。这些特性包括: CPU 专用:M0、M1 RAMCPU 和 CLA 共享:LSx RAMCPU、DMA 和 HIC 共享:GSx RAM用于在处理器之间发送和接收消息:MSG RAM …...
Linux网络编程——详解网络层IP协议、网段划分、路由
目录 一、前言 二、IP协议的认识 1、什么是IP协议? 2、IP协议报头 三、网段划分 1、初步认识IP与路由 2、IP地址 I、DHCP动态主机配置协议 3、IP地址的划分 I、CIDR设计 II、子网数目的计算 III、子网掩码的确定 四、特殊的IP地址 五、IP地址的数量限…...
解析医疗器械三大文档:DHF、DMR与DHR
医疗器械的 DHF、DMR 和 DHR 是质量管理体系(QMS)中的核心文件,贯穿产品全生命周期, 确保医疗器械的安全性、有效性和合规性。 一、三大文件的定义与法规依据 缩写全称法规依据(以 FDA 为例)核心目的DHF…...
SQL 全文检索原理
全文检索(Full-Text Search)是SQL中用于高效搜索文本数据的技术,与传统的LIKE操作或简单字符串比较相比,它能提供更强大、更灵活的文本搜索能力。 基本概念 全文检索的核心思想是将文本内容分解为可索引的单元(通常是词或词组),然后建立倒排…...
基于Rosen梯度投影法的约束优化问题求解及MATLAB实现
摘要 在工程优化、经济建模等领域,约束优化问题普遍存在,其核心是在满足线性或非线性约束条件下求解目标函数的极值。本文聚焦Rosen梯度投影法,系统阐述其算法原理、实现步骤及MATLAB编程方法。 关键词:Rosen梯度投影法…...
Model Context Protocol (MCP) - 尝试创建和测试一下MCP Server
1.简单介绍 MCP是Model Context Protocol的缩写,是Anthropic开源的一个标准协议。MCP使得大语言模型可以和外部的数据源,工具进行集成。当前MCP在社区逐渐地流行起来了。同时official C# SDK(仓库是csharp-sdk) 也在不断更新中,目前最新版本…...
Linux上位机开发实践(关于Qt的移植)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 linux平台上面,很多界面应用,都是基于qt开发的。不管是x86平台,还是arm平台,qt使用的地方都比较多。…...
Node.js 项目 用 `Docker Compose` 发布的完整流程
Node.js 项目 用 Docker Compose 发布的完整流程 ✅ 一、基本项目结构示例 以一个简单 Express 项目为例: my-node-app/ ├── app.js # 启动文件 ├── package.json ├── package-lock.json ├── Dockerfile # 构建 Node 容器 ├…...
Java基础:浅析Java中的XML文件处理
概述 XML(全称Extensible Markup Language,可扩展标记语言) .本质是一种数据的格式,可以用来存储复杂的数据结构,和数据关系 XML特点 1.XML中的“<标签名>”成为一个标签或者一个元素,一般成对出现的 2.XML…...
MCU刷写——S19(S-Record)文件格式详解及Python代码
工作之余来写写关于MCU的Bootloader刷写的相关知识,以免忘记。今天就来聊聊S19这种文件的格式,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。 学习过程中如有任何疑问,可底下评论! 如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢…...
HTML — 过渡与动画
HTML过渡与动画是提升网页交互体验的核心技术,主要通过CSS实现动态效果。 过渡 CSS过渡(Transition)介绍 适用于元素属性变化时的平滑渐变效果,如悬停变色、尺寸调整。通过定义transition-property(过渡属性…...
python【标准库】multiprocessing
文章目录 介绍多进程Process 创建子进程共享内存数据多进程通信Pool创建子进程多进程案例多进程注意事项介绍 python3.10.17版本multiprocessing 是一个多进程标准模块,使用类似于threading模块的API创建子进程,充分利用多核CPU来并行处理任务。提供本地、远程的并发,高效避…...
BANK OF CHINA(HONG KONG)网点
BANK OF CHINA(HONG KONG)网点开户 ZoneBankAddressDates东区杏花邨分行香港柴湾杏花邨东翼商场205-208号20240415: 11:15, 13:00, 11:15, 13:00, 11:15, 13:0020240412: 11:15, 13:00东区鲗鱼涌分行香港鰂鱼涌英皇道1060号柏惠苑20240412: 09:45 注意事项 到达指定分行时&am…...
基于springboot的“嗨玩旅游网站”的设计与实现(源码+数据库+文档+PPT)
基于springboot的“嗨玩旅游网站”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:springboot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 局部E-R图 系统首页界面 系统注册…...
机器学习(3)——决策树
文章目录 1. 决策树基本原理1.1. 什么是决策树?1.2. 决策树的基本构成:1.3. 核心思想 2. 决策树的构建过程2.1. 特征选择2.1.1. 信息增益(ID3)2.1.2. 基尼不纯度(CART)2.1.3. 均方误差(MSE&…...
【人脸识别中的“类内差异”和“类间差异】
核心问题:人脸识别中的“类内差异”和“类间差异” 想象你在教一个小朋友认人: 类间差异(不同人之间的区别): 目标:让小朋友能分清“爸爸”和“妈妈”。方法:指着爸爸说“这是爸爸”࿰…...
第十六届蓝桥杯 省赛C/C++ 大学B组
编程题目现在在洛谷上都可以提交了。 未完待续,写不动了。 C11 编译命令 g A.cpp -o A -Wall -lm -stdc11A. 移动距离 本题总分:5 分 问题描述 小明初始在二维平面的原点,他想前往坐标 ( 233 , 666 ) (233, 666) (233,666)。在移动过程…...
SpringBoot3.0 +GraalVM21 + Docker 打包成可执行文件
SpringBoot3.0 GraalVM21 Docker 打包成可执行文件 前言 随着时代的飞速发展,JDK 17 及以上版本开始支持通过 GraalVM 将运行在 JVM 上的 jar 包直接打包成可在操作系统上运行的原生可执行文件。这一特性能使开发者在某些场景下更加灵活地部署 Java 程序。 在云原…...
从编程范式看 “万物皆智能,万事皆自动” 愿景
从编程范式看“万物皆智能,万事皆自动”愿景 引言 在信息技术飞速发展的今天,“万物皆智能,万事皆自动”成为了众多 IT 从业者和科技爱好者心中的终极愿景。这一愿景描绘了一个所有事物都具备智能、所有事情都能自动完成的美好未来。而在实现这一愿景的征程中,面向对象编…...
Vue 项目中 package.json 文件的深度解析
Vue 项目中 package.json 文件的深度解析 在 Vue 项目中,package.json 文件是项目配置的核心,它管理着项目的依赖关系、脚本命令、版本信息等重要内容。正确理解和配置 package.json 文件,对于项目的开发、构建、测试和部署都至关重要。本文…...
解决2080Ti使用节点ComfyUI-PuLID-Flux-Enhanced中遇到的问题
使用蓝大的工作流《一键同时换头、换脸、发型、发色之双pulid技巧》 刚开始遇到的是不支持bf16的错误 根据《bf16 is only supported on A100 GPUs #33》中提到,修改pulidflux.py中的dtype 为 dtype torch.float16 后,出现新的错误,这个…...
1 程序的本质,计算机语言简史,TIOBE 指数,C 语言的独特魅力、发展历程、发行版本和应用场景
👋 嘿,各位编程探险家们!是不是一提到 C 语言,脑海中就浮现出指针乱舞、内存泄漏的恐怖画面?别怕,你并不孤单!😅 今天,你踏入了这个专为 “C 语言恐惧症” 患者打造的避…...
python格式化字符串漏洞
什么是python格式化字符串漏洞 python中,存在几种格式化字符串的方式,然而当我们使用的方式不正确的时候,即格式化的字符串能够被我们控制时,就会导致一些严重的问题,比如获取敏感信息 python常见的格式化字符串 百…...
撰写学位论文Word图表目录的自动生成
第一步:为图片和表格添加题注 选中图片或表格 右键点击需要编号的图片或表格,选择 【插入题注】(或通过菜单栏 引用 → 插入题注)。 设置题注标签 在弹窗中选择 标签(如默认有“图”“表”,若无需自定义标…...
SDC命令详解:使用相对路径访问设计对象(current_instance命令)
相关阅读 SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482 在使用get_cells等命令访问设计对象时,需要指定设计对象的名字,这个名字是一个相对路径,本文就将对此进行讨论。 相对路径 使…...
vector的应用
在平常使用c是,只使用普通数组肯定不够便捷,这时,我们就可以使用vector来使代码更加简洁 目录 1.vector的定义 2.在vector末尾增加一个元素 3.输出元素 (1)输出单个元素 (2)循环输出元素 4…...
pytorch查询字典、列表维度
输出tensor变量维度 print(a.shape)输出字典维度 for key, value in output_dict.items():if isinstance(value, torch.Tensor):print(f"{key} shape:", value.shape)输出列表维度 def get_list_dimensions(lst):# 基线条件:如果lst不是列表࿰…...
征程 6 VIO Frame 时间戳介绍
1. 时间类型 征程 6 内部的时间类型如下 Linux 系统时间是基于 arm system counter 抽象的,Linux 的基于 arm system counter 抽象了很多种时间,图中画了两种。CLOCK_MONOTONIC_RAW 是不会被时间同步调整的。 2. Frame 时间戳 从 VIO 侧获取的图像数…...
DotnetCore开源库SampleAdmin源码编译
1.报错: System.Net.Sockets.SocketException HResult0x80004005 Message由于目标计算机积极拒绝,无法连接。 SourceSystem.Net.Sockets StackTrace: 在 System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, C…...
QML之ScrollView(滚动视图)
ScrollView 是 Qt Quick Controls 2 中提供的可滚动视图容器,用于创建可滚动区域。以下是详细使用方法: 基本用法 qml import QtQuick 2.15 import QtQuick.Controls 2.15ScrollView {id: scrollViewwidth: 300height: 200clip: true// 背景设置&…...
FreeRTOS使任务处于就绪状态的API
在FreeRTOS中,任务的**就绪状态(Ready State)**意味着任务已准备好运行,但尚未被调度器分配CPU时间。以下是通过API使任务进入就绪状态的常见方法及其分类: 1. 恢复被挂起的任务 vTaskResume(TaskHandle_t xTaskToResume) 将被挂起(Suspended)的任务恢复为就绪状态。 示…...