5天速成ai agent智能体camel-ai之第1天:camel-ai安装和智能体交流消息讲解(附源码,零基础可学习运行)
嗨,朋友们!👋 是不是感觉AI浪潮铺天盖地,身边的人都在谈论AI Agent、大模型,而你看着那些密密麻麻的代码,感觉像在读天书?🤯
别焦虑!你不是一个人。很多人都想抓住AI的风口,提升自己,却被技术门槛拦在门外。特别是那些想快速上手、做出点东西的朋友,看到复杂的框架和概念就头大。😥
但今天,我要给你一把钥匙🔑,一把能让你快速解锁AI Agent核心沟通机制的钥匙。我们将聚焦一个强大而友好的框架——CAMEL AI,特别是它的“消息(Message)”系统。这可是构建智能体的“神经网络”!
为什么是CAMEL AI?为什么是“消息”?
想象一下,AI Agent就像一个超级智能的员工。你要让它工作,总得跟它说话吧?“消息”就是你和AI Agent,以及AI Agent之间沟通的语言。搞懂了消息,你就掌握了指挥AI干活的核心!而CAMEL AI在消息处理上设计得非常巧妙和强大。
更重要的是,这篇文章会带你用5天(甚至更短!)的时间,从零开始,通过看得懂的语言和可运行的代码,彻底搞明白CAMEL AI的消息机制。别怕,即使你是编程小白,跟着步骤也能上手!🚀
先安装依赖:pip install "camel-ai[all]==0.2.38"
第一天:初识“砖块” - 万能的`BaseMessage`
所有复杂的对话,都是由一条条基本的消息组成的。在CAMEL AI里,这个最基本的“砖块”就是`BaseMessage`。它就像一个标准的信封,里面装着你要传递的信息。
这个“信封”上必须有几个要素:
* `role_name`: 发件人是谁?(比如:“用户小明”、“智能助手”)
* `role_type`: 发件人的角色类型?(是`USER`用户,还是`ASSISTANT`助手?)
* `content`: 信的内容是啥?(比如:“你好啊!”)
听起来很简单?别急,`BaseMessage`的厉害之处在于,它不仅能装文字,还能装图片!📸
看看这段代码:
from PIL import Image
from io import BytesIO
import requests
from camel.messages import BaseMessage
from camel.types import RoleType
# 1. 从网上下载一张图片
url = "https://raw.githubusercontent.com/camel-ai/camel/master/misc/logo_light.png"
response = requests.get(url) # 发送请求,把图片数据拿回来
img = Image.open(BytesIO(response.content)) # 用PIL库打开图片数据,变成一个图片对象
# 2. 创建一个包含图片的消息
image_message = BaseMessage(
role_name="User_with_image", # 发件人名字
role_type=RoleType.USER, # 角色是用户
content="你看这张图怎么样?", # 文字内容
meta_dict={}, # 元数据,暂时不用管
image_list=[img] # 关键!把图片对象放进列表里传进去
)
print(image_message) # 打印看看这个带图片的消息长啥样
看明白了吗?我们用`requests`库从网上抓了张图,用`PIL`和`BytesIO`把它处理成程序认识的图片格式,然后把它塞进了`BaseMessage`的`image_list`参数里。
划重点:`BaseMessage`是基石,它定义了通信的基本单元,并且天生支持多模态(文字+图片)!这一下就让你的AI Agent拥有了“看图说话”的潜力!是不是有点小激动?🤩
第二天:偷个小懒 - 便捷的“快捷方式”
每次都写那么多参数创建`BaseMessage`有点烦?CAMEL AI早就替你想好了!对于最常用的用户消息和助手消息,它提供了“快捷方式”:
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)
# 你还可以把消息转换成字典格式,方便查看或传输
msg_dict = image_message.to_dict() # 把前面带图片的消息转成字典
print("Message as dict:", msg_dict)
`make_user_message`和`make_assistant_message`这两个函数,是不是让代码清爽多了?它们本质上还是创建`BaseMessage`,但帮你预设了`role_type`等信息。
同时,`.to_dict()`方法也很有用,它可以把消息对象变成Python字典,方便你检查里面的具体内容,或者序列化(比如存成JSON文件)。
第三天:走向世界 - 与OpenAI“接轨”
现在很多强大的AI模型(比如GPT系列,或者国内很多兼容其API的模型)都遵循OpenAI的API格式。你的CAMEL AI Agent要想和这些模型对话,就需要把自己的消息“翻译”成它们能听懂的格式。
CAMEL AI又提供了贴心工具:
from camel.types import OpenAIBackendRole
# 把我们之前创建的用户消息,转换成OpenAI API认识的用户消息格式
openai_user_msg = user_msg.to_openai_message(role_at_backend=OpenAIBackendRole.USER)
print("OpenAI-compatible user message:", openai_user_msg)
# 把助手消息,也转换成OpenAI API认识的助手消息格式
openai_assistant_msg = assistant_msg.to_openai_assistant_message()
print("OpenAI-compatible assistant message:", openai_assistant_msg)
`to_openai_message`和`to_openai_assistant_message`就是这个“翻译官”。它们接收CAMEL AI的`BaseMessage`,输出符合OpenAI规范的字典。`role_at_backend`参数指定了在对方系统里这条消息应该扮演什么角色(比如`USER`或`ASSISTANT`)。
为什么这很重要? 因为这意味着用CAMEL AI构建的Agent,可以轻松地接入各种不同的大模型后端!无论是OpenAI的GPT,还是国内支持OpenAI API格式的各种模型(比如代码示例里的Qwen通义千问),都能无缝切换。灵活性大大提升!💪
第四天:实战演练 - 让Agent看图说话!
理论学得差不多了,是时候让我们的Agent动起来了!这次,我们来个真刀真枪的演练:让Agent接收一张图片,并描述图片内容。
import os
from dotenv import load_dotenv # 用于加载环境变量中的API Key
from camel.agents import ChatAgent
from camel.messages import BaseMessage
from camel.models import ModelFactory
from camel.types import ModelPlatformType, RoleType
from io import BytesIO
import requests
from PIL import Image
# 1. 准备工作:加载你的API Key (需要先设置好)
load_dotenv() # 从 .env 文件加载环境变量
api_key = os.getenv('QWEN_API_KEY') # 读取你的通义千问API Key
# 2. 选择“大脑”:创建模型实例
# 这里用了通义千问Qwen的多模态模型,通过兼容OpenAI的接口访问
model = ModelFactory.create(
model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL, # 平台类型
model_type="qwen-vl-max", # 模型名称 (注意:这里用了更新的、更常用的模型名)
url='https://dashscope.aliyuncs.com/compatible-mode/v1', # 阿里云DashScope的兼容接口地址
api_key=api_key, # 传入你的API Key
model_kwargs = {"temperature": 0.0} # 可以加一些模型参数,比如温度设为0让输出更稳定
)
# 3. 创建“执行者”:实例化ChatAgent
chat_agent = ChatAgent(model=model, output_language='中文') # 把模型传给Agent,并指定输出中文
# 4. 准备“任务”:下载图片并创建带图片的用户消息
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] # 把图片加进去!
)
# 5. “开工!”:将消息发送给Agent,等待回复
print("正在请求AI描述图片,请稍候...")
response_with_image = chat_agent.step(user_image_msg) # 最关键的一步!
# 6. 查看“成果”:打印Agent的回复
if response_with_image and response_with_image.msgs:
print("AI助手对图片的描述:", response_with_image.msgs[0].content)
else:
print("未能获取到有效的回复。")
if response_with_image and response_with_image.info:
print("附带信息:", response_with_image.info)
这段代码做了什么?
1. 配置环境:加载API Key(你需要先申请并在`.env`文件里配置好)。这是调用大模型服务的“通行证”。
2. 选定模型:通过`ModelFactory`指定我们要用的模型(这里是Qwen的多模态模型),并传入API地址和Key。这就是Agent的“大脑”。
3. 创建Agent:实例化`ChatAgent`,把选好的模型装进去。这是具体干活的“人”。
4. 准备输入:下载一张图片,用我们学过的`make_user_message`创建一个包含文字指令和图片的消息。
5. 执行任务:调用`chat_agent.step(user_image_msg)`。这是核心!Agent接收到包含图片的消息,会调用模型进行处理。
6. 获取结果:`step`方法返回一个响应对象,我们从中提取Agent回复的消息内容并打印出来。
看到AI真的能“看懂”图片并用中文描述出来,是不是成就感爆棚?!🥳 这就是掌握CAMEL AI消息机制的威力!
第五天:解剖回信 - 理解Agent的反馈`ChatAgentResponse`
Agent干完活,会给你一个“工作报告”,这就是`ChatAgentResponse`对象。它里面包含了什么呢?
from camel.responses import ChatAgentResponse
from camel.messages import BaseMessage
from camel.types import RoleType
# 假设这是Agent执行完step后返回的响应对象 (我们模拟一个)
response = ChatAgentResponse(
msgs=[ # 这里是一个列表,可能包含多条消息
BaseMessage(
role_name="Assistant", # 回复者的名字
role_type=RoleType.ASSISTANT, # 角色是助手
content="你好,这张图片描绘了一只可爱的卡通小动物...", # 助手的回复内容
meta_dict={} # 元数据
)
],
terminated=False, # 会话是否结束?(False表示还可以继续聊)
info={"usage": {"prompt_tokens": 120, "completion_tokens": 85, "total_tokens": 205}} # 附加信息,比如token消耗量
)
# 如何从Response对象里获取信息?
messages = response.msgs # 获取Agent生成的消息列表 (通常只有一条)
is_terminated = response.terminated # 获取会话是否终止的状态
additional_info = response.info # 获取附加信息 (比如token统计)
# 打印出来看看
if messages:
print("消息内容:", messages[0].content)
print("会话是否终止:", is_terminated)
print("附加信息:", additional_info)
`ChatAgentResponse`主要包含三部分:
* `msgs`: 一个列表,包含了Agent生成的`BaseMessage`对象。通常情况下,调用一次`step`,这里面会有一条助手的回复消息。
* `terminated`: 一个布尔值(True/False),表示当前的对话流程是否应该结束。比如Agent判断任务已完成,或者达到了某个终止条件。
* `info`: 一个字典,包含一些额外信息。最常见的就是`usage`,记录了这次交互消耗了多少token(这通常关系到你的API调用成本)。
理解了`ChatAgentResponse`,你就能准确地拿到Agent的输出,判断对话状态,还能监控资源消耗。这对于开发复杂的、连续的Agent应用至关重要!
总结:你已经掌握了AI Agent的“沟通密码”!
恭喜你!🎉 通过这篇文章的阅读,你已经:
1. 理解了CAMEL AI消息系统的核心`BaseMessage`,以及它处理文本和图片的能力。
2. 学会了使用便捷方法创建用户和助手消息。
3. 知道了如何让CAMEL AI的消息与主流OpenAI API格式兼容,对接各种大模型。
4. 亲手实践了一个让AI Agent看图说话的完整例子!
5. 掌握了如何解析Agent的回复`ChatAgentResponse`,获取结果和状态。
这不仅仅是学会了几行代码,你掌握的是与未来智能体沟通的基础逻辑!这套消息机制,就是构建更复杂、更强大AI Agent的起点。
现在,轮到你了! 👇
* 你觉得CAMEL AI的消息机制设计得怎么样?简单吗?强大吗?
* 你最想用这个技术来构建一个什么样的AI Agent?帮P图?自动写报告?还是...?
* 在学习过程中遇到了什么困难?或者有什么更有趣的想法?
在评论区留下你的想法和问题吧!让我们一起交流,一起进步!
如果你觉得这篇文章对你有帮助,别忘了点赞👍、在看👀、转发↗️给更多需要的朋友!你的支持是我继续分享的动力!💖
如果不会安装python,请看这一篇
零基础打造AI agent智能体!Windows从安装Python到调用顶级API,10分钟速成攻略!
#AI #人工智能 #Agent #CAMELAI #Python #编程 #AI绘画 #多模态 #教程 #大模型 #通义千问 #技术干货 #职场提升
相关文章:
5天速成ai agent智能体camel-ai之第1天:camel-ai安装和智能体交流消息讲解(附源码,零基础可学习运行)
嗨,朋友们!👋 是不是感觉AI浪潮铺天盖地,身边的人都在谈论AI Agent、大模型,而你看着那些密密麻麻的代码,感觉像在读天书?🤯 别焦虑!你不是一个人。很多人都想抓住AI的风…...
Unity UGUI使用手册
概述 UGUI(Unity Graphical User Interface) :Unity 图像用户界面 在游戏开发中,我们经常需要搭建一些图形用户界面。Unity内置的UGUI可以帮助开发者可视化地拼接界面,提高开发效率。UGUI提供不同样式的UI组件,并且封装了对应功能的API&am…...
(二)输入输出处理——打造智能对话的灵魂
上一篇:(一)从零开始:用 LangChain 和 ZhipuAI 搭建简单对话 在上一篇文章中,我们成功搭建了一个基于 LangChain 和 ZhipuAI 的智能对话系统的基础环境。今天,我们将深入探讨输入输出处理的细节࿰…...
beego文件上传
1file.go 2html代码 3路由设置 beego.Router("/file/Upload", &controllers.FileUploadController{}, "post:Upload") 注意 1,得新建个upload文件夹 2,路由设置严格区分大小写。 biiego文件下载上传代码 github 觉得不错Star下...
代码随想录回溯算法01(递归)
回溯法也可以叫做回溯搜索法,它是一种搜索的方式。 回溯是递归的副产品,只要有递归就会有回溯。 所以以下讲解中,回溯函数也就是递归函数,指的都是一个函数。 组合问题:N个数里面按一定规则找出k个数的集合切割问题&am…...
分治-归并排序-逆序对问题
目录 1.升序(以右边的合并组为基准) 2.降序(以左边的合并组为基准) 3.逆对序--固定下标 1.升序(以右边的合并组为基准) 找出左边有多少个数比我(nums[right])大 应该在每一次合并之前,进行…...
mysql-getshell的几种方法
mysql_getshell的几种方法 mysql_getshell 一、mysql的–os-shell 利用原理 –os-shell就是使用udf提权获取WebShell。也是通过into oufile向服务器写入两个文件,一个可以直接执行系统命令,一个进行上传文件。此为sqlmap的一个命令,利用这…...
初阶数据结构--树
1. 树的概念与结构 树是⼀种⾮线性的数据结构,它是由 n(n>0) 个有限结点组成⼀个具有层次关系的集合。把它叫做 树是因为它看起来像⼀棵倒挂的树,也就是说它是根朝上,⽽叶朝下的。 有⼀个特殊的结点,称…...
搭建redis主从同步实现读写分离(原理剖析)
搭建redis主从同步实现读写分离(原理剖析) 文章目录 搭建redis主从同步实现读写分离(原理剖析)前言一、搭建主从同步二、同步原理 前言 为什么要学习redis主从同步,实现读写分析。因为单机的redis虽然是基于内存,单机并发已经能支撑很高。但是随着业务量…...
Python3 学习笔记
Python3 简介 | 菜鸟教程 一 Python3 简介 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色…...
kmpmanacher
KMP 理论 KMP算法的核心是构建一个部分匹配表,也称为前缀表。这个表记录了模式串中每个位置之前的最长公共前缀和后缀的长度。例如,对于模式串"ababaca",其部分匹配表如下: 位置0123456字符ababaca最长公共前后缀长度…...
ts基础知识总结
TypeScript(简称TS)是JavaScript(简称JS)的一个超集,它在JS的基础上增加了静态类型检查、类、模块等特性。 TypeScript 与 JavaScript 的不同及好处 不同点 类型系统 JavaScript 是一种弱类型语言,这意味…...
操作系统内存管理
为什么要有虚拟内存 单片机的CPU直接操作内存的物理地址,这就导致在内存中同时运行两个程序是不可能的,有可能会出现第一个程序在2000的位置写入新的值将会擦掉第二个程序存放在相同位置上的内容。 出现这个问题的根本原因是两个程序引用了绝对物理地址。…...
M芯片,能运行普通应用程序的原架构虚拟机
在我们使用搭载了Apple芯片的Mac时,很多时候会用到windows虚拟机来使用windows应用程序 但是Apple芯片是ARM架构,如果运行原价构的虚拟机,很多64位的普通应用程序就无法运行,如果使用UTM来安装64位的跨架构虚拟机,就会非常卡慢 但实际上使用一种特殊的系统镜像,就可以使用ARM…...
多功能指示牌的主要功能有哪些?
哇哦!咱们的多功能指示牌可有着超多超厉害的主要功能哦,简直就是生活中的超级小助手,涵盖了方方面面呢! 指示导向功能 道路指引:不管是在繁华热闹的城市道路,还是车水马龙的高速公路,亦或是风…...
Superset 问题
和nginx结合使用,如果不是配置到根路径,会比较麻烦,我试了很多种方法,也就 这个 靠谱点,不过,我最后还是选择的部署在根路径,先探索一番再说默认不能选择mysql数据库,需要安装mysql客…...
安装gpu版本的dgl
1.先去网址,找到对应版本的dgl,然后下载到本地。 dgl-whl下载地址 我的是python 3.8 ,cuda 11.6. windows 2.在虚拟环境里 输入 pip install E:\dgl-1.0.2cu116-cp38-cp38-win_amd64.whl (因为我下载到E盘里了) 这样GPU版本的d…...
vue watch和 watchEffect
在 Vue 3 中,watch 和 watchEffect 是两个用于响应式地监听数据变化并执行副作用的 API。它们在功能上有一些相似之处,但用途和行为有所不同。以下是对 watch 和 watchEffect 的详细对比和解释: 1. watch watch 是一个更通用的 API…...
JavaScript基础--03-变量的数据类型:基本数据类型和引用数据类型
JavaScript基础--03-变量的数据类型:基本数据类型和引用数据类型 前言变量的数据类型为什么需要数据类型JS中一共有六种数据类型 一个经典的例子栈内存和堆内存 前言 我们接着上一篇文章 JavaScript基础–02-变量 来讲。 下一篇文章 JavaScript基础–04-基本数据类…...
WindowsPE文件格式入门05.PE加载器LoadPE
https://bpsend.net/thread-316-1-1.html LoadPE - pe 加载器 壳的前身 如果想访问一个程序运行起来的内存,一种方法就是跨进程读写内存,但是跨进程读写内存需要来回调用api,不如直接访问地址来得方便,那么如果我们需要直接访问地址,该怎么做呢?.需要把dll注进程,注进去的代码…...
【Redis】通用命令
使用者通过redis-cli客户端和redis服务器交互,涉及到很多的redis命令,redis的命令非常多,我们需要多练习常用的命令,以及学会使用redis的文档。 一、get和set命令(最核心的命令) Redis中最核心的两个命令&…...
Android学习总结之service篇
引言 在 Android 开发里,Service 与 IntentService 是非常关键的组件,它们能够让应用在后台开展长时间运行的操作。不过,很多开发者仅仅停留在使用这两个组件的层面,对其内部的源码实现了解甚少。本文将深入剖析 Service 和 Inte…...
基于CATIA产品结构树智能排序的二次开发技术解析——深度定制BOM层级管理系统的Pycatia实践
引言 在航空制造与汽车装配领域,CATIA产品结构树(Product Tree)的规范性直接影响MBOM管理效率。传统手动排序存在两大痛点: 多级编号混乱:混合零件号(PartNumber)与实例名(Insta…...
机器人轨迹跟踪控制——CLF-CBF-QP
本次使用MATLAB复现CLF-CBF-QP算法,以实现机器人轨迹跟踪同时保证安全性能 模型 使用自行车模型来进行模拟机器人的移动动态,具体的模型推导参考车辆运动学模型-自行车模型 采用偏差变量 p ~ = p − p r e f u ~ = u − u r e f \tilde{p} = p - p_{ref} \\ \tilde{u} = …...
道路裂缝数据集CrackForest-156-labelme
来源于开源的数据集 https://github.com/cuilimeng/CrackForest-dataset 进行整理修改而成。 文章目录 1. 介绍2. 数据文件3. 应用场景4. 相关工具5. 下载地址 1. 介绍 在现代城市管理中,道路状况的监测与维护是确保交通安全和城市基础设施健康的重要环节。 CrackF…...
数据定义语言
一、DDL的核心功能 DDL用于定义和管理数据库对象的结构,包括数据库、表、索引、视图等,主要操作包括创建、修改、删除。其核心命令包括: CREATE:创建对象(数据库、表、索引等) ALTER:修改对象结构(如添加/删除列) DROP:删除对象 TRUNCATE:清空表数据(保留结构) RE…...
爬楼梯问题-动态规划
一、题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 方法1. 1 阶 1 阶 方法2. 2 阶…...
MySQL篇(四)事务相关知识详解
MySQL篇(四)事务相关知识详解 MySQL篇(四)事务相关知识详解一、事务的特性(ACID)原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(…...
C++第14届蓝桥杯b组学习笔记
1. 日期统计 小蓝现在有一个长度为 100100 的数组,数组中的每个元素的值都在 00 到 99 的范围之内。数组中的元素从左至右如下所示: 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4…...
4.5蓝桥杯|高塔登顶方案(5025)
作者语录: 1、 从不会做到会做的过程,从不理解到不理解的过程,从一个不会做这道题的人的角度出发看这个问题,好命苦嗷嗷嗷! 2、只有我受煎熬吗,偶买噶,,, 目录 研究步骤…...
[MySQL初阶]MySQL(9)事务机制
标题:[MySQL初阶]MySQL(9)事物机制 水墨不写bug 文章目录 一、认识事务1、多线程访问数据库出现的问题2、对CURD的限制是通过事务机制实现的3、事务的四个属性4、哪些引擎支持事务 二、事务的提交与autocommit设置三、事务的隔离性和隔离级别…...
3535 数组分割
3535 数组分割 ⭐️难度:困难 🌟考点:2023、省赛、动态规划 📖 📚 import java.util.*;public class Main {static int MOD 1000000007;static int N 1005;public static void main(String[] args) {Scanner sc …...
线程池的工作原理
固定线程池:线程池中的线程数是固定的,线程池创建时就已经设定了固定的线程数量。在任务提交时,线程池会将任务分配给空闲的线程执行。如果所有线程都在执行任务,新的任务会被放到任务队列中,直到有线程空闲出来。 线…...
论文导读 | SOSP23 | Gemini:大模型 内存CheckPoint 快速故障恢复
本期分享的是一篇SOSP 2023论文: Gemini: Fast Failure Recovery in Distributed Training with In-Memory Checkpoints Zhuang Wang (Rice University), Zhen Jia (Amazon Web Services, Inc.), Shuai Zheng (Amazon Web Services), Zhen Zhang (Amazon Web Servic…...
windows 常用命令总结
工作中用到的 Linux 总结(持续更新中...)_linux工作经验-CSDN博客 PS: 推荐使用 powershell 而不是 cmd,因为PowerShell 是一个更先进和功能更强大的工具( powershell 有命令记忆功能,比较方便)…...
【Linux】进程间通信、匿名管道、进程池
一.什么是通信 进程间通信(Inter-Process Communication,IPC),是指在操作系统中,不同进程之间进行数据交换和同步的机制。由于每个进程通常拥有独立的内存空间,进程间无法直接访问对方的内存,因此需要通过特定的机制来实现通信和…...
【Block总结】PlainUSR的局部注意力,即插即用|ACCV2024
论文信息 标题: PlainUSR: Chasing Faster ConvNet for Efficient Super-Resolution作者: Yan Wang, Yusen Li, Gang Wang, Xiaoguang Liu发表时间: 2024年会议/期刊: 亚洲计算机视觉会议(ACCV 2024)研究背景: 超分辨率(Super-Resolution, S…...
35信号和槽_信号槽小结
Qt 信号槽 1.信号槽是啥~~ 尤其是和 Linux 中的信号进行了对比(三要素) 1) 信号源 2) 信号的类型 3)信号的处理方式 2.信号槽 使用 connect 3.如何查阅文档. 一个控件,内置了哪些信号,信号都是何时触发 一…...
现代复古电影海报品牌徽标设计衬线英文字体安装包 Thick – Retro Vintage Cinematic Font
Thick 是一种大胆的复古字体,专为有影响力的标题和怀旧的视觉效果而设计。其厚实的字体、复古魅力和电影风格使其成为电影海报、产品标签、活动品牌和编辑设计的理想选择。无论您是在引导电影的黄金时代,还是在现代布局中注入复古活力,Thick …...
低代码开发平台:飞帆画 echarts 柱状图
https://fvi.cn/711 柱状图这个控件是由折线图的控件改过来的,在配置中,单选框选择柱状图就行了。...
Linux中C++ gdb调试命令
编译可执行文件需要带上-g选项参数 输入回车则重复执行上一次命令; 进入gdb: gdb 程序名运行gdb命令: r打断点命令: b 行号查看断点命令: i b打印变量命令: p 变量名持续查看变量命令: d…...
Python精进系列:从 __name__ 开始了解 python 常见内置变量
目录 引言一、__name__是什么?案例1:直接运行模块案例2:模块被导入 二、__name__的主要用途(一)区分主程序和导入模块案例3:测试代码隔离(二)动态导入模块案例4:根据环境…...
Nacos 服务发现的核心模型有哪些?Service, Instance, Cluster 之间的关系是什么?
Nacos 服务发现的核心模型 Nacos 服务发现的核心数据模型主要围绕以下几个关键概念构建,它们共同构成了服务注册与发现的基础: Namespace (命名空间): 用途: 用于进行环境隔离。比如,你可以为开发环境 (dev)、测试环境 (test) 和生产环境 (p…...
Java程序设计第1章:概述
一、Hello World 1.代码: public class HelloWorld {public static void main(String[] args){System.out.println("Hello World!");} } 2.运行结果: Hello World! 二、输出姓名、学号、班级 1.题目: 编写一个Application&a…...
C++开发工具全景指南
专业编译与调试工具深度解析 2025年4月 编译器套件 GNU Compiler Collection (GCC) GNU编译器套件是自由软件基金会开发的跨平台编译器系统,支持C、C、Objective-C、Fortran、Ada等多种编程语言。作为Linux系统的标准编译器,GCC以其强大的优化能力和…...
Java的Selenium的特殊元素操作与定位之iframe切换
iframe切换 四种切换方式: driver.switchTo().frame(index);driver.switchTo().frame(id);driver.switchTo().frame(name);driver.switchTo().frame(WebElement); 切换之后,回到默认内容页面(否则会找不到元素 driver.switchTo().defaultContent(); //iframe处…...
AI比人脑更强,因为被植入思维模型【42】思维投影思维模型
giszz的理解:本质和外在。我们的行为举止,都是我们的内心的表现。从外边可以看内心,从内心可以判断外在。曾国藩有7个识人的方法,大部分的人在他的面前如同没穿衣服一样。对于我们自身的启迪,我认为有四点&…...
7-12 最长对称子串(PTA)
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。 输入格式: 输入在一行中给出长度不超过1000的非空字符串。 输出格式&…...
嵌入式AI的本地化部署的好处
嵌入式AI本地化处理(即边缘计算)的核心优势在于将AI算力下沉至设备端,直接处理数据而非依赖云端,这种模式在多个维度上展现出显著价值: 一、数据隐私与安全性提升 1. 敏感数据本地存储 金融、医疗等涉及隐私的行业…...
0基础 | 硬件 | 电源系统 一
降压电路LDO 几乎所有LDO都是基于此拓扑结构 图 拓扑结构 LDO属于线性电源,通过控制开关管的导通程度实现稳压,输出纹波小,无开关噪声 线性电源,IoutIin,发热功率P电压差△U*电流I,转换效率Vo/Vi LDO不适…...