- 博客(82)
- 资源 (4)
- 收藏
- 关注
原创 做 Agent 时如何提高 Prompt Cache 命中率
Prompt Cache 复用模型输入前缀的 KV 状态,而非答案。提高命中需保持系统指令、工具定义、历史消息等前缀稳定,动态内容(时间戳、请求ID)后置;多轮对话只追加不重写。可设置稳定的 prompt_cache_key 分组路由,避免随机 key;
2026-09-01 14:18:12
256
原创 认识vLLM和SGLang
两者都支持 OpenAI-compatible API,但真正选型要基于自己的模型、GPU、上下文长度、并发和请求模式做压测。官方文档列出的 OpenAI-compatible API 包括 Chat Completions、Completions、Responses、Embeddings、音频转写/翻译等,具体能力取决于不同模型。第二,KV Cache 非常吃显存。它的目标不是训练模型,而是把 Qwen、DeepSeek、GLM 等开源模型高效地跑起来,并提供类似 OpenAI 的 API 服务。
2026-08-21 15:47:45
540
原创 Flyway!你AI开发Java项目时不错的数据库版本管理工具
摘要:本文介绍了Flyway作为Java项目中数据库版本管理工具的重要性,它能有效解决数据库变更失控问题。文章详细讲解了Flyway的核心工作原理,包括通过flyway_schema_history表记录迁移历史,自动执行未应用的脚本。针对Spring Boot项目,提供了不同版本的依赖配置建议(3.x使用flyway-core+专用模块,4.x可用spring-boot-starter-flyway),并给出完整的Maven依赖示例和目录结构说明(SQL脚本默认存放于resources/db/migrat
2026-07-20 16:41:07
449
原创 OpenSEO 上手:把 SEO 工作流放到自己能控制的地方
OpenSEO是一款开源可自托管的SEO工作台,提供关键词研究、排名追踪、竞争对手分析等工作流。与Semrush等SaaS不同,它需要自部署并接入DataForSEO API(需付费)。支持Docker快速体验和本地开发,暴露MCP接口方便AI调用。适合希望自主控制SEO流程的开发者,但需注意数据成本、访问安全等边界问题。核心价值在于将SEO工作流放入可控环境,而非提供免费数据源。
2026-07-20 16:23:34
233
原创 AI 回复到 99% 突然断了,怎么把它接回来?
文章摘要 当AI回复在99%时意外中断,如何无缝续写?常见场景如长报告生成时连接断开,简单的重试会导致内容丢失或结构混乱。文章分析了中断的多种原因(网络断开、进程重启、模型超时、长度限制等),并提出了分层恢复方案: 将生成任务与浏览器连接解耦,建立独立任务系统,通过事件日志实现断点续传 浏览器断线时按事件序号精确重放,避免重复内容 模型中断时启动新推理,通过智能提示词和重叠检测实现语义续写 使用任务状态机(queued/generating/interrupted等)和尝试计数(attempt)确保操作幂等
2026-07-15 17:33:16
515
原创 Nacos连接MySQL异常?DataGrip竟成救星
摘要: Nacos 2.1.1 连接 MySQL 8 时出现"No DataSource set"错误,但用 DataGrip 连接一次后就能恢复正常。问题根源在于 MySQL 8 默认的 caching_sha2_password 认证机制需要 RSA 公钥交换,而 Nacos 的 JDBC 连接缺少 allowPublicKeyRetrieval=true 参数。DataGrip 通过首次认证后,MySQL 建立了认证缓存,使得后续连接得以成功。解决方案是在 Nacos 的 JDBC URL 中添加 a
2026-07-15 11:15:34
247
原创 Agent2Agent协议你怎么理解?
如果只用一句话来概括:MCP 解决的是 Agent 怎么调用工具,A2A 解决的是 Agent 怎么和另一个 Agent 协作。
2026-03-16 16:50:18
770
原创 MultiAgent系统的一些开发方案
摘要:MultiAgent系统是由多个专门化的Agent协作完成复杂任务的系统架构,适用于工具过多、上下文过大或需要不同专长的场景。主要分为网络型、监督型和分层型架构,运作模式包括工具调用和任务交接两种。设计时需明确Agent职责、流程控制、上下文管理等。示例代码展示了监督型架构中主管Agent调用数学和知识解释两个子Agent的工具调用模式,实现了模块化协作和流式响应功能。该系统提高了任务处理的专业性和可维护性。(150字)
2025-11-10 18:15:01
768
原创 一个简单对话的Agent也有疑难点
本文探讨了构建可运行智能对话Agent的两个关键问题。意图识别是首要难点,需根据不同场景在通用与定制间取得平衡,小规模可直接用大模型判断,大规模需结合语义过滤。多轮对话需解决状态完整性问题,建议使用结构化状态存储或对话记忆框架来跟踪用户信息。此外,应合理划分AI与代码的职责,用模型处理模糊推理,用代码确保边界约束,尤其在工具调用阶段需验证参数完整性。这些方法能有效避免对话混乱,提升Agent的实用性和稳定性。
2025-11-07 16:36:21
623
原创 提示词user、system、assistant如何正确应用
介绍了对话系统中的三种核心角色:system(系统角色,定义模型身份和规则)、user(用户角色,提出请求)和assistant(助手角色,生成回答)。通过结构化对话历史,模型会综合这些角色信息生成响应。文章还对比了不同框架中的角色实现方式,并提供了五种实用场景示例,包括基础问答、示例教学、多步推理、多角色对话和格式控制,展示了如何通过角色分工有效引导模型输出。最后强调system指令具有最高优先级,是控制模型行为的关键。
2025-10-27 11:05:42
1387
原创 坤哥看了都能懂的MCP和Function Calling异同
MCP与Function Calling对比分析 本文通过咖啡点单场景形象对比了MCP与Function Calling的异同。Function Calling如同直接操作咖啡机,需预先定义工具集,模型只能调用固定函数;MCP则像拥有万能助理,能动态发现和协调多种服务。关键区别在于:Function Calling在限定工具集内执行,MCP支持动态扩展服务。两者都能处理多工具场景,但MCP更注重服务发现和协议通信。文章还详细列举了两者的调用流程步骤,说明MCP具有更好的灵活性和可扩展性,而Function
2025-09-30 21:23:52
861
原创 【SpringBoot】@Scheduled是静态配置,是我想改时间,但又不想引入其他组件,还有什么方案么?
本文介绍了Spring中两种定时任务实现方式:静态的@Scheduled注解和动态的TaskScheduler。重点展示了动态任务的实现方案,包括配置线程池任务调度器、任务管理类封装核心功能(添加/删除/更新任务)、业务方法类示例以及对外暴露的REST接口。通过Map存储任务状态,支持运行时动态调整任务配置,并提供了调试示例(如每5秒执行邮件发送任务)。该方案比静态注解更灵活,适用于需要动态管理定时任务的场景。
2025-09-29 15:49:32
263
原创 为什么需要优化提示词
摘要: 提示词优化对大模型生成结果至关重要,因为模型基于概率生成内容,模糊的提示词会导致泛化输出。优化技巧包括:1)详细描述需求,减少模型猜测;2)添加系统消息(如角色定义)引导风格;3)明确技能描述避免发散;4)设定约束(如格式、禁忌内容)保证输出一致性;5)结构化格式(如Markdown/XML)提升可读性。例如,通过角色定义、技能说明、约束条件和示例模板,可精准生成李白风格的诗歌并以JSON格式输出。优化后的提示词能显著提升结果的针对性和实用性。
2025-09-29 15:10:08
620
原创 Transformer简易笔记
Transformer是一种基于自注意力机制的神经网络,分为编码器和解码器两部分。编码器通过词嵌入、位置编码和多头自注意力机制理解输入序列,再经过前馈网络增强表达能力,最后通过残差连接和层归一化输出抽象表示。解码器采用带遮挡的自注意力以避免信息泄露,并通过交叉注意力整合编码器输出,最终生成目标序列。输出层通过线性变换和Softmax预测下一个词的概率分布。Transformer通过堆叠多层结构实现高效的序列建模和生成。
2025-09-22 17:04:05
583
原创 这个所谓的 RAPTOR 是怎么优化 RAG 的?
RAPTOR优化RAG的核心在于递归构建摘要树结构。它将文档分块后,通过聚类和摘要生成多层抽象节点,形成树状索引。检索时不仅匹配原始分块,还会沿树结构展开相关上下文,从而获取更全面的信息覆盖。相比普通RAG仅检索原始分块,RAPTOR能通过摘要节点捕捉宏观关联,提升长文档和多步推理的表现,但构建成本较高,需进行聚类、摘要和多层embedding处理。
2025-08-15 10:56:46
553
原创 【Docker】docker-compose中的nginx为何突然访问不到服务了?
摘要:在使用docker-compose部署Nginx和服务时,当服务重建后IP变化会导致Nginx无法访问。原因是Nginx默认只解析服务名一次并缓存DNS结果,而Docker重建服务可能分配新IP。复现方法:先停止服务,用临时容器占用原IP,再重建服务。解决方案是修改nginx.conf,添加resolver 127.0.0.11 valid=5s设置动态DNS解析,通过变量$backend触发每次请求前的DNS查询。这解决了Nginx缓存旧IP导致的服务不可访问问题。
2025-06-20 14:57:46
660
原创 【JAVA】中文我该怎么排序?
Java默认的字符串排序基于Unicode编码,无法正确处理中文拼音顺序。通过Collator类,可以按拼音顺序对中文字符串进行排序,并支持升序和降序排列。
2025-05-21 11:13:57
1070
原创 【JAVA】常用的JDK8、JDK17 以及 JDK21 的主要新特性和演进过程
JDK8、JDK17 以及 JDK21 的主要新特性和演进过程
2025-04-10 17:04:37
1500
原创 【SpringBoot】springboot数据使用多线程批量入数据库
Spring实现事务的原理是通过ThreadLocal把数据库连接绑定到当前线程中,同一个事务中数据库操作使用同一个jdbc connection,新开启的线程获取不到当前jdbc connection。可见时间从180秒,缩短到了28秒,但是@Transactional对于多线程是控制不了所有的事务的。可见5个线程都报错了,但是去查询数据库,却可以查询到5000条数据,这是不应该出现的情况。分别放开子线程报错和主线程报错,会发现事务都可以正常回滚,达到了预期的效果。耗时时间:87217ms。
2023-02-02 17:09:32
6728
5
原创 【JAVA】一个方法中多个线程new Thread(....).run()会发生啥呢
根据上面说的,直接调用run方法,效果其实就是普通代码块,并没有以多线程的方式执行,所以输出 A B。A线程sleep的时间比B长,所以输出结果是 B A。
2023-01-30 16:23:02
1225
原创 【SpringBoot】FilterRegistrationBean一次只能注册一个Filter,那在Filter个数不确定的情况下如何注册呢,那便是需要手动注册过滤器
1. 首先编写程序时,或多或少会存在几个固定的Filter,那么第一步就是为确定的那几个Filter指定好顺序。(通常情况下的使用场景是:你要将你现在编写的项目打包成jar给别的项目使用)2. 其次程序确定的几个Filter已经编写好了,那么需要将它们和不确定的那几个放在一起进行重新排序。3. 将排好序的Filter进行注册。
2023-01-16 18:48:06
1649
原创 【SpringBoot】在一个@Bean方法内,this调用同一个类的@Bean方法会有什么效果呢?
此时配置类会被CGLIB增强(生成代理对象),放进IoC容器内的是代理,方法相互调用能够保证是同一个实例,都指向IoC内的那个单例,可以支持通过常规Java调用相同类的@Bean方法而保证是容器内的Bean,但是运行时会给该类生成一个CGLIB子类放进容器,有一定的性能、时间开销。模式中的Bean,不支持Bean间的相互调用,如果相互调用,那么将会被视为标准的Java方法调用,Spring不会通过。方法,甚至只是在一个非常普通的类中声明的Bean方法,都被认为是Lite版的配置类。
2023-01-05 10:33:54
1040
3
原创 【JAVA】我一定要重写equals()和hashCode()方法吗?
通常不重写上述两个方法,一个类大致是这样的可见,我们给一个对象设置的每个属性都相同,期望就是,但是此时的结果并不尽人意,那么此时要想实现需求,就需要去重写方法,我们在上述类中添加下面这段代码,重写其方法。代码还是比较简单的,我们判断这两个对象是否一样,那就是要去判断他们的每个值是不是一样的。此时可以看到,比较返回true了,这已经达到了我们的预期结果了,好像不重写也没什么关系,确实,如果你的对象仅仅是这么使用的,不需要像方法中后半段一样放进集合进行操作,那重不重写对你来说问题不大。
2022-11-07 09:48:22
329
原创 【JAVA】给线程的interrupt()方法使用举个栗子
上面这段代码就是,interrupt()的基本用法,子线程TestThread会一直判断当前线程有没有被标记为可以中断了,直到检查到被标记了,while循环结束,子线程任务结束。
2022-08-05 17:12:35
348
原创 【Spring】@Transactional常用参数使用示例、以及常见的一些坑
当spring隔离级别和数据库隔离级别不一样时,spring的优先。
2022-08-03 22:45:46
3264
5
原创 【SpringBoot】在A类上标注@Component和@ConditionalOnMissingBean({A.class})两个注解,导致bean注册失败
我有一个类名为,我在其上加上注解和期望其在没有这个Bean的时候注册一个Bean,但是得到的结果却是,容器中并不存在这个Bean。}System.out.println(beanDefinitionName+"存在");}}}}那么此时,如果容器中存在该bean,springboot程序启动时就会如下图但是,实际情况是只存在@Component注解时会输出,一旦加上使用了就会不存在。......
2022-07-27 22:14:49
1843
2
原创 【SpringBoot】异步执行,设置某些异步任务优先执行
前提: @Async 注解可以实现异步功能,但是如果想让其中一些异步任务先于一些异步任务执行,那么这个注解就实现不了了。参考大神文章:这篇文章,需要大显神通解决思路:为使用这里的配置基本和使用注解时配置线程池的无异,就是使用了去为在等待队列中的线程设置优先级。调试和输出结果String类型任务优先级高,List类型任务优先级低输出结果:可见List任务在最后执行完成......
2022-06-14 16:20:47
1879
1
原创 【JAVA】用二维码生成工具,取出无法联网电脑的文件内内容
背景内网环境开发,内外网不互通,想拿东西进出都得申请,有时候写代码时总结了一些帮助开发的工具类,想拿出来做点笔记方便后续的使用,但是由于内网原因,只能再敲一遍代码,这属实是很难受,由于内网仓库二维码开发工具包都有,所以就有了将文件生成二维码再手机扫码拿出文件的想法。实操(完整类在文末)所需jar包<dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</art
2022-04-27 22:46:48
946
原创 【Database】动手捣鼓一下MySQL并发问题:脏读、幻读、不可重复读
MySQL脏读、幻读、不可重复读问题演示建测试表和数据create table show_me_problem( id int auto_increment, price int null, location varchar(256) null, constraint show_me_problem_pk primary key (id))comment 'mysql并发问题演示表';insert into show_me_problem values (1,1,'第一条');i
2022-04-19 23:18:11
769
1
原创 【Linux】M1芯片MacBook上制作xxl- job镜像并在aarch64的CentOS7虚拟机上运行,并制作镜像push到Dockerhub
aarch的cnetos7上的xxl-job镜像的制作,并push上Dockerhub
2022-03-29 22:55:53
2570
6
原创 【Linux】Shell学习向一个sh文件写入内容并执行
文章目录Shell学习向一个sh文件写入内容并执行本次学习最终效果描述最终代码代码描述第一段第二段第三段知识补充上述if语法说明补充for循环补充while循环补充case语句Shell学习向一个sh文件写入内容并执行本次学习最终效果描述执行check.sh将向test.sh中写入命令并执行最终代码check.sh#!/bin/bashfile="null"#接受参数while getopts f: OPT; do case ${OPT} in f) echo "in==
2022-01-15 20:21:46
3416
原创 【Linux】设置时区、开机同步时间
设置时区开始是这样的通过命令 sudo timedatectl set-timezone 'Asia/Shanghai'设置并重启即可看到如下结果想修改成特定时间date -s "2021-12-16 10:12:12"保存设置hwclock --systohc同步时间yum install -y ntpdate后面的ntp.api.bz 如果不行就换一个ntpdate -u ntp.api.bz设置开启自动同步网络时间vi /etc/init
2021-12-19 16:15:11
1391
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅