什么是 Agent 的 Message
Messages
2.4.1 概述
什么是 Agent 的 Message?
当你和朋友聊天、在网上搜索信息或是对手机语音助手说“帮我查一下天气”时,其实你都在向某个“代理者(Agent)”发送一条“信息(Message)”。这里的“代理者”既可以是一个人,也可以是一个能执行指令的智能程序或系统,而“信息”则是你传递的指令、问题或数据。在日常生活中,这种信息交互常常不易察觉,但在计算机科学、人工智能和自动化任务中,“Agent的Message”是一个至关重要的基础概念。
简单来说,Agent的Message就是指系统中“智能体”或“代理者”之间互相传递的指令或数据包。就好比你给朋友发一条微信消息请他帮忙带杯咖啡,在智能系统中,“Agent”则是那些负责完成任务的角色,而“Message”则是他们沟通和协作的工具。当一个Agent收到Message后,会根据内容做出决策、执行任务或回复信息。
在 CAMEL 系统中,BaseMessage
是所有消息对象的基础类,它为对话中的每一条信息提供了统一的结构和标准化的处理方式。无论是用户输入的一段文本,还是包含图片、视频等多模态信息的数据包,都可以通过 BaseMessage
来统一表示和管理。
为什么需要统一的消息结构?
在一个对话系统中,消息可能来自多方(如用户、系统、不同类型的 Agent),且信息内容不局限于纯文本,还可能包括图像、视频甚至是自定义的元数据(metadata)。如果没有一个统一的基础类来约束这些消息的格式,开发者就会面临如下问题:
-
类型繁杂且难以维护:不同消息类型需要各自的代码逻辑和数据结构,导致系统复杂度提高。
-
难以扩展和对接:当需要增加新类型的消息(如引入新媒体格式或上下文信息)时,很可能需要大幅度修改原有代码。
-
通用处理困难:缺乏统一结构会让调试、日志记录和分析对话信息变得更加麻烦。
通过使用 BaseMessage
,你可以:
-
将消息的创建、变形(如格式转换)和传递标准化。
-
简化对消息类型的扩展,提高代码的可维护性和可读性。
-
为后续的功能模块(如消息过滤、路由、多轮对话管理)提供一个统一的数据基础。
并且熟练掌握Message相关内容,对我们后续无论是做RAG应用或者模型的Fine-tune都非常重要!在后续章节我们会为大家介绍。
2.4.2 创建和使用Message
在了解了 BaseMessage
存在的意义后,让我们直接通过实例化来看看如何创建和使用它。通过一个最小化示例,我们将掌握 BaseMessage
的关键属性和基本用法,再进一步扩展到多模态内容。
创建 BaseMessage
实例的最小化示例
下面是一个最基本的代码示例,将创建一条来自用户的文本消息:
from camel.messages import BaseMessage
from camel.types import RoleType# 创建一个简单的用户消息
message = BaseMessage(role_name="example_user",role_type=RoleType.USER,content="Hello, CAMEL!",meta_dict={} #添加必需的meta dict参数,即使为空也要提供,否则会报 TypeError
)print(message)>>>
BaseMessage(role_name='example_user', role_type=<RoleType.USER: 'user'>, meta_dict={}, content='Hello, CAMEL!', video_bytes=None, image_list=None, image_detail='auto', video_detail='low', parsed=None)
在上述示例中,我们创建了一条来自 example_user
的 USER 类型消息,内容为纯文本 "Hello, CAMEL!"
。这就是一个最小化的 BaseMessage
示例。
关键属性介绍
-
role_name
:给消息一个容易辨识的名称,如"User"
、"Assistant"
或"System"
。在更复杂的场景中,你或许会有多个用户、多个 Agent,通过role_name
能帮助你追踪消息来源。 -
role_type
:角色类型一般来自RoleType
枚举,以明确此消息在对话中的身份。例如:-
RoleType.USER
:表示该消息来自用户 -
RoleType.ASSISTANT
:表示该消息来自智能助手
-
-
content
:消息的核心载体,一般是文本,也可能是解析指令、问题描述或描述性文字。
简单扩展:添加多模态内容
除了纯文本外,BaseMessage
还支持包含图片、视频等多模态信息。这可以为你的对话系统带来更丰富的交互体验。下面的示例展示了如何向 BaseMessage
添加一张图片。假设你已将一张图片加载为 PIL.Image
对象:
from PIL import Image
from io import BytesIO
import requests# 下载一张图片并创建一个 PIL Image 对象
url = "https://raw.githubusercontent.com/camel-ai/camel/master/misc/logo_light.png"
response = requests.get(url)
img = Image.open(BytesIO(response.content))# 创建包含图片的用户消息
image_message = BaseMessage(role_name="User_with_image",role_type=RoleType.USER,content="Here is an image",meta_dict={},image_list=[img] # 将图片列表作为参数传入
)print(image_message)>>>
BaseMessage(role_name='User_with_image', role_type=<RoleType.USER: 'user'>, meta_dict={}, content='Here is an image', video_bytes=None, image_list=[<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=3520x720 at 0x1DDFF8E88F0>], image_detail='auto', video_detail='low', parsed=None)
同理,如果你有视频数据(如 video_bytes
),也可将视频信息传入 BaseMessage
。当你的消息中包含图片、视频等丰富媒体信息时,后续的组件(如 ChatAgent
)便可利用这些多模态数据进行更智能和灵活的响应。
2.4.3 不同类型消息的处理
在使用 BaseMessage
的过程中,你不仅可以轻松创建基本的用户消息,也能够通过其内置方法快速生成其它类型(如系统消息、助手消息)的实例,并对其内容进行更新和转换。此外,BaseMessage
提供了多种便利的转换方法,可将消息转化为不同格式,便于对接诸如 OpenAI 等后端服务。
快速生成不同类型的消息
通过 BaseMessage
的类方法,我们可以快捷创建出用户(User)、助手(Assistant)的消息:
from camel.messages import BaseMessage# 创建用户消息
user_msg = BaseMessage.make_user_message(role_name="User_1",content="Hi, what can you do?"
)# 创建助手消息
assistant_msg = BaseMessage.make_assistant_message(role_name="Assistant_1",content="I can help you with various tasks."
)print("User Message:", user_msg)
print("Assistant Message:", assistant_msg)
在上述示例中,你无需再手动指定 role_type
,使用这些类方法即可轻松创建特定角色的消息。这样有助于在你的应用中保持代码整洁和可读性。
更新消息内容
有时你需要基于某条原有的消息创建略有改动的新消息。BaseMessage
提供了 create_new_instance()
方法,使你能在保持原消息基础信息的同时,轻松更新 content
:
# 基于用户消息创建一个新消息,内容稍作修改
updated_user_msg = user_msg.create_new_instance("Hi, can you tell me more about CAMEL?")
print("Updated User Message:", updated_user_msg)
这个方法非常有用,可以在对话过程中根据上下文动态构建消息流,而无需从头创建所有参数。
将消息转换为字典格式
如果你需要查看消息内部结构,或者将消息数据传给其它系统、序列化保存,BaseMessage
的 to_dict()
方法可以直接将消息对象转化为字典结构:
msg_dict = assistant_msg.to_dict()
print("Message as dict:", msg_dict)
输出的字典中会包含消息的 role_name
、role_type
、content
等信息,使得你可以轻松与其它数据处理流程对接。
适配 OpenAI 后端的消息格式
在实际应用中,你可能需要将消息传给 OpenAI 的对话接口。BaseMessage
提供了一组方法来将现有消息快速转化成符合 OpenAI 后端需求的格式。例如:
from camel.types import OpenAIBackendRole# 将用户消息转化为OpenAI后端兼容的用户消息
openai_user_msg = user_msg.to_openai_message(role_at_backend=OpenAIBackendRole.USER)
print("OpenAI-compatible user message:", openai_user_msg)# 将助手消息转化为OpenAI后端的助手消息
openai_assistant_msg = assistant_msg.to_openai_assistant_message()
print("OpenAI-compatible assistant message:", openai_assistant_msg)
通过这些方法,你可以轻松地将 BaseMessage
对象接入到 OpenAI 接口的调用流程中,无需手动编写繁琐的转换逻辑。
2.4.4 与ChatAgent协作
在前面的小节中,我们学习了如何创建和操作 BaseMessage
。现在,让我们把所学的知识付诸实践,将这些消息交给 ChatAgent
,让对话真正“活”起来。
ChatAgent
是 CAMEL 系统中负责对话处理与智能回应的组件。当你将 BaseMessage
对象传递给 ChatAgent
时,ChatAgent
将根据系统和用户消息的内容,生成具有上下文感知的回复。
将文本消息直接交给 ChatAgent
的基本用法
如果你仅想与智能助手进行一段简单的对话,可以直接构造一个文本类型的用户消息,并使用 ChatAgent
的 step()
方法进行响应,在实际使用过程中,我们无需严格按照BaseMessage的格式来设置我们的message,ChatAgent
会通过make_assistant_message等方法会将字符串格式的msg转换成BaseMessage,我们只需要用最简便的字符串来设置我们message,当然,如果你对role_name和role_type有特殊要求的话,也可以按照BaseMessage的格式来设置message:
from camel.agents import ChatAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformType
import os
from dotenv import load_dotenvload_dotenv()
api_key = os.getenv('QWEN_API_KEY')model = ModelFactory.create(model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,model_type="Qwen/Qwen2.5-72B-Instruct",url='https://api-inference.modelscope.cn/v1/',api_key=api_key
)# 创建系统消息,告诉ChatAgent自己的角色定位
system_msg = "You are a helpful assistant that responds to user queries."# 实例化一个ChatAgent
chat_agent = ChatAgent(model=model, system_message=system_msg,output_language='zh')# 构造用户消息
user_msg = "Hello! Can you tell me something about CAMEL AI?"# 将用户消息传给ChatAgent,并获取回复
response = chat_agent.step(user_msg)
print("Assistant Response:", response.msgs[0].content)>>>
Assistant Response: 当然可以!CAMEL AI 是一个先进的语言模型,它被设计用来进行多轮对话、理解复杂指令并生成高质量的文本。这个模型能够处理各种任务,比如回答问题、撰写文章、创作故事等。CAMEL AI 的目标是通过自然语言处理技术,为用户提供更加智能和人性化的交互体验。如果你有任何具体的问题或需要帮助的地方,欢迎随时告诉我!
在该示例中,我们先为 ChatAgent
提供一个系统消息指定它的身份,然后发送用户文本消息,最终获得智能助手的文本回复。
使用 BaseMessage
传递更丰富的上下文和多模态信息给 ChatAgent
BaseMessage
不仅可用于传递纯文本,还可扩展为多模态消息。当你在对话中加入图片、视频或自定义元数据时,ChatAgent
有机会根据这些额外信息提供更有针对性的回答。例如,在发送消息时,你可以在 BaseMessage
中包含图片列表或自定义的 meta_dict
信息,帮助 ChatAgent
理解上下文或额外提示:
from camel.messages import BaseMessage
# 在用户消息中添加元数据
user_msg_with_meta = BaseMessage.make_user_message(role_name="User",content="Here is some extra context in the metadata.",meta_dict={"processing_time": 1.23, "api_version": "v2", "user_id": "1234567890"}
)response_with_meta = chat_agent.step(user_msg_with_meta)
print("Assistant Response with metadata:", response_with_meta.msgs[0].content)>>>
Assistant Response with metadata: 了解了!如果您能提供更多关于元数据的具体信息或上下文,我可以更好地帮助您解答或处理相关问题。请告诉我您需要了解什么方面的内容?
在此示例中, meta_dict
主要用于系统内部,而不是直接的模型交互。可以在复杂的对话系统中进行消息路由和状态管理。
# 展示消息的元数据和内容
print("=== 消息元数据信息 ===")
print(f"用户ID: {user_msg_with_meta.meta_dict['user_id']}")
print(f"API版本: {user_msg_with_meta.meta_dict['api_version']}")
print(f"处理时间: {user_msg_with_meta.meta_dict['processing_time']}秒")>>>
=== 消息元数据信息 ===
用户ID: 1234567890
API版本: v2
处理时间: 1.23秒
实际案例:发送图片并获取智能回复
下面让我们演示一个更完整的用例:发送一张图片给 ChatAgent
,让它根据图片内容进行描述或回答相关问题。这可以用于场景如:让智能助手识别图像中的物体、提取图像信息,或者对图片进行描述。
from camel.agents import ChatAgent
from camel.messages import BaseMessage
from camel.models import ModelFactory
from camel.types import ModelPlatformType,RoleTypefrom io import BytesIO
import requests
from PIL import Image
import os
from dotenv import load_dotenvload_dotenv()
api_key = os.getenv('QWEN_API_KEY')model = ModelFactory.create(model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,model_type="Qwen/QVQ-72B-Preview",url='https://api-inference.modelscope.cn/v1/',api_key=api_key
)# 实例化ChatAgent
chat_agent = ChatAgent(model=model,output_language='中文')# 图片URL
url = "https://img0.baidu.com/it/u=2205376118,3235587920&fm=253&fmt=auto&app=120&f=JPEG?w=846&h=800"
response = requests.get(url)
img = Image.open(BytesIO(response.content))user_image_msg = BaseMessage.make_user_message(role_name="User", content="请描述这张图片的内容", image_list=[img] # 将图片放入列表中
)# 将包含图片的消息传给ChatAgent
response_with_image = chat_agent.step(user_image_msg)
print("Assistant's description of the image:", response_with_image.msgs[0].content)
在这个案例中,当 ChatAgent
接收到包含图片的消息后,它将尝试根据自身的知识和处理能力对图片进行描述。此示例展示了多模态消息传递的潜力,让智能对话系统能处理不仅仅是文本的信息。
2.4.5 Responses
Agent(Agent)在与用户交互的过程中,会根据用户的输入生成相应的响应。这些响应不仅包含要显示给用户的消息,还可能包含额外的信息,如会话状态、上下文数据等。camel.responses
模块是 CAMEL 框架中处理聊天Agent响应的重要部分。其中ChatAgentResponse
类用于封装聊天Agent(ChatAgent
)的交互输出,结构化响应内容,便于开发者访问消息、会话状态等信息。
一个典型的Agent响应通常包括以下几个部分:
-
消息内容(Message Content):这是用户直接看到的部分,如文本、图片等。
-
会话状态(Session Status):指示会话是否继续、结束或需要进行其他操作。
-
附加信息(Additional Information):用于存储上下文数据、调试信息或其他辅助数据。
ChatAgentResponse
的类属性包括:
-
msgs
:一个包含BaseMessage
对象的列表,表示Agent生成的消息。根据模式的不同,列表内容会有所不同:-
空列表:表示消息生成时出现错误。
-
单条消息:表示正常的消息生成操作。
-
多条消息:表示Agent处于“批评者模式”(critic mode)。
-
-
terminated
:一个布尔值,指示聊天会话是否已经被Agent终止。 -
info
:一个字典,包含与会话相关的附加信息,例如使用统计或工具调用信息。
以下代码展示如何使用 ChatAgentResponse
类:
from camel.responses import ChatAgentResponse
from camel.messages import BaseMessage
from camel.types import RoleType# 创建一个 ChatAgentResponse 实例
response = ChatAgentResponse(msgs=[BaseMessage(role_name="Assistant", # 助手的角色名称role_type=RoleType.ASSISTANT, # 指定角色类型content="你好,我可以帮您做什么?", # 消息内容meta_dict={} # 提供一个空的元数据字典(可根据需要填充))], terminated=False, # 会话未终止info={"usage": {"prompt_tokens": 10, "completion_tokens": 15}} # 附加信息
)# 访问属性
messages = response.msgs # 获取Agent生成的消息
is_terminated = response.terminated # 会话是否终止
additional_info = response.info # 获取附加信息# 打印消息内容
print("消息内容:", messages[0].content)
# 打印会话是否终止
print("会话是否终止:", is_terminated)
# 打印附加信息
print("附加信息:", additional_info)>>> 消息内容: 你好,我可以帮您做什么?
>>> 会话是否终止: False
>>> 附加信息: {'usage': {'prompt_tokens': 10, 'completion_tokens': 15}}
camel.responses
包为Agent的响应提供了一个结构化和规范化的方式。通过使用 ChatAgentResponse
类,开发者可以确保所有响应都符合预期的格式,并且易于扩展和维护。
2.4.6 实践练习
经过本章的学习,你已经了解到 BaseMessage
在 CAMEL 系统中的定位与重要性。从基本的文本消息,到包含图片、元数据的多模态消息,再到如何将这些消息与 ChatAgent
进行整合,本章为你搭建了一个基础框架,让你能自如地操控消息流。以下是一些可以尝试的探索方向。
-
扩展消息属性:
创建一个用户消息,并在meta_dict
中增加若干条元数据(如用户偏好、语言设置等)。将该消息传递给ChatAgent
,观察系统在回答中是否有所变化。 -
多轮对话场景:
使用BaseMessage
连续发送多条用户消息,模拟多轮对话。比如,先询问 CAMEL 的用途,然后再根据回复提出后续问题,看看ChatAgent
是否能保持上下文连贯。 -
多模态信息尝试:
尝试传入不同图片或使用image_detail
等参数,观察ChatAgent
的回答变化。可以试试让ChatAgent
对比两张不同的图片,并描述区别。 -
与 OpenAI 接口整合(可选,进阶挑战):
将生成的BaseMessage
转为 OpenAI 后端可用的消息格式,然后使用 OpenAI 的 ChatCompletion 接口来获取答案。比较一下与ChatAgent
内部实现的响应有何不同。
相关文章:
什么是 Agent 的 Message
Messages 2.4.1 概述 什么是 Agent 的 Message? 当你和朋友聊天、在网上搜索信息或是对手机语音助手说“帮我查一下天气”时,其实你都在向某个“代理者(Agent)”发送一条“信息(Message)”。这里的“代理者”既可以是一个人,也可以是一个能执…...
如何用JAVA手写一个Tomcat
一、初步理解Tomcat Tomcat是什么? Tomcat 是一个开源的 轻量级 Java Web 应用服务器,核心功能是 运行 Servlet/JSP。 Tomcat的核心功能? Servlet 容器:负责加载、实例化、调用和销毁 Servlet。 HTTP 服务器:监听端口…...
WebRTC与RTSP|RTMP的技术对比:低延迟与稳定性如何决定音视频直播的未来
引言 音视频直播技术已经深刻影响了我们的生活方式,尤其是在教育、医疗、安防、娱乐等行业中,音视频技术成为了行业发展的重要推动力。近年来,WebRTC作为一种开源的实时通信技术,成为了音视频领域的重要选择,它使得浏览…...
COMPUTEX 2025 | 广和通创新解决方案共筑AI交互新纪元
5月20日至23日,广和通携多领域创新解决方案亮相2025年台北国际电脑展(COMPUTEX 2025),台北南港展览馆#K0727a展位。此次展会,广和通围绕“Advancing Connectivity Intelligent Future”为主题,设置四大核心…...
COMPUTEX 2025 | 广和通率先发布基于MediaTek T930 平台的5G模组FG390
5月19日,全球领先的无线通信模组和AI解决方案提供商广和通率先发布基于MediaTek T930平台的5G模组FG390系列。FG390系列模组为以5G固定无线接入(Fixed Wireless Access,FWA)为代表的MBB终端产品而设计,将在CPE…...
Power Integrations 汽车电源管理方案:为汽车应用增加系统价值
在新能源汽车产业蓬勃发展的当下,高效的电源管理方案成为提升汽车性能与可靠性的关键。近期,Power Integrations 举办线上交流会,介绍了基于其 1700V InnoSwitch3-AQ 反激式开关 IC 的五款全新参考设计,旨在为 800V 纯电动汽车提供…...
汽车转向系统行业2025数据分析报告
汽车转向系统市场概况 2024年全球汽车转向系统市场规模约为2769.4亿元,预计到2031年将增长至3296.3亿元,年均复合增长率(CAGR)为2.5%。这一增长主要得益于汽车行业的持续发展以及转向系统技术的不断进步。 市场驱动因素 汽车转…...
Tiny C 编译器中,如何实现宏展开和头文件包含的预处理逻辑?
首先,预处理的主要功能包括宏展开、头文件包含、条件编译等。用户的问题主要集中在宏展开和头文件包含,所以需要分别考虑这两个部分。 关于宏展开,首先需要解析#define指令。编译器在预处理阶段需要维护一个符号表,用来存储宏的名…...
谈谈 Kotlin 中的构造方法,有哪些注意事项?
在 Kotlin 中,构造方法分为主构造方法(Primary Constructor)和次构造方法(Secondary Constructor)。 1 主构造方法 主构造方法是类的核心构造方法,直接在类头声明,位于类名之后。 1.1 基本语…...
Elasticsearch常用命令
以下是 Elasticsearch 查看集群状态配置和索引完整操作流程的详细命令: 一、查看集群状态与配置 1. 集群健康状态 curl -X GET "localhost:9200/_cluster/health?pretty" 关键参数: level=indices:显示每个索引的健康状态 level=shards:显示每个分片的详细状…...
深入解读RTP协议:RFC 3550的技术分析与应用
引言 实时传输协议(RTP),作为一项重要的技术规范,在多媒体通信中扮演着至关重要的角色。尤其在音视频传输中,RTP为媒体流提供了端到端的传输机制,能够支持高质量、低延迟的音视频数据流传输。随着互联网及…...
使用 electron-builder 打包与发布 Electron 应用
基于 electron-vite-vue 项目结构 本文将基于 electron-vite-vue 脚手架,详细介绍如何使用 electron-builder 实现: ✅ 多平台打包(Windows / macOS / Linux)✅ 自动更新发布配置✅ 常用构建脚本与输出结构 📁 项目结…...
命令行删除node_modules
文章目录 前言一、linux二、windows 前言 最近公司在重构项目,使用的monorepo,这就导致多个项目有多个node_modules。所以在主项目的package.json中写一个清除所有项目的node_modules。第一次研究命令行的代码,记录一下。但我感觉我写的不太…...
naive-ui切换主题
1、在App.vue文件中使用 <script setup lang"ts"> import Dashboard from ./views/dashboard/index.vue import { NConfigProvider, NGlobalStyle, darkTheme } from naive-ui import { useThemeStore } from "./store/theme"; // 获取存储的主题类…...
开源Vue表单设计器FcDesigner中组件联动的配置教程
在用FcDesigner表单开发中,经常需要实现组件之间的联动行为,例如当某个输入框的值满足特定条件时,动态显示或隐藏其他组件。FormCreate 提供了强大的组件联动功能,通过 control 配置项实现组件的加载、显示、禁用和必填等状态控制…...
使用 Shadcn UI 构建 Java 桌面应用
许多桌面应用程序,如 Slack、Notion、Microsoft Teams 和 Linear,都采用基于 Web 的用户界面。这已成为现代软件开发中的常见做法,开发者可以借助熟悉的 Web 技术构建应用,从而简化开发流程。 在本篇文章中,我们将向您…...
25_05_19Linux实战篇、第一章_01若依前后端部署之路(后端)
Linux_实战篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:若依前后端动静分离(后端 ) 版本号: 1.0,0 作者: 老王要学习 日期: 2025.05.20 适用环境: Rocky9.5 文档说明 本文围绕 Linux 实战展开&#x…...
Python慕课学习记录
中国大学MOOC(慕课)观看记录: Python123课后相应的练习、考试记录...
2025年渗透测试面试题总结-快手[实习]安全工程师(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 快手[实习]安全工程师 一面问题分析与详细回答 1. 自我介绍 4. 项目问题与解决 7. 防止SQL注入&…...
【iOS(swift)笔记-10】利用类的继承来实现不同地区语言的显示
XCode项目原生开发有自带的可区分语言的功能体系,建议采用原生开发,此处利用类的继承来实现不同地区语言的显示是为了方便,而且在unity游戏开发中采用此法也挺灵活适用。 // 定义一个语言控制类 class LanguageController { // 根据系统切换…...
C语言中的弱符号 __attribute__((weak)) 的使用方法
以下是一个脱离 CallStack.h 的极简 C 语言示例,通过 弱符号覆盖 和 运行时检查 两个场景,展示 __attribute__((weak)) 的核心用法: 一、代码实现 1. 弱符号定义与覆盖(weak_demo.c) // weak_demo.c #include <st…...
禁止window安全中心乱删文件
将文件/文件夹添加到 Defender 排除列表 如果你确定文件安全,可以将其添加到 排除列表,防止 Defender 误删: Windows 安全中心 → “病毒和威胁防护” → “管理设置”。 下拉找到 “排除项” → “添加或删除排除项”。 点击 “ 添加排除…...
【JavaScript异步编程终极指南】从回调地狱到Async/Await的实战突围
目录 🌍 前言:技术背景与价值💔 当前技术痛点🛠 解决方案概述👥 目标读者说明🔍 一、技术原理剖析🧠 核心作用讲解🧩 关键技术模块说明⚖️ 技术选型对比 💻 二、实战演示…...
【算法专题十五】BFS解决最短路问题
文章目录 1.最短路问题简介(边权为1的最短路问题)2.迷宫中离入口最近的出口2.1 题目2.2 思路2.3 代码 3.最小基因变化3.1 题目3.2 思路3.3 代码 4.单词接龙4.1 题目4.2 思路4.3 代码 5.为高尔夫比赛砍树5.1 题目5.2 思路5.3 代码 1.最短路问题简介&#…...
upload-labs通关笔记-第16关 文件上传之exif_imagetype绕过(图片马)
目录 一、exif_imagetype 二、开启exif模块 1、phpstudy设置勾选php_exif模块 2、php.ini文件配置开启php_exif模块 三、源码分析 四、图片马 1、图片马概念 2、图片马制作 五、渗透实战 1、上传图片马 2、利用文件包含访问图片马 (1)jpg …...
力扣-两数之和
1.题目描述 2.题目链接 LCR 006. 两数之和 II - 输入有序数组 - 力扣(LeetCode) 3.题目代码 class Solution {public int[] twoSum(int[] numbers, int target) {int[]retnew int[2];int left0,rightnumbers.length-1;while(left<right){if(numbe…...
什么是大数据?
大数据的详细定义 大数据是来自计算机、移动设备和机器传感器的海量数据(数万亿字节)。企业利用这些数据推动决策、改进流程和政策,并打造以客户为中心的产品、服务和体验。大数据之所以被定义为 “大”,不仅在于其体量ÿ…...
25_05_19Linux实战篇、第一章_02若依前后端部署之路(前端)
Linux_实战篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:若依前后端动静分离(前端) 版本号: 1.0,0 作者: 老王要学习 日期: 2025.05.21 适用环境: Rocky9.5 文档说明 环境准备 硬件要求 服务器&…...
SuperVINS:应对挑战性成像条件的实时视觉-惯性SLAM框架【全流程配置与测试!!!】【2025最新版!!!!】
一、项目背景及意义 SuperVINS是一个改进的视觉-惯性SLAM(同时定位与地图构建)框架,旨在解决在挑战性成像条件下的定位和地图构建问题。该项目基于经典的VINS-Fusion框架,但通过引入深度学习方法进行了显著改进。 视觉-惯性导航系…...
【后端】【UV】【Django】 `uv` 管理的项目中搭建一个 Django 项目
🚀 一步步搭建 Django 项目(适用于 uv pyproject.toml 项目结构) 🧱 第 1 步:初始化一个 uv 项目(如果还没建好) uv init django-project # 创建项目,类似npm create vue⚙️ 第 …...
sqlsugar查看表结构并导出word文档
前提 SqlSugar 5.1.4 MiniWord 0.9.2 使用 using MiniSoftware; using SqlSugar;namespace ConsoleApp5 {internal class Program{/// <summary>/// 导出数据库表结构和字段信息/// https://www.donet5.com/Home/Doc?typeId1203/// </summary>/// <param n…...
【机器学习】支持向量机(SVM)
目录 一、支持向量机基本概念 1.1 定义 1.2 支持向量:距离超平面最近的样本点,决定了超平面的位置。 二、线性支持向量机 2.1 硬间隔支持向量机 2.2 软间隔支持向量机 三、非线性支持向量机 3.1 核函数 3.2 常用核函数 3.2.1 线性核:…...
[Java实战]Spring Boot整合MinIO:分布式文件存储与管理实战(三十)
[Java实战]Spring Boot整合MinIO:分布式文件存储与管理实战(三十) 一、MinIO简介与核心原理 MinIO 是一款高性能、开源的分布式对象存储系统,兼容 Amazon S3 API,适用于存储图片、视频、日志等非结构化数据。其核心特…...
SpringBoot微服务编写Dockerfile流程及问题汇总
背景 跟 Docker 磕了两天,将一个包含 N 个微服务的应用部署包改造,使其能够生成 Docker 镜像,并在 Docker 容器中运行。几年前玩过 Docker,隐约记得几个命令「Dockerfile 命令:黑卡饮料、山楂果费、哦SUV,…...
PostgreSQL使用
一、PostgreSQL语法 PostgreSQL表、模式、库三者之间的关系 库 -> 模式 -> 表、视图、函数等等对象。 在postgresql的交互式终端psql中,“\”开头的命令称为元命令(类似mysql的show语句),用于快速管理数据库。 常见元命令&…...
现代化SQLite的构建之旅——解析开源项目Limbo
现代化SQLite的构建之旅——解析开源项目Limbo 在当今飞速发展的技术世界中,轻量级且功能强大的数据库已成为开发者的得力助手。当我们谈论轻量级数据库时,SQLite无疑是一个举足轻重的名字。然而,随着技术的进步,我们对数据库的需…...
MySQL 主从复制搭建全流程:基于 Docker 与 Harbor 仓库
一、引言 在数据库管理中,MySQL 主从复制是一种非常重要的技术,它可以实现数据的备份、读写分离,减轻主数据库的压力。本文将详细介绍如何使用 Docker 和 Harbor 仓库来搭建 MySQL 主从复制环境,适合刚接触数据库和 Docker 的新手…...
网页表格转换为markdown
网页表格到Markdown:一键转换,复制即用! 在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,以便在文档、邮件或论坛中使用。然而,手动转换不仅耗时,还容易…...
MySQL字符串拼接方法全解析
目录 常用字符串处理函数 方法一:CONCAT基础拼接 方法二:CONCAT_WS带分隔符拼接 方法三:GROUP_CONCAT分组拼接 方法四:算术运算符拼接(仅限数字) 常用字符串处理函数 方法一:CONCAT基础拼接…...
零基础教程:用 Docker + pgloader 将 MySQL 数据库迁移到 PostgreSQL
在日常开发中,可能会遇到从 MySQL 迁移到 PostgreSQL 的需求。你也许是: 正在准备从传统架构转向云原生;想使用 PostgreSQL 更强的事务与 JSON 支持;想统一团队数据库技术栈;纯粹为了尝试学习不同的数据库系统。 别担…...
影刀Fun叉鸟-2048
文章目录 仅为自动化演示,实际2048判定逻辑需要更加严谨 参考代码 # 使用提醒: # 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能 # 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能 # 3. 当此模块作…...
uni-app(2):页面
1 页面简介 uni-app项目中,一个页面就是一个符合Vue SFC规范的 vue 文件。 在 uni-app js 引擎版中,后缀名是.vue文件或.nvue文件。 这些页面均全平台支持,差异在于当 uni-app 发行到App平台时,.vue文件会使用webview进行渲染&…...
【spring】spring学习系列之十一:spring的事件监听
系列文章目录 文章目录 系列文章目录前言一、使用二、整体流程三、EventListenerMethodProcessor和DefaultEventListenerFactory1.EventListenerMethodProcessor2.DefaultEventListenerFactory3.ApplicationListenerDetector4.initApplicationEventMulticaster5.registerListen…...
代码随想录打卡|Day45 图论(孤岛的总面积 、沉没孤岛、水流问题、建造最大岛屿)
图论part03 孤岛的总面积 代码随想录链接 题目链接 视频讲解链接 思路:既然某个网格在边界上的岛屿不是孤岛,那么就把非 孤岛的所有岛屿变成海洋,最后再次统计还剩余的岛屿占据的网格总数即可。 dfs: import java.util.Scanner…...
AI人工智能——Matplotlib绘制各种数据可视化图表的基础方法
一、绘制图像基础 import matplotlib.pyplot as plt# 1、创建画布 plt.figure(figsize(20, 8), dpi100) # 2、绘制图像 x [1, 2, 3, 4, 5, 6] y [3, 5, 4, 3, 6, 1] plt.plot(x, y) # 3、显示图像 plt.show() 二、图像保存 import matplotlib.pyplot as plt# 1、创建画布 p…...
亚马逊AWS跑不动了?
5月2日,亚马逊公布了2025年第一季度的财报。财报数据显示,云计算业务增速放缓以及第二季度的指引低于预期。事实上,这并不是亚马逊AWS第一次增速放缓。 亚马逊AWS作为全球第一大云计算服务公司,这些年跟微软云、谷歌云等其他云计…...
PyTorch中cdist和sum函数使用详解
torch.cdist 是 PyTorch 中用于计算**两个张量之间的成对距离(pairwise distance)**的函数,常用于点云处理、图神经网络、相似性度量等场景。 基本语法 torch.cdist(x1, x2, p2.0)参数说明: 参数说明x1一个形状为 [B, M, D] 或 …...
PyTorch的基本操作
前言 为了方便大家学习,我整理了PyTorch全套学习资料,包含配套教程讲义和源码 除此之外还有100G人工智能学习资料 包含数学与Python编程基础、深度学习机器学习入门到实战,计算机视觉自然语言处理大模型资料合集,不仅有配套教程…...
分类算法 Kmeans、KNN、Meanshift 实战
任务 1、采用 Kmeans 算法实现 2D 数据自动聚类,预测 V180,V260 数据类别; 2、计算预测准确率,完成结果矫正 3、采用 KNN、Meanshift 算法,重复步骤 1-2 代码工具:jupyter notebook 视频资料 无监督学习ÿ…...
aws平台s3存储桶夸域问题处理
当我们收到开发反馈s3存在跨域问题 解决步骤: 配置 S3 存储桶的 CORS 设置: 登录到 AWS 管理控制台。转到 S3 服务。选择你存储文件的 存储桶。点击 权限 标签页。在 跨域资源共享(CORS)配置 部分,点击 编辑。 登陆…...