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

LangFlow技术深度解析:可视化编排LangChain应用的新范式 -(3)组件系统

Component System | langflow-ai/langflow | DeepWiki

组件系统

相关源文件

组件系统是核心基础设施,使 Langflow 能够在工作流中创建、配置和连接模块化构建块。该系统通过为组件提供一致的接口来定义其输入、输出、执行行为以及与其他组件的连接,从而为可视化编程体验提供支持。

有关内置组件的信息,请参阅内置组件。有关创建您自己的自定义组件的信息,请参阅自定义组件。

组件系统概述

Langflow 中的组件系统是围绕分层类结构构建的,该结构允许灵活地创建组件,同时强制执行一致的接口。组件可以表示各种功能,从语言模型和工具到数据转换器和 I/O 处理程序。

来源:来源/backend/base/langflow/custom/custom_component/component.py96-446 来源/backend/base/langflow/custom/custom_component/custom_component.py35-190 src/backend/base/langflow/template/field/base.py34-211

组件结构和生命周期

Langflow 中的组件从初始化到执行都遵循定义明确的生命周期:

来源:来源/backend/base/langflow/custom/custom_component/component.py101-147 来源/后端/基础/langflow/图形/顶点/base.py370-405 src/backend/base/langflow/interface/initialize/loading.py139-154

初始化和配置

初始化组件时,它会:

  1. 设置其基本属性
  2. 映射其输入和输出
  3. 准备执行
# Simplified component initialization
def __init__(self, **kwargs) -> None:# Initialize instance-specific attributesself._inputs: dict[str, InputTypes] = {}self._outputs_map: dict[str, Output] = {}self._results: dict[str, Any] = {}# Process input kwargsinputs = {}config = {}for key, value in kwargs.items():if key.startswith("_"):config[key] = valueelse:inputs[key] = value# Store parametersself._parameters = inputs or {}# Setup inputs and outputsself.map_inputs(self.inputs)self.map_outputs()

来源:来源/backend/base/langflow/custom/custom_component/component.py101-163 来源/后端/基础/langflow/图形/顶点/base.py46-109

输入和输出系统

组件具有强大的输入和输出系统,可实现:

  1. 定义他们接受和返回的数据类型
  2. 连接到其他组件
  3. 管理参数验证

每个组件都有:

  • 定义它接受的参数的对象列表Input
  • 定义它生成的结果的对象列表Output

来源:来源/backend/base/langflow/custom/custom_component/component.py254-407 src/backend/base/langflow/template/field/base.py34-211

组件连接和集成

Langflow 中的组件可以使用强大的连接系统连接在一起以形成工作流程。

Set 方法

该方法是配置组件并将其连接到其他组件的主要方法:set()

# Example of setting parameters and connecting components
model_component = OpenAIModelComponent()
model_component.set(model_name="gpt-4", temperature=0.7)prompt_component = PromptComponent()
prompt_component.set(template="Answer this question: {question}")# Connect the prompt to the model
output_component = ChatOutput()
output_component.set(model=model_component.build_model, prompt=prompt_component.format)

在后台,该方法:set()

  1. 区分常规参数和组件连接
  2. 对于组件连接,它会查找要连接到的适当方法
  3. 将连接的元件添加到内部列表以进行跟踪
  4. 在底层图形结构中创建一条边

来源:来源/backend/base/langflow/custom/custom_component/component.py316-400 来源/后端/基础/langflow/图形/边缘/base.py14-72

来源:来源/backend/base/langflow/custom/custom_component/component.py629-671 来源/后端/基础/langflow/graph/graph/base.py274-338

组件与 Graph System 集成

组件通过以下架构集成到 Langflow 的 Graph 系统中:

来源:来源/后端/基础/langflow/graph/graph/base.py59-166 来源/后端/基础/langflow/graph/graph/runnable_vertices_manager.py1-90

组件执行

当组件作为工作流的一部分执行时:

  1. 图形中的每个顶点都根据依赖关系进行处理
  2. 解析输入值(处理静态值和连通分量输出)
  3. 组件的 build/run 方法被调用
  4. 结果被存储并传递给依赖组件

来源:来源/backend/base/langflow/api/v1/chat.py256-416 来源/后端/基础/langflow/graph/graph/base.py731-785 来源/后端/基础/langflow/图形/顶点/base.py370-483

关键执行组件

组件的执行由几个关键系统管理:

  1. Graph:编排整体执行并管理依赖项
  2. Vertex:包装组件并处理其在图形中的集成
  3. RunnableVerticesManager:确定顶点执行的顺序
  4. Component:包含要执行的实际逻辑

来源:来源/后端/基础/langflow/graph/graph/base.py59-191 来源/后端/基础/langflow/graph/graph/runnable_vertices_manager.py4-87

创建自定义组件

要创建自定义组件,请扩展类并定义输入和输出:Component

from langflow.custom import Component
from langflow.field_typing import Text
from langflow.inputs.inputs import TextInput
from langflow.template.field.base import Outputclass MyCustomComponent(Component):display_name = "My Component"description = "A custom component that does something"# Define inputsinputs = [TextInput(name="input_text", display_name="Input Text"),]# Define outputsoutputs = [Output(name="text_output", display_name="Text Output", method="process_text")]# Define methods that match output methodsdef process_text(self) -> Text:# Process input_text parameterresult = self.input_text.upper()return result# Run method is called by defaultasync def run(self):return await self._run()

注册后,该组件将在 Langflow UI 中可用,并带有定义的输入和输出。

来源:来源/backend/base/langflow/custom/custom_component/component.py96-162 src/backend/base/langflow/template/field/base.py34-174 来源/后端/基础/langflow/基础/模型/model.py25-64

组件前端表示

组件需要在前端 UI 中表示。这是通过序列化表示完成的,前端可以使用该表示在 flow 编辑器中呈现组件。

来源:来源/backend/base/langflow/custom/custom_component/component.py800-847 来源/backend/base/langflow/template/frontend_node/base.py9-132

组件序列化过程

  1. 组件定义输入、输出和方法
  2. to_frontend_node()将其转换为结构化表示
  3. 此结构序列化为前端的 JSON
  4. 前端将其渲染为 flow 编辑器中的节点

这个过程允许前端确切地知道组件具有哪些输入和输出,它们接受哪些类型,以及如何向用户显示它们。

来源:来源/backend/base/langflow/custom/custom_component/component.py800-847 来源/backend/base/langflow/api/v1/schemas.py195-229 来源/backend/base/langflow/template/frontend_node/base.py67-114

组件与 API 层的交互

当用户通过 API 与组件交互时,流程为:

来源:来源/backend/base/langflow/api/v1/chat.py142-207 来源/后端/基础/langflow/api/v1/endpoints.py109-168

组件状态管理

组件可以通过图形的状态管理系统在图形执行中维护状态:

# Example of state management in a component
def update_state(self, name: str, value: Any) -> None:if not self._vertex:raise ValueError("Vertex is not set")try:self._vertex.graph.update_state(name=name, record=value, caller=self._vertex.id)except Exception as e:raise ValueError(f"Error updating state: {e}") from edef get_state(self, name: str):if not self._vertex:raise ValueError("Vertex is not set")try:return self._vertex.graph.get_state(name=name)except Exception as e:raise ValueError(f"Error getting state: {e}") from e

这允许组件在正常的 input/output 流之外共享数据,这对于聊天界面等有状态应用程序特别有用。

来源:来源/backend/base/langflow/custom/custom_component/custom_component.py119-177 来源/后端/基础/langflow/graph/graph/base.py496-588

组件开发的最佳实践

开发自定义组件时:

  1. 清晰的界面:使用适当的类型定义清晰的输入和输出
  2. 验证:对输入参数实施适当的验证
  3. 错误处理:妥善处理错误并提供有用的消息
  4. 文档:记录组件的用途和用途
  5. 可重用性:将组件设计为可在不同流程中重复使用
  6. 性能:考虑组件的性能影响

来源:来源/backend/base/langflow/custom/custom_component/component.py457-469 来源/后端/基础/langflow/基础/模型/model.py66-94

组件系统集成点

组件系统与 Langflow 中的其他几个系统集成:

系统

集成点

目的

图形系统

顶点包装

组件由图中的顶点包裹

API 层

构建和执行

API 端点触发组件构建和执行

存储服务

参数持久性

可以存储和检索组件参数

跟踪服务

性能监控

可以跟踪组件执行以进行调试

事件系统

实时更新

组件可以在执行期间发出事件

来源:来源/后端/基础/langflow/graph/graph/base.py241-278 来源/backend/base/langflow/api/v1/chat.py142-207 src/backend/base/langflow/interface/initialize/loading.py106-135

总结

组件系统构成了 Langflow 可扩展架构的支柱:

  1. 它为创建模块化构建块提供了一致的接口
  2. 组件可以连接在一起以形成复杂的工作流程
  3. 系统处理参数验证、执行和结果管理
  4. 可以创建自定义组件以扩展功能
  5. 该系统与 Graph System 集成以进行工作流编排
  6. 前端表示允许在 UI 中进行可视化编程

了解组件系统对于有效使用 Langflow 以及使用自定义组件扩展它至关重要。

来源:来源/backend/base/langflow/custom/custom_component/component.py96-162 来源/后端/基础/langflow/graph/graph/base.py59-105 来源/后端/基础/langflow/图形/顶点/base.py46-109

Built-in Components | langflow-ai/langflow | DeepWiki

内置组件

相关源文件

本页概述了 Langflow 中的内置组件类型,包括语言模型 (LLM)、链、代理、内存、向量存储和工具。有关使用自定义组件扩展 Langflow 的信息,请参阅自定义组件。

1. 组件系统概述

内置组件是 Langflow 流的基础构建块,提供与各种语言模型功能和实用程序的预配置集成。这些组件可以通过 Flow Editor 连接在一起,无需编写代码即可创建复杂的 AI 工作流。

来源:来源/后端/基础/langflow/基础/模型/model.py25-26从系统架构图。

2. 组件基类

Langflow 的组件系统建立在基类的层次结构之上,这些基类为不同的组件类型提供一致的接口和功能。

2.1. Base 组件

该类是 Langflow 中所有组件的基础,提供:Component

  • 输入和输出定义
  • 配置属性
  • 显示信息
  • 加工方法

2.2. LCModelComponent 组件

该类扩展了基类,为语言模型组件提供了专门的功能:LCModelComponentComponent

来源:来源/后端/基础/langflow/基础/模型/model.py25-48

3. 组件类型

Langflow 根据组件在流中的功能和用途将组件组织到逻辑类别中。

3.1. 语言模型组件

语言模型组件为各种 LLM 提供程序和模型提供接口。它们继承自类。LCModelComponent

主要特点:

  • 适用于所有语言模型的标准输入/输出接口
  • 支持流式响应
  • 系统消息处理
  • 工具调用功能(如果模型支持)
  • 响应元数据处理

标准输入包括:

  • input_value:主要输入文本或消息
  • system_message:模型的可选系统说明
  • stream:用于启用流式响应的布尔标志

标准输出包括:

  • text_output:生成的文本响应
  • model_output:用于链接的语言模型实例

来源:来源/后端/基础/langflow/基础/模型/model.py33-47

3.2. 链组件

链组件实现 LangChain 链,这些链将多个作组合成可重用的序列。

链条的主要类型包括:

  • LLM 链条
  • 顺序链
  • 变形链
  • 路由器链
  • 问答链

3.3. 代理组件

代理组件实现由 LLM 提供支持的自主代理,这些代理可以使用工具完成任务。

药物类型包括:

  • ReAct 代理
  • 函数调用代理
  • 计划并执行代理
  • 对话代理

3.4. 工具组件

工具组件提供可供座席使用或直接在流程中使用的专用功能。

工具类别包括:

  • 搜索工具
  • 计算工具
  • 数据作工具
  • API 集成工具

3.5. 内存组件

内存组件在会话期间或多次运行期间存储和检索信息。

内存类型包括:

  • 对话记忆
  • 向量存储内存
  • 实体内存
  • 摘要内存

3.6. Vector Store 组件

向量存储组件管理用于语义相似性搜索和检索的嵌入。

支持的矢量存储包括:

  • FAISS
  • Chroma
  • Pinecone
  • Weaviate
  • Qdrant

4. 组件接口结构

Langflow 中的所有组件都遵循一致的接口模式,但根据组件类型会有一些变化。

4.1 输入参数

组件使用专门的输入类型定义输入:

输入类型

目的

文本输入

简单文本值

API 密钥、模型名称

多行输入

较长的文本内容

提示、系统消息

文件输入

文件上传

用于嵌入的文档

IntInput (输入)

整数值

令牌限制、温度

浮点输入

浮点值

相似性阈值

布尔输入

布尔标志

启用流式处理

模板输入

模板文本

自定义提示

DictInput (字典输入)

键值对

模型参数

消息输入

聊天消息

对话历史记录

来源:来源/后端/基础/langflow/基础/模型/model.py33-42

4.2 输出方法

组件定义可以连接到其他组件的输出:

中的输出方法包括:LCModelComponent

  • text_response():返回文本或消息响应
  • build_model():返回构造的模型实例

来源:来源/后端/基础/langflow/基础/模型/model.py44-47 来源/后端/基础/langflow/基础/模型/model.py78-87 来源/后端/基础/langflow/基础/模型/model.py246-248

5. 组件执行流程

组件的执行流程是标准化的,特别是对于语言模型组件。

5.1 文本响应生成

对于 LLM 组件,文本响应生成遵循以下模式:

  1. 收集输入值和系统消息
  2. 构建语言模型
  3. 为模型准备消息
  4. 使用流式处理或非流式处理模式进行处理
  5. 解析响应并设置其格式
  6. 返回结果

来源:来源/后端/基础/langflow/基础/模型/model.py78-87 来源/后端/基础/langflow/基础/模型/model.py163-244

5.2 模型构建

模型构建过程遵循一致的模式:

  1. 该组件的方法称为build_model()
  2. 验证输入参数
  3. 对应的 LangChain 模型被实例化
  4. 应用可选配置
  5. 返回模型以供使用

来源:来源/后端/基础/langflow/基础/模型/model.py250-286 来源/后端/基础/langflow/基础/模型/model.py288-308

6. 组件集成模式

组件通过标准化模式相互集成,并与 Flow Editor 集成。

6.1 节点表示

在 Flow Editor 中,每个组件都表示为一个节点,其中包含:

  • Input 处理匹配组件输入
  • 输出处理匹配的组件输出
  • 基于输入类型的参数 UI
  • 执行状态的状态指示器

6.2 组件链接

通过将 output 连接到 inputs,可以将组件链接在一起:

6.3 工具集成

支持工具调用的语言模型可以与工具组件集成:

来源:来源/后端/基础/langflow/基础/模型/model.py52-64

7. 高级组件功能

7.1 流媒体支持

许多组件,尤其是 LLM 组件,都支持流式响应:

if stream:result = runnable.stream(inputs)
else:message = runnable.invoke(inputs)

来源:来源/后端/基础/langflow/基础/模型/model.py227-228

7.2 响应元数据

LLM 组件从模型响应中提取有用的元数据并设置其格式:

if isinstance(message, AIMessage):status_message = self.build_status_message(message)self.status = status_message

来源:来源/后端/基础/langflow/基础/模型/model.py232-233 来源/后端/基础/langflow/基础/模型/model.py114-161

7.3 输出解析

组件可以使用输出解析器来转换原始模型输出:

if hasattr(self, "output_parser") and self.output_parser is not None:runnable |= self.output_parser

来源:来源/后端/基础/langflow/基础/模型/model.py217-218

8. 总结

Langflow 的内置组件为创建语言模型应用程序提供了一套全面的构建块。组件系统使用一致的接口和继承模式,从而可以轻松地在 Flow Editor 中连接和配置组件。

核心组件类型(LLM、链、代理、工具、内存和向量存储)涵盖了大多数 LLM 应用程序所需的全部功能,从简单的提示响应流程到复杂的基于代理的系统。

Custom Components | langflow-ai/langflow | DeepWiki

自定义组件

相关源文件

目的和范围

自定义组件允许用户通过使用 Python 代码创建自己的可重用自定义节点来扩展 Langflow。本文档介绍了自定义组件的架构和实施,包括如何创建它们、它们与图形系统的集成以及最佳实践。有关内置组件的信息,请参阅内置组件。

架构概述

Langflow 中的自定义组件是通过支持功能和前端渲染的类层次结构实现的。该类继承自所有用户定义的组件,并为之提供基础。ComponentCustomComponent

来源:来源/backend/base/langflow/custom/custom_component/component.py 来源/backend/base/langflow/custom/custom_component/custom_component.py src/backend/base/langflow/template/field/base.py

组件类结构

主类为自定义组件提供核心功能:Component

来源:来源/backend/base/langflow/custom/custom_component/component.py96-161

创建自定义组件

要创建自定义组件:

  1. 创建一个继承自Component
  2. 使用输入类型定义输入langflow.inputs
  3. 创建将用作输出的方法
  4. 实现组件的逻辑

基本结构

from langflow.custom.custom_component.component import Component
from langflow.inputs import StrInput, IntInputclass MyComponent(Component):display_name = "My Custom Component"description = "Description of what this component does"icon = "🔧"  # Emoji icon for the component# Define inputsinputs = [StrInput(name="text_input", display_name="Text Input", required=True),IntInput(name="count", display_name="Count", default=5)]# Define a method that will become an outputdef process_text(self) -> str:"""Process the input text and return result"""# Access inputs as attributestext = self.text_inputcount = self.count# Process and return resultreturn text * count

来源:来源/backend/base/langflow/custom/custom_component/component.py45-87

输入类型

Langflow 为自定义组件提供了多种输入类型:

输入类型

目的

字段类型

StrInput

文本输入

发短信

IntInput

整数值

整数

FloatInput

十进制值

BoolInput

拨动开关

布尔

MultilineInput

多行文本

TEXT (多行)

FileInput

文件上传

文件

DropdownInput

从选项中选择

TEXT (下拉列表)

DataInput

数据结构

其他

TableInput

表格数据

桌子

CodeInput

代码片段

法典

来源:src/backend/base/langflow/inputs/inputs.py39-445 来源/后端/基础/langflow/inputs/input_mixin.py19-41

输入配置

输入可以使用各种参数进行配置:

from langflow.inputs import StrInput, IntInput, FloatInput, DropdownInputinputs = [StrInput(name="api_key",display_name="API Key",required=True,password=True,placeholder="Enter your API key",info="The API key for authentication"),IntInput(name="max_tokens",display_name="Max Tokens",default=100,range_spec={"min": 1, "max": 4096, "step": 1}),FloatInput(name="temperature",display_name="Temperature",default=0.7,range_spec={"min": 0, "max": 2, "step": 0.1}),DropdownInput(name="model",display_name="Model",options=["gpt-3.5-turbo", "gpt-4"],default="gpt-3.5-turbo")
]

来源:src/backend/base/langflow/inputs/inputs.py113-169 src/backend/base/langflow/template/field/base.py34-95

输出和方法

在自定义组件中,每个方法都成为可以连接到其他组件的潜在输出。该方法的返回类型注释决定了它输出的数据类型。

from langflow.custom.custom_component.component import Component
from langflow.inputs import StrInput
from langflow.schema import Dataclass TextProcessor(Component):display_name = "Text Processor"inputs = [StrInput(name="text", display_name="Input Text", required=True)]def uppercase(self) -> str:"""Return the text in uppercase"""return self.text.upper()def word_count(self) -> int:"""Count words in the text"""return len(self.text.split())def as_data(self) -> Data:"""Return the text as a Data object"""return Data(data={"text": self.text, "length": len(self.text)})

该方法会自动分析您的方法以确定它们需要哪些输入。_set_output_required_inputs

来源:来源/backend/base/langflow/custom/custom_component/component.py526-563

组件实例化和执行

在流程中执行组件时:

来源:来源/backend/base/langflow/api/v1/chat.py256-319 来源/后端/基础/langflow/图形/顶点/base.py370-402 src/backend/base/langflow/interface/initialize/loading.py23-49

Graph 集成

自定义组件与 Langflow 的图形系统集成,后者管理执行流程和组件之间的数据传递。

组件连接

组件在图形中通过将一个组件的输出连接到另一个组件的输入的边连接:

来源:来源/后端/基础/langflow/graph/graph/base.py257-277 来源/后端/基础/langflow/graph/graph/base.py290-339

前端表示

自定义组件会生成一个前端表示,用于确定它们在 Langflow UI 中的显示方式:

前端节点表示形式包括:

  • 包含所有输入字段的模板
  • 输出及其类型
  • 显示属性(名称、图标、描述)
  • 节点类型属性 (输入/输出状态)

来源:来源/backend/base/langflow/custom/custom_component/component.py800-847 来源/backend/base/langflow/template/frontend_node/base.py9-66

状态管理

组件可以访问和更新图中的共享状态:

def process(self):# Get existing statemessages = self.get_state("chat_history") or []# Add new messagemessages.append({"role": "user", "content": self.input_text})# Update stateself.update_state("chat_history", messages)return messages

关键状态管理方法:

  • get_state(name):按名称检索状态
  • update_state(name, value):更新状态
  • append_state(name, value):追加到现有状态

来源:来源/backend/base/langflow/custom/custom_component/component.py119-167

构建 UI 组件

自定义组件可以自定义其 UI 表示形式:

class MyComponent(Component):# Customize display propertiesdisplay_name = "My Component"description = "This component does something useful"icon = "🔧"  # Emoji icon# Control field order in UIfield_order = ["input_text", "option", "count"]# Customize field configurationfield_config = {"input_text": {"display_name": "Text Input","info": "Enter the text to process","advanced": False},"option": {"display_name": "Processing Option","options": ["Option A", "Option B", "Option C"],"default": "Option A"}}

来源:来源/后端/基础/langflow/自定义/utils.py62-73 来源/前端/src/components/core/parameterRenderComponent/index.tsx

组件运行时行为

当组件运行时,它遵循以下过程:

  1. 初始化:参数设置为属性
  2. Input Resolution(输入分辨率):已解析连接的输入
  3. Build:执行组件的逻辑
  4. Output Collection:为定义的输出收集结果

来源:来源/backend/base/langflow/custom/custom_component/component.py704-719 来源/后端/基础/langflow/图形/顶点/base.py362-461

最佳实践

  1. 清晰的文档:使用文档字符串记录您的组件及其方法
  2. 输入验证:验证输入以避免运行时错误
  3. 错误处理:正常捕获和处理异常
  4. 类型注释:为输出方法使用适当的返回类型注释
  5. 无状态设计:尽可能首选无状态组件
  6. 可重用性:将组件设计为可在不同上下文中重用
  7. 性能:考虑大数据对性能的影响

完整示例

这是一个完整的自定义组件示例:

from langflow.custom.custom_component.component import Component
from langflow.inputs import StrInput, IntInput, BoolInput, DropdownInput
from langflow.schema import Dataclass TextAnalyzer(Component):"""A component that analyzes text and provides various metrics."""display_name = "Text Analyzer"description = "Analyzes text and provides various metrics and transformations"icon = "📊"# Define inputsinputs = [StrInput(name="text", display_name="Input Text", required=True),IntInput(name="min_length", display_name="Minimum Word Length", default=3),BoolInput(name="include_statistics", display_name="Include Statistics", default=True),DropdownInput(name="case_operation", display_name="Case Operation",options=["none", "uppercase", "lowercase", "titlecase"],default="none")]def filter_words(self) -> list:"""Filter words by minimum length."""words = self.text.split()return [word for word in words if len(word) >= self.min_length]def transform_text(self) -> str:"""Apply the selected case transformation."""match self.case_operation:case "uppercase":return self.text.upper()case "lowercase":return self.text.lower()case "titlecase":return self.text.title()case _:return self.textdef analyze(self) -> Data:"""Analyze the text and return metrics."""words = self.text.split()result = {"word_count": len(words),"character_count": len(self.text),"transformed_text": self.transform_text()}if self.include_statistics:avg_word_length = sum(len(word) for word in words) / max(len(words), 1)result.update({"average_word_length": round(avg_word_length, 2),"unique_words": len(set(words)),"filtered_words": self.filter_words()})return Data(data=result)

来源:来源/backend/base/langflow/custom/custom_component/component.py

相关文章:

LangFlow技术深度解析:可视化编排LangChain应用的新范式 -(3)组件系统

Component System | langflow-ai/langflow | DeepWiki 组件系统 相关源文件 组件系统是核心基础设施,使 Langflow 能够在工作流中创建、配置和连接模块化构建块。该系统通过为组件提供一致的接口来定义其输入、输出、执行行为以及与其他组件的连接,从…...

【Win32 API】 lstrcmpA()

作用 比较两个字符字符串(比较区分大小写)。 lstrcmp 函数通过从第一个字符开始检查,若相等,则检查下一个,直到找到不相等或到达字符串的末尾。 函数 int lstrcmpA(LPCSTR lpString1, LPCSTR lpString2); 参数 lpStr…...

LabVIEW光谱检测系统

腔衰荡光谱技术(CRDS)凭借高精度和高灵敏度特性,成为微量气体浓度检测的常用方法,而准确获取衰荡时间是该技术应用的关键。基于LabVIEW平台设计腔衰荡信号在线处理系统,实现对衰荡信号的实时采集、平均、拟合、显示和保…...

深入解读WPDRRC信息安全模型:构建中国特色的信息安全防护体系

目录 前言1 WPDRRC模型概述2 模型结构详解2.1 预警(Warning)2.2 保护(Protect)2.3 检测(Detect)2.4 响应(React)2.5 恢复(Restore)2.6 反击(Count…...

uniapp-商城-59-后台 新增商品(属性的选中,进行过滤展示,filter,some,every和map)

前面讲了属性的添加,添加完成后,数据库中已经存在数据了,这时再继续商品的添加时,就可以进行属性的选择了。 在商品添加过程中,属性选择是一个关键步骤。首先,界面需要展示嵌套的属性数据,用户通…...

RDIFramework.NET Web敏捷开发框架 V6.2发布(.NET6+、Framework双引擎)

1、框架介绍 .NET6、Framework双引擎、全网唯一 RDIFramework.NET敏捷开发框架,是我司重磅推出的支持.NET6和.NET Framework双引擎的快速信息化系统开发、整合框架,为企业快速构建企业级的应用提供了强大支持。 依托框架强大的基座,开发人员只…...

JMeter 教程:编写 GET 请求脚本访问百度首页

目录 练习要求: 练习步骤: 效果图: 练习要求: 练习步骤: 效果图:...

JSP 实现二级联动下拉菜单:一次加载,前端动态更新

在Web开发中,二级联动下拉菜单(或多级联动)是一种非常常见的用户交互形式,例如选择省份后动态加载对应的城市列表。本文将详细介绍一种在JSP中实现二级联动的方法:后端一次性将所有联动数据加载到前端,然后通过JavaScript在客户端动态更新二级下拉菜单。这种方法对于数据…...

Room数据库

Room数据库 Room是Android Jetpack组件中的一款SQLite数据库抽象层框架,旨在简化本地数据库操作,提供编译时SQL校验、类型与安全、与LiveData/Flow无缝集成等特性。 1. 什么是Room 定义: Room 是 Android Jetpack 提供的一个 ORM&#xff…...

文件上传Ⅲ

#文件-解析方案-执行权限&解码还原 1、执行权限 文件上传后存储目录不给执行权限(即它并不限制你上传文件的类型,但不会让相应存有后门代码的PHP文件执行,但是PNG图片是可以访问的) 2、解码还原 数据做存储,解…...

前端取经路——量子UI:响应式交互新范式

嘿,老铁们好啊!我是老十三,一枚普通的前端切图仔(不,开玩笑的,我是正经开发)。最近前端技术简直跟坐火箭一样,飞速发展!今天我就跟大家唠唠从状态管理到实时渲染&#xf…...

15 C 语言字符类型详解:转义字符、格式化输出、字符类型本质、ASCII 码编程实战、最值宏汇总

1 字符类型概述 在 C 语言中,字符类型 char 用于表示单个字符,例如一个数字、一个字母或一个符号。 char 类型的字面量是用单引号括起来的单个字符,例如 A、5 或 #。 当需要表示多个字符组成的序列时,就涉及到了字符串。在 C 语言…...

AlphaEvolve:LLM驱动的算法进化革命与科学发现新范式

AlphaEvolve:LLM驱动的算法进化革命与科学发现新范式 本文聚焦Google DeepMind最新发布的AlphaEvolve,探讨其如何通过LLM与进化算法的结合,在数学难题突破、计算基础设施优化等领域实现革命性进展。从48次乘法优化44矩阵相乘到数据中心资源利…...

比较文本搜索策略 pgsearch、tsvector 和外部引擎

大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构! 在应用程序中实现搜索功能时,您需要选择合适的文本搜索方法。本指南比较了 PostgreSQL 的内置搜索引擎tsvector、pg_search扩展…...

58. 区间和

题目链接: 58. 区间和 题目描述: 给定一个整数数组 Array,请计算该数组在每个指定区间内元素的总和。 输入描述 第一行输入为整数数组 Array 的长度 n,接下来 n 行,每行一个整数,表示数组的元素。随后…...

MySQL中表的增删改查(CRUD)

一.在表中增加数据(Create) INSERT [INTO] TB_NAME [(COLUMN1,COLUMN2,...)] VALUES (value_list1),(value_list2),...;into可以省略可仅选择部分列选择插入,column即选择的列, 如图例可以选择仅在valuelist中插入age和id如果不指…...

SQL练习(6/81)

目录 1.寻找连续值 方法一:使用自连接(Self-Join) 方法二:使用窗口函数(Window Functions) 2.寻找有重复的值 GROUP BY子句 HAVING子句 常用聚合函数: 3.找不存在某属性的值 not in no…...

Android 中 打开文件选择器(ACTION_OPEN_DOCUMENT )

在 Android 中,打开文件选择器(File Picker)通常是指启动一个系统提供的界面,让用户可以选择存储在设备上的文件。可以通过发送一个带有 Intent.ACTION_OPEN_DOCUMENT 或 Intent.ACTION_GET_CONTENT 的 Intent 来实现。 1、启动文…...

AWS中国区CloudFront证书管理和应用指南

在AWS中国区使用CloudFront时,SSL/TLS证书的管理和应用是一个重要的环节。本文将详细介绍如何在AWS中国区上传、管理和应用SSL证书到CloudFront分配。 1. 准备证书文件 首先,我们需要准备好SSL证书相关的文件。通常,这包括: 私钥文件(.key)公钥证书文件(.crt)证书链文…...

Python之三大基本库——Matplotlib

好久没来总结了,今天刚好有时间,我们来继续总结一下python中的matplotlib 一、什么是Matplotlib ‌Matplotlib‌是一个Python的2D绘图库,主要用于将数据绘制成各种图表,如折线图、柱状图、散点图、直方图、饼图等。它以各种硬拷贝…...

随笔:hhhhh

第一题 ∫ − ∞ ∞ x e x − e x d x ∫ 0 ∞ ln ⁡ t ⋅ e ln ⁡ t − t ⋅ 1 t d t ∫ 0 ∞ ln ⁡ t ⋅ e − t ⋅ 1 t ⋅ t d t ∫ 0 ∞ ln ⁡ t ⋅ e − t d t ψ ( 1 ) − γ \begin{align*} \int_{-\infty}^{\infty}xe^{x-e^x}\text{d}x&\int_{0}^{\infty}…...

计算机网络-----6分层结构

目录 “分层” 的设计思想: 计算机网络要完成的功能: 计算机网络的分层结构: 网络体系结构的概念: 各层之间的关系: 数据的传输过程 水平视角: 垂直视角: 相关概念 协议三要素&#x…...

初识SOC:RK3588

目录 一、高性能计算与边缘计算 二、多媒体处理与显示 三、图形与游戏开发 四、物联网与嵌入式系统 五、操作系统兼容性 RK3588作为瑞芯微推出的高性能处理器,凭借其多核架构、高算力NPU和多媒体处理能力,可广泛应用于以下领域: 一、高…...

卡顿检测与 Choreographer 原理

一、卡顿检测的原理 卡顿的本质是主线程(UI 线程)未能及时完成某帧的渲染任务(超过 16.6ms,以 60Hz 屏幕为例),导致丢帧(Frame Drop)。检测卡顿的核心思路是监控主线程任务的执行时…...

第十天——贪心算法——深度总结

文章目录 贪心算法深度解析:原理与应用 1. 贪心算法的基本原理 1.1 贪心选择性质 1.2 最优子结构 1.3 贪心算法与动态规划的对比 2. 贪心算法的应用场景 3. 具体应用案例 3.1 分配饼干 (Assign Cookies) 3.2 分糖果 (Candy Distribution) 3.3 种花问题 (C…...

python自学笔记2 数据类型

字符串操作 f字符串: for index, char in enumerate(greeting_str):print(f"字符:{char}, 索引:{index}")f字符串可以方便的在字符串中插入变量 字符串切片 指定步长: print(greeting_str[::2])指定步长为2的取字符…...

nacos配置文件快速部署另一种方法

提交nacos配置的另一种一种方法,批命令/shell: 以下脚本直接把当前目录下的所有yaml文件一键提交到nacos上 前提是要先安装curl 以及 jq 然后 把下面的shell保存为 import-all.sh 然后 chmod x import-all.sh && ./import-all.sh 就好了. 记得修改一下的NAMESPACE_…...

RTK哪个品牌好?2025年RTK主流品牌深度解析

在测绘领域,RTK 技术的发展日新月异,选择一款性能卓越、稳定可靠的 RTK 设备至关重要。2025 年,市场上涌现出众多优秀品牌,本文将深入解析几大主流品牌的核心竞争力。 华测导航(CHCNAV):技术创…...

游戏引擎学习第285天:“Traversables 的事务性占用”

回顾并为当天的工作做准备 我们有一个关于玩家移动的概念,玩家可以在点之间移动,而且当这些点移动时,玩家会随之移动。现在这个部分基本上已经在工作了。我们本来想实现的一个功能是:当玩家移动到某个点时,这个点能“…...

HNUST湖南科技大学-安卓Android期中复习

使用说明:除了选择判断就看习题外,推荐重点复习三四章多复习案例,这里应该是编程空题,把界面控件、活动单元熟悉一下。第五章(数据存储方式,尤其是文件存储)、第六章(重点内容提供者…...

一种应用非常广泛的开源RTOS(实时操作系统):nuttx

什么是NuttX? NuttX(读音接近“纳特-艾克斯”)是一种应用非常广泛的开源RTOS(实时操作系统),由Gregory Nutt博士主要推动开发。RTOS,即 Real-Time Operating System,直译为“实时操…...

WebSocket 客户端 DLL 模块设计说明(基于 WebSocket++ + Boost.Asio)

WebSocket 客户端 DLL 模块设计说明(基于 WebSocket Boost.Asio) 📌 目录 一、模块总览二、导出接口说明(EXPORTS)三、状态变量功能解读四、连接启动流程详解五、事件回调说明六、消息发送流程七、心跳与断连 JSON …...

微信小程序:封装request请求、解决请求路径问题

一、创建文件 1、创建请求文件 创建工具类文件request.js,目的是用于发送请求 二、js接口封装 1、写入接口路径 创建一个变量BASE_URL专门存储api请求地址 2、获取全局的token变量 从缓存中取出token的数据 3、执行请求 (1)方法中接收传递的参数 function request(url,…...

Ubuntu24.04 安装 5080显卡驱动以及cuda

前言 之前使用Ubuntu22.04版本一直报错,然后换了24.04版本才能正常安装 一. 配置基础环境 Linux系统进行环境开发环境配置-CSDN博客 二. 安装显卡驱动 1.安装驱动 按以下步骤来: sudo apt update && sudo apt upgrade -y#下载最新内核并安装 sudo add…...

Jenkins的流水线执行shell脚本执行jar命令后项目未启动未输出日志问题处理

现象 在流水线里配置了启动脚本例如,nohup java -jar xxx.jar >nohup.out 2>&1 & 但是在服务器发现服务并未启动,且nohup日志里没输出日志,这样的原因是jenkins在执行完脚本后,就退出了这个进程。 解决 在启动脚本执行jar命令的上一步…...

Core Web Vitals 全链路优化:从浏览器引擎到网络协议深度调优

Core Web Vitals 全链路优化:从浏览器引擎到网络协议深度调优 一、浏览器渲染引擎级优化 1.1 合成器线程优化策略 • 分层加速:通过will-change属性创建独立的合成层 .accelerated {will-change: transform;backface-visibility: hidden; }• 光栅化策略调整:使用image-r…...

【网络编程】十、详解 UDP 协议

文章目录 Ⅰ. 传输层概述1、进程之间的通信2、再谈端口号端口号的引出五元组标识一个通信端口号范围划分常见的知名端口号查看知名端口号协议号 VS 端口号 3、两个问题一个端口号是否可以被多个进程绑定?一个进程是否可以绑定多个端口号? 4、部分常见指令…...

求职困境:开发、AI、运维、自动化

文章目录 问:我的技术栈是web全栈(js,css,html,react,typscript),C开发,python开发,音视频图像开发,神经网络深度学习开发,运维&#…...

如何将数据从一部手机传输到另一部手机 | 5 种便捷传输方式

更换新手机可能是一种令人兴奋的体验,但您仍然需要解决问题 - 如何将数据从一部手机传输到另一部手机。幸运的是,有多种方法可以简化此过程,从一键式解决方案到基于云的传输。本文探讨了五种流行的技术来帮助您无缝迁移数据。 第 1 部分&…...

GEE计算 RSEI(遥感生态指数)

🛰️ 什么是 RSEI?为什么要用它评估生态环境? RSEI(遥感生态指数,Remote Sensing Ecological Index) 是一种通过遥感数据计算得到的、综合反映区域生态环境质量的指标体系。 它的设计初衷是用最少的变量&…...

k8s监控方案实践补充(二):使用kube-state-metrics获取资源状态指标

k8s监控方案实践补充(二):使用kube-state-metrics获取资源状态指标 文章目录 k8s监控方案实践补充(二):使用kube-state-metrics获取资源状态指标一、Metrics Server简介二、kube-state-metrics实战部署1. 创…...

JavaScript:PC端特效--元素可视区client系列

一、client系列 client翻译过来就是客户端,我们使用client系列的相关属性来获取元素可视区的相关信息。通过client系列的相关属性可以动态的得到该元素的边框大小、元素大小等。 client系列属性作用element.clientTop返回元素上边框的大小element.clientLeft返回元…...

Centos7 中 Docker运行配置Apache

1、拉去httpd镜像(不加版本号,默认拉最新版本) docker pull httpd 2、运行httpd docker run -di --name httpd-test -p 8080:80 httpd 3、创建文件夹后边做映射 mkdir -p /Docker/apache/www /Docker/apache/logs /Docker/apache/conf 4、…...

PostgreSQL中的全页写

一、概述 在PGSQL数据库中,默认的页面大小为8KB,但是磁盘buffer的大小为4KB,扇区大小为512B。这就导致在操作系统的角度看数据库的写操作,其实并不是一种原子操作。如果操作系统发生了系统级别的故障,此时正好操作系统…...

对称二叉树的判定:双端队列的精妙应用

一、题目解析 题目描述 给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的: 1/ \2 2/ \ / \ 3 4 4 3而 [1,2,2,null,3,null,3] 则不是镜像对称的: 1/ \2 2\ \3 3问题本质 判断一棵二叉…...

Redis + ABP vNext 构建分布式高可用缓存架构

🚀 Redis ABP vNext 构建分布式高可用缓存架构 🔧 环境准备 开发环境 .NET 8.0 SDKVisual Studio 2022 / VS CodeDocker & Docker Compose NuGet 包 Volo.Abp.Caching.StackExchangeRedis v8.1.5Volo.Abp.DistributedLocking.StackExchangeRedis v…...

jvm第一篇《内存与垃圾回收》学习笔记第一章jvm初始

jvm是虚拟机的通称。 java实际默认的应用是hotspot(基于栈的指令集架构) 注:注意区分寄存器的指令集和栈指令集的架构。(大概理解java移植性好就是因为是栈指令集) jvm虚拟机,具有跨语言功能&#xff0…...

MySQL——3、数据类型

数据类型 1、数据类型分类2、数值类型2.1、tinyint类型2.2、bit类型2.3、小数类型2.3.1、float2.3.2、decimal 3、字符串类型3.1、char3.2、varchar3.3、char和varchar比较3.4、日期和时间类型3.5、enum和set 1、数据类型分类 2、数值类型 2.1、tinyint类型 首先创建t1表&…...

Flutter - 集成三方库:日志(logger)

日志 使用print方法时,会提示 添加依赖 $ flutter pub add logger下载依赖 $ flutter pub get使用 打印 import package:logger/logger.dart;var logger Logger(); logger.d("debug"); logger.e("error"); logger.i("info"); logger.f(&qu…...

第五部分:第五节 - Express 路由与中间件进阶:厨房的分工与异常处理

随着你的 Express 应用变得越来越大,所有的路由和中间件都写在一个文件里会变得难以管理。这时候就需要将代码进行拆分和组织。此外,一个健壮的后端应用必须能够优雅地处理错误和一些常见的 Web 开发问题,比如跨域。 路由模块化 (express.Ro…...