当前位置: 首页 > news >正文

Langchain + Gemini API调用基本操作

本文参考Langchain中ChatGoogleGenerativeAI的官方文档,在本地的jupyter notebook中运行。

关于API的细节在官方文档最开头给出:
在这里插入图片描述
我们在使用时,可以选择model="gemini-2.0-flash-001"或者生成图片的ChatGoogleGenerativeAI(model=“models/gemini-2.0-flash-exp-image-generation”)


测试本地环境

查看jupyter的kernel是不是我们选择的虚拟环境:

import sys
sys.executable

查看库的配置是否包含Langchain和 ipykernel

!where python
!python --version
!pip list

如果没有下载langchain-google-genai,运行以下命令:

pip install -qU langchain-google-genai

输入你自己的API密钥

import getpass
import osif "GOOGLE_API_KEY" not in os.environ:os.environ["GOOGLE_API_KEY"] = getpass.getpass("Enter your Google AI API key: ")

Instantiation 实例化

测试连通性

import osos.environ['HTTP_PROXY'] = 'http://127.0.0.1:7890'
os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:7890'
import requests
r = requests.get("https://www.google.com")
print(r.status_code)  # 能返回 200 就说明代理成功了

官方模板

from langchain_google_genai import ChatGoogleGenerativeAIllm = ChatGoogleGenerativeAI(model="gemini-2.0-flash-001",temperature=0,max_tokens=None,timeout=None,max_retries=2,# other params...
)

自测模板

from langchain_google_genai import ChatGoogleGenerativeAIllm = ChatGoogleGenerativeAI(model="gemini-2.0-flash-001",  # 或其他可用模型# google_api_key="AIzaSyD9NMiYyxyqdHwvC2V0L54xovdEkoRXfP4"
)print(llm.invoke("你好呀!你现在通了吗?").content)

如果测试成功,会打印下方语句:

你好!我已经通了。我是一个大型语言模型,由 Google 训练。很高兴为你服务!

Invocation 调用

messages = [("system","You are a helpful assistant that translates English to Chinese. Translate the user sentence.",),("human", "I love programming."),
]
ai_msg = llm.invoke(messages)
ai_msg

模型输出

AIMessage(content='我喜欢编程。(Wǒ xǐhuan biānchéng.)', additional_kwargs={}, response_metadata={'prompt_feedback': {'block_reason': 0, 'safety_ratings': []}, 'finish_reason': 'STOP', 'model_name': 'gemini-2.0-flash-001', 'safety_ratings': []}, id='run-72524934-b5b5-4131-8c06-35735f1d01b7-0', usage_metadata={'input_tokens': 20, 'output_tokens': 14, 'total_tokens': 34, 'input_token_details': {'cache_read': 0}})

我们打印出来生成的文本看看:

print(ai_msg.content)

这是打印出来的文本:

我喜欢编程。(Wǒ xǐhuan biānchéng.)

llm.invoke() 方法是什么?

在 LangChain 中,llm.invoke() 是用来 向大语言模型(LLM)发送一次请求,并获取它的回答 的方法。

你可以把它理解成一个“单轮对话”的入口:
你传入一个字符串或消息列表 →模型处理它 →返回一个响应对象(通常包含 .content)

下面是一些使用示例:

示例1:最简单的用法(文本)

from langchain_google_genai import ChatGoogleGenerativeAIllm = ChatGoogleGenerativeAI(model="gemini-2.0-flash-001",# google_api_key="你的API密钥"
)response = llm.invoke("讲一个关于猫的笑话")
print(response.content)

输出为:

两只猫在屋顶上聊天。第一只猫说:“我最近抓到一只老鼠,可费劲了!”第二只猫不屑地说:“那算什么,我昨天抓到一只蝙蝠!”第一只猫惊讶地问:“蝙蝠?味道怎么样?”第二只猫回答:“味道?我根本没吃,光把它从猫粮里拽出来了!”

示例 2:高级用法(多轮结构化消息)

messages = [("system", "你是一个英语翻译助手"),("human", "你好,帮我翻译:我爱编程"),
]response = llm.invoke(messages)
print(response.content)

输出为:

I love programming.

Chaining 链式

from langchain_core.prompts import ChatPromptTemplateprompt = ChatPromptTemplate.from_messages([("system","You are a helpful assistant that translates {input_language} to {output_language}.",),("human", "{input}"),]
)chain = prompt | llm
chain.invoke({"input_language": "English","output_language": "Chinese","input": "I love programming.",}
)

输出为:

AIMessage(content='我喜欢编程。(Wǒ xǐhuan biānchéng.)', additional_kwargs={}, response_metadata={'prompt_feedback': {'block_reason': 0, 'safety_ratings': []}, 'finish_reason': 'STOP', 'model_name': 'gemini-2.0-flash-001', 'safety_ratings': []}, id='run-65d905e5-9882-4145-a885-690b0c9c2665-0', usage_metadata={'input_tokens': 15, 'output_tokens': 14, 'total_tokens': 29, 'input_token_details': {'cache_read': 0}})

Image generation 图片生成

一些 Gemini 模型(特别是 gemini-2.0-flash-exp )支持图片生成功能。

Text to image 文本转图像

import base64 # 用于对图片进行Base64编码和解码
from io import BytesIO  # 用于处理内存中的字节流,读取图片数据from IPython.display import Image, display # 用于在Jupyter Notebook中显示图片
from langchain_google_genai import ChatGoogleGenerativeAI # 用于调用Google Gemini API来生成图像# 指定使用的模型:gemini-2.0-flash-exp-image-generation(该模型支持图像生成)
llm = ChatGoogleGenerativeAI(model="models/gemini-2.0-flash-exp-image-generation")message = {"role": "user", # 用户角色"content": "Generate an image of a cuddly cat wearing a hat.", # 用户发送文本
}# 调用 `llm.invoke()` 方法来请求生成图像。`generation_config` 指定返回的内容是文本和图像。
response = llm.invoke([message],generation_config=dict(response_modalities=["TEXT", "IMAGE"]),
)# 从响应中提取生成的图片的Base64编码部分。假设响应中的'content'字段包含了图像数据的URL。
# response.content[0].get("image_url").get("url") 解析出图片的URL部分,并从中提取出Base64编码
image_base64 = response.content[0].get("image_url").get("url").split(",")[-1]# 将Base64编码的图片数据解码为字节数据
image_data = base64.b64decode(image_base64)# 使用IPython的display函数显示图片。这里指定宽度为300像素。
display(Image(data=image_data, width=300))

模型打印出的图片:
在这里插入图片描述

重复生成另一张图片

import base64
from io import BytesIOfrom IPython.display import Image, display
from langchain_google_genai import ChatGoogleGenerativeAIllm = ChatGoogleGenerativeAI(model="models/gemini-2.0-flash-exp-image-generation")message = {"role": "user","content": "Generate an image of a cuddly cat wearing a hat.",
}response = llm.invoke([message],generation_config=dict(response_modalities=["TEXT", "IMAGE"]),
)image_base64 = response.content[0].get("image_url").get("url").split(",")[-1]image_data = base64.b64decode(image_base64)
display(Image(data=image_data, width=300))

在这里插入图片描述

总结以上步骤:

  1. 创建模型实例:你指定了要使用的 Google Gemini 模型 gemini-2.0-flash-exp-image-generation,该模型支持图像生成。

  2. 构造请求消息:你定义了请求内容,让模型生成一个“戴帽子的可爱猫咪”的图像。

  3. 调用模型生成图像:通过 llm.invoke() 方法,将请求发送给模型,并要求返回 TEXT 和 IMAGE。

  4. 处理生成的图像:图像内容通过 Base64 编码返回。你从响应中提取出编码部分,然后将其解码为图像数据。

  5. 显示图片:使用 IPython.display.Image 将图像显示在 Jupyter Notebook 中,设置宽度为 300 像素。

您也可以通过在数据 URI 方案中编码 base64 数据,将输入图像和查询表示为单条消息,这里我们让之前生成的小猫变成橙色:

# 构造发送给 Gemini 模型的 message 消息,包含文本+图片
message = {"role": "user",  # 消息角色是用户"content": [{"type": "text",  # 消息的第一部分是文字提示"text": "Can you make this cat bright orange?",  # 提示模型:把这只猫变成亮橘色},{"type": "image_url",  # 消息的第二部分是图片"image_url": {"url": f"data:image/png;base64,{image_base64}"  # 使用 Base64 编码的图片数据构造 data URL,发送给模型},},],
}# 调用 Gemini 模型进行推理:传入文字+图片,要求返回文本+图像(多模态 response)
response1 = llm.invoke([message],generation_config=dict(response_modalities=["TEXT", "IMAGE"])  # 请求生成的返回类型为文本+图片
)# 从模型的返回结果中提取 base64 编码的图片部分
# response.content 是一个 list,其中 image_url 是图片的 data URL(例如:"data:image/png;base64,xxxxx")
image_base64 = response1.content[0].get("image_url").get("url").split(",")[-1]  # 拿到逗号后面的 pure base64 部分# 将 base64 编码解码为原始图片字节流
image_data = base64.b64decode(image_base64)# 在 Jupyter 或 VS Code 的 Notebook 中显示图片,宽度设置为 300 像素
display(Image(data=image_data, width=300))

在这里插入图片描述

传入文字+图片,要求返回文本+图像(多模态 response)。那么我们打印了生成的图片,如何提取并打印出“文本内容”呢?

LangChain 的 response.content 是一个列表,每个元素是一个部分内容(比如一段文本、一个图片等),我们打印输出查看response结构以及内容。

print("类型:", type(response1.content))
print("内容:", response1.content)
类型: <class 'list'>
内容: [{'type': 'image_url', 'image_url': {'url': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwcAAAQACAIAAAA7mLIuAAAAiXpUWHRSYXcgcHJvZmlsZSB0eXBlIGlwdGMAAAiZTYwxDgIxDAT7vOKekDjrtV1T0VHwgbtcIiEhgfh/此处省略.../mqqGv8Duyi4/YnrcTwAAAAASUVORK5CYII='}}]

接下来我们分析一下这个response.content的内容:

generated_text = None
generated_image_data = None# response1.content 可能是字符串(如果只有文本返回)或列表(多模态)
if isinstance(response1.content, str):# 如果直接是字符串,那就是文本部分generated_text = response1.contentprint("Model returned only text.")
elif isinstance(response1.content, list):print("Model returned multiple parts. Processing...")# 遍历响应的各个部分for part in response1.content:if isinstance(part, dict):part_type = part.get("type")if part_type == "text":generated_text = part.get("text")print(f"Found text part.")elif part_type == "image_url":image_url_data = part.get("image_url", {}).get("url")if image_url_data and "base64," in image_url_data:image_base64_output = image_url_data.split(",")[-1]generated_image_data = base64.b64decode(image_base64_output)print(f"Found image part.")else:print(f"Found image_url part, but data format is unexpected: {image_url_data}")else:print(f"Unexpected part format in response content: {part}")# --- 显示结果 ---print("\n--- Processed Output ---")if generated_text:print("Generated Text:")# 使用 Markdown 显示文本,格式更好看display(Markdown(generated_text))# 或者简单打印# print(generated_text)else:print("No text part found in the response.")

输出为:

Model returned multiple parts. Processing...
Found image part.
Unexpected part format in response content: I've made the following changes to the image:*   **The cat's fur has been changed to a bright, vibrant orange.** The original reddish-orange hue has been intensified to create a much more striking and luminous orange color across its entire body.
*   Subtle shifts in the highlights and shadows on the fur were made to accommodate the new brighter orange, ensuring the texture and depth are still visible.--- Processed Output ---
No text part found in the response.

这里我们注意到模型打印出的输出除了image部分之外,还打印了下方文字:

I've made the following changes to the image:*   **The cat's fur has been changed to a bright, vibrant orange.** The original reddish-orange hue has been intensified to create a much more striking and luminous orange color across its entire body.
*   Subtle shifts in the highlights and shadows on the fur were made to accommodate the new brighter orange, ensuring the texture and depth are still visible.

这就是模型应该打印的文本信息。但是它返回文本的方式(直接作为列表中的字符串)与代码最初严格预期的格式(所有部分都是带 type 的字典)不符。调试打印语句(print(f"… {part}"))捕获并显示了这个“格式不符”但实际上是我们想要的内容。

我们原本希望模型返回的是generation_config=dict(response_modalities=[“TEXT”, “IMAGE”])这里的文本+图片,但是在将从模型的返回结果中提取 base64 编码的图片部分时,只提取了图片,所以模型没有打印出response1.content中的文本内容。

Safety Settings 安全设置

Gemini 模型具有默认的安全设置,但可以被覆盖。如果您从模型那里收到了大量的“安全警告”,您可以尝试调整模型的 safety_settings 属性。例如,要关闭危险内容的阻止,您可以构建如下的LLM:

from langchain_google_genai import (ChatGoogleGenerativeAI,HarmBlockThreshold,HarmCategory,
)llm = ChatGoogleGenerativeAI(model="gemini-1.5-pro",safety_settings={HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_NONE,},
)

相关文章:

Langchain + Gemini API调用基本操作

本文参考Langchain中ChatGoogleGenerativeAI的官方文档&#xff0c;在本地的jupyter notebook中运行。 关于API的细节在官方文档最开头给出&#xff1a; 我们在使用时&#xff0c;可以选择model"gemini-2.0-flash-001"或者生成图片的ChatGoogleGenerativeAI(model“…...

软件线上故障复盘报告

软件线上故障复盘报告‌ ‌故障编号‌&#xff1a;INC-2024XXX ‌复盘日期‌&#xff1a;YYYY-MM-DD ‌参与人员‌&#xff1a;研发/运维/测试/产品/客服负责人 一、故障概况 1.1 基础信息 字段内容数据来源故障等级P0/P1/P2&#xff08;参考SLA分级标准&#xff09;运维告警…...

分享:批量提取图片文字并自动命名文件,ocr识别图片指定区域并重命名文件名工具,基于WPF和腾讯OCR识别的接口的视线方案

一、项目背景 在处理大量图片时,常常需要从图片中提取特定区域的文字信息,并依据这些信息对图片进行重命名。例如,在档案管理领域,大量纸质文件被扫描成图片后,需要从图片中提取关键信息(如文件编号、日期等)来重命名图片,以便后续的检索和管理;在电商领域,商家可能…...

SIMULIA-Abaqus有限元分析软件针对汽车行业的解决方案

汽车行业是Abaqus软件的一个重要应用领域&#xff0c;许多知名的汽车企业都是Abaqus的用户&#xff0c;本文为您重点介绍Abaqus针对汽车行业有哪些应用及其解决方案。 Abaqus是一款什么软件&#xff1a; Abaqus公司是世界知名的计算机仿真行业的软件公司&#xff0c;成立于197…...

linux下使用php修改php.ini的session.save_path无效的解决办法

linux下安装php的组合还是php-fpm和nginx&#xff0c;其实已经安装好了&#xff0c;网站已经能够跑起来了&#xff0c;但是遇到后台登录的时候验证码一直不对&#xff0c;看了下报错&#xff0c;session无法存储&#xff0c;于是新增了一个phpinfo文件&#xff0c;使用web查看下…...

脚本-QQ批量发送消息(图片和文字)

目录 代码 代码功能详解 注意事项 致谢 代码 import io import traceback import win32clipboard import pyautogui import pyperclip import win32gui # 替换为pywin32的正确模块名 import pandas as pd import time from PIL import Imageclass QQAutoMessage:def __in…...

高等数学A1 期末救济(导数)

基于song复习 闭区间上连续函数的性质 在闭区间里&#xff0c;f(x)连续> f(x)有界 导数 导数三种定义及不同写法 常用导数公式 可导→连续&#xff0c;但连续❎→可导 切线类问题求解 求某点切线方程与求过某点的切线方程 反函数求导法则 反函数的导数直接函数导数的导数 例…...

前端VUE框架理论与应用(7)

一、用 v-for 把一个数组对应为一组元素 我们可以用 v-for 指令基于一个数组来渲染一个列表。v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组,而 item 则是被迭代的数组元素的别名。 在 v-for 块中,我们可以访问所有父作用域的属性。v-for 还…...

argparse

argparse.add_argument 完全指南 &#x1f9f1; 基础篇&#xff1a;命令行参数解析入门 1. 模块初始化 import argparse# 创建参数解析器&#xff08;所有操作的基础容器&#xff09; parser argparse.ArgumentParser( progMyApp, # 程序名称&#xff08;默认从sys.argv[0]…...

力扣-hot100(移动零)

283. 移动零 简单 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输…...

优先级队列的实模拟实现

优先级队列底层默认用的是vector来存储数据&#xff0c;实现了类似我们数据结构中学习过的堆的队列&#xff0c;他的插入和删除都是优先级高先插入和删除。下面我们来模拟实现它们常见的接口来熟悉优先级队列。 仿函数 在介绍优先级队列之前&#xff0c;我们先熟悉一个概念&a…...

ES6的`class`中,`super`关键字在构造函数和非构造函数中的行为有何不同?

在 ES6 的 class 中&#xff0c;super 关键字的行为在 构造函数 和 非构造函数&#xff08;普通方法&#xff09; 中有显著区别&#xff0c;主要体现在以下方面&#xff1a; 1. 构造函数中的 super 行为规则 必须显式调用&#xff1a; 在子类的构造函数中&#xff0c;必须先调…...

从 BI 与 SQL2API 的差异,看数据技术的多元发展路径

在数据驱动的商业世界里&#xff0c;商业智能&#xff08;BI&#xff09;与 SQL2API 如同两颗闪耀的星星&#xff0c;各自散发着独特的光芒。BI 早已在企业中广泛应用&#xff0c;成为数据分析领域的中流砥柱&#xff1b;而 SQL2API 作为新兴技术&#xff0c;虽潜力巨大&#x…...

UNet脑瘤医学影像分割训练实战(PyTorch 完整代码)

UNet是一种基于卷积神经网络&#xff08;CNN&#xff09;的医学影像分割模型&#xff0c;由Ronneberger等人于2015年提出。本文我们将简要介绍基于PyTorch框架&#xff0c;使用UNet模型在脑瘤医学影像分割数据集上进行训练&#xff0c;同时通过SwanLab监控训练过程&#xff0c;…...

MySQL事务隔离级别详解

MySQL事务隔离级别详解 1. 基本概念 1.1 什么是事务隔离级别&#xff1f; 事务隔离级别是数据库管理系统为了保证数据一致性&#xff0c;在多个事务并发访问时提供的不同级别的保护机制。 1.2 事务并发问题 脏读&#xff08;Dirty Read&#xff09;&#xff1a; 一个事务读…...

2025年K8s最新高频面试题

目录 Kubernetes的核心组件有哪些,各自作用是什么? Pod和Deployment的区别? Service有哪些类型,分别适用于什么场景? ConfigMap和Secret有什么区别? StatefulSet 和 Deployment 的主要区别是什么? 什么是 Ingress,有哪些常用实现方式? 如何限制 Kubernetes 中 Pod …...

CobaltStrike

概述 Cobalt Strike是⼀款基于java的渗透测试神器&#xff0c;常被业界⼈称为CS神器。⾃3.0以后已经不在使用 Metasploit框架⽽作为⼀个独⽴的平台使用&#xff0c;分为客户端与服务端&#xff0c;服务端是⼀个&#xff0c;客户端可以有 多个&#xff0c;⾮常适合团队协同作战…...

Web前端 (CSS篇)

什么是CSS&#xff1f; css(Cascading Style Sheets)是层叠样式表或级联样式表&#xff0c;是一组设置规则&#xff0c;用于控制web页面外观。 为什么使用CSS? CSS 用于定义网页的样式&#xff0c;包括针对不同设备和屏幕尺寸的设计和布局。 CSS 实例 body {background-col…...

回归测试中常见的问题:如何避免“越改越错“的陷阱

修复一个Bug&#xff0c;引入三个新Bug "我们只是改了个小功能&#xff0c;为什么整个系统都出问题了&#xff1f;"——这是回归测试失败的典型症状。据IBM研究显示&#xff0c;约40%的线上缺陷源自不充分的回归测试。本文将深入剖析回归测试中的常见陷阱&#xff0…...

红宝书第四十六讲:Node.js基础与API设计解析

红宝书第四十六讲&#xff1a;Node.js基础与API设计解析 资料取自《JavaScript高级程序设计&#xff08;第5版&#xff09;》。 查看总目录&#xff1a;红宝书学习大纲 一、Node.js基础概念 1. 流&#xff08;Streams&#xff09;的核心地位 12 Node.js的文件读写和网络通信依…...

IT运维常用的软件工具有哪些

IT运维常用的软件工具主要包括&#xff1a;监控工具、自动化运维工具、日志管理工具、网络管理工具、资产管理工具、服务台工具。这些工具分别用于保障IT系统稳定运行、提升运维效率、快速响应故障。其中&#xff0c;监控工具至关重要&#xff0c;它能实时监测系统运行状态、资…...

eplan许可证迁移到其他计算机

随着电气设计项目的不断扩大和变更&#xff0c;您可能需要将EPLAN许可证从一台计算机迁移到另一台计算机上。然而&#xff0c;在迁移过程中&#xff0c;确保您的软件始终保持最佳状态至关重要。本文将为您提供一份详尽的EPLAN许可证迁移指南&#xff0c;帮助您轻松完成这一操作…...

服务器部署静态页面

前言 需要先下载nginx&#xff0c;然后上传你的静态网页文件&#xff0c;最后设置nginx展示静态页面 安装nginx 第一步&#xff1a;在服务器上下载nginx服务 sudo dnf install nginx 第二步&#xff1a;启动nginx sudo systemctl start nginx 第三步&#xff1a;验证ngin…...

Spring boot 知识整理

一、SpringBoot 背景内容梳理 SpringBoot是一个基于Spring框架的开源框架&#xff0c;用于简化Spring应用程序的初始搭建和开发过程。它通过提供约定优于配置的方式&#xff0c;尽可能减少开发者的工作量&#xff0c;使得开发Spring应用变得更加快速、便捷和高效。 SpringBoot…...

软件测试面试题汇总---实时更新

1. java垃圾回收机制 2. 类为什么不能多继承&#xff0c;而接口可以 参考为什么类之间只能单继承不能多继承&#xff0c;接口之间可以多继承&#xff0c;类与接口之间可以多实现_内部可以多继承而接口可以多实现-CSDN博客 3. java面向对象的三大特性 继承、封装、多态 4. …...

2025海外代理IP测评:Bright Data,ipfoxy,smartproxy,ipipgo,kookeey,ipidea哪个值得推荐?

近年来&#xff0c;随着全球化和跨境业务需求的不断扩大“海外代理IP”逐渐成为企业和个人在多样化场景中的重要工具。无论是进行数据采集、广告验证、社交媒体管理&#xff0c;还是跨境电商平台运营&#xff0c;选择合适的代理IP服务商都显得尤为重要。然而&#xff0c;市场上…...

蓝桥杯 8. 分巧克力

分巧克力 原题目链接 问题描述 儿童节那天有 K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。 小明一共有 N 块巧克力&#xff0c;其中第 i 块是 Hᵢ Wᵢ 的长方形。为了公平起见&#xff0c;小明需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们。 要求…...

计算机组成原理—————计算机运算方法精讲<3>反码及移码的表示

第一部分&#xff1a;反码表示法 这里我们直接给出整数反码的计算公式 我们实际计算中其实不用死记硬背公式&#xff0c;小编在这里介绍一下求反码的秒杀技 反码秒杀技&#xff1a;定号取反 第一步&#xff1a;确定符号位是0还是1 第二步&#xff1a;符号位不变&#xff0c…...

关于STM32创建工程文件启动文件选择

注意启动文件只要选择这几个 而不是要把所有都选上...

FC-4 mapping映射协议VI、hippi、fhcp、scma表示啥意思

FC-4 mapping映射协议VI、hippi、fhcp、scma表示啥意思 1.FC-4 Upper layer protocol协议映射层&#xff0c;定义了光纤通道和上层应用&#xff0c;包括FPGA/ARM 或者其他上层应用之间的接口。上层应用协议包括&#xff1a;串行scsi协议&#xff0c;fcp-scsi协议&#xff0c; f…...

15、stack、queue、deque的模拟实现

一、stack 1、stack的使用 请看这篇文章 2、stack的原理 这篇文章的栈原理讲的不错&#xff0c;并且有链式栈和顺序栈的创建&#xff0c;还有栈常使用的场景&#xff0c;没有数据结构基础的可以看&#xff0c;并且实现一下他的2种栈。 3、stack的实现 3.1、成员变量 这里…...

GR00T N1:面向通用类人机器人的开放基础模型

摘要 通用型机器人需要具备多功能的身体和智能的大脑。近年来&#xff0c;类人机器人的发展在构建人类世界中的通用自主性硬件平台方面展现出巨大潜力。一个经过大量多样化数据源训练的机器人基础模型&#xff0c;对于使机器人能够推理新情况、稳健处理现实世界的多变性以及快…...

保姆级教程:RK3588部署yolo目标检测模型

本文用到的板卡设备为鲁班猫4&#xff08;LubanCat-4&#xff09;&#xff0c;瑞芯微rk3588系列处理器。 官方文档写的挺详细了&#xff0c;但是版本太多不统一&#xff0c;而且涉及了多个代码仓库&#xff0c;稍显杂乱。本着最少代码原则&#xff0c;仅需下载一个代码仓库&am…...

【含文档+PPT+源码】物联网车辆GPS定位管理系统【

项目视频介绍&#xff1a; 毕业作品物联台云平台的设计与实现 课程简介&#xff1a; 本课程演示的是一款物联网车辆GPS定位管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚…...

热烈祝贺“中芯机械”选择使用订单日记

感谢潍坊中芯机械制造有限公司选择使用订单日记&#xff01; 潍坊中芯机械制造有限公司&#xff0c;成立于2023年&#xff0c;位于山东省潍坊市&#xff0c;是一家以从事生产、销售农业机械、汽车配件、机械电气设备等业务为主的企业。 在业务不断壮大的过程中&#xff0c;想…...

2025年保安员考试题库及答案

一、单选题 81、保安员张某和李某在火车站巡逻时&#xff0c;发现一男青年神色慌张&#xff0c;行为诡秘&#xff0c;这两名保安员识别这一可疑情况使用的方法是&#xff08;&#xff09;。 A.查问法 B.直接观察法 C.判断法 D.视觉判断法 答案&#xff1a;B 82、某天&…...

ADB的安装及抓取日志(1)

一、简介 ADB&#xff08;Android Debug Bridge&#xff09;是一个通用命令行工具&#xff0c;允许你与 Android 设备进行通信。它主要用于开发和调试目的&#xff0c;但也可用于其他多种功能&#xff0c;如安装应用、运行 shell 命令、查看日志等。ADB 是 Android SDK 的一部…...

用 Iris数据做决策树分析

文章目录 Iris数据的准备1.直接从sklearn.datasets 加载或转化成文件已备本地使用2.可以在https://archive.ics.uci.edu/dataset/53/iris下载 过程示例代码如下生成的决策树如下&#xff1a;生成的分析报告如下&#xff1a; 决策树模型分析报告1. 模型性能2. 特征重要性3. 决策…...

【Bluedroid】A2DP Sink播放流程源码分析(三)

AVCTP消息处理 avrc_msg_cback /packages/modules/Bluetooth/system/stack/avrc/avrc_api.cc /******************************************************************************** Function avrc_msg_cback** Description This is the callback function used…...

概念实践极速入门 - 常用的设计模式 - 简单生活例子

概念实践极速入门 - 常用的设计模式 - 简单生活例子 SOLID 五大设计原则的首字母缩写 单一职责原则 和 开闭原则 就省略啦, 这两个概念很简单, 为了写而写反而容易误导人~* 鼓励大家字面理解&#xff01; // 哎呀还是解释吧 单一(S): 单干一件事; 开闭(O): 拓展开放, 修改关…...

postgres 数据库信息解读 与 sqlshell常用指令介绍

数据库信息&#xff1a; sqlshell Server [localhost]: 192.168.30.101 Database [postgres]: Port [5432]: 5432 Username [postgres]: 用户 postgres 的口令&#xff1a; psql (15.12, 服务器 16.8 (Debian 16.8-1.pgdg1201)) 警告&#xff1a;psql 主版本15,服务器主版本为…...

映射网络路路径和ftp路径原理是什么,如何使用,有什么区别

文章目录 一、原理1. 映射网络路径2. FTP路径 二、使用方法1. 映射网络路径2. FTP路径 三、主要区别1. 协议与功能2. 安全性与权限3. 适用场景 四、如何选择&#xff1f;五、注意事项 映射网络路径&#xff08;如SMB/CIFS或NFS&#xff09;和FTP路径&#xff08;FTP/FTPS/SFTP&…...

微服务3--服务容错

前言&#xff1a;本篇主要介绍服务容错与Sentinel进行限流。 高并发带来的问题 在微服务架构中&#xff0c;我们将业务拆分为一个个的服务&#xff0c;服务与服务之间都可以相互调用&#xff0c;但是由于网络或者说服务器本身的问题&#xff0c;服务不能保证100%可用&#xff…...

4.15redis点评项目下

--->接redis点评项目上 Redis优化秒杀方案 下单流程为&#xff1a;用户请求nginx--->访问tomcat--->查询优惠券--->判断秒杀库存是否足够--->查询订单--->校验是否是一人一单--->扣减库存--->创建订单 以上流程如果要串行执行耗时会很多&#xff0c…...

Web开发-JavaEE应用原生和FastJson反序列化URLDNS链JDBC链Gadget手搓

知识点&#xff1a; 1、安全开发-JavaEE-原生序列化-URLDNS链分析 2、安全开发-JavaEE-FastJson-JdbcRowSetImpl链分析 利用链也叫"gadget chains"&#xff0c;我们通常称为gadget&#xff1a; 1、共同条件&#xff1a;实现Serializable或者Externalizable接口&…...

坚持每日Codeforces三题挑战:Day 3 - 题目详解(2024-04-16,难度:900, 1200, 1200)

每天坚持写三道题第三天 &#xff08;今天写点简单的&#xff0c;剩下去刷力扣了&#xff09; 今日题目: Problem - B - Codeforces 900 Problem - B - Codeforces 1300 Problem - D - Codeforces 1400 题目一: Problem - B - Codeforces 题目大意: 给你一个数组,每次操…...

MySQL5.7递归查询

向下递归查询 SELECT ID,NAME,PARENT_ID,LEVEL_FROM(SELECT ID AS _IDS,(SELECT ID : GROUP_CONCAT(ID)FROM TREE_TABLE WHERE FIND_IN_SET(PARENT_ID,ID) > 0AND REMOVE N) T1,L : L 1 AS LEVEL_FROM TREE_TABLE,(SELECT ID : start, L: 0) T2WHERE ID IS NOT NULL) T3,…...

半导体设备通信标准—secsgem v0.3.0版本使用说明文档(2)之GEM(SEMI 30)

文章目录 1、处理器1.1、事件 2、GEM 合规性2.1、状态模型2.2、 设备加工状态2.3、 文档2.4、 控制 &#xff08;作员启动&#xff09;2.5、 动态事件报告配置2.6、 跟踪数据收集2.7、 报警管理2.8、 远程控制2.9、 设备常量2.10、 工艺配方管理2.11、 物料移动2.12、 设备终端…...

C++异步编程从入门到精通实战:全面指南与实战案例

C异步编程从入门到精通实战&#xff1a;全面指南与实战案例 在当今多核处理器普及的时代&#xff0c;异步编程成为了提升程序性能和响应能力的关键技术。无论是在高频交易系统、实时游戏引擎&#xff0c;还是网络服务器和大型数据处理平台&#xff0c;异步编程都发挥着至关重要…...

驱动开发硬核特训 · Day 13:从 device_create 到 sysfs,设备文件是如何生成的?

&#x1f50d; B站相应的视屏教程&#xff1a; &#x1f4cc; 内核&#xff1a;博文视频 - 备树深度解析&#xff1a;理论 实践全指南&#xff08;含 of 函数与 i.MX8MP 实例&#xff09; 敬请关注&#xff0c;记得标为原始粉丝。 &#x1f527; &#x1f4cc; 本文目标&#…...