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

AI Agent实战:打造京东广告主的超级助手 | 京东零售技术实践

前言

自2022年末ChatGPT的问世,大语言模型(LLM)技术引发全球关注。在大模型技术落地的最佳实践中,智能体(Agent)架构显现出巨大潜力,成为业界的普遍共识,各大公司也纷纷启动Agent技术验证项目。

基于此背景,我们在23年下半年对Agent的应用进行了一些探索,并打造了京东广告投放Agent应用—京准通智能助手。过去一年,京准通智能助手历经多个版本迭代,已经具备智能客服、数据查询、广告创编等AI能力,逐渐成为广告主的超级助手。这背后,依托于我们构建的AI工程化技术体系。本文将详细介绍京准通智能助手的构建过程,并系统化阐述AI工程能力建设中的关键技术实践与创新方法论。

一、Agent 在京东广告投放中的落地

1、Agent 在京东广告投放中的应用场景

经过前期我们对Agent应用方向的探索和尝试,确定了Agent在京东广告投放中落地的两个主要的场景:

1.1 服务提效

1.2 盯盘提效

2、Agent 工程能力实现

在明确具体应用场景的基础上,依托前期技术积累与探索成果,工程实现层面需重点构建RAG和Function Call两大核心技术能力,为智能客服与智能指令场景的应用提供技术支撑。下面将深入阐述这两大核心能力的实现方案。

2.1 RAG能力的演变

RAG能力在实际应用中,经历过多次升级迭代,主要分为两个版本:RAG1.0、RAG2.0

RAG1.0

RAG1.0版本中完成了基础能力的建设,包含两部分:离线知识构建、在线推理引擎。

离线知识构建

离线知识构建的核心工作是将知识转化为向量并存储。主要有以下几个步骤:

1.产品/运营将相关业务的知识整理成文档(Markdown、Excel等)

2.根据不同格式和切割方式将内容切割成若干个内容块

3.调用embedding model,进行内容向量化

4.将向量存储至京东Vearch向量库

在线推理引擎

在线推理引擎提供实时在线服务,核心工作是检索相关知识并调用大模型解决问题。主要有以下几个步骤:

1.收到用户Query,调用embedding 模型,进行向量化,获得向量。

2.根据Query的向量,在向量库中进行相关性检索,获得和Query相关的知识

[{"_score": 0.7526149153709412,//相关性分值"_source": {"title": "搜索快车-定向设置-关键词定向-功能入口","content": " 搜索快车->新增/编辑快车推广单元->添加关键词...", "status": 1, //更多字段...}, 
},
//更多知识...
]

3.拼接提示词,要让模型更方便理解,需要将知识处理成特定的格式

//这里不方便展示业务真实的提示词,以下仅提供大致思路请根据信息
"""
搜索快车-搜索快车投放要素-定向设置-关键词定向-功能入口
- 搜索快车->新增/编辑快车推广单元->添加关键词;
//更多知识...
"""回答问题
"""
搜索快车关键词设置
"""

4.调用大模型接口,传入拼接好的提示词,获取结果返回给用户。

{"output": "在搜索快车中进行关键词设置的步骤如下:\n\n1. **添加关键词**:\n   - 进入搜索..."}

RAG2.0

向量召回时,通常要设置最低相关分值和最大召回数量,来调控召回内容的质量和数量,以追求更好效果。然而,在RAG1.0版本的实际应用中依然遇到了无法召回和召回质量的问题,在解决问题过程中,逐步建设了向量多路召回、ES检索、重排序等能力,形成了RAG2.0版本。

向量多路召回:

场景:部分有用的内容,相关度不够,无法召回。

剖析:向量召回的分数与相关内容密度强相关,理论上密度越高,相关分值越高。同理,文档内容越短时相关内容密度也就越高。

方案:知识构建向量时,将同一块知识,按照【概述+内容】分别存两份向量,其中概述内容较短,也就意味着密度较高,更容易获得高相关性。在召回时,按照概述和内容两路分别召回再去重的方式,提升召回率。

ES检索

场景:在对用户问题分析中,发现有一部分广告主提出一些【智能计划】相关的问题(对于搜索快车或推荐广告的智能出价的计划的习惯性简称),由于广告投放产品中有一个叫做智能投放的产品,在知识召回的时候大部分召回了智能投放相关的知识,导致无法正确回答此类问题。

方案:新增一路ES检索,通过自定义分词器中的同义词、专用词、禁用词的方式,来实现部分内容的召回。比如,同义词设置:智能计划 => 智能出价计划(解决用户习惯的问题)、 购物触点 => 推荐广告 京挑客 => 京东联盟 (解决产品线升级改名的问题)..

重排序

场景:通过以上手段,有效提升了知识召回率,但是引发了另一个问题,召回的部分知识不相关,会误导模型,影响模型作答效果。

方案:引入ReRank模型,在知识召回后,调用算法侧部署的ReRank服务,对知识进行重排序,过滤无关知识。

经过技术迭代,RAG2.0的能力已经演变为上图。

2.2 Function Call 能力的构建

Function Call的能力主要是为了服务智能指令,比如:提供一个计划数据查询的工具,当用户发送【查询今天ROI > 10 的计划】,模型会返回Function Call标识,包括function name 及 arguments,调用成功后,用对应的组件渲染出来报表。

同样包含两部分,分别是:工具能力注册、在线推理引擎。

工具能力注册

该模块主要工作是将工具的信息管理起来,主要包含三部分信息,分别是:

1.模型感知的信息:主要作用是给模型做推理,名称、参数、描述,为了让模型推理更准确,描述的内容我们做了拆分,由基本描述、扩展描述、示例指令几部分组成,下面是一个工具给模型的信息示例:

{"type": "function", "function": {"name": "query_xxxx_data" //名称"description": "根据ROI、时间....查询广告计划数据" + //基本描述"这是一个查询计划数据的工具,可以根据..." + //扩展描述"示例指令:\n- 查询今天ROI > 10的计划数据\n -查询上周..." //示例指令"parameters": { //参数"type":"object","properties":{"startTime":{"type":"string","description":"开始时间,格式yyyy-mm-dd"},"endTime":{"type":"string","description":"结束时间,格式yyyy-mm-dd"},"roi":{"type":"string","description":"ROI(投产比)查询条件,如:“ge|3”代表大于等于3。gt-大于,lt-小于,eq-等于,ge-大于等于,le-小于等于"},//...}}}
}

2.后端感知的信息:正常情况下,工具的执行其实是调用了后端的接口,那么就需要接口地址、接口入参、接口出参、成功条件等信息。其中接口的入参和模型感知信息中的参数是同一份数据。

{"url": "http://xxx.jd.local/xxx", //接口地址"success":{//成功条件"condition":{"from":"code","operator":1,"target":1},"data":"data"},"params":[//出参{"key":"code","type":"integer","description":"code码"},{"key":"msg","type":"string","description":"错误信息"},{"key":"data","type":"string","description":"返回给前端数据"}],"error":{"msgType":1,"msgKey":"msg","msgContent":""}
}

3.前端感知的信息:工具调用成功后,通常有多种处理方式:1.把结果直接返回给用户。2.把结果给到模型,模型继续做推理,同时可以再定义Prompt。3.将结果使用组件渲染给用户。

我们为广告主提供的工具大部分都要用组件进行渲染,比如数据报表。当工具需要和组件结合的时候,需要考虑组件的配置化和复用率,这里我们打通了既有的低代码平台,会将组件的信息保存下来。

{
"pageData":[{"name":"数据表格","componentName":"jad_ReportTable","jsUrl":"jadfe/xxx/ReportTable.6a3493f4.js", //组件CDN地址"options":[//组件配置{"key":"columns","type":"list","name":"列设置","options":[{"key":"title","name":"列名称","type":"input"},{"key":"key","name":"字段key","type":"input"},{"key":"width","name":"宽度","type":"inputNumber"},{"key":"sort","name":"排序","type":"switch"}],"value":[{"title":"计划名称","key":"campaignName","width":110},{"title":"产品线","key":"businessTypeStr","width":110},{"title":"时间","key":"date","sort":false},{"title":"展现数","key":"impressions","sort":true}],}],
}

在线推理引擎

提供实时在线服务,核心作用是组装工具信息调用大模型进行推理。以下是主要步骤:

1.收到用户Query,从数据库读取工具信息

2.将工具组装成模型需要的格式,组装Prompt,调用模型

3.如果模型返回Function Call标识,通过标识中的 function name 找出对应的工具,调用该工具的接口

4.根据结果的展示行为,有以下几种处理方式:

5.前端将返回的内容展示给用户,如需要组件,动态加载组件的CDN地址,完成渲染。

2.3 工程能力全貌

经过各种能力的建设后,工程能力的全貌演变为下图。其中与模型交互的核心能力采用了Langchain框架。

3、京准通智能助手能力展示

基于以上构建的工程化能力,支撑了京准通智能助手的落地,目前已包含:问题解答、数据查询、物料创建、物料编辑等能力。

体验地址:https://jzt.jd.com(需要商家账号)

在支撑京准通智能助手落地中,除了以上一些核心能力的构建,也有很多细节的优化,比如:

指令中日期的准确性优化

二、基于业务沉淀Agent搭建平台

以上就是京准通智能助手业务从0到1的过程,可见一个大模型应用真正应用到生产环境中,是比较复杂且有非常大的工作量的,我们在思考,如果广告内有其他的业务场景,是否能实现一些能力的快速复用?

与此同时,随着业务效果的优化进入深水区,我们需要通过对工作流程更精细化的编排来进行效果的优化。

综合以上考虑,我们决定在工作流能力构建的同时,将已有的能力增强并沉淀一个Agent搭建平台,来提升工程复用率和应用搭建效率。以下是整体架构:

基建:主要是公司的基建,提供一些基础能力,如:向量库、ES、OSS、Mysql、CDN等等

Agent设计器:主要是提供Agent可视化的设计能力,包括智能体、知识库、工具库、记忆库、工作流等核心功能。

Agent引擎:主要是根据设计器产生的配置,动态运行工作流程,如:知识的召回、提示词的加工、模型的推理、工具的调用、代码的执行等等。

端能力:主要是面向用户的对话式组件,这里我们沉淀了一套AI组件库,可快速组装出兼容PC、H5的对话框。与此同时,针对内部的京ME办公场景,对外如微信中的场景,我们也通过API调用的方式进行了支持。

应用场景:有这些能力,就可以轻松的利用平台支撑起各种Agent应用,包括我们的京准通智能助手。同时除了业务之外,还可以做内部提效的Agent应用。

下面我们将主要介绍一下Agent设计器和Agent引擎的实现。

1、Agent设计器

团队空间为了方便协作和做业务隔离,团队空间下,可以进行智能体的搭建、知识库的管理、工具库的管理、工作流的编排等等。

知识库中,可以选择不同的向量模型,方便做召回优化的实验。

工具库中,可以设置每个工具的模型感知信息、接口、参数、渲染组件等。

工作流中,可以随意拖拽编排工作流程,比如:召回节点可以设置召回策略、召回数量、最低分值等;大模型节点可以设置System、User提示词、历史会话轮数等。

2、Agent引擎

Agent引擎负责和模型交互,是影响效果和性能的核心模块。我们做了重点的设计和重构。在设计阶段,我们考虑的首要问题是:Langchain的取舍

Langchain框架提出了LCEL语法,将Prompt、LLM、Tool等概念进行了抽象并高度封装,能快速上手并实现一些Demo,对新手比较友好。

然而,随着业务的复杂度不断增加,以及对模型的了解不断深入,会发现,Langchain的过度封装,把很多简单的事情变的更复杂了,明显影响了业务自由度及开发效率,同时也带来了一定的性能损耗。

举个例子:工具调用中,模型接受的参数是一个JSON Schema,我们只要将工具参数存成一个json用的时候就会非常方便。

然而,如果使用Langchain,就需要先将json转成一个pydantic类,再使用Tool类进行工具的注册,在调用模型时,Langchain又会转换成json。

本来一行代码就可以搞定,使用Langchain后需要几十行代码才能实现,并且降低了性能。

最终,我们决定移除Langchain框架,直接用原生python实现,仅保留个别用起来比较方便的工具,如:文档切割。

整体上,设计了一套工作流调度器,并将所有节点实现了组件化。收到请求后会初始化一个工作流调度器,调度器根据时机来操作每个节点的执行。

截止目前,Agent平台已经为包括智能助手在内的多个Agent应用进行了赋能。其中,在京准通智能助手的效果调优中,基于工作流编排的能力,快速进行了各种策略的迭代,大幅提升了迭代效率。

京准通智能助手工作流示意图

三、总结

以上是我们京东广告在Agent应用上的一些工程化实践,通过构建RAG、Function Call等核心能力,为京准通智能助手业务提供AI 超能力,并为广大商家赋能。

下一步,我们还将推动多Agent架构升级,为更多专业的Agent能力接入铺平道路,促进智能助手能力的持续提升,为商家提供更智能化的产品。总之,道阻且长,行则将至!

相关文章:

AI Agent实战:打造京东广告主的超级助手 | 京东零售技术实践

前言 自2022年末ChatGPT的问世,大语言模型(LLM)技术引发全球关注。在大模型技术落地的最佳实践中,智能体(Agent)架构显现出巨大潜力,成为业界的普遍共识,各大公司也纷纷启动Agent技…...

将Google文档导入WordPress:简单实用的几种方法

Google文档是内容创作者非常实用的写作工具。它支持在线编辑、多人协作,并能够自动保存内容。但当我们想把Google文档中的内容导入WordPress网站时,可能会遇到一些小麻烦,比如格式错乱、图片丢失等问题。本文将为大家介绍几种简单实用的方法&…...

Spring的过滤器获取请求体中JSON参数,同时解决Controller获取不到请求体参数的问题。

Spring的过滤器获取请求体中JSON参数,同时解决Controller获取不到请求体参数的问题。 文章目录 前言一、需求场景描述二、原因解析三、自定义 HttpServletRequestWrapper 来保存数据解决Controller获取不到的问题。四、案例(要注意的点) 前言 Spring的过滤器获取请…...

全链路优化:如何让单点登录认证接口并发性能翻倍?

背景 最近针对一个单点登录认证项目进行性能优化,在 8核 16G 环境下的认证并发能力从每秒800次提升至每秒1600次,性能提升一倍,整理此次优化过程中的相关性能优化操作总结和大家分享一下。 Nginx配置优化 在并发认证场景下,Ngi…...

基于大语言模型的推荐系统(1)

推荐系统(recommendation system)非常重要。事实上,搜索引擎,电子商务,视频,音乐平台,社交网络等等,几乎所有互联网应用的核心就是向用户推荐内容,商品,电影&…...

嵌入式八股文(四)计算机网络篇

目录 第一章 基础概念 1. 服务 2. 协议 3. 接口 4. 网络体系结构 5. OSI七层模型 6. TCP/IP四层参考模型 7. 最大传输单元MTU及分片操作 8. 流量控制 9. 数据链路层提供的功能 10. 汇集树 11. 生成树协议 12. 拥塞控制及途径 6. 包调度 7. 隧道 8. 抖动 9. 逆…...

【龙智】Confluence到期日提醒插件Data Center v1.8.0发布:Confluence 9兼容、表格提醒强化,Slack通知升级

还在为Confluence中重要内容的逾期而焦头烂额? 还在苦于手动核查任务的截止日期? 不仅效率低下,还时常遗漏关键信息? 别担心,你的帮手来了! Confluence到期日提醒插件——由Atlassian全球白金合作伙伴龙…...

Luckfox Pico Max运行RKNN-Toolkit2中的Yolov5 adb USB仿真

1:下载rknn-toolkit2 git clone https://github.com/rockchip-linux/rknn-toolkit2 2:修改onnx目录下的yolov5的test.py的代码 # pre-process config print(--> Config model) rknn.config(mean_values[[0, 0, 0]], std_values[[255, 255, …...

AI IDE - Trae -学习与实践

1.应用场景 主要用于使用AI IDE进行快速的开发,提高开发效率;节约开发时间; 额外话:可以预见搞出来的东西终将取代了我们自身; 2.学习/操作 1.文档阅读 Trae - Ship Faster with Trae -- 官网,下载安装 …...

内外网文件传输 安全、可控、便捷的跨网数据传输方案

一、背景与痛点 在内外网隔离的企业网络环境中,员工与外部协作伙伴(如钉钉用户)的文件传输面临以下挑战: 安全性风险:内外网直连可能导致病毒传播、数据泄露。 操作繁琐:传统方式需频繁切换网络环境&…...

pycharm 调试 debug 进入 remote_sources

解决办法1: pycharm函数跳转到remote_sources中的文件中_pycharm修改remotesource包存放地址-CSDN博客 file->settings->project structure将项目文件夹设为"Sources"(此时文件夹会变为蓝色)。 解决方法2 Debug:使用Pychar…...

Docker国内镜像源部署deepseek

‌部署deepseek时Docker拉取国内镜像失败可能是由于国内网络环境复杂或镜像源配置不正确导致的‌。 具体原因可能包括: ‌网络问题‌:国内网络环境复杂,可能导致访问国内镜像仓库的速度较慢或无法访问,进而影响Docker镜像的拉取…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_os_specific_init函数

ngx_os_specific_init 声明在 src/os/unix/ngx_os.h ngx_int_t ngx_os_specific_init(ngx_log_t *log); 定义在 src\os\unix\ngx_linux_init.c ngx_int_t ngx_os_specific_init(ngx_log_t *log) {struct utsname u;if (uname(&u) -1) {ngx_log_error(NGX_LOG_ALERT, log,…...

C++算法基础笔记

算法学习 C语法字符和字符串输入输出输出控制 字符串拼接和扩充检查字符串是否存在大写、小写字母字符数组换行 C语法 字符和字符串输入输出 在C 中使用如下语法实现对容器中的对象进行遍历,类似于js或python的for in语法 for (element_declaration : container)…...

江苏地区电子行业DeepSeek AI+OdooERP业务升级规划方案

作者:Odoo技术开发/资深信息化负责人 日期:2025年2月22日 一、江苏电子行业现状与痛点分析 行业特点 产业集群效应显著:江苏电子产业以无锡、苏州、南京为核心,形成了涵盖PCB、集成电路、新能源、智能终端等领域的完整产业链&…...

Spring事务原理 二

在上一篇博文《Spring事务原理 一》中,我们熟悉了Spring声明式事务的AOP原理,以及事务执行的大体流程。 本文中,介绍了Spring事务的核心组件、传播行为的源码实现。下一篇中,我们将结合案例,来讲解实战中有关事务的易…...

【实用工具】在 Windows 上使用 JVMS 管理多版本 JDK

文章目录 前言JVMS 的主要功能安装 JVMS初始化 JVMS管理 JDK 版本远程添加(这块比较吃网络,如果不成功可以看下面手动添加)安装指定版本的 JDK查看本地已安装的 JDK 版本切换 JDK 版本 手动添加 JDK 前言 在 Java 开发过程中,针对…...

前端面试-JavaScript 数据类型详解

目录 一、数据类型分类 二、核心区别对比 1. 存储方式 2. 比较方式 3. 类型检测方法 三、特殊类型详解 1. Symbol 2. BigInt 3. null vs undefined 四、常见面试扩展问题 五、总结 一、数据类型分类 JavaScript 数据类型分为 基本数据类型(原始类型&…...

Oracle 连接报错:“ORA-12541:TNS:no listener ”,服务组件中找不到监听服务

一、 报错: navicat连接数据库报错:ORA-12541:TNS:no listener 二、排查问题 三、 解决问题 删除Oracle安装目录下选中的配置:listener.ora 及 listener*.bak相关的 cmd,用管理员打开 执行:netca 命…...

go-micro

一,课程介绍 1,主讲老师: 大地 2,合作网站: www.itying.com 3,我的专栏: https://www.itying.com/category_Z9-b0.html 4,必备基础:学习本教程要有golang和go web基础 5,大地老师Golang入门实战系列教…...

SVN把英文换中文

原文链接:SVN设置成中文版本 都是英文,换中文 Tortoise SVN 安装汉化教程(乌龟SVN) https://pan.quark.cn/s/cb6f2eee3f90 下载中文包...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_atoi 函数

ngx_atoi 声明在 src/core/ngx_string.h ngx_int_t ngx_atoi(u_char *line, size_t n); 定义在 src/core/ngx_string.c ngx_int_t ngx_atoi(u_char *line, size_t n) {ngx_int_t value, cutoff, cutlim;if (n 0) {return NGX_ERROR;}cutoff NGX_MAX_INT_T_VALUE / 10;cutlim…...

DeepSeek R1/V3满血版——在线体验与API调用

前言:在人工智能的大模型发展进程中,每一次新模型的亮相都宛如一颗投入湖面的石子,激起层层波澜。如今,DeepSeek R1/V3 满血版强势登场,为大模型应用领域带来了全新的活力与变革。 本文不但介绍在线体验 DeepSeek R1/…...

深度学习技术文章质量提升指南(基于CSDN评分算法优化)

一、质量缺陷诊断(基于CSDN质量分V5.0算法) 根据1提供的评分框架,当前文章可能存在的质量短板: 技术深度不足:缺乏具体模型实现细节与数学推导结构完整性缺失:未形成"理论-实践-应用"完整闭环代…...

力扣-回溯-37 解数独

思路 双层递归&#xff0c;而且在传递参数使用&的好处是不用在复制一次样本&#xff0c;浪费时间 class Solution { public:bool isVaild(vector<vector<char>> &board, int row, int cal, char val){for(int i 0; i < 9;i){if(board[row][i] val) …...

极简入门,本地部署dify低代码平台构建AI Agent大模型全流程(使用教程、微案例、配置详解、架构图解析)

文章目录 一、环境搭建1.1 安装VMware-workstationCentOS7.91.2 安装宝塔1.3 安装docker及改镜像、安装dify1.4 配置模型供应商 二、dify快速上手体验2.1 知识库2.2 微案例&#xff1a;基于知识库的助手 三、dify知识库配置详解3.1 分片策略3.2 父子分段3.3 索引方法3.4 检索结…...

ssh与服务器

目录 前言&#xff1a; 一、密码连接 二、密钥对连接 1.将公钥放在服务器 2.ssh连接 三、禁用密码 1.进入服务器/etc/ssh文件夹 2.打开sshd_config文件&#xff0c;进行如下配置 3.有可能还需要更改其他文件夹 4.重启ssh服务 四、config 五.ssh与github 1.本地创建…...

C++ bind基本使用

std::bind 是 C11 引入的一个函数模板&#xff0c;用于创建一个新的可调用对象&#xff0c;该对象可以调用某个函数或成员函数&#xff0c;并将一些参数绑定为固定值。通过 std::bind&#xff0c;你可以创建一个新的函数对象&#xff0c;这个对象可以接受剩余的参数&#xff0c…...

【GPT】从GPT1到GPT3

every blog every motto: Although the world is full of suffering&#xff0c; it is full also of the overcoming of it 0. 前言 从GPT1 到GPT3 1. GPT1 论文&#xff1a; https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/lan…...

Java IO 设计模式总结

装饰器模式 装饰器&#xff08;Decorator&#xff09;模式 可以在不改变原有对象的情况下拓展其功能。 装饰器模式通过组合替代继承来扩展原始类的功能&#xff0c;在一些继承关系比较复杂的场景&#xff08;IO 这一场景各种类的继承关系就比较复杂&#xff09;更加实用。 对…...

js版本ES6、ES7、ES8、ES9、ES10、ES11、ES12、ES13、ES14[2023]新特性

ES全称ECMAScript,ECMAScript是ECMA制定的标准化脚本语言,本文讲述Javascript[ECMAScript]版本ES6、ES7、ES8、ES9、ES10、ES11、ES12、ES13、ES14[2023]的新特性,帮助朋友们更好的熟悉和使用Javascript ES5 1.严格模式 use strict2.Object getPrototypeOf,返回一个对象的原…...

基于ffmpeg+openGL ES实现的视频编辑工具-解码(四)

在开发视频编辑工具时,预览功能是基石,它涵盖视频、图片以及音频播放,而视频解码则是实现视频预览及后续编辑操作的关键环节。本文聚焦于基于 FFmpeg 实现视频解码的过程,详细阐述开发中遭遇的痛点、对应的解决方式,以及核心代码的运作原理。 一、开发背景与目标 视频编…...

机器学习:决策树

1. 初步概念 决策树是一种基于分裂特征的机器学习方法,用于分类和回归任务。它通过将数据按特征值进行分割,最终做出预测。与线性模型不同,决策树能够自动识别重要的特征,并根据数据情况生成复杂的决策规则。 2. 决策树的核心思想 决策树的核心思想在于选择一个特征作为…...

@media 的常用场景与示例

media 的常用场景与示例 1. 基本概念2. 常用场景2.1 不同屏幕宽度的布局调整2.2 隐藏或显示元素2.3 字体大小调整2.4 图片大小调整2.5 高度调整2.6 颜色调整2.7 鼠标悬停效果 3. 常用示例3.1 基本响应式布局3.2 隐藏侧边栏3.3 字体大小和图片大小 4. 总结 在现代网页设计中&…...

深入浅出:基于SpringBoot和JWT的后端鉴权系统设计与实现

文章目录 什么是鉴权系统定义与作用主要组成部分工作原理常用技术和框架 基于SpringBoot JWT的鉴权系统设计与实现指南前言技术对比令牌技术JWT令牌实现全流程1. **依赖引入**2. **JWT 工具类**3. **JWT 拦截器&#xff08;Interceptor&#xff09;** 4. **拦截器注册**5. **登…...

怎麼利用靜態ISP住宅代理在指紋流覽器中管理社媒帳號?

靜態ISP住宅代理是一種基於真實住宅IP的代理服務。這類代理IP通常由互聯網服務提供商&#xff08;ISP&#xff09;分配&#xff0c;具有非常高的真實性&#xff0c;與普通數據中心代理相比&#xff0c;更不容易被平臺檢測到為“虛假IP”或“代理IP”&#xff0c;靜態ISP住宅代理…...

DeepSeek掘金——SpringBoot 调用 DeepSeek API 快速实现应用开发

Spring Boot 实现 DeepSeek API 调用 1. 项目依赖 在 pom.xml 中添加以下依赖: <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency>&l…...

解决本地模拟IP的DHCP冲突问题

解决 DHCP 冲突导致的多 IP 绑定失效问题 前言 续接上一篇在本机上模拟IP地址。 在实际操作中&#xff0c;如果本机原有 IP&#xff08;如 192.168.2.7&#xff09;是通过 DHCP 自动获取的&#xff0c;直接添加新 IP&#xff08;如 10.0.11.11&#xff09;可能会导致 DHCP 服…...

Git LFS介绍(Large File Storage)大文件扩展,将大文件存储在外部存储,仓库中只记录文件的元数据(大文件的指针,类似一个小的占位符文件)

文章目录 LFS的功能&#xff1f;如何使用LFS&#xff1f;将大文件存储在外部系统是什么意思&#xff1f;具体是如何运作的&#xff1f;为什么要这样做&#xff1f; 对开发者的影响&#xff1f;1. **性能和效率**2. **协作体验**3. **版本管理差异**4. **额外的工具和配置** LFS…...

数据中心储能蓄电池状态监测管理系统 组成架构介绍

安科瑞刘鸿鹏 摘要 随着数据中心对供电可靠性要求的提高&#xff0c;蓄电池储能系统成为关键的后备电源。本文探讨了蓄电池监测系统在数据中心储能系统中的重要性&#xff0c;分析了ABAT系列蓄电池在线监测系统的功能、技术特点及其应用优势。通过蓄电池监测系统的实施&#…...

三甲医院网络架构与安全建设实战

一、设计目标 实现医疗业务网/卫生专网/互联网三网隔离 满足等保2.0三级合规要求 保障PACS影像系统低时延传输 实现医疗物联网统一接入管控 二、全网拓扑架构 三、网络分区与安全设计 IP/VLAN规划表 核心业务配置&#xff08;华为CE6865&#xff09; interface 100G…...

如何在 React 中测试高阶组件?

在 React 中测试高阶组件可以采用多种策略&#xff0c;以下是常见的测试方法&#xff1a; 1. 测试高阶组件返回的组件 高阶组件本身是一个函数&#xff0c;它返回一个新的组件。因此&#xff0c;可以通过测试这个返回的组件来间接测试高阶组件的功能。通常使用 Jest 作为测试…...

INA219电流、电压、功率测量芯片应用

INA219电流、电压、功率测量芯片应用 简述芯片引脚应用电路寄存器驱动代码 简述 ‌INA219是一款由德州仪器&#xff08;Texas Instruments&#xff09;生产的高精度电流/功率监测芯片&#xff0c;广泛应用于电池监控、电源管理等需要精确电流和功率测量的应用中‌‌。该芯片通…...

深入解析设计模式之工厂模式

深入解析设计模式之工厂模式 在软件开发的复杂体系中&#xff0c;设计模式作为解决常见问题的有效方案&#xff0c;为开发者提供了强大的工具。工厂模式作为一种广泛应用的创建型设计模式&#xff0c;专注于对象的创建过程&#xff0c;通过巧妙的设计&#xff0c;将对象的创建…...

ollama修改监听ip: 0.0.0.0

确认Ollama绑定IP地址 默认情况下&#xff0c;Ollama可能仅监听本地回环地址&#xff08;127.0.0.1&#xff09;。要允许外部访问&#xff0c;需将其配置为监听所有IP&#xff08;0.0.0.0&#xff09;或指定IP&#xff08;如10…19&#xff09;。 修改启动命令&#xff08;推荐…...

.NET MVC实现电影票管理

.NET MVC&#xff08;Model-View-Controller&#xff09;是微软推出的基于 Model-View-Controller 设计模式的 Web 应用框架&#xff0c;属于 ASP.NET Core 的重要组成部分。其核心目标是通过清晰的分层架构实现 高内聚、低耦合 的开发模式&#xff0c;适用于构建可扩展的企业级…...

FPGA DSP:Vivado 中带有 DDS 的 FIR 滤波器

本文使用 DDS 生成三个信号&#xff0c;并在 Vivado 中实现低通滤波器。低通滤波器将滤除相关信号。 介绍 用DDS生成三个信号&#xff0c;并在Vivado中实现低通滤波器。低通滤波器将滤除较快的信号。 本文分为几个主要部分&#xff1a; 信号生成&#xff1a;展示如何使用DDS&am…...

大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(2)

Paimon的下载及安装&#xff0c;并且了解了主键表的引擎以及changelog-producer的含义参考&#xff1a; 大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(1) 利用Paimon表做lookup join&#xff0c;集成mysql cdc等参考&#xff1a; 大数据组件(四)快速入门实时数据…...

vue3父子组件props传值,defineprops怎么用?(组合式)

目录 1.基础用法 2.使用解构赋值的方式定义props 3.使用toRefs的方式解构props (1).通过ref响应式变量&#xff0c;修改对象本身不会触发响应式 1.基础用法 父组件通过在子组件上绑定子组件中定义的props&#xff08;:props“”&#xff09;传递数据给子组件 <!-- 父组件…...

Linux /etc/fstab文件详解:自动挂载配置指南(中英双语)

Linux /etc/fstab 文件详解&#xff1a;自动挂载配置指南 在 Linux 系统中&#xff0c;/etc/fstab&#xff08;File System Table&#xff09;是一个至关重要的配置文件&#xff0c;它用于定义系统开机时自动挂载的文件系统。如果你想让磁盘分区、远程存储&#xff08;如 NFS&…...