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

【自然语言处理与大模型】LangChain大模型应用框架入门①

        单独为LangChain花大概五篇文章的内容,来和大家一起入门LangChain,这是第一篇重点放在,了解 LangChain 是什么、它的主要用途以及核心模块。了解 LangChain 的设计哲学:链式调用、模块化、可扩展性。安装并学习其中的一个组件:模型组件

〇、快速安装

LangChain框架由下面这些库组成:

库名描述
langchain-core提供基础抽象和LangChain表达式 (LCEL)。
langchain-community包含第三方集成。
合作伙伴库例如 langchain-openailangchain-anthropic 等,这些集成已经被进一步拆分为自己的轻量级库,仅依赖于 langchain-core
langchain组成应用程序认知架构的链、代理和检索策略。
LangGraph通过将步骤建模为图中的边和节点,构建强大且有状态的多参与者应用程序。与LangChain无缝集成,但也可以单独使用。
LangServe用于将LangChain链部署为REST API。
LangSmith一个开发者平台,用于调试、测试、评估和监控LLM(语言模型)应用程序。

我们可以先下载langchain、langchain-core、langchain-openai即可完成本文中的代码。如果还有用到其他的,我们再去对应按照即可。

# 创建一个conda虚拟环境
conda create -n langchain python=3.10# 激活进入
conda activate langchain# 安装最有必要的几个包
pip install langchain langchain-core langchain-openai langchain_community

一、核心组件:模型

        在 LangChain 中有三种主要类型的模型,它们分别是LLM、ChatModel和Text Embedding Model,我们一个个来学习。

(1) LLM

        大语言模型LLM(Large Language Model),用于生成文本输出。LangChain 提供了统一接口来调用各种 LLM。这个模型的用途是来回答问题、生成文本、翻译、摘要等自然语言任务。支持HuggingFace 上的各种开源模型,也支持闭源的OpenAI 的 GPT 系列和Anthropic 的 Claude系列。

需求:使用modelscope下载qwen3-0.6b模型,然后封装成LangChain的LLM类进行使用。

首先我们使用modelscope的SDK来下载一下qwen3模型,cache_dir参数指定模型存放的位置。

# 下载Qwen3-0.6B模型
from modelscope import snapshot_download
model_dir = snapshot_download('Qwen/Qwen3-0.6B', cache_dir='./')

然后,用下面的代码进行调用

# 导入LangChain的LLM基类
from langchain.llms.base import LLM
# 导入Transformers库中的tokenizer和model类
from transformers import AutoTokenizer, AutoModelForCausalLM
# 导入PyTorch
import torch
# 导入类型提示中的ClassVar
from typing import ClassVar# 定义LocalQwen3类,继承自LLM
class LocalQwen3(LLM):# 初始化tokenizer,加载Qwen3-0.6B的tokenizertokenizer: ClassVar = AutoTokenizer.from_pretrained("Qwen/Qwen3-0.6B")# 初始化model,加载Qwen3-0.6B的模型model: ClassVar = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-0.6B")# 定义LLM类型属性@propertydef _llm_type(self):return "qwen3-0.6b"# 实现调用方法def _call(self, prompt, stop):# 将输入文本转换为模型输入格式inputs = self.tokenizer(prompt, return_tensors="pt").to(self.model.device)# 生成文本,最大新token数为100outputs = self.model.generate(**inputs, max_new_tokens=100)# 将输出解码为文本并返回return self.tokenizer.decode(outputs[0], skip_special_tokens=True)# 定义模型标识参数@propertydef _identifying_params(self):return {"name": "qwen3-0.6b"}# 主程序入口
if __name__ == "__main__":# 实例化LocalQwen3对象qwen3_local = LocalQwen3()# 调用模型进行推理response = qwen3_local.invoke("你好,Qwen3!")# 打印响应结果print(response)

(2) Chat Model

        ChatModel专门用于对话场景的模型,输入输出为消息对象(Message),支持多轮上下文理解。它的主要用途是构建聊天机器人、处理结构化对话历史。ChatModel的输入各种Message对象。更适合与用户进行多轮对话。

需求:使用modelscope下载qwen3-0.6b模型,然后封装成LangChain的ChatModel类进行使用。

用下面的代码来自定义Qwen3的ChatModel调用:

# 导入基础聊天模型类
from langchain.chat_models.base import BaseChatModel
# 导入消息类型
from langchain.schema import AIMessage, HumanMessage, SystemMessage
# 导入Transformers相关组件
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig
# 导入PyTorch
import torch
# 导入类型提示
from typing import List, Any, Optional
# 导入聊天输出相关类
from langchain_core.outputs import ChatGeneration, ChatResult# 定义Qwen3聊天模型类
class ChatQwen3(BaseChatModel):# 默认模型路径model_name_or_path: str = "Qwen/Qwen3-0.6B"# tokenizer实例tokenizer: AutoTokenizer = None# 模型实例model: AutoModelForCausalLM = None# 设备类型device: str = "cuda"# 生成配置generation_config: GenerationConfig = None# 初始化方法def __init__(self, model_name_or_path: str = "Qwen/Qwen3-0.6B", device: str = "cuda", **kwargs):# 调用父类初始化super().__init__(**kwargs)# 设置模型路径self.model_name_or_path = model_name_or_path# 设置设备self.device = device# 加载tokenizerself.tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_code=True)# 加载模型self.model = AutoModelForCausalLM.from_pretrained(model_name_or_path,device_map=device,trust_remote_code=True)# 加载生成配置self.generation_config = GenerationConfig.from_pretrained(model_name_or_path)# 定义模型类型属性@propertydef _llm_type(self):return "chat_qwen3"# 生成回复的方法def _generate(self, messages: List[Any], stop: Optional[List[str]] = None, **kwargs) -> ChatResult:# 将消息转换为提示文本prompt = self._convert_messages_to_prompt(messages)# 对输入进行编码inputs = self.tokenizer(prompt, return_tensors="pt").to(self.device)# 生成回复outputs = self.model.generate(**inputs, generation_config=self.generation_config, max_new_tokens=512)# 解码回复response = self.tokenizer.decode(outputs[0], skip_special_tokens=True)# 提取Assistant的回复部分if "Assistant:" in response:response = response.split("Assistant:")[-1].strip()# 创建AI消息对象message = AIMessage(content=response)# 创建聊天生成对象generation = ChatGeneration(message=message)# 返回聊天结果return ChatResult(generations=[generation])# 将消息列表转换为提示文本的方法def _convert_messages_to_prompt(self, messages):# 初始化提示文本prompt = ""# 遍历所有消息for msg in messages:# 处理人类消息if isinstance(msg, HumanMessage):prompt += f"User: {msg.content}\n"# 处理AI消息elif isinstance(msg, AIMessage):prompt += f"Assistant: {msg.content}\n"# 处理系统消息elif isinstance(msg, SystemMessage):prompt += f"System: {msg.content}\n"# 添加Assistant前缀prompt += "Assistant:"return prompt# 主程序入口
if __name__ == "__main__":# 初始化模型chat_qwen3 = ChatQwen3(model_name_or_path="/root/autodl-tmp/Qwen/Qwen3-0.6B")# 构建消息列表messages = [SystemMessage(content="你是一个有帮助的助手。"),HumanMessage(content="请介绍下你自己。")]# 调用模型生成回复response = chat_qwen3.invoke(messages)# 打印回复内容print(response.content)

(3)Text Embedding Model

        文本嵌入模型,是将文本转化为向量表示(embedding),用于语义相似度计算、聚类、检索等任务。它主要用在构建知识库语义搜索和计算两个句子之间的相似性上。

如果你有OpenAI的API的话, 可以用下面的代码进行文本嵌入。

from langchain_openai import OpenAIEmbeddingsapi_key = "your-api-key-here"  # 请替换为你的OpenAI API密钥
base_url = "your-base-url-here"  # 请替换为你的base_urlembeddings = OpenAIEmbeddings(openai_api_key=api_key,openai_api_base=base_url
)text = "人工智能改变世界"
vector = embeddings.embed_query(text)
print(f"文本 '{text}' 的向量表示长度为:{len(vector)}")

但很多时候我们都使用开源的embedding模型来做词嵌入任务的。

需求:使用modelscope下载bert-base-chinese模型,然后封装成LangChain的Text Embedding Model类进行使用。

使用modelscope的SDK下载:

# 下载 embedding 模型
from modelscope import snapshot_download
model_dir = snapshot_download('tiansz/bert-base-chinese', cache_dir='./')

再代码里面继承Embeddings类,构建一个LangChain里面的Text Embedding Model来调用:

# 导入langchain中的Embeddings基类
from langchain.embeddings.base import Embeddings
# 导入transformers中的自动分词器和模型类
from transformers import AutoTokenizer, AutoModel
# 导入PyTorch
import torch# 定义一个使用本地BERT模型的词嵌入类,继承自Embeddings
class LocalBertEmbeddings(Embeddings):# 初始化函数,接收模型路径和设备参数def __init__(self, model_path: str, device: str = "cuda"):# 加载tokenizerself.tokenizer = AutoTokenizer.from_pretrained(model_path)# 加载模型并移至指定设备self.model = AutoModel.from_pretrained(model_path).to(device)# 保存设备信息self.device = device# 将多个文本转换为向量的函数def embed_documents(self, texts: list) -> list:# 对输入文本进行分词和编码inputs = self.tokenizer(texts, padding=True, truncation=True, max_length=512, return_tensors="pt").to(self.device)# 关闭梯度计算with torch.no_grad():# 使用模型进行前向传播outputs = self.model(**inputs)# 返回最后一层隐藏状态的平均值作为文本向量return outputs.last_hidden_state.mean(dim=1).cpu().numpy().tolist()# 将单个查询文本转换为向量的函数def embed_query(self, text: str) -> list:# 调用embed_documents并返回第一个结果return self.embed_documents([text])[0]# 主程序入口
if __name__ == "__main__":# 实例化LocalBertEmbeddings类local_bert = LocalBertEmbeddings(model_path="/root/autodl-tmp/tiansz/bert-base-chinese")# 定义测试文本text = "深度学习是人工智能的重要分支"# 获取文本的向量表示vector = local_bert.embed_query(text)# 打印向量长度print(f"文本 '{text}' 的向量长度为:{len(vector)}")print(vector)

相关文章:

【自然语言处理与大模型】LangChain大模型应用框架入门①

单独为LangChain花大概五篇文章的内容,来和大家一起入门LangChain,这是第一篇重点放在,了解 LangChain 是什么、它的主要用途以及核心模块。了解 LangChain 的设计哲学:链式调用、模块化、可扩展性。安装并学习其中的一个组件&…...

OpenJDK 1.8中-Xloggc参数下GC日志覆盖与追加模式深度解析

#作者:邓伟 文章目录 一、引言二、覆盖模式详解2.1 默认覆盖行为2.2 覆盖模式的适用场景 三、追加模式(日志轮换)深度解析3.1 追加模式的实现:日志轮换配置3.2 日志轮换的底层逻辑3.3 追加模式(日志轮换)适…...

【Java面试笔记:进阶】28.谈谈你的GC调优思路?

在JVM的GC调优中,没有放之四海而皆准的方案,需要结合业务场景、硬件资源和GC特性进行系统性分析。 1.GC调优的基本思路 1.明确调优目标 内存效率(Footprint):减少JVM的内存占用(如边缘设备部署)。低延迟(Latency):降低GC导致的停顿时间(如API网关要求99.9%请求延迟…...

C#中winform窗体如何捕获键盘按键事件

马工撰写的年入30万+C#上位机项目实战必备教程(点击下方链接即可访问文章目录) 1、《C#串口通信从入门到精通》 2、《C#与PLC通信从入门到精通 》 3、《C# Modbus通信从入门到精通》 4、《C#Socket通信从入门到精通 》 5、《C# MES通信从入门到精通》 6、《winform控件从入门…...

USB 网卡——RNDIS 控制消息流程

文章目录 RNDIS 控制消息流程控制写设备回复控制读注意事项RNDIS 控制消息流程 RNDIS 控制消息流程分为三步 控制写(控制端点 0)设备回复(中断端点)控制读(控制端点 0)数据抓包如下 控制写 设备的控制通道是通过 USB 控制端点完成的。 从主机到设备的控制消息作为 SE…...

【AI News | 20250429】每日AI进展

AI Repos 1、aci ACI.dev是一个开源基础设施层,旨在为AI智能体的工具使用提供支持。它通过统一的模型-上下文-协议(MCP)服务器或轻量级Python SDK,使智能体能够以感知意图的方式访问600多种工具,并具备多租户认证、细…...

JavaScript 中深拷贝浅拷贝的区别?如何实现一个深拷贝?

一、区别:像“复印文件” vs “创建副本文件” 1. 浅拷贝(Shallow Copy) 动作:只复制文件的第一页,其他页用“贴标签”指向原文件。结果: 修改第一层属性不影响原对象,但修改嵌套对象会同时改…...

<四级词汇>2025.4.29

compact---所有的人都拍他 越拍越紧 ---紧凑的 impact 往里拍他 -- 碰撞会产生影响 --- 碰撞 影响 influence -- 影响 flue -- 流感 influenza -- 流感 fluent --- fly enter 鸟儿流利飞进屋子 --- 流利的 fluently affluent --- 一再地生活的很流畅 -- 富裕的 …...

mmap核心原理和用途及其与内存映射段的关系

mmap 是 Linux/Unix 系统中的一个关键系统调用,全称是 Memory Map(内存映射)。它的核心功能是将 文件、设备或匿名内存 直接映射到进程的虚拟地址空间,从而实现高效的内存访问和操作。以下是其核心原理和用途的详细说明&#xff1…...

深入理解 Web Service:原理、组件与核心技术详解

目录 前言1 Web Service 概述2 Web Service 的三大核心角色2.1 服务提供者(Service Provider)2.2 服务请求者(Service Consumer)2.3 服务注册中心(Service Registry) 3 Web Service 核心技术详解3.1 WSDL&a…...

【动态导通电阻】GaN功率器件中动态导通电阻退化的机制、表征及建模方法

2019年,浙江大学的Shu Yang等人在《IEEE Journal of Emerging and Selected Topics in Power Electronics》上发表了一篇关于GaN(氮化镓)功率器件动态导通电阻(Dynamic On-Resistance, RON)的研究论文。该文深入探讨了GaN功率器件中动态导通电阻退化的机制、表征方法、建模…...

AWS SQS 队列策略配置指南:常见错误与解决方案

在 AWS 云服务中,Simple Queue Service (SQS) 是一种完全托管的消息队列服务,广泛应用于分布式系统组件间的解耦。为了确保队列的安全访问,正确配置队列策略至关重要。本文将详细介绍 SQS 队列策略的配置方法,常见错误及其解决方案。 SQS 队列策略基础 SQS 队列策略是基于…...

【后端】【Docker】 Docker 动态代理 取消代理完整脚本合集(Ubuntu)

🚀 Docker 动态代理 & 取消代理完整脚本合集(Ubuntu) 一、动态设置 Docker 代理脚本 支持自定义输入代理地址和端口! 📄 脚本内容(保存为 set_docker_proxy.sh) #!/bin/bash# 读取用户输入 read -p "请输入…...

Java基础学习内容大纲

Java基础学习内容大纲 第一阶段:建立编程思想 ​ Java概述:如何快速学习Java技术、Java历史、Java特点、Sublime、Java运行机制、JDK、转义字符、Java开发规范、Java API ​ 变量:数据类型、变量基本使用、数据类型转换 ​ 运算符:运算符介绍、算数运算符、关系运算符、…...

[USACO08DEC] Hay For Sale S Java

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int c sc.nextInt(); // 背包容量int h sc.nextInt(); // 物品数量int[] v new int[h 1];for (int i 1; i < h; i) v[i] sc.nextInt();int[] dp …...

碰到的 MRCPv2 串线以及解决思路

最近碰到了一个朋友的 MRCPv2 串线&#xff0c;表现大约是&#xff1a; fs1 和 fs2 同时发到 mrcp server 的同一个 rtp 端口 目前尚不清楚 mrcp server 是否能避免这种情况&#xff08;其实是有思路的&#xff0c;接收到 rtp 包时检查网络地址和网络端口跟 sip 协商的是否一…...

AI正当时,国内AI HR领先厂商易路如何从“单点突破”到“全面融合”

所谓AI HR‌&#xff0c;是指将人工智能&#xff08;AI&#xff09;技术&#xff08;如机器学习、自然语言处理、大数据分析等&#xff09;应用于人力资源管理的各个环节&#xff0c;以提升效率、优化决策并改善员工体验。典型场景有&#xff1a; 在招聘、考勤、薪酬计算等重复…...

MCP 哪家强?深度分析 Cline、Cursor、Trae、Coze 四大平台

想象一下&#xff1a;你只需一句话&#xff0c;AI就能自动抓取GitHub issue、生成代码、调试UI&#xff0c;甚至帮你写博客发到Substack&#xff01;这不是科幻&#xff0c;而是**Model Context Protocol (MCP)**的现实。MCP作为AI与工具交互的“通用语言”&#xff0c;自2024年…...

【最新 MCP 战神手册 09】利用资源和提示增强上下文

文章目录 1. 开始啦!2. 第一部分:通过资源解锁应用数据3. 第二部分:用提示引导 AI4. 第三部分:高效上下文管理策略1. 开始啦! 在上一章中,我们深入探讨了 MCP 工具——这些组件使得 AI 模型能够执行各种操作。然而,操作很少在真空中发生。为了让 AI 智能地行动,它需要…...

解决vue3 路由query传参刷新后数据丢失的问题

前言&#xff1a;在页面刷新的时候&#xff0c;路由query数据会被清空&#xff0c;网上很多方法说query传参可以实现&#xff0c;反正我是没有实现 思路&#xff1a;将数据保存到本地&#xff0c;通过 “ &#xff1f;” 进行判断是否有数据&#xff0c;页面销毁的时候删除本地…...

VUE篇之树形特殊篇

根节点是level:1, level3及其子节点有关联&#xff0c;但是和level2和他下面的子节点没有关联 思路&#xff1a;采用守护风琴效果&#xff0c;遍历出level1和level2级节点&#xff0c;后面level3的节点&#xff0c;采用树形结构进行关联 <template><div :class"…...

Qwen多模态系列论文

From:https://www.big-yellow-j.top/posts/2025/04/28/QwenVL.html 本文主要介绍Qwen-vl系列模型包括&#xff1a;Qwen2-vl、Qwen2.5-vl Qwen2-vl http://arxiv.org/abs/2409.12191 模型结构&#xff1a; Qwen2-vl主要的改进点在于&#xff1a;1、使用动态分辨率&#xff08…...

Astro大屏中关于数据流转的数据接入与数据中心之间的逻辑关系梳理

在 Astro 大屏中&#xff0c;「数据接入」与「数据中心」是紧密关联的一对模块&#xff0c;分别承担“数据从哪来”和“数据怎么管”的职责。为了更形象地帮助初学者理解&#xff0c;我可以用“自来水系统”的比喻来解释整个原理与操作逻辑&#xff1a; &#x1f3e0; 形象比喻…...

【今日三题】小红的ABC(找规律) / 不相邻取数(多状态dp) / 空调遥控(排序+二分/滑动窗口)

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;每日两三题 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 小红的ABC(找规律)不相邻取数(多状态dp)空调遥控(排序二分/滑动窗口) 小红的ABC(找规律) 小红的ABC 找最短回文串&#xff…...

双重差分模型学习笔记(理论)

【DID最全总结】90分钟带你速通双重差分&#xff01;_哔哩哔哩_bilibili 一、DID的基本原理 &#xff08;一&#xff09; 单重差分 1. Cross-Section Comparison 截面数据 只有某个时间点事件发生后的数据 D1 事件发生后 D0 事件发生前 2. Befor-After Vomparison 时间序列…...

企业级私有化部署,内部聊天软件

如何在激烈的市场竞争中脱颖而出&#xff0c;提升工作效率、降低运营成本&#xff0c;同时保障信息安全&#xff0c;成为众多企业管理者亟待解决的问题。而BeeWorks 企业级私有化部署的内部聊天软件&#xff0c;无疑是为这一难题提供了一把金钥匙。 BeeWorks覆盖即时通讯&#…...

HCIA-Datacom 高阶:VLAN、VLANIF 与静态路由综合实验

拓扑图解读 从拓扑图中可以看到&#xff0c;存在三层交换机 LSW3、普通交换机 LSW4、路由器 R2 以及 PC1 - PC4。LSW4 连接了三个不同 VLAN 的 PC&#xff08;PC1 属于 VLAN 10、PC2 属于 VLAN 20、PC3 属于 VLAN 30 &#xff09;&#xff0c;并通过 Ethernet 0/0/1 端口以 tr…...

Android ndk 编译opencv后部分接口std::__ndk1与项目std::__1不匹配

1、opencv-4.11预编译命令&#xff08;在opencv4.5.0之后兼容免费features2d做特征匹配&#xff09;&#xff0c;NDK版本选用的android-ndk-r23c-linux.zip cmake -G Ninja \ -DCMAKE_TOOLCHAIN_FILE/home/who/Downloads/NDK/android-ndk-r23c/build/cmake/android.toolchain.…...

SQL命令一:SQL 基础操作与建表约束

目录 引言 一、SQL 基础命令 &#xff08;一&#xff09;数据库相关操作 &#xff08;二&#xff09;表格相关操作 &#xff08;三&#xff09;MySQL 常用数据类型 二、增删改查&#xff08;CRUD&#xff09;操作 &#xff08;一&#xff09;增加数据 &#xff08;二&a…...

颜色分类,不靠“调色盘”:双指针 VS 计数排序的正面PK

颜色分类&#xff0c;不靠“调色盘”&#xff1a;双指针 VS 计数排序的正面PK 在算法圈混得久了&#xff0c;总有一些题目是面试官的心头好&#xff0c;刷题人绕不过的“鬼门关”。“颜色分类”&#xff08;LeetCode 75&#xff09;就是其中之一&#xff0c;看似小儿科&#xf…...

Shopify网上商店GraphQL Admin接口查询实战

目录 一、Shopify网上商店 二、个人商店配置接口权限 三、PostMan调用接口测试 四、通过Java服务调用接口 一、Shopify网上商店 Shopify是由Tobi Ltke创办的加拿大电子商务软件开发商&#xff0c;总部位于加拿大首都渥太华&#xff0c;已从一家在咖啡店办公的 5人团队&…...

Laravel基础

Laravel 基础 01.Laravel入门和安装 Composer安装Laravel步骤 要使用 Composer 安装 Laravel&#xff0c;请按照以下步骤操作&#xff1a; 确保已经安装了 Composer。如果还没有安装&#xff0c;请访问 https://getcomposer.org/download/ 下载并安装。 打开命令行或终端。…...

【Leetcode 每日一题 - 补卡】2302. 统计得分小于 K 的子数组数目

问题背景 一个数组的 分数 定义为数组之和 乘以 数组的长度。 比方说&#xff0c; [ 1 , 2 , 3 , 4 , 5 ] [1, 2, 3, 4, 5] [1,2,3,4,5] 的分数为 ( 1 2 3 4 5 ) 5 75 (1 2 3 4 5) \times 5 75 (12345)575。 给你一个正整数数组 n u m s nums nums 和一个整数 k…...

力扣——206.反转链表倒序输出链表

206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff08;迭代&#xff09; 设三个指针&#xff0c;前后两个指针都为空&#xff0c;当前指针为输入的头指针 开始循环——判断条件为当前节点不为空 先给下一个节点赋值为——当前节点的下一个 改变当前节点的…...

Arthas在Java程序监控和分析中的应用

Arthas在Java程序监控和分析中的应用 在互联网大厂Java求职者的面试中&#xff0c;经常会被问到关于使用Arthas来监控和分析Java程序的相关问题。本文通过一个故事场景来展示这些问题的实际解决方案。 第一轮提问 面试官&#xff1a;马架构&#xff0c;欢迎来到我们公司的面…...

第13讲:图形尺寸与分辨率设置——适配论文版面,打造专业图稿!

目录 📌 为什么这一讲重要? 🎯 一、先认识几个关键词 ✍️ 二、ggsave() 是导出图的标准方法 📐 三、尺寸设置技巧:对齐目标期刊 🔍 找到目标期刊的图形栏宽 📦 四、多个图组合导出(与 patchwork 搭配) 🧪 五、使用 Cairo / ragg 导出高质量图 🎁 六…...

Docker与Vmware网络模式的对别

前言 在使用了很久的VMware和Docker后&#xff0c;分别独立配置过他们的网络&#xff0c;但是每次配置一方时&#xff0c;总感觉和另一方有点不一样&#xff0c;但是也没有来得及总结。刚好最近有时间可以总结一下。 重点&#xff1a; 1、VMware的桥接模式和Docker的桥接模式完…...

大模型在肾癌诊疗全流程中的应用研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 1.3 国内外研究现状 二、大模型预测肾癌术前情况 2.1 基于影像组学的肾癌良恶性及分级预测 2.1.1 MRI 影像组学模型预测肾透明细胞癌分级 2.1.2 CT 影像深度学习模型鉴别肾肿物良恶性及侵袭性 2.2 大模型对手术风…...

Springboot使用登录拦截器LoginInteceptor来做登录认证

创建拦截器LoginInteceptor类 interceptors/LoginInteceptor.java package org.example.interceptors;import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.example.utils.JwtUtil; import org.springframework.s…...

2025年- H13-Lc120-189.轮转数组(普通数组)---java版

1.题目描述 2.思路 import java.util.Arrays;public class H189 {public static void main(String[] args) {int[] newArr {1, 2, 3, 4, 5};int[] nums new int[5];System.arraycopy(newArr,0,nums,0,4);System.out.println(Arrays.toString(nums)); } }补充2&#xff1a; 3.…...

Android Framework常见问题

以下是不同难度级别的 Android Framework 面试题&#xff0c;包含答案要点&#xff0c;可帮助你为面试做好准备。 初级难度 1. 请简要解释 Android Framework 是什么。 答案要点&#xff1a;Android Framework 是 Android 系统的核心组成部分&#xff0c;它为开发者提供了一…...

【AI】图片处理的AI工具

博主最近需要给客户展示一下做的一些设备和仪器&#xff0c;随手拍了一些照片&#xff0c;觉的背景不是很好看&#xff0c;于是在网上寻找AI图片处理工具。后来随手用了一下豆包AI&#xff0c;发现很好用&#xff0c;这里把一点使用的心得体会记录一下&#xff0c;并和大家分享…...

Python列表全面解析:从基础到高阶操作

一、为什么需要列表&#xff1f; 在Python中&#xff0c;列表是可变有序序列&#xff0c;用于存储多个元素的容器。相较于单一变量存储独立值&#xff0c;列表能更高效地管理批量数据&#xff0c;其特点包括&#xff1a; ​引用存储&#xff1a;列表元素存储的是对象的引用​…...

C++调用C动态库编译时报undefined reference to “funcxxx“错误

问题描述&#xff1a;Linux平台上C调用C库进行make编译时报undefined reference to "funcxxx"错误&#xff0c;错误实例如下&#xff1a; /usr/bin/ld: CMakeFiles/dialog.dir/widgets/widget.cpp.o: in function Widget::loadVerificationModule(): /home/zhangxia…...

基于Spring Boot+Vue 网上书城管理系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

C++ 中自主内存管理 new/delete 与 malloc/free 完全详解

C 中 new/delete 与 malloc/free 完全详解 一、new/delete 与 malloc/free 的区别 特性new/deletemalloc/free属于C语言C语言申请的内存区堆&#xff08;Heap&#xff09;堆&#xff08;Heap&#xff09;返回类型指向对象类型的指针&#xff08;自动转换&#xff09;void*&…...

Maven中的依赖管理

目录 什么是依赖范围 什么是依赖传递 依赖范围对依赖传递的影响 依赖冲突 什么是依赖冲突 依赖冲突的解决方案 版本锁定 短路径优先 ​编辑 声明优先 特殊优先&#xff08;后来者居上&#xff09; 可选依赖 排除依赖 可选依赖和排除依赖的区别 刷新依赖的8种方式…...

生态修复项目管理软件

在“双碳”目标与生态文明建设的双重驱动下&#xff0c;生态修复项目正成为全球环境治理的核心战场。然而&#xff0c;矿山复绿、湿地修复、水土保持等工程往往面临跨地域、多主体、长周期的管理难题——从数据分散到进度失控&#xff0c;从成本超支到风险频发&#xff0c;传统…...

深度剖析 RocketMQ 5.0 之架构解析:云原生架构如何支撑多元化场景?

拓展学习&#xff1a;&#x1f50d;「RocketMQ 中文社区」 持续更新&#xff0c;提供 RocketMQ 领域专家模型的 AI 答疑 作者 | 隆基 简介&#xff1a; 了解 RocketMQ 5.0 的核心概念和架构概览&#xff1b;然后我们会从集群角度出发&#xff0c;从宏观视角学习 RocketMQ 的管…...

Spring中bean的生命周期(笔记)

bean的生命周期&#xff0c;按照最重要五步 第一步&#xff1a;实例化bean,调用无参构造方法&#xff08;通过BeanDefinition利用反射实例化Bean对象(无参数构造方法) 并通过推断构造方法...并放入三级缓存中..&#xff09; 第二步&#xff1a;给bean属性赋值&#xff08;调用…...