自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(141)
  • 资源 (6)
  • 收藏
  • 关注

原创 【Prompt Enhancer】如何优化prompt的内容

查询原则基准和Cozy的prompt会更注重格式。尤其是cozy,基本是按照固定格式输出。Github版本prompt更注重问题的深度,对提问场景帮助会更大。由于LLM输出的不稳定,基本每次生成都会有些差异,生成的内容也不一定能全部使用。但是,它们给出了很多维度和参考例子是值得我们借鉴,为我们提供一些编写prompt的思路。

2024-09-13 19:01:56 1002

原创 主流的认证授权技术

授权是系统对用户赋予权限的过程,对于平台系统会注重权限隔离,包括功能权限、数据权限等。为了尽量保证access_token的安全,access_token放在回调URL里的Fragment,避免后续客户的发起请求,把access_token给带出去了。服务器取出凭证 ID对应的Challenge,用公钥签名Challenge,将结果和浏览器返回的签名比较,一致表面验证通过,允许用户登录。这种模式是为了应对没有第三方应用的情况,对于前端应用,直接从授权服务器得到access_token,省略了授权码的环节。

2024-09-10 12:58:11 1023

原创 通过LLM提升ASR的准确率

现在ASR识别用户语言内容选择的是“中文”,会出现标点符号使用不合适,识别内容不符合语境等问题。现在考虑使用LLM对ASR识别出的内容做校正,输出更适合对话的语境的内容。符号校正,选择合适的中英文符号、合理的断句、符号符号文本表达的语气。"content": "我叫张老师,住在北京,你住在什么地方?"content": "我叫张老师,你叫什么名字""content": "你叫什么名字?"content": "你住在哪里?"content": "我住在杭州""content": "我叫张三"

2024-09-06 19:13:36 976

原创 LiveKit的agent介绍

LiveKit核心概念:​订阅信息流​agent交互流程赋予用户创建房间的权限,在客户的加入并创建房间。客户的指定ws_url和token,加入指定房间。离开房间调用 通知 LiveKit 离开事件。如果应用程序在未通知 LiveKit 的情况下关闭,则将继续显示参与者在 Room 中 15 秒。Swift上,当应用程序退出时,会自动调用 。客户端通过 API 向房间中的任何参与者发布任意数据消息。房间数据通过 WebRTC 数据通道发布到SFU;LiveKit 服务器会将该数据转发给聊天室中

2024-09-05 19:25:59 1483

原创 CompletableFuture.allOf().get()引起的线程池死锁

可以同步等待一组异步请求都返回结果后,再往下执行。voidCompletableFuture.get()会同步等待所有结果返回,并且不会超时。就因为没有设置超时时间,造成了死锁的发生。处理逻辑是:异步执行父任务父任务里包含多个子任务为了异步执行任务,所以放到线程池THREAD_POOL里。然后,任务里包含多个子任务,为了降低执行时间,把子任务做成了并发执行,使用了CompletableFuture.allOf(completableFutures).get()方法。

2024-08-20 18:35:45 524

原创 快速体验微软TTS服务

微软的语音合成服务(TTS)拥有500多种高品质的音色,并且在全球都有节点可以接入,在国内访问延迟可以控制在毫秒级。下面介绍在不需要编码的情况下,如何快速体验微软TTS的效果。

2024-08-20 13:40:33 1460

原创 微软TTS延迟因素分析

微软合成语音的过程中受多方面因素影响,具体每个因素有多大的影响,下面通过具体的测试,给出结论。

2024-08-16 16:25:43 854

原创 Redis 底层数据结构

是列表和哈希表底层的实现之一,当只包含数字和短的字符串时,使用这个结构。由压缩列表和节点构成。压缩链表包含字节大小、尾指针偏移量、节点个数、节点列表、结束标识。编码类型包括int16、int32、int64,元素数组里的类型和编码类型相同。是有序集合的底层实现之一,由跳跃表和跳跃表节点组成。当新元素比元素数组里存放的类型比大时,会进行类型升级,重新分配空间和排序。跳跃表和平衡数的区别是,跳跃表查询复杂度平均跟平衡树一样是logn,最差是n²,但是它的实现很简单。上个节点的长度是动态的,分为1字节和5字节。

2024-07-09 09:00:39 469

原创 如何构建智能聊天系统

聊天分为听、思考、读,简单的通过ASR、LLM、TTS三类模型的组合可以实现,最近openai推出支持多模态的GPT-4o模型,可以把三个模型真正融合成在一起。现在市面上的模型百花齐放,各有所长。要实现可落地的方案,需要结合业务,验证模型效果,同时也要考虑方案的可行性,有些模型在国内能用,有些在国内不能用。

2024-07-03 13:08:11 939

原创 大语言模型测评工具-ChatHub和ChatAll

ChatHub和ChatAll都是all-in-one的方式,集成了很多大语言模型,让我们同时和多个模型对话。

2024-07-03 13:02:07 624

原创 Spring Gateway转发websocket原理

Spring Cloud Gateway简称Spring Gateway,它可以转发请求到后端微服务。Spring Gateway除了转发HTTP请求,也支持websocket请求。我们看下它是怎么实现的吧。

2024-06-22 23:29:51 1522

原创 主流Ai Agent平台分享

CozeDifyAutoGptGptsLLM是大语音模类似大脑,能理解用户说的话,做一些回复。但是它无法执行具体的action。Ai Agent定义是智能体,它基于LLM这个大脑,去完成大脑发出的指令。所以,从形式上Agent像是一个工作流,能完成一连串的任务。Agent会组合LLM、规划(Planning)、记忆(Memory)、工具(Tool Use)来完成一个具体的任务。规划(Planning)不同Agent在形式上会有所区别,Coze和Dify是通过可视化的方式,由用户手工组合不同工具。AutoGP

2024-06-21 09:25:00 1402

原创 WebScoket scope类型

实例,并将该实例存储在WebSocket会话属性中。随后返回相同的实例,直到会话结束。WebSocket 作用域的 bean 调用了所有 Spring 生命周期方法,如前面的示例所示。这些通常是单例的,并且比任何个别的WebSocket会话的生命周期都长。每个 WebSocket 会话都有一个属性map。作用域中声明一个Spring管理的bean。你可以将WebSocket作用域的beans注入到控制器和注册在。与任何自定义作用域一样,Spring在第一次从控制器访问时初始化一个新的。

2024-06-05 20:02:38 289

原创 class结构之MethodParameters

u1代表1个字节,u2代表2个字节,一次类推。attribute_name_index是指向常量池里CONSTANT_Utf8_info类型的索引值,对应值是MethodParametersattribute_lenght代表属性值占用的长度parameters_count代表参数parameters的个数parameter.name_index是指向常量池里CONSTANT_Utf8_info类型的索引值,也就是参数名。

2024-06-05 09:33:40 416

原创 Spring STOMP-STOMP客户端

这在使用外部代理时可能会带来挑战,因为带有非代理destination 的消息代表活动,但实际并未转发到代理。进行性能测试以模拟同一台计算机上的数千个客户端时,请考虑关闭心跳,因为每个连接都会安排自己的心跳任务,并且对于在同一台计算机上运行的大量客户端而言,这并未进行优化。,并可以自定义心跳间隔(默认情况下,写入不活动为 10 秒,这会导致发送心跳;,确保即使只发送带有非代理destination 的消息,心跳也会被转发到代理。标头,服务器在处理完发送或订阅后,会响应RECEIPT帧。

2024-05-19 15:16:27 422

原创 STOMP协议1.2

STOMP 是一个简单的可互操作协议,设计用于异步消息传递,通过中介服务器在客户端之间进行。它定义了客户端和服务器之间传递消息的基于文本的线路格式。STOMP 已经活跃使用多年,并且被许多消息代理和客户端库支持。本规范定义了 STOMP 1.2 协议,并且是 STOMP 1.1 的更新。请将反馈发送至邮件列表。

2024-05-19 15:15:30 983

原创 Spring STOMP-拦截器

DISCONNECT消息可能来自客户端,也可能在WebSocket会话关闭时自动生成。在某些情况下,拦截器可能会对每个会话多次拦截此消息。组件应对多个断开事件保持幂等。为 STOMP 连接的生命周期提供通知,但并非针对每个客户端消息。来拦截处理链任何部分的任何消息。的子接口,并在处理消息的线程中提供回调。对于发送到通道的每条消息都会调用一次,但。在订阅来自通道的消息的每个。请注意,如前文所述的。

2024-05-16 19:24:41 590

原创 Spring STOMP-事件

当你使用外部代理时,如果代理暂时不可用,STOMP“代理中继”会自动重连“系统”连接。然而,客户端连接不会自动重连。假设心跳已启用,客户端通常会在10秒内注意到代理没有响应。客户端需要实现自己的重连逻辑。事件被发布,可以通过实现Spring的。

2024-05-16 19:24:11 461

原创 Spring STOMP-消息的顺序

支持,消息在不同的线程中被处理,客户端收到的结果的顺序可能与发布顺序不一样。,从而保证发布顺序。请注意,这会产生很小的性能开销,你应该在需要时才启用它。支持,消息在不同的线程中被处理,处理的顺序可能与它们被接收的确切顺序不匹配。,并从此处写入 WebSocket 会话。同样的原则也适用于客户端发送的消息,这些消息被发送到。设置该标志后,同一客户端会话中的消息逐一发布到。,然后根据它们的目的地前缀进行处理。要启用有序发布,可以如下设置。要启用有序发布,可以如下设置。来自代理的消息会发布到。

2024-05-15 20:58:58 357

原创 Spring STOMP-用户的目的地

这使得应用程序中的任何组件都可以发送针对特定用户的消息,而无需知道除用户名和通用destination之外的任何信息。如果用户有多个会话,则默认情况下,订阅给定destination的所有会话都会成为目标。这提供了订阅通用命名destination的便利,同时确保与其他订阅相同目的地的用户没有冲突,以便每个用户都可以接收到独特的股票位置更新。当你将用户目标与外部消息代理一起使用时,应检查代理文档了解如何管理不活动的队列,以便在用户会话结束后,删除所有唯一的用户队列。为前缀的destination。

2024-05-15 20:58:18 476

原创 Spring STOMP-权限

每个基于 WebSocket 的 STOMP 消息会话都以 HTTP 请求开始。这可以是升级到WebSocket的请求(即WebSocket握手),或者在SockJS回退的情况下,可以是一系列的SockJS HTTP传输请求。许多Web应用程序已经设置了认证和授权以保护HTTP请求的安全。通常情况下,用户通过Spring Security使用某种机制(如登录页面、HTTP基本认证或其它方式)进行认证。认证用户的安全上下文被保存在HTTP会话中,并与同一基于cookie的会话中的后续请求关联。

2024-05-14 21:48:10 1135

原创 Spring STOMP-使用点作为分隔符

在前面的示例中,我们没有更改“broker relay”上的前缀,因为这些完全取决于外部消息代理。请参阅你使用的消息代理的STOMP文档页面,了解它支持哪些目的地头的约定。这是Web应用程序中的一个良好惯例,并且与HTTP URL类似。然而,如果你更习惯于消息传递的惯例,你可以切换到使用点(,因此,如果你切换了分隔符,这个变更也适用于代理以及代理将消息中的destination与订阅中的模式进行匹配的方式。以下示例展示了用XML进行配置的方法,和java配置方式的效果一样。注解的方法时,它们会与。

2024-05-14 21:46:21 210

原创 Spring STOMP-连接到消息代理

默认情况下,STOMP代理中继始终保持连接,并在连接丢失时根据需要重新连接到相同的主机和端口。如果你希望提供多个地址,则在每次尝试连接时,你可以配置一个地址提供者,而不是固定的主机和端口。如果与代理的连接丢失,代理中继会继续尝试重新连接,每5秒一次,直到成功。STOMP代理中继还为每个连接的WebSocket客户端创建一个单独的TCP连接。来接收,当到消息代理的“系统”连接丢失和重新建立时的通知。标头,这可能会很有用(例如,在云环境中,建立TCP连接的实际主机与提供基于云的STOMP服务的主机不同)。

2024-05-13 21:17:34 395

原创 Spring STOMP-消息代理

内置的简单消息代理会处理来自客户端的订阅请求,将请求消息存储在内存中,并广播消息给匹配destination的连接客户端。代理支持路径式destination,包括订阅Ant风格的destinations模式。应用程序也可以使用点分隔(而不是斜线分隔)的destinations。见点作为章节。如果配置了任务调度器,简单代理就能支持检测。要配置调度器,你可以声明自己的bean,并通过设置上它。或者,你可以使用内置的WebSocket配置中自动声明的那个,但是你需要@Lazy。

2024-05-13 21:16:55 571

原创 Spring STOMP-发送消息

然而,如果存在另一个相同类型的bean,你也可以通过它的名称(brokerMessagingTemplate)来限定它。如果你想要从应用程序的任何地方向连接的客户端发送消息,要怎么做?任何应用程序组件都可以向。并使用它来发送消息。要这样做,最简单方法是注入一个。

2024-05-13 21:14:32 175

原创 Spring STOMP-带注解的控制器

应用程序可以使用带注解的类来处理来自客户端的消息。这些类可以声明带和注释注解的方法,能处理对应destination的消息。注解支持方法和类级别。在类级别,的配置会在所有方法上共享。默认情况下,映射值是Ant风格的路径模式(例如/thing*/thing/**),也支持模板变量(例如,这些值可以通过带注解的方法参数引用。应用程序也可以将destination的映射格式切换到点分隔的形式,如中解释的一样。

2024-05-12 21:45:35 1011

原创 Spring STOMP-消息处理流程

前面两幅图的主要区别是,第二幅图使用了“broker relay”,通过TCP链接将消息发送到外部的STOMP代理,并将消息从代理发送到订阅的客户端。同一个controller也可以对HTTP请求做出相同的响应,因此客户端可以执行一个HTTP POST请求,处理请求的。一旦STOMP的接口被公布,Spring应用程序就成为连接客户端的STOMP代理。注解的程序,在处理客户端发的STOMP消息后,可以通过。方法可以向消息代理发送消息,然后广播给订阅的客户端。开头的消息可能会直接路由到消息代理。

2024-05-12 17:47:18 846

原创 Spring STOMP-WebSocket传输消息

对于Jakarta WebSocket服务器,在项目配置中添加一个。对于Jetty WebSocket服务器,如下这个例子自定义了。本节介绍怎么配置底层的WebSocket服务器的消息传输。例如,请参阅WebSocket部分下的。

2024-05-12 00:23:08 324

原创 Spring STOMP-开启STOMP

它们只是一种惯例,用于区分发布-订阅与点对点消息传递(即,许多订阅者与一个消费者)。当你使用外部代理时,请查看相应代理的STOMP介绍页面,去了解它支持STOMP哪种类型的destinations和前缀。通过Spring框架的spring-messaging和spring-websocket模块,提供了对WebSocket上STOMP的支持。即使这样做了,它们也会在服务器端被忽略(或者更确切地说,被覆盖)。或者,如果您通过SockJS连接,您可以在服务器端使用。,并在JavaScript端,按照。

2024-05-12 00:13:26 389

原创 Spring STOMP-好处

使用STOMP作为子协议,可以让Spring框架和Spring Security提供比直接使用原始WebSockets更丰富的编程模型。类似HTTP与原始TCP的比较,以及HTTP协议是如何让Spring MVC和其他Web框架拥有丰富的功能。

2024-05-11 23:56:33 231

原创 Spring STOMP-协议概述

在实际广播消息的场景,你也能在Spring里配置一个专业的STOMP消息代理(例如:RabbitMQ,ActiveMQ等)。在这种情况下,Spring维护到代理的TCP连接,将消息中继(转发来自客户端的STOMP消息)给代理,并将来自代理的消息下发给连接着的WebSocket客户端。因此,Spring web应用程序可以依赖统一的基于HTTP的安全机制、通用的验证和熟悉的编程模型来处理消息。服务器所有发送的消息都必须是对特定的客户端订阅的响应,并且服务端发送消息的。消息头必须和客户端订阅消息的。

2024-04-27 14:22:50 405

原创 SSE协议介绍

id字段id用于表示Event的序号,客户端通过序号实现断线重连功能。需要重连的时候,客户端在HTTP的header里加一个Last-Event-ID字段,把最后接收到的id传给服务端。服务端实现了重连功能,就能继续传Last-Event-ID之后的消息给客户端。event字段event表示自定义事件类型,客户端通过该字段区分不同消息。id:2data:你的data:名字叫什么?data字段data表示返回的业务数据,如果数据很长可以分成多行返回。id:1data:你data:好,retry字段。

2024-03-13 20:41:07 2297

原创 解决JVM进程被系统杀掉问题

遇到问题的时候,通过dmesg命令确定进程是被系统kill。然后,用 -XX:HeapDumpPath命令拿到堆信息。最后,通过MAT工具分析内存泄露的地方。

2024-03-13 20:40:11 1199

原创 Spring mvc原理之注册DispatcherServlet

spring boot的基础是tomcat,就要遵循tomcat的servlet规范。它通过ServletContextInitializer实现了Servlet的自动注册机制;用DispatcherServlet代理所有请求,内部实现了请求的路由、类型转换等。将开发者和tomcat解耦,也方便框架去替换不同的web容器。

2024-01-24 18:47:50 1225

原创 jasypt集成spring-boot原理解析

jasypt通过代理了所有的PropertySource,在获取属性之前,对属性进行解密。是PropertySource的包装类缓存了解密结果是的包装类先解析Spring的占位符实现了延迟加载对象是PBE加密机通过池化提升并发度。

2024-01-22 20:49:35 2505

原创 Mysql给json加索引

json列能添加多值索引,提高了json的查询性能。同时因为索引要指定列的类型,索引列就不能使用任意类型,这会失去一部分schemaless的能力。需要注意的是,使用cast函数添加索引时,要选择合适type,不然会出现类型转换失败的异常。

2024-01-22 14:32:00 2776

原创 SpringBoot升级到2.7.18后不兼容的地方

最近为了给kafka加性能指标采集功能,调研后发现spring-kafka在2.3版本之后就自带了Micrometer指标采集功能。但是当前项目的spring-boot版本是2.0.2.RELEASE,对应的spring-kafka版本是2.1.6.RELEASE,所以准备将spring-boot版本升级到2.7.18,这是2.x系列的最高版本,对应的spring-kafka版本是2.8.11。

2024-01-14 14:46:41 5342 3

原创 Innodb执行insert造成死锁的问题

起因是线上报了一个错误信息,Deadlock found when trying to get lock;try restarting transaction,这是Mysql检测到死锁后,自动回滚了事务引发的异常。spring框架里打印了异常堆栈,所以很快就定位到哪一行代码出了问题。看了代码逻辑,只有insert的时候会加一个行锁,死锁要有两个锁被多个线程账户等待,才会发生。就算有并发的情况,同时插入两条一样的记录,第二个事务也是处于等待锁的状态,等待锁超时后就报获取锁超时,也不会发生死锁。

2023-12-30 23:39:21 620

原创 处理读写分离延迟

要判断主从严格一致的成本是很高的,用到GTID来判断主从延迟,对代码的侵入性很高,而且要额外的查询GTID和判断GTID是否同步,性能也会受到影响。如果业务场景对一致性要求很高,为了简化编程,还不如直接查主库。如果对一致性要求不高,直接读从库,或者等待1秒也是不错的方式。

2023-12-20 23:04:46 554

原创 读写分离之同步延迟测试

读写分离是快速提高数据库性能的手段,主库只负责写入,从库负责查询。但在性能得到提升的同时,编程的复杂度就会提升。由其碰到主从同步延迟的情况,在数据写入后,在从库无法读取到最新数据,会对业务逻辑造成很大的影响。那么,我们如何发现主从延迟对业务有什么延续呢,那就需要人为的制造延迟,将问题暴露出来。

2023-12-18 22:39:00 791

sentinel-dashboard-nacos.jar

sentinel nacos版后台,技术方案详情见博文:https://blog.csdn.net/xsgnzb/article/details/134338661

2023-11-10

UNIX超级工具

高清 UNIX超级工具! 高清 UNIX超级工具! 高清 UNIX超级工具! 高清 UNIX超级工具! 高清 UNIX超级工具!

2018-03-23

Net_Socket

Net_Socket-1.0.14.tgz

2015-01-16

Net_SMTP-1.6.2.tgz

Net_SMTP-1.6.2.tgz

2015-01-16

go-pear.phar

go-pear.phar

2015-01-16

PHPMailer_v5.1.zip

PHPMailer

2015-01-16

mmseg4j1.9

mmseg4j-1.9.1.zip

2014-08-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除