ReACT Agent 实战
1. Agent 概述
关于到底什么是 Agent,目前业界并没有一个统一的定义,比如 OpenAI 倾向于将 Agent 看作是大模型能力的延伸,而 LangChain 则侧重于 Agent 是 workflow 的编排。我们没必要去纠结定义,可以简单理解 Agent 并不是某一门具体的技术,而是一种设计理念: Agent 是一种基于 LLM 驱动的、能够自主感知周围环境、做出决策、采取行动达成特定目标的系统。
一个经典的 Agent 系统的整体架构如下:
可以看到, Agent 系统包含了以下的核心模块:
- 规划(Planning):它负责将大目标分解成小的子目标,也可以对已有行为进行反思和自我改善。
- 记忆(Memory):包括短期记忆和长期记忆,短期记忆提供上下文内的学习,长期记忆则提供长时间保留和回忆信息的能力。
- 工具(Tools):工具是 Agent 具备的扩展能力,可以是一些开放 API、系统内的函数,也可以是第三方服务等等。
- 行动(Action):行动是 Agent 可以执行的具体操作,通过使用 Tools 与外界环境交互,并获取执行结果。
Agent 看起来是一个非常复杂的系统,但是实际上有一种快速的实现方式,那就是 LLM + ReAct 框架。
那么什么是 ReAct 呢?
2. ReACT 核心原理
ReAct 实际上是两个单词的缩写:Reasoning + Acting,也就是推理 + 行动,它是一个引导大语言模型进行推理和行动的思维框架。在《ReAct: Synergizing Reasoning and Acting in Language Models》这篇论文中首次提出。
我们引用论文中的示例来解释一下。假设我们想要问大模型这样一个问题:
除了苹果遥控器,还有哪些设备可以控制苹果遥控器最初设计用来交互的程序?Aside from the Apple Remote, what other devices can control the program Apple Remote was originally designed to interact with?
使用 ReAct 框架,可以引导大模型进行如下的推理:
在这个例子中,大模型为了完成一个复杂任务时,首先会进行子任务拆分,且每个子任务的执行都会经过如下几个阶段:
- Thought 思考:大模型根据任务进行思考和推理,制定执行计划。
- Action 行动:大模型从可用的工具列表中筛选出可用的工具,执行具体的动作。
- Observation 观察:动作执行完成后,由大模型观察执行结果,并判断是继续下一步动作,还是执行结束返回结果。
ReAct 的执行流程如下:
论文中的概念很好理解,但是它只是一套理论框架,具体该如何落地 ReAct 呢?下面我们就进行一个实战:实现一个 ReAct Agent 智能助手,它可以根据用户的提问进行推理,并自主调用外部工具,返回最终结果。
3. ReAct Agent 实战
3.1 定义 Tools 工具
工具本质上就是我们为大模型提供的扩展能力,它可以是一些 Open API(如 Google 搜索、高德天气等等),也可以是我们内部的一些函数,甚至是第三方的服务。
本次实战我们定义两个工具:
- Serper Search:Serper 是一个基于 Google 的高性能实时搜索 API,可以根据输入的关键词检索到相关的内容。Serper API 可以开发申请,每个账号都有一定的免费额度,大家按照官网的指引进行操作即可。
- Calculate:一个简单的计算器,利用 Python内置的
eval()
函数来解析并计算数学表达式,得到最终的计算结果。
Serper Search 代码如下:
import json
import osimport dotenv
import requestsdef search(query: str) -> str:"""搜索:param query: 搜索关键词:return: 搜索结果"""# 构造请求参数url = "https://google.serper.dev/search"payload = json.dumps({"q": query,})headers = {"X-API-KEY": os.getenv("SERPER_API_KEY"), # 申请api_key: https://serper.dev/api-key'Content-Type': 'application/json'}# 发送请求response = requests.request("POST", url, headers=headers, data=payload).json()# 解析响应结果if response['organic'][0]:return response['organic'][0]['snippet']return "没有搜索到相关结果"
Calculate 工具定义如下:
def calculate(expression: str) -> float:"""计算:param expression: 运算表达式:return: 计算结果"""# 使用Python内置的eval函数进行表达式计算return eval(expression)
3.2 构造 Prompt
ReAct 的关键就在于 Prompt,一套完善的 Prompt 可以有效地指导 LLM 进行推理和行动,提升 LLM 执行的准确率和可解释性。
网上有很多版本的 ReAct Prompt,我参考了几个版本的实现,整理出了一个 Prompt 如下:
# ReAct Prompt定义
REACT_PROMPT = """
You run in a loop of Thought, Action, Observation, Answer.
At the end of the loop you output an Answer
Use Thought to describe your thoughts about the question you have been asked.
Use Action to run one of the actions available to you.
Observation will be the result of running those actions.
Answer will be the result of analysing the ObservationYour available actions are:calculate:
e.g. calculate: 4 * 7 / 3
Runs a calculation and returns the number - uses Python so be sure to use floating point syntax if necessarysearch:
e.g. search: Django
Returns a real info from searching SerperAPIAlways look things up on search if you have the opportunity to do so.Example session:Question: What is the capital of China?
Thought: I should look up on SerperAPI
Action: search: What is the capital of China?
PAUSE You will be called again with this:Observation: China is a country. The capital is Beijing.
Thought: I think I have found the answer
Action: Beijing.
You should then call the appropriate action and determine the answer from the resultYou then output:Answer: The capital of China is BeijingExample sessionQuestion: What is the mass of Earth times 2?
Thought: I need to find the mass of Earth on search
Action: search : mass of earth
PAUSEYou will be called again with this: Observation: mass of earth is 1,1944×10e25Thought: I need to multiply this by 2
Action: calculate: 5.972e24 * 2
PAUSEYou will be called again with this: Observation: 1,1944×10e25If you have the answer, output it as the Answer.Answer: The mass of Earth times 2 is 1,1944×10e25.Now it's your turn:
""".strip()
这段 Prompt 主要包含了三个要素:
- 身份设定:指定 LLM 为一个推理循环,引导 LLM 按照 Thought -> Action -> Observation -> Answer 的顺序执行。
- 工具定义:定义了 LLM 可以调用的工具,并给出工具的具体描述和使用方法。
- 参考示例:通过 One-Shot 的方式给出了一个参考示例,便于 LLM 更好地理解任务。
3.3 实现 ReAct Agent
接下来,我们基于上面的 Prompt, 封装一个 ReAct Agent。
import osfrom openai import OpenAIfrom prompt import REACT_PROMPTclass ReActAgent:"""ReAct 智能体"""def __init__(self):"""构造函数"""# 初始化OpenAI客户端self.client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"),base_url=os.getenv("OPENAI_API_BASE"))# 初始化消息列表# System Prompt设置为ReAct的Promptself.messages = [{"role": "system", "content": REACT_PROMPT}]def __call__(self, prompt: str) -> str:"""执行(__call__是Python的魔法函数,可以使得类的实例向函数一样被调用):param prompt: 最新的Prompt:return: 执行结果"""# 保存消息列表self.messages.append({"role": "user", "content": prompt})# 调用模型,生成结果resp = self.client.chat.completions.create(model="gpt-4o-mini",messages=self.messages,temperature=0.1,)content = resp.choices[0].message.content# 保存结果self.messages.append({"role": "assistant", "content": content})# 返回结果return contentdef result(self) -> str:"""返回最终执行结果:return: 最终执行结果"""return self.messages[-1]["content"]
这里的逻辑比较简单:主要就是 ReAct Prompt 设置为 LLM 的 System Prompt,并使用 __call__
这个魔术方法,对 LLM 的执行过程进行了封装,每次调用 ReActAgent 实例时,都会调用 LLM 的 API,并保存历史消息。
3.4 实现 Agent Executor
有了 Agent 之后,我们还需要一个 Agent Executor,来驱动 Agent 的执行过程。
Agent Executor 本质上就是一个循环,它根据 LLM 的生成结果,解析下一步需要执行的 Action,并进行 Tools 的调用。
代码如下:
import refrom react_agent import ReActAgent# 匹配Action的正则表达式
ACTION_REGEX = re.compile(r'^Action: (\w+): (.*)$')class AgentExecutor:"""Agent执行器"""def __init__(self, agent: ReActAgent, tools: dict[str, callable], max_epochs: int = 5):"""构造函数:param agent: Agent:param tools: 可用的工具列表:param max_epochs: 最大执行轮数,防止死循环"""self.agent = agentself.tools = toolsself.max_epochs = max_epochsdef execute(self, goal: str) -> str:"""执行Agent:param goal: 执行目标:return: 返回执行结果"""i = 0prompt = goalprint(f"[执行目标] {goal}")# 循环执行Agent# ReAct的本质就是一个 Thought->Action->Observation 的循环while i < self.max_epochs:# 更新执行轮数i += 1print(f"[第{i}轮]")# 执行Agentresult = self.agent(prompt=prompt)print(f"[中间结果] {result}")# 匹配需要调用的工具actions = [ACTION_REGEX.match(a) for a in result.split('\n') if ACTION_REGEX.match(a)]# 如果无需执行Action,则返回最终结果if len(actions) == 0:result = self.agent.result()print(f"[最终结果] {result}")return result# 解析Action及参数action, action_input = actions[0].groups()if action not in self.tools:raise Exception("Unknown action: {}: {}".format(action, action_input))print(f"[Execute Action]: {action} {action_input}")# 执行工具调用observation = self.tools[action](action_input)print(f"[Observation] {observation}")prompt = f"Observation: {observation}"return "超出最大轮数,终止执行"
这里有几个要点值得特殊说明下:
- 前面说过,AgentExecutor 本质上就是就是一个 Thought->Action->Observation 的循环,因此需要设置一个 max_epoch 最大轮数,避免出现死循环。
- 使用正则表达式,解析需要执行的 Action 及调用参数。
3.5 执行结果
到这里,核心功能就开发完成了,我们看下最终的执行结果:
import dotenvfrom agent_executor import AgentExecutor
from react_agent import ReActAgent
from tools import search, calculateif __name__ == '__main__':# 加载环境变量dotenv.load_dotenv()# 创建工具列表tools = {"search": search, "calculate": calculate, }# 创建ReAct Agentagent = ReActAgent()# 创建AgentExecutor执行器executor = AgentExecutor(agent=agent, tools=tools, max_epochs=10)# 执行result = executor.execute(goal="世界上第1高的山比第2高的山高多少米?")print(result)
可以看到,ReAct Agent 整体的执行流程如下:
- Thought: 思考和规划,推理出需要进行搜索。
- Action: 判断出需要调用 search tool,并生成了调用参数。
- Search: 调用工具,获取结果。
- Observation: 获取工具调用结果。
- Thought: 根据当前结果,规划下一步行动。
- Action: 判断出需要调用 calculate tool,并生成了调用参数。
- Calculate: 调用工具,获取结果。
- Observation: 获取工具调用结果。
- 执行结束,返回最终结果。
大功告成!
相关文章:
ReACT Agent 实战
1. Agent 概述 关于到底什么是 Agent,目前业界并没有一个统一的定义,比如 OpenAI 倾向于将 Agent 看作是大模型能力的延伸,而 LangChain 则侧重于 Agent 是 workflow 的编排。我们没必要去纠结定义,可以简单理解 Agent 并不是某一…...
【JavaScript】关系运算符--非数值类型、Unicode编码表
1、关系运算符--非数值类型 对于非数值进行比较时,会将其转换为数字然后再比较。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,…...
【Pandas】pandas DataFrame rtruediv
Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于执行 DataFrame 与另一个对象(如 DataFrame、Series 或标量)的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于执行 DataFrame 与另一个对象&…...
重构数字信任基石:Java 24 网络安全特性的全维度革新与未来防御体系构建
引言:从技术迭代到安全范式的根本性跃迁 在量子计算威胁渐近、分布式系统架构复杂化、数据资产价值指数级增长的 2025 年,Java 平台迎来了自 Java 1.0 以来最具革命性的安全架构升级 ——Java 24 版本。这不仅仅是一次常规的特性更新,而是通…...
HTML倒数
前言 假设您需要一个网页打开后,自动间隔 N 秒进行一次自动刷新,且不依赖 js ,那么本文可以帮助到您,以最简单的方式实现需求。 实现代码 TIPS:借助 <meta http-equiv"refresh" content"X"&g…...
【C++】类和对象(上)
文章目录 上文链接一、类(class)1. 类的定义2. 类与结构体3. 访问限定符4. 类域 二、对象1. 实例化2. 对象大小 三、this 指针1. 什么是 this 指针2. 小练习 上文链接 【C】入门基础知识(下) 一、类(class)…...
Transformer四模型回归打包(内含NRBO-Transformer-GRU、Transformer-GRU、Transformer、GRU模型)
Transformer四模型回归打包(内含NRBO-Transformer-GRU、Transformer-GRU、Transformer、GRU模型) 目录 Transformer四模型回归打包(内含NRBO-Transformer-GRU、Transformer-GRU、Transformer、GRU模型)预测效果基本介绍程序设计参…...
多级缓存入门:Caffeine、Lua、OpenResty、Canal
之前写过——Google Guava Cache简介 本文系统学习一下多级缓存 目录 0.什么是多级缓存商品查询业务案例导入1.JVM进程缓存初识Caffeine实现JVM进程缓存2.Lua语法入门HelloWorld数据类型、变量和循环函数、条件控制3.Nginx业务编码实现多级缓存安装OpenRestyOpenResty快速入门…...
在AWS Glue中实现缓慢变化维度(SCD)的三种类型
根据缓慢变化维度(SCD)的三种核心类型(类型1、类型2、类型3),以下是基于AWS Glue的实现设计、步骤及测试用例: 一、AWS Glue实现SCD的设计与步骤 1. SCD类型1(覆盖旧值) 设计目标&…...
业务校验工具包-validate-utils介绍
validate-utils介绍 1. 概述 validate-utils是一个基于Hibernate Validator的轻量级校验框架,旨在简化和增强Java应用程序中的数据校验工作。该工具包提供了一系列常见的校验场景,帮助开发人员快速实现数据验证,提高代码的可维护性和可靠性。 2. 功能特性 2.1 集合数据量…...
参数规模:衡量大语言模型体量的标尺
大语言模型的体量差异通过参数数量呈现。业界标杆如GPT-3拥有1750亿参数,Grok-1更达到3140亿级别,而Llama系列则提供70亿至700亿参数的轻量化选择。这里的"70B"并非指训练数据量,而是模型内部结构的复杂度指标——每个参数如同微型…...
JS 中call、apply 和 bind使用方法和场景
call 方法 核心特性 立即执行函数,并显式指定 this 值和逐个传递参数。语法:func.call(thisArg, arg1, arg2, …) 使用场景 借用其他对象的方法 const person { name: "Alice" }; function greet(greeting) {console.log(${greeting}, ${t…...
ZeroGrasp:零样本形状重建助力机器人抓取
25年4月来自CMU、TRI 和 丰田子公司 Woven 的论文“ZeroGrasp: Zero-Shot Shape Reconstruction Enabled Robotic Grasping”。 机器人抓取是具身系统的核心能力。许多方法直接基于部分信息输出抓取结果,而没有对场景的几何形状进行建模,导致运动效果不…...
第2讲、Tensor高级操作与自动求导详解
1. 前言 在深度学习模型中,Tensor是最基本的运算单元。本文将深入探讨PyTorch中两个核心概念: Tensor的广播机制(Broadcasting)**自动求导(Autograd)**机制 这些知识点不仅让你更加灵活地操作数据&#…...
(MySQL)表的操作
目录 表的创建 语法 创建表的案例 查看表的结构 修改表的操作 修改表名 编辑 添加一个字段(列) 修改一个字段的类型 修改字段名 删除字段名(删除列) 删除指定的表 表的插入数据 数据库的备份和恢复 我们来学习表的操作 表的创建 语法 CREATE TABLE [if not ex…...
函数的使用
函数绑定 fn.call(obj, param1, param2) fn.apply(obj, [param1, param2]) fn.bind(obj, param1, param2)()相同点: 都是借用别人(fn)的方法,替换其中的this(第一个参数)call和apply的不同点:a…...
LLM应用于自动驾驶方向相关论文整理(大模型在自动驾驶方向的相关研究)
1、《HILM-D: Towards High-Resolution Understanding in Multimodal Large Language Models for Autonomous Driving》 2023年9月发表的大模型做自动驾驶的论文,来自香港科技大学和人华为诺亚实验室(代码开源)。 论文简介: 本文…...
Spring MVC深度解析:从原理到实战
文章目录 一、Spring MVC概述1.1 MVC设计模式1.2 Spring MVC特点 二、Spring MVC核心组件2.1 架构流程图解2.2 核心组件说明 三、环境搭建与配置3.1 Maven依赖3.2 传统XML配置 vs JavaConfig 四、控制器开发实践4.1 基础控制器示例4.2 请求映射注解 五、数据处理与绑定5.1 表单…...
Spark学习全总结
基础概念: Spark 是一个快速、通用的大数据处理引擎,支持多种计算模式,如批处理、流处理、交互式查询和机器学习等。 特点: 速度快:基于内存计算,能将数据缓存在内存中,避免频繁读写磁盘,大幅…...
pytorch写张量pt文件,libtorch读张量pt文件
直接在pytorch中,用torch.save保存的张量,可能因格式差异无法在C中加载。 以下是一个最简单的例子,展示如何在 Pytorch中保存张量到 TorchScript 模块,并在 C 中使用 LibTorch 加载。 Python 代码 (save_tensor.py) import torc…...
关于Android Studio的Gradle各项配置2
好的!你提到的这些文件是 Gradle 构建系统 和 Android 项目 中非常重要的一部分,它们各自有不同的作用,涉及项目的构建配置、Gradle 环境、系统配置等方面。接下来我会为你详细解释每个文件的作用,并提供具体的例子和注释。 1. gr…...
Android Studio中创建第一个Flutter项目
一、Flutter环境验证 创建Flutter项目之前需要验证是否有Flutter环境,如没有Flutter 环境,请参考配置Flutter开发环境 1.1、flutter doctor 验证通过会有以下提示 [√] Flutter (Channel stable, 3.29.3, on Microsoft Windows [版本 10.0.19045.573…...
Linux的例行性工作(crontab)
crontab服务 at 命令是在指定的时间只能执行一次任务, crontab 命令可以循环重复的执行定时任务,与 Windows 中的计划任务有些类似 crond 是 Linux 下用来周期地执行某种任务或等待处理某些事件的一个守护进程,在安装完成操 作系统后,默认会安装 crond …...
03 基于 STM32 的温度控制系统
前言 Protues、KeilC 设计内容:使用STM32设计一个空调温度的显示控制系统 设计要求: 1.温度显示范围为16-30摄氏度 2.按键K1实现显示温度加1,按键K2实现显示温度减1,低于16或高于30,显示数值不变 3.正常按键蜂鸣器响一…...
23种设计模式-行为型模式之备忘录模式(Java版本)
Java 备忘录模式(Memento Pattern)详解 🧠 什么是备忘录模式? 备忘录模式是一种行为型设计模式,它允许在不暴露对象实现细节的情况下,保存和恢复对象的状态。备忘录模式常常用于需要记录对象状态以便随时…...
[三分钟]web自动化测试(二):selenium自动化测试常用函数(上)
文章目录 1.元素定位1.1 cssSelector(选择器)1.2 xpath1.3小示例 2.操作测试对象2.1点击/提交对象-click()2.2 模拟按键输入-sendKeys("")2.3 清除文本内容-clear()2.4 获取文本信息-getText()2.5 获取当前页面标题-getTitle()2.6获取当前页面URL-getCurrentUrl() 3.…...
基于ruoyi-plus实现AI聊天和绘画
项目介绍 基于ruoyi-plus实现AI聊天和绘画功能,打造自己的AI平台。前后端分离,有管理后台,用户端,小程序端。支持对接openai,讯飞星火,通义灵码,deepseek等大语言模型。项目架构 管理后台-前端&…...
假设检验学习总结
目录 一、假设检验1. 两种错误2. z检验和t检验3. t检验3.1 单样本t检验3.2 配对样本t检验3.3 独立样本t检验4 方差齐性检验备注卡方检验样本容量的计算AB测试主要的两种应用场景绝对量的计算公式率的计算公式说明一、假设检验 1. 两种错误 第一类错误 原假设为真,却拒绝了原假…...
C++ 基于多设计模式下的同步异步⽇志系统-2项目实现
⽇志系统框架设计 1.⽇志等级模块:对输出⽇志的等级进⾏划分,以便于控制⽇志的输出,并提供等级枚举转字符串功能。 ◦ OFF:关闭 ◦ DEBUG:调试,调试时的关键信息输出。 ◦ INFO:提⽰,普通的提⽰…...
Tauri窗口与界面管理:打造专业桌面应用体验 (入门系列五)
窗口管理是桌面应用的核心特性之一,良好的窗口管理可以显著提升用户体验。在Web开发中,我们通常被限制在浏览器窗口内,但Tauri允许前端开发者控制应用窗口的方方面面,从而创造出更加原生的体验。 窗口配置基础 初始窗口配置 在…...
golang goroutine(协程)和 channel(管道) 案例解析
文章目录 goroutine和channel概念开启线程与channel简单通信流程多个工作协程并发执行流程 goroutine和channel概念 goroutine(协程),一般我们常见的是进程,线程,进程可以理解为一个软件在运行执行的过程,线程跟协程比较类似&…...
底层源码和具体测试解析HotSpot JVM的notify唤醒有序性(5000字详解)
在大家的认知里,或者大家也可能搜过,notify唤醒机制到底是随机的呢?还是顺序的呢?在网上其实也有很多人说notify的唤醒机制就是随机的,但实际上并不是这样的,notify的唤醒机制是先进先出的! 目…...
Jenkins(CI/CD工具)
1. 什么是 Jenkins? Jenkins 是一个开源的持续集成(CI)和持续交付/部署(CD)工具,用于自动化软件构建、测试和部署过程。 2. Jenkins 优势 (1)开源免费:社区活跃&#…...
Apache Sqoop数据采集问题
Sqoop数据采集格式问题 一、Sqoop工作原理二、Sqoop命令格式三、Oracle数据采集格式问题四、Sqoop增量采集方案 Apache Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库&…...
再学GPIO(二)
GPIO寄存器 每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。 GPIO…...
err: Error: Request failed with status code 400
好的,今天学习ai的时候从前端发送请求,实在是想不通为啥会啥是一个坏请求,后来从前端方法一个一个找参数,传递的值都有,然后想到我这边需要传递的是一个对象,那么后端使用的RequestParam就接收不到json对象…...
解决qnn htp 后端不支持boolean 数据类型的方法。
一、背景 1.1 问题原因 Qnn 模型在使用fp16的模型转换不支持类型是boolean的cast 算子,因为 htp 后端支持量化数据类型或者fp16,不支持boolean 类型。 ${QNN_SDK_ROOT_27}/bin/x86_64-linux-clang/qnn-model-lib-generator -c ./bge_small_fp16.cpp -b …...
k8s学习记录(五):Pod亲和性详解
一、前言 上一篇文章初步探讨了 Kubernetes 的节点亲和性,了解到它在 Pod 调度上比传统方式更灵活高效。今天我们继续讨论亲和性同时Kubernetes 的调度机制。 二、Pod亲和性 上一篇文章中我们介绍了节点亲和性,今天我们讲解一下Pod亲和性。首先我们先看…...
MongoDB与PHP7的集成与优化
MongoDB与PHP7的集成与优化 引言 随着互联网技术的飞速发展,数据库技术在现代软件开发中扮演着越来越重要的角色。MongoDB作为一种流行的NoSQL数据库,以其灵活的数据模型和强大的扩展性受到众多开发者的青睐。PHP7作为当前最流行的服务器端脚本语言之一,其性能和稳定性也得…...
maven相关概念深入介绍
1. pom.xml文件 就像Make的MakeFile、Ant的build.xml一样,Maven项目的核心是pom.xml。POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。…...
以科技之力,启智慧出行 —— 阅读《NVIDIA 自动驾驶安全报告》及观看实验室视频有感
作为中南民族大学通信工程专业的学生,近期研读《NVIDIA 自动驾驶安全报告》并观看其实验室系列视频后,我深刻感受到自动驾驶技术不仅是一场交通革命,更是一次社会生产力的解放与民族精神的升华。这场变革的浪潮中,我看到了科技如何…...
2P4M-ASEMI机器人功率器件专用2P4M
编辑:LL 2P4M-ASEMI机器人功率器件专用2P4M 型号:2P4M 品牌:ASEMI 封装:TO-126 批号:最新 引脚数量:3 封装尺寸:如图 特性:双向可控硅 工作结温:-40℃~150℃ 在…...
基础的贝叶斯神经网络(BNN)回归
下面是一个最基础的贝叶斯神经网络(BNN)回归示例,采用PyTorch实现,适合入门理解。 这个例子用BNN拟合 y x 噪声 的一维回归问题,输出均值和不确定性(方差)。 import torch import torch.nn a…...
小黑享受思考心流: 73. 矩阵置零
小黑代码 class Solution:def setZeroes(self, matrix: List[List[int]]) -> None:"""Do not return anything, modify matrix in-place instead."""items []m len(matrix)n len(matrix[0])for i in range(m):for j in range(n):if not m…...
整合 | 大模型时代:微调技术在医疗智能问答矩阵的实战应用20250427
🔎 整合 | 大模型时代:微调技术在医疗智能问答矩阵的实战应用 一、引言 在大模型技术高速变革的背景下,数据与微调技术不再是附属品,而是成为了AI能力深度重构的核心资产。 尤其在医疗行业中,微调技术改写了智能分诊和…...
Web安全:威胁解析与综合防护体系构建
Web安全:威胁解析与综合防护体系构建 Web安全是保护网站、应用程序及用户数据免受恶意攻击的核心领域。随着数字化转型加速,攻击手段日益复杂,防护需兼顾技术深度与系统性。以下从威胁分类、防护技术、最佳实践及未来趋势四个维度࿰…...
spring项目rabbitmq es项目启动命令
应该很多开发者遇到过需要启动中间件的情况,什么测试服务器挂了,服务连不上nacos了巴拉巴拉的,虽然是测试环境,但也会手忙脚乱,疯狂百度。 这里介绍一些实用方法 有各种不同的场景,一是重启,服…...
人工智能期末复习1
该笔记为2024.7出版的人工智能技术应用导论(第二版)课本部分的理论总结。 一、人工智能的产生与发展 概念:人工智能是通过计算机系统和模型模拟、延申和拓展人类智能的理论、方法、技术及应用系统的一门新的技术科学。 发展:19…...
深入理解指针(5)
字符指针变量 对下述代码进行调试 继续go,并且观察p2 弹出错误: 为什么报错呢? 因为常量字符串是不能被修改的,否则,编译器报错。 最后,打印一下: 《剑指offer》中收录了⼀道和字符串相关的笔试题&#…...
新魔百和CM311-5_CH/YST/ZG代工_GK6323V100C_2+8G蓝牙版_强刷卡刷固件包(可救砖)
新魔百和CM311-5_CH/YST/ZG代工_GK6323V100C_28G蓝牙版_强刷卡刷固件包(可救砖) 1、准备一个优盘卡刷强刷刷机,用一个usb2.0的8G以下U盘,fat32,2048块单分区格式化(强刷对ÿ…...