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

使用 OpenLIT 对 LLM 应用进行可观测

大规模语言模型(LLM)的可观测性

随着大规模语言模型(LLM)在各个领域的广泛应用,确保这些模型的稳定性和性能变得至关重要。为了实现这一目标,可观测性(Observability)成为了一个关键因素。OpenTelemetry 作为一个开源的可观测性框架,提供了强大的工具来监控和诊断 LLM 的运行状况。通过使用 OpenTelemetry,观测云可以轻松集成多种语言和框架,实现统一的数据收集、处理和实时监控。

可观测性是指系统能够通过其外部输出(如日志、指标和追踪数据)来推断其内部状态的能力。对于 LLM 来说,可观测性可以帮助我们了解模型的推理过程、性能瓶颈以及潜在的错误。通过收集和分析这些数据,我们可以更好地优化模型并确保其在生产环境中的稳定性。

观测云

观测云( www.guance.com )是一个提供数据可视化和监控服务的平台。它通常用于收集、处理和展示来自各种数据源的信息,帮助用户实时监控业务指标、系统性能和网络状态等。观测云通过图表、仪表板和报警系统,使得用户能够快速识别和响应数据变化,从而优化业务流程和提高效率。它支持多种数据集成方式,包括API、数据库、日志文件等,并且可以自定义仪表板,以满足不同用户的需求。观测云的界面友好,易于配置和使用,是企业数据监控和管理的有力工具。

OpenTelemetry

OpenTelemetry 是一个由 CNCF 托管的开源项目,旨在提供统一的 API 和 SDK 来收集和传输遥测数据(如日志、指标和追踪)。它支持多种编程语言,并且与各种后端系统兼容。对于 LLM,OpenTelemetry 可以帮助我们:

  • 收集详细的追踪数据:通过追踪每个推理请求的执行路径,我们可以识别出哪些部分是性能瓶颈。
  • 记录关键指标:例如推理时间、内存使用情况等,这些指标可以帮助我们评估模型的性能。
  • 捕获日志信息:当出现问题时,日志可以提供宝贵的调试信息。

LLM 关键信号

在应用程序中使用大规模语言模型(LLM)与传统机器学习(ML)模型有所不同。主要区别在于,LLM 通常通过外部 API 调用访问,而不是在本地或内部运行。因此,捕获事件序列(通过追踪)尤为重要,特别是在基于 RAG(检索增强生成)的应用程序中,LLM 使用前后可能会有多个事件。此外,分析聚合数据(通过指标)可以快速提供关于请求、令牌和成本的概览,这对于优化性能和管理成本非常重要。以下是需要监控的关键信号:

追踪(Tracing)

1、请求元数据:在 LLM 的上下文中,请求元数据非常重要,因为各种参数(如温度和 top_p)会显著影响响应质量和成本。具体需要监控的方面包括:

  • Temperature:表示希望从模型输出中获得的创造力或随机性水平。调整此参数会显著影响生成内容的性质。
  • top_p:决定模型的选择性,即从最有可能的词汇中选择一定比例的词。较高的 top_p 值意味着模型考虑的词汇范围更广,使文本更加多样化。
  • 模型名称或版本:对于跟踪随时间的变化至关重要,因为 LLM 的更新可能会影响性能或响应特性。
  • 提示词:发送给 LLM 的确切输入。与内部 ML 模型不同,LLM 的输入可能变化很大,这会影响输出复杂性和成本。

2、响应元数据:由于 LLM 是通过 API 进行交互的,因此跟踪响应的具体细节对于成本管理和质量评估至关重要:

  • Token:直接影响成本,并且是响应长度和复杂性的度量。
  • Cost:对于预算规划至关重要,因为基于 API 的成本会随着请求数量和每个请求的复杂性而增加。
  • 响应详情:类似于提示详情,但从响应的角度提供对模型输出特性的洞察,以及潜在的效率低下或意外成本领域。

指标(Metric)

  • 请求量:发送到 LLM 服务的总请求数。这有助于了解需求模式,并识别使用中的任何异常情况,例如突然的激增或下降。
  • 请求时长:从发出请求到接收到 LLM 响应所需的时间。这包括网络延迟和 LLM 生成响应所需的时间,能够提供关于 LLM 服务性能和可靠性的洞察。
  • 成本和令牌计数:跟踪随时间累积的总成本和消耗的令牌数量对于预算规划和成本优化策略至关重要。监控这些指标可以提醒你是否存在意外增加的情况,这可能表明 LLM 的使用效率低下或需要进行优化。

OpenLIT

OpenLIT 是一个基于 OpenTelemetry 的库,旨在通过为各种大规模语言模型(LLM)和向量数据库(VectorDB)提供自动 instrumentation 来简化 LLM 基础应用程序的监控。

它遵循由 OpenTelemetry 社区建立的 GenAI 语义约定,并通过不依赖于供应商特定的跨度或事件属性以及 OTLP 端点配置的环境变量,确保了平滑的集成过程,提供了一个标准的解决方案。

具体来说:

  • 自动 instrumentation:OpenLIT 可以自动为多种 LLM 和 VectorDB 添加监控代码,减少了手动配置的工作量。
  • 遵循语义约定:确保与 OpenTelemetry 社区的标准保持一致,便于数据的统一管理和分析。
  • 标准化集成:无需使用供应商特定的配置项,使得集成过程更加简单和通用,适用于不同的环境和平台。

通过使用 OpenLIT,您可以更轻松地实现对 LLM 应用程序的全面监控,从而更好地管理和优化这些复杂系统。

实施步骤

要为 LLM 实现可观测性,以下是几个关键步骤:

  • 集成 OpenTelemetry SDK:首先,在你的 LLM 应用中集成 OpenTelemetry SDK。这可以通过安装相应的库并配置数据收集器来完成。
  • 定义追踪范围:确定你希望追踪的具体操作,例如每次推理请求的开始和结束。
  • 设置指标采集:选择需要监控的关键性能指标,并配置相应的采集器。
  • 配置日志记录:确保所有重要的事件都被记录下来,以便后续分析。
  • 可视化和报警:使用 Grafana 或其他工具将收集到的数据进行可视化展示,并设置报警机制以及时发现异常情况。

实践

为了更好地理解如何应用这些概念,让我们来看一个具体的案例。假设我们有一个基于 Python 的 LLM 应用程序。通过集成 OpenTelemetry SDK,我们可以轻松地为每个推理请求添加追踪上下文,并记录相关的性能指标和日志信息。然后,我们可以将这些数据发送到观测云进行存储和查询,通过构建场景模板进行实时监控。

DataKit

DataKit 是一个开源的、跨平台的数据收集和监控工具,由观测云开发并维护。它旨在帮助用户收集、处理和分析各种数据源,如日志、指标和事件,以便进行有效的监控和故障排查。DataKit 支持多种数据输入和输出格式,可以轻松集成到现有的监控系统中。

安装 DataKit

登录观测云控制台,在「集成」 - 「DataKit」选择对应安装方式,当前采用 Linux 主机部署 DataKit。

将安装命令复制到服务器上执行,服务器会自动下载和安装 DataKit 服务。

开启 OpenTelemetry 采集器
cd /usr/local/datakit/conf.d/opentelemetry/
cp opentelemetry.conf.sample opentelemetry.conf

修改 opentelemetry.conf 的 customer_tags,提取关键 tag。

customer_tags = ["gen_ai.application_name","gen_ai.request.model","gen_ai.prompt","gen_ai.completion","gen_ai.request.temperature","gen_ai.usage.input_tokens","gen_ai.usage.output_tokens","gen_ai.usage.total_tokens","gen_ai.endpoint","gen_ai.system"]
重启 DataKit
datakit service -R

LLM 应用

安装 OpenLIT

用以下命令安装 OpenLIT 的 Python 库:

pip install openlit
调整代码

在 LLM 应用上添加以下代码:

import openlit
# 初始化 OpenLit
openlit.init(otlp_endpoint="http://127.0.0.1:9529/otel",application_name="kimi_openlit_flask"
)
运行

正常运行 LLM 应用即可。

观测云效果

登录观测云控制台,点击「场景」 -「新建仪表板」,输入 “OpenLIT”, 选择 “OpenLIT 监控视图”,点击 “确定” 即可添加视图。

通过观测云可以分析 Token 的消耗、调用模型的分布、成本、请求等数据。

也可以直接通过链路分析实际模型调用的历史记录。

通过查看链路详情,可以看到模型 input 和 output。

参考代码

该代码是基于 OpenAI 调用 Kimi 大模型并通过接口方式对外提供服务。

import os
import httpx
from flask import Flask, request, Response,jsonify,stream_with_context
import openlit
from openai import OpenAIfrom opentelemetry.instrumentation.flask import FlaskInstrumentorapp = Flask(__name__)
# 使用FlaskInstrumentor自动插桩Flask应用
FlaskInstrumentor().instrument_app(app)
# 初始化 OpenLit
openlit.init(otlp_endpoint="http://127.0.0.1:9529/otel",application_name="kimi_openlit_flask"
)# 从环境变量中获取 API Key
api_key = os.getenv("MOONSHOT_API_KEY")
if not api_key:raise ValueError("请设置 MOONSHOT_API_KEY 环境变量")client = OpenAI(api_key=api_key,base_url="https://api.moonshot.cn/v1",
)def estimate_token_count(input_messages) -> int:"""计算输入消息的 Tokens 数量。"""try:header = {"Authorization": f"Bearer {api_key}",}data = {"model": "moonshot-v1-128k","messages": input_messages,}with httpx.Client() as client:print("请求接口")r = client.post("https://api.moonshot.cn/v1/tokenizers/estimate-token-count", headers=header, json=data)r.raise_for_status()response_data = r.json()print(response_data["data"]["total_tokens"])return response_data["data"]["total_tokens"]except httpx.RequestError as e:print(f"请求失败: {e}")raiseexcept (KeyError, ValueError) as e:print(f"解析响应失败: {e}")raisedef select_model(input_messages, max_tokens=1024) -> str:"""根据输入的上下文消息和预期的 max_tokens 值选择合适的模型。"""if not isinstance(max_tokens, int) or max_tokens <= 0:raise ValueError("max_tokens 必须是正整数")prompt_tokens = estimate_token_count(input_messages)total_tokens = prompt_tokens + max_tokensif total_tokens <= 8 * 1024:return "moonshot-v1-8k"elif total_tokens <= 32 * 1024:return "moonshot-v1-32k"elif total_tokens <= 128 * 1024:return "moonshot-v1-128k"else:raise ValueError("tokens 数量超出限制 ?")@app.route('/ask', methods=['POST'])
def ask():data = request.jsonmessages = data.get('messages')max_tokens = data.get('max_tokens', 2048)if not messages:return jsonify({"error": "messages 字段不能为空"}), 400try:model = select_model(messages, max_tokens)completion = client.chat.completions.create(model=model,messages=messages,max_tokens=max_tokens,temperature=0.3,stream=True  # 启用流式生成)def generate():for chunk in completion:# yield chunk.choices[0].delta.content or ''delta = chunk.choices[0].deltaif delta.content:print(delta.content, end="")yield delta.content or ''return Response(stream_with_context(generate()), content_type='text/event-stream')except Exception as e:return jsonify({"error": str(e)}), 500# export MOONSHOT_API_KEY=sk-xxxxxxxx
# python3 kimi_openlit_stream_flask.py# 请求接口
# curl -X POST http://127.0.0.1:5000/ask -H "Content-Type: application/json" -H "Accept-Charset: UTF-8" -d '{
#     "messages": [
#         {"role": "system", "content": "你是 Kimi"},
#         {"role": "user", "content": "你好,请给我讲一个童话故事。"}
#     ],
#     "max_tokens": 2048
# }'if __name__ == '__main__':app.run(debug=True)

结论

通过引入 OpenTelemetry,我们可以显著提高 LLM 的可观测性,从而更好地管理和优化这些复杂的系统。同时结合观测云的能力,能及时快速的对系统进行监控和分析,无论你是开发者还是运维人员,掌握这些技能都将为你带来巨大的价值。

相关文章:

使用 OpenLIT 对 LLM 应用进行可观测

大规模语言模型&#xff08;LLM&#xff09;的可观测性 随着大规模语言模型&#xff08;LLM&#xff09;在各个领域的广泛应用&#xff0c;确保这些模型的稳定性和性能变得至关重要。为了实现这一目标&#xff0c;可观测性&#xff08;Observability&#xff09;成为了一个关键…...

C与C++的区别

C 深度剖析&#xff1a;对比 C 语言的显著差异 在编程的浩瀚宇宙中&#xff0c;C 和 C 堪称两颗耀眼的巨星&#xff0c;各自绽放出独一无二的光彩。C 语言作为经典的结构化编程语言&#xff0c;多年来在系统开发、嵌入式编程等领域始终占据着举足轻重的地位。而 C 作为 C 语言…...

【极客时间】浏览器工作原理与实践-2 宏观视角下的浏览器 (6讲) - 2.6 渲染流程(下):HTML、CSS和JavaScript,是如何变成页面的?

https://time.geekbang.org/column/article/118826 2.6 渲染流程&#xff08;下&#xff09;&#xff1a;HTML、CSS和JavaScript&#xff0c;是如何变成页面的&#xff1f; 2.5介绍了渲染流水线中的 DOM 生成、样式计算和布局三个阶段&#xff0c;2.6讲解渲染流水线后面的阶段…...

开放鸿蒙认证,OpenHarmony兼容性认证介绍

Ⅰ、OpenHarmony开放鸿蒙兼容性测试认证&#xff1a;使用官方测试套件&#xff0c;对照PCS自检表中的必测项&#xff0c;在本地搭建的环境中对伙伴设备进行预测&#xff0c;直至取得合格的兼容性测试报告。 注&#xff1a;2025年01月01日起&#xff0c;不支持新产品基于老分支…...

磁盘空间不足|如何安全清理以释放磁盘空间(开源+节流)

背景&#xff1a; 最近往数据库里存的东西有点多&#xff0c;磁盘不够用 查看磁盘使用情况 df -h /dev/sda5&#xff08;根目录 /&#xff09; 已使用 92% 咱们来开源节流 目录 背景&#xff1a; 一、开源 二、节流 1.查找 大于 500MB 的文件&#xff1a; 1. Snap 缓存…...

【2】好未来JAVA开发工程师部分笔试题解析

编程题 1.降序的子数组最大元素和 给你一个正整数组成的数组nums&#xff0c;返回nums中一个降序子数组的最大可能元素和。 子数组是数组中的一个连续数字序列。 已知子数组[nums l, nums l1, … , nums r-1, nums r]&#xff0c;若对所有l (1<i<r)&#xff0c;nums …...

LeetCode 21. 合并两个有序链表(Python)

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出&#xff1a;[] 示例 3&#xff1a; 输…...

Y3学习打卡

网络结构图 YOLOv5配置了4种不同大小的网络模型&#xff0c;分别是YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x&#xff0c;其中 YOLOv5s 是网络深度和宽度最小但检测速度最快的模型&#xff0c;其他3种模型都是在YOLOv5s的基础上不断加深、加宽网络使得网络规模扩大&#xff0c;在增强…...

2025-3-3 二叉树的存储结构

一、二叉树的存储结构&#xff08; 顺序存储&#xff0c;链式存储&#xff09; 1.顺序存数--&#xff08;用数组&#xff09; &#xff08;完全二叉树&#xff09;常考的基本操作&#xff1a; i 的左孩子 -----2i 右孩子-----2i1 i的父节点-----[i/2] 向下取整 i所在的层…...

RK3588V2--ES8388声卡适配记录

RK3588V2--ES8388声卡适配记录 1. ES8388声卡简单介绍2. 适配过程2.1 设备树配置 3. 问题分析与解决3.1 现声卡平台设备, 最终注册失败3.2 系统查看 I2C 设备3.3 怀疑是没有上拉电阻&#xff1f; 4. 测试阶段4.1 耳机接口测试--OK4.2 MIC测试--无法使用 5. 分析总结 1. ES8388声…...

【http://noi.openjudge.cn/】4.3算法之图论——1538:Gopher II

[【http://noi.openjudge.cn/】4.3算法之图论——1538:Gopher II] 题目 查看提交统计提问 总时间限制: 2000ms 内存限制: 65536kB 描述 The gopher family, having averted the canine threat, must face a new predator. The are n gophers and m gopher holes, each at di…...

PySide(PyQT)的视图(QGraphicsView)范例(一) 基本框架

最近学习了视图&#xff08;QGraphicsView&#xff09;的知识&#xff0c;总结一下&#xff0c;做一个demo以备忘。在demo中使用了场景&#xff08;QGraphicsScene&#xff09;、矩形框&#xff08;QGraphicsRectItem&#xff09;等构件&#xff0c;以及演示了常用的设置方法和…...

opencv 模板匹配方法汇总

在OpenCV中&#xff0c;模板匹配是一种在较大图像中查找特定模板图像位置的技术。OpenCV提供了多种模板匹配方法&#xff0c;通过cv2.matchTemplate函数实现&#xff0c;该函数支持的匹配方式主要有以下6种&#xff0c;下面详细介绍每种方法的原理、特点和适用场景。 1. cv2.T…...

_mm_shuffle_epi32解析

一 概述 _mm_shuffle_epi32和_MMSHUFFLE是与SSE指令集相关的开发工具&#xff0c;主要用于SIMD向量操作。 二 _mm_shuffle_epi32 函数 功能&#xff1a;对128位整数向量(__m128i)中的四个32位整数进行重排序 原型&#xff1a;__m128i _mm_shuffle_epi32 (__m128i a, int imm…...

Tauri+React+Ant Design跨平台开发环境搭建指南

TauriReactAnt Design跨平台开发环境搭建指南 一、环境配置与工具链搭建 1.1 基础环境准备 必备组件&#xff1a; Rust工具链&#xff08;v1.77&#xff09;&#xff1a; curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh Node.js LTS&#xff08;v20.11.1&a…...

《基于Selenium的论坛系统自动化测试实战报告》

一、项目背景与技术选型 项目简介 目标系统&#xff1a;论坛系统 核心功能&#xff1a;用户注册/登录、会话框发送信息、好友列表、信息发送 技术栈&#xff1a;html Springboot MySQL数据库 为什么选择Selenium 支持多浏览器兼容性测试&#xff08;Chrome/Firefox/Edge&…...

洛谷 P11830 省选联考2025 幸运数字 题解

题意 小 X 有 n n n 个正整数二元组 ( a i , b i ) ( 1 ≤ i ≤ n ) (a_i, b_i) (1 \leq i \leq n) (ai​,bi​)(1≤i≤n)。他将会维护初始为空的可重集 S S S&#xff0c;并对其进行 n n n 轮操作。第 i ( 1 ≤ i ≤ n ) i (1 \leq i \leq n) i(1≤i≤n) 轮操作中&#…...

清华北大DeepSeek六册

「清华北大-Deepseek使用手册」 链接&#xff1a;https://pan.quark.cn/s/98782f7d61dc 「清华大学Deepseek整理&#xff09; 1&#xff0d;6版本链接&#xff1a;https://pan.quark.cn/s/72194e32428a AI学术工具公测链接:https://pan.baidu.com/s/104w_uBB2F42Da0qnk78_ew …...

ubuntu部署gitlab-ce及数据迁移

ubuntu部署gitlab-ce及数据迁移 进行前梳理: 在esxi7.0 Update 3 基础上使用 ubuntu22.04.5-server系统对 gitlab-ce 16.10进行部署,以及将gitlab-ee 16.9 数据进行迁移到gitlab-ce 16.10 进行后总结: 起初安装了极狐17.8.3-jh 版本(不支持全局中文,就没用了) …...

什么是 MGX:MetaGPT

什么是 MGX:MetaGPT MetaGPT是由思码逸(OpenDILab)团队开发的一款专注于生成式AI驱动的软件开发框架,MGX可能是其衍生或升级的相关成果,它创新性地将大语言模型引入软件开发流程,模拟人类软件团队的协作方式,能让用户通过自然语言描述需求,即可自动生成完整的软件项目,…...

C++,leecode字符串常见API

在LeetCode上刷C题目时&#xff0c;熟练掌握字符串相关的常见API可以大大提高代码效率和可读性。以下是C标准库&#xff08;<string>&#xff09;中常用的字符串操作API&#xff1a; 1. 初始化和赋值 std::string s1 "hello"; // 直接初始化 std::string s2…...

Ubuntu 安装 stable-diffusion-webui-docker 常见问题处理方法

安装 Stable Diffusion WebUI Docker 工程地址 https://github.com/AbdBarho/stable-diffusion-webui-docker 第一步是 git clone 下来 Setup 阅读 README 中的 setup&#xff0c;进入页面 https://github.com/AbdBarho/stable-diffusion-webui-docker/wiki/Setup docker …...

长时间目标跟踪算法(3)-GlobalTrack:A Simple and Strong Baseline for Long-termTracking

GlobalTrack的原始论文和源码均已开源&#xff0c;下载地址。 目录 背景与概述 1.1 长期视觉跟踪的挑战 1.2 现有方法的局限性 1.3 GlobalTrack的核心思想 算法原理与架构 2.1 全局实例搜索框架 2.2 Query-Guided RPN&#xff08;QG-RPN&#xff09; 2.3 Query-Guided RCNN&a…...

深入理解指针与回调函数:从基础到实践

引言 在C语言中&#xff0c;指针和回调函数是两个非常重要的概念。指针为我们提供了直接操作内存的能力&#xff0c;而回调函数则为我们提供了一种灵活的编程方式&#xff0c;使得我们可以将函数作为参数传递给其他函数&#xff0c;从而实现更加模块化和可复用的代码。本文将深…...

算法学习新姿势:从0开始用hello-algo搭建自己的在线学习平台

文章目录 前言1.关于hello-algo2.安装Docker和Docker compose3.本地部署hello-algo4. hello-algo本地访问5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定Uptime Kuma公网地址 前言 今天要给大家安利一款绝对不能错过的开源神器——Hello-Algo&#xff01;无论你是刚踏…...

常用 nvm 命令指南

nvm&#xff08;Node Version Manager&#xff09; 是一个用于管理 Node.js 版本的工具&#xff0c;可以轻松安装、切换和卸载不同版本的 Node.js。本文将介绍常用的 nvm 命令&#xff0c;帮助你高效管理 Node.js 环境。 1. 列出系统中通过 nvm 安装的所有 Node.js 版本 nvm l…...

后端-Java虚拟机

Java虚拟机 Java虚拟机的组成 Java虚拟机的组成由类加载器ClassLoader、运行时数据区域&#xff08;JVM管理的内存&#xff09;和执行引擎&#xff08;即时遍历器、解释器垃圾回收器&#xff09; 类加载器加载class字节码文件中的内容到内存运行时数据区域负责管理jvm使用到…...

开源PDF解析工具olmOCR

olmOCR 是由 Allen Institute for Artificial Intelligence (AI2) 的 AllenNLP 团队开发的一款开源工具&#xff0c;旨在将PDF文件和其他文档高效地转换为纯文本&#xff0c;同时保留自然的阅读顺序。它支持表格、公式、手写内容等。 olmOCR 经过学术论文、技术文档和其他文档…...

Java里的ArrayList和LinkedList有什么区别?

大家好&#xff0c;我是锋哥。今天分享关于【Java里的ArrayList和LinkedList有什么区别&#xff1f;】面试题。希望对大家有帮助&#xff1b; Java里的ArrayList和LinkedList有什么区别&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 ArrayList 和 Lin…...

Python的循环和条件判断 笔记250303

Python的循环和条件判断 Python中的循环和条件判断是编程基础&#xff0c;以下是关键点总结及示例&#xff1a; 条件判断 语法&#xff1a;if、elif、else&#xff0c;使用缩进划分代码块。逻辑运算符&#xff1a;and、or、not。示例&#xff1a;age 18 if age < 12:prin…...

浔川官方回应

浔川官方回应 近期&#xff0c;有用户反馈《浔川社团官方文章被 Devpress 社区收录&#xff01;》一文中的文章链接&#xff0c;点击后出现无法访问的情况。在此&#xff0c;浔川社团向各位关注我们的用户致以诚挚的歉意&#xff0c;并就该问题作出如下说明&#xff1a; 经社…...

【计算机网络入门】初学计算机网络(六)

目录 1.回忆数据链路层作用 2. 组帧 2.1 四种组帧方法 2.1.1 字符计数法 2.1.2 字节填充法 2.1.3 零比特填充法 2.1.4 违规编码法 3. 差错控制 3.1 检错编码 3.1.1 奇偶校验码 3.1.2 CRC&#xff08;循环冗余校验&#xff09;校验码 3.2 纠错编码 3.2.1 海明校验码…...

摄像头应用编程(三):多平面视频采集

文章目录 1、前言2、环境介绍3、步骤4、应用程序编写5、测试5.1、编译应用程序5.2、运行应用程序 6、总结 1、前言 在查看摄像头类型时&#xff0c;大致可以分为两类&#xff1a;Video Capture 和 Video Capture Multiplanar。 本次应用程序主要针对类型为Video Capture Multi…...

用工厂函数简化redis配置

工厂函数&#xff08;Factory Function&#xff09;不同于构造函数&#xff0c;工厂函数就是一个普通函数&#xff0c;通常用于创建对象或实例。它的核心思想是通过一个函数来封装对象的创建逻辑&#xff0c;而不是直接使用类的构造函数。工厂函数可以根据输入参数动态地决定创…...

网页制作11-html,css,javascript初认识のCCS样式列表(上)

Advantage. 更加精确的控制网页的内容、形式。样式更加丰富。定义样式灵活。 一、css的基本语法 Css的语法结构由三部分组成&#xff1a; 1、选择符 Selector&#xff1a; 指这种样式编码所要针对的对象&#xff0c;可以是一个xhtml标签&#xff0c;例如body hl&#xff1b…...

VSCode 移除EmmyLua插件的红色波浪线提示

VSCode 中安装插件EmmyLua&#xff0c;然后打开lua文件的时候&#xff0c;如果lua代码引用了C#脚本的变量&#xff0c;经常出现 “undefined global variable: UnityEngineEmmyLua(undefined-global)” 的红色波浪线提示&#xff0c;这个提示看着比较烦人&#xff0c;我们可以通…...

【PHP】fastadmin框架后台开关的传值问题

文章目录 概要技术细节 概要 fastadmin的后台ui框架中&#xff0c;处理列表开关的场景比较多见&#xff0c;有时传值不是0和1&#xff0c;而是1和2&#xff0c;那么就需要调整js的代码了。 技术细节 处理开关字段的js代码&#xff1a; {field: is_sellOut,title: 销售中,yes…...

机器学习数学基础:37.统计学基础知识1

统计学基础概念入门教程 在统计学的世界里&#xff0c;概率和数据分布是基础且重要的概念&#xff0c;它们能帮助我们理解和分析各种数据现象。除此之外&#xff0c;点估计与区间估计也是在对总体参数进行推断时常用的方法。下面&#xff0c;就为统计学小白详细讲解这些关键的…...

HTB academy ---Active Directory Enumeration Attacks---An ACE in the Hole

ACL Enumeration 那么章节开始我们先枚举一下用户的GUID&#xff0c;也就是如图所示objectacetype这一块儿的内容&#xff0c;这一步的目的其实是观察我们已获得的用户对其他用户的权限&#xff0c;这个权限就是通过这个GUID得出来的&#xff08;当然枚举的时间会比较长可能需…...

2025华为OD机试真题目录【E卷+A卷+B卷+C卷+D卷】持续收录中...

摘要 本专栏提供2025最新最全的华为OD机试真题库&#xff08;EABCD卷&#xff09;&#xff0c;包括100分和200分题型。题目包含题目描述、输入描述、用例、备注和解题思路、多种语言解法&#xff08;Java/JS/Py/C/C&#xff09;。希望小伙伴们认真学习、顺利通过。 声明 本专…...

【Linux第一弹】Linux基础指令(上)

目录 1.ls指令 1.1 ls使用实例 2.pwd指令 3.cd指令 3.1 cd使用实例 4.touch指令 4.1touch使用实例 5.mkdir指令 5.1mkdir使用实例 6.rmdir指令和rm指令 6.1 rmdir指令使用实例->: 6.2 rm指令使用实例 7.man指令 8.cp指令 8.1 cp 使用实例 9.mv指令 9.1mv使用…...

linux下自旋锁(spin_lock)

文章目录 Linux自旋锁&#xff1a;单核与多核环境下的实现差异与核心原理 &#x1f5a5;️&#x1f512;一、自旋锁的核心特性 ⚙️&#x1f3af; 适用场景&#xff1a; 二、单核环境下的自旋锁实现 &#x1f6d1;1. **实现原理** &#x1f504;2. **关键代码解析** &#x1f4…...

【华为OD机考】2024E+D卷真题【完全原创题解 详细考点分类 不断更新题目 六种主流语言Py+Java+Cpp+C+Js+Go】

可上 欧弟OJ系统 练习华子OD、大厂真题 绿色聊天软件戳 oj1441了解算法冲刺训练&#xff08;备注【CSDN】否则不通过&#xff09; 文章目录 相关推荐阅读模拟 数学排序字符串基础数组基础系统设计蒙特卡洛模拟其他 栈 常规栈单调栈 队列&#xff08;题目极少&#xff0c;几乎不…...

VirtualBox虚拟机转VM虚拟机

前言&#xff1a;部分靶机只适用于VirtualBox&#xff0c;VM打不开VirtualBox的文件&#xff0c;所以需要进行转换 前置条件&#xff1a;本机已经下载VM和VirtualBox 第一步&#xff1a;文件转换 找到VirtualBox.exe所在位置&#xff0c;启动cmd窗口 文件转换的命令&#xf…...

UE5设置打开新窗口默认停靠在主窗口

打开引擎所在位置 找到路径 ...\UE_5.5\Engine\Config 找到 BaseEditorPerProjectUserSettings.ini 文件 打开后CtrlF搜索 [/Script/UnrealEd.EditorStyleSettings] 在末尾添加一行 AssetEditorOpenLocationMainWindow 保存即可,之后的项目都是默认主窗口打开...

vi常见操作命令

vi&#xff08;Visual Editor&#xff09;是Linux和Unix系统中广泛使用的文本编辑器&#xff0c;它以其高效、强大的功能深受程序员和系统管理员的喜爱。这个“常用vi命令集合.zip”压缩包包含了一份详细记录了vi编辑器常用命令的文档“常用vi命令集合.doc”。下面&#xff0c;…...

AIGC和搜索引擎的异同

AIGC&#xff08;生成式人工智能&#xff09;与搜索引擎的核心差异体现在信息处理方式和输出形态上&#xff0c;我们可以从以下维度对比&#xff1a; 一、工作原理的本质差异 信息检索机制 搜索引擎&#xff1a;基于关键词匹配&#xff08;如"中暑怎么办"→返回相关…...

【ATXServer2】Android无法正确显示手机屏幕

文章目录 现象原因分析与解决排查手机内部minicap 解决minicap问题查看移动端Android SDK版本查看minicap支持版本单次方案多次方案 现象 原因分析与解决 由于atxserver2在与Android动终端的链接过程中使用了agent&#xff1a;atxserver2-android-provider&#xff0c;按照项目…...

fps项目总结:动画蓝图

文章目录 状态不同状态的并存性。 状态 不同状态的并存性。...

Trae:国内首款AI原生IDE,编程效率大提升

今年一月&#xff0c;在新闻上看到字节跳动面向海外市场推出了一款名为Trae的AI集成开发环境&#xff08;IDE&#xff09;。起初&#xff0c;我并未给予过多关注&#xff0c;因为市面上已有不少IDE集成了AI插件&#xff0c;功能也非常全面&#xff0c;而字节跳动自家的MarsCode…...