- 博客(156)
- 收藏
- 关注
原创 Spring AI Alibaba 多Agent协作
下面的代码基于前面的内容:下面内容分为四大块:顺序执行\并发执行\路由定义路由决策的整体框架,instruction提供具体的路由指导。
2026-05-10 15:00:26
212
原创 Spring AI Alibaba ReactAgent 使用Skill生成旅游计划
我们需要在资源目录下新建个"skills"文件夹,然后再新建个"travel-assistant",接着创建SKILL.md文件,这一套基本是通用的skill做法.这次在构建ReactAgent的时候添加了 skillHook,主要改动的代码在AgentConfig.java配置ReactAgent.下面是SKILL.md的具体内容, name需要和文件夹名称保持一致,skill规范不能错。下面接着启动服务,可以看到日志输出了加载的skill数量。下面是返回的完整旅游计划。
2026-05-09 11:06:02
248
原创 Spring AI Alibaba ReactAgent 历史对话生成摘要,防止超出大模型上下文
Redis 里存的是每一轮对话的状态快照(每轮对话都会生成新的 checkpoint),这些旧快照不会被自动删除,只会越积越多。摘要只是把多轮对话压缩成了一段文本,但对话还在继续,每一轮新的交互都会生成新的状态快照, 里面包含最新的摘要 + 新消息。使用的记忆存储方式是redis,发现下图中的key会一直增大,经过查资料得知,里面存着该会话所有的历史记录.简单说:Hook 帮你 “瘦身了当前会话的上下文”,但 Redis 里的 “历史快照档案” 还在持续堆积。多次调用接口后,触发了历史对话摘要。
2026-05-09 10:18:49
213
原创 Spring AI Alibaba ReactAgent 调用Tool 实现多轮对话
1.使用自动注入ChatModel会出现超时问题,所以上面代码改为了自己创建一个ChatModel,在application.yml里面配置了read-timeout也无法生效.3.在接着问"我有1000元的预算,帮我安排下5月10日杭州的文旅活动行程吗",输出的时间也是5月10号。1.入参sessionId是作为记忆对话唯一标识,先问下"杭州5月10日天气怎么样"", 这里可以看到输出"当天"是5月10号。4.,搜索天气工具, WeatherTool.java。3.工具类接口,Tool.java。
2026-05-07 16:14:24
317
原创 OpenSpec+Qoder 规范AI编程助手
OpenSpec 是 Fission AI 团队开源、面向 AI 编程助手的「规范驱动开发」轻量级框架与 CLI 工具,核心是 Spec First, Code Later(先定规范、再写代码),解决 AI 编程需求跑偏、上下文丢失、结果不可控的问题。接下来会涉及到文件的读写授权,可以看到tasks.md里的任务列表,每做完一个会在前面括号里打个x。然后选择AI编程工具,我使用的是Qoder,上下键控制,按空格选中或取消。等了一个时,ai编程工具开发并测试完成,我们自己在验证一下就可以了。
2026-05-07 11:22:40
800
原创 Springboot AI 创建MCP Server(SSE)
使用springboot AI实现一个伪查询天气的MCP Server,协议是SSE。配置聊天MCP工具,助手下面小锤子的图标,选择“手动”然后选择对应的mcp,大面有绿色的小勾才选是选上了。放开断点,回到CherryStudio查看聊天结果。CherryStudio 测试MCP是否生效。发送询问天气,同时再代码里打个断点。
2026-04-24 10:02:33
74
原创 Dify使用Python代码提供的MCP Server(SSE)
模拟查询天气,新增一个文件mcp_weather.py,代码里面主要有三步:初始化、列出工具、调用工具。保存之后点”授权“,下面就会出现的工具列表,如果报错就看具体的错误信息解决就行了。顶上“工具”-“MCP”,点击添加MCP服务。我这里没有做授权,需要的可以自己在代码里加。然后配置提示词和工具MCP。新建一个Agent应用。
2026-04-23 10:10:39
74
原创 Springboot AI 创建MCP Server(Stdio)
点下面的“小锤子”,不同版本之间图标可能会不同,鼠标悬浮可以看到说明,然后选择手动。使用springboot AI实现一个伪查询天气的MCP Server,协议是Stdio。tip:还有另一种测试方式,使用 MCP Inspector 需要有node.js环境。左下角设置-MCP服务-MCP服务-新增一个。参数:参数有2个,需要换行,如下代码块。2、使用CherryStudio测试MCP服务。点击保存后开启开关,如果失败了开关是无法开启的。2.4、聊天选择使用MCP服务。2.3、配置MCP服务。
2026-04-22 19:22:00
133
原创 如何提高RAG的检索准确度(数据维度)
将每个二级标题(#### 苹果)下的所有内容作为一个完整的块。2、设置重叠区:在相邻的两个块之间设置一定的重叠内容(如50-150个字符),可以有效防止关键信息在切分点被截断,保证语义的连续性。完成嵌入后需要反复测试数据的召回是否正确,并不断调整数据,数据也需要维护,如一些过期的数据需要删除,老旧的回答需要更新等等。属性键值对: 对于“成熟时间”、“种植区域”等固定属性,使用 属性名: 属性值 的格式,清晰明了。1、.txt / .md :纯文本格式,语义清晰,没有多余的格式符号,最容易被AI理解和切分。
2026-04-22 15:11:25
657
原创 Dify使用ChatFlow实现调用数据库问答
主要的流程是:用户输入问题 -> 检索知识库 -> LLM根据检索结果和问题生成sql -> 运行python执行sql -> sql结果和问题交给LLM回答。点击画布底下的“查看缓存”,左侧从下往上是flow的执行顺序,点击展开可以看到每个节点的入参和返回,方便我们调试知道哪个节点出了问题。1、新增业务知识库,里面是库表结构和描述(借样是我公司的某块业务)这个案例是测试demo!线上使用一定要注意数据安全问题!现在输入问题来测试一下。
2026-04-21 17:05:58
64
原创 docker部署web版AnythingLLM+局域网共享知识库问答
7、点击做左下角的设置,找到管理员-用户,新增一个用户,稍后需要在工作空间的设置中分配,不然这个用户看不到这个知识库,新增的时候可以选择限制用户的使用频次,这样就不怕消耗资源了(如果你用的是付费版的大模型)之前写了桌面版的AnythingLLM的安装和使用,现在写一下web版的,与桌面版的不同,web版的提供了分享知识库的功能,只需要把连接分享给局域网中的小伙伴,他们就可以使用你搭建的知识库了。5、结束后打开下面的网址,进去后创建一个账户,剩下的知识库配置就跟桌面版一样。6、建立知识库,参考桌面版教程。
2026-04-21 11:54:29
321
原创 win11系统使用DockerDesktop搭建Dify实现知识库问答
这里面的“python-requirements.txt”是管理了sandbox的python环境依赖,在这个文件里加上就可以,它会告诉sandbox启动的时候需要安装那些依赖。这里需要注意,有些人喜欢用tab键会有隐藏的字符,导致启动失败,这里用文本编辑器选择“视图”-“显示所有符号”,避免出现隐藏字符,下面是错误示范。1、安装docker,最好win11系统,不然会有很多错误,然后改下镜像源拉取速度会快点,还有镜像的存储位置防止C盘爆满。5、在当前源码的docker文件夹下调出cmd,然后执行命令。
2026-04-20 18:12:01
3234
原创 AnythingLLM知识库问答回答不到关键信息(向量化文档的一些坑)
根据这篇文档的操作搭建了“手机知识库”,问答时遇到了胡乱回答的问题,使用的是查询模式,当我询问的得到回答后,发现确实找到了我上传的txt文档,但是我点开引用的文档内容只有前半部分,导致回答我的问题变成瞎编的了。后面把文档个问题交给ai分析,才发现是文档写的就由问题,拆分后上半部分很多“荣耀 Magic7”,但是后半部分却一个没有,重新把后半部分补充了几个“荣耀 Magic7”,这个问题算是解决了。折腾半天参数都没想到是文档结构的问题。调整完后,需要重新上传文件才会生效,然后再接着测试,还是依旧胡说。
2026-04-17 16:25:27
128
原创 Ollama+AnythingLLM构建本地知识库问答+OpenAPI调用
3.1、查询工作空间(问答需要指定工作空间slug), Authorization换成自己的。”荣耀magic8和荣耀magic7的操作系统有什么不一样,还有他们的屏幕尺寸相差多少“5、配置Ollama,选择模型,聊天模式选择查询,然后更新工作空间。model就是上面配置的聊天模式,这里个之前保持一致,选择查询。sessionId就是会话id,会把之前的问答带入到上线文中。回答完成后左下角可以看到引用的文档,点击会在右边展示出来。3.2、发起问答,这里指定手机知识库的slug。
2026-04-15 10:46:00
4399
原创 QwenCode使用Skill
3、在SKILL.md里面输入一下内容并保存(skill.md的格式可以网上搜一下就行了)。settings.json: 核心配置文件(包含模型设置、API Key 等)。1、进入skill文件夹,新建一个weather-advisor文件夹。输入“cmd”,然后输入“qwen”,输入“今天天气怎么样”2、在文件夹里新建一个SKILL.md的文件。现在来执行测试一下,进入skill的目录下。配置启用skill,我的系统是win11。skills/: 你自定义的技能文件夹。按照文档直接安装完后。
2026-04-08 15:20:05
461
原创 MybatisPlus 多数据源切换@DS注解失效问题
在业务开发中使用到了多数据源,遇到了@DS注解失效问题,有两个场景使用到同一个@DS的查询方法,一个正常,另一个失效。场景一和二正常都打印了@DS中的key。
2025-12-12 17:14:08
289
原创 StarRocks优化统计分析
使用了 event_time精确过滤,但表是按 date_trunc('month', event_time)按月分区,无法利用分区裁剪,会扫描多个分区。COUNT(DISTINCT) 是计算密集型操作,尤其当 device_id 数量很大时,比如上百万个不同设备访问,性能开销非常高。这是一个高CPU、高内存、低效的操作,尤其在大规模数据下,可能消耗数秒甚至更长时间。使用 Bitmap 类型 + BITMAP_UNION_COUNT 实现高性能去重统计。1、分区字段未有效利用。
2025-08-14 17:55:56
446
原创 python代码调用三方网站获取当前网络ip
获取当前ip为了防止失败,使用了三个不同的网站进行获取ip,当前一个失败时,会通过下一个网站获取ip,每个网站的返回格式都不一样,需要单独解析;为了实现公司网路访问项目登录时免复杂校验的功能,需要获取公司网络的ip地址,但是公司没有购买固定ip,ip地址会动态变化。2、通过在公司机房允许python脚本,将获取到的ip地址通过http请求更新到项目中。2、当三个网站都获取失败后,可以使用钉钉机器人发送告警信息,方便监控(1、项目中维护一个ip白名单列表,用于请求校验ip是否在白名单中。
2025-08-13 14:39:18
6885
原创 MySQL中的缓存机制
MySQL 5.7 及更早版本提供了一个 查询缓存(Query Cache),它会 缓存 SELECT 查询的结果集。当相同的 SQL 语句再次执行时,MySQL 可以直接从缓存返回结果,而不需要重新查询磁盘,从而提高查询速度。InnoDB 存储引擎的核心缓存机制,用于 缓存表数据和索引数据,减少磁盘 I/O。它是 MySQL 最重要的缓存,直接影响性能。缓存类型MySQL 5.7 及之前MySQL 8.0作用是否推荐。
2025-08-13 11:35:40
1500
原创 钉钉群通过使用http接口发送消息
通过 @ 群机器人,将消息发送到指定外部服务,还可以将外部服务的响应结果返回到群聊会话。如果你需要在普通群(即外部群)发送消息时,你可以参考本文档操作步骤创建自定义机器人。登录钉钉客户端,选择需要添加机器人的群聊会话。(可选)是否开启 Outgoing 机制。单击编辑标识,上传机器人头像。进入群聊会话,单击右上角。,选择自定义机器人。
2025-07-30 11:31:53
637
原创 RabbitMQ使用topic Exchange实现微服务分组订阅
案例场景:用户下单后需要多个微服务(如营销、会员)分别订阅并处理订单事件,且每个微服务可能有多个集群实例,需要保证同一个微服务的集群中,只有一个实例消费到消息。使用 topic 类型的 Exchange:支持灵活的路由规则,不同微服务可通过 binding key 订阅特定事件。不同于Kafka和rocketMQ有分组消费的功能,rabbitMQ需要通过topic Exchange实现。生产者(订单服务)发布消息时,指定路由键(routing key) 为。4、消息订阅(营销服务)
2025-07-02 22:49:16
384
原创 EMQ X Broker 配置HTTP 的外部鉴权接口
在 EMQ X Broker 中可以通过配置 ACL(Access Control List,访问控制列表) 来实现。EMQ X 提供了多种 ACL 插件机制,其中最常用、也最适合企业级使用的方案是:基于 HTTP 的外部鉴权接口(
2025-06-26 22:11:24
746
原创 使用 Netty 实现 TCP 私有协议(解决粘包/拆包)
Netty 是一个高性能、异步、事件驱动的网络框架,非常适合用于构建 TCP 通信中的私有协议。相比原生 Java Socket,Netty 提供了更简洁、更高效的粘包/拆包处理机制,下面案例通过使用。如果消息长度超过 4 字节能表示的范围,可以调整为 8 字节(LengthFieldPrepender(8))。前 4 字节是长度字段(5 字节),后 5 字节是消息内容,总共发送 9 字节。2)长度字段表示的是消息内容的字节数,不包括长度字段本身。1)自动在每条消息前插入 4 字节的长度字段。
2025-06-25 21:36:49
563
原创 Elasticsearch 中实现个性化推荐搜索
商品数据存储使用存储商品的向量表示。其他字段(如标题、类别、价格)用于辅助搜索。用户画像包括兴趣标签、历史行为和嵌入向量。DSL 查询根据用户画像生成推荐查询。结合文本搜索、k-NN 搜索和布尔查询实现个性化推荐。向量化工具使用 Sentence-BERT 等模型生成商品和用户的向量。
2025-06-20 13:57:55
760
原创 StarRocks存算一体集群资源预估
个人见解:上述BE16c64g是官方基于在大型数据集上处理高度并发或复杂的查询时的配置,如果不是这种场景,对数据有效的分区过滤(表设计很重要),可以使用8g16g。2、磁盘:这个得根据业务数据来做一个计算,假设日均数据1000w,三个副本,下面写一个计算过程。跟预估结果,每台BE节点机器磁盘1TB,并且需要对BE节点磁盘做监控。安全边际:建议按 3 TB 规划,应对数据增长波动。保守估计:至少预留 2~2.5 TB 磁盘空间。
2025-04-30 11:50:55
631
原创 SSH 反向隧道访问内网服务
在内网192.168.1.157win机器的虚拟机里部署了StarRocks,虚拟机的地址是192.168.0.94,现在需要在服务器地址是120.xx.xx.xx的机器中部署一个go服务,使用go代码来连接内网192.168.0.94虚拟机里的StarRocks 9030 端口。原理:通过 SSH 的远程端口转发,将 120.xx.xx.xx 服务器的某个端口映射到内网虚拟机192.168.0.94的 9030 端口。确保 120.xx.xx.xx 的 SSH 服务允许远程端口转发。
2025-04-24 19:47:47
676
原创 3台CentOS虚拟机部署 StarRocks 1 FE+ 3 BE集群
动了三个配置:放开了storage_root_path 的注释,priority_networks修改为本机ip(注意2台机器的ip不同) ,增加了限制jvm的内存 JAVA_OPTS="-Xmx2048"放开了storage_root_path 的注释,priority_networks修改为本机ip ,增加了限制jvm的内存 JAVA_OPTS="-Xmx1024"2、下载源码 StarRocks-3.4.2-centos-amd64.tar.gz(我使用的版本 3.4.2),上传到虚拟机里。
2025-04-24 14:33:18
1748
原创 使用Ollama通过预训练模型获取句子向量(rest api方式)
到这就可以通过接口调用把句子转为向量,然后就可以在elasticsearch中使用了~接口里有2个入参,model表示模型,prompt作为句子入参。2、搜索预训练模型(all-minilm),选择合适的操作系统。3、复制下载指令并下载。1、下载Ollama。
2025-04-09 19:19:00
513
原创 Windows Anaconda使用Sentence-BERT获取句子向量
Anaconda是一个流行的Python数据科学平台,它包含了许多科学计算和数据分析的库,包括和。虽然不是必需的,但使用Anaconda可以简化环境管理和依赖安装的过程。可以从下载并安装Anaconda。为了避免不同项目之间的依赖冲突,建议为每个项目创建一个独立的虚拟环境。在虚拟环境中,通过pip安装和默认情况下,pip会从 pypi 的官方服务器下载包,这可能会因为网络问题导致速度较慢。可以切换到国内的镜像源来加速下载。
2025-04-08 20:32:37
1570
2
原创 es中分页边界数据重复问题处理方式
上述方案都可以解决翻页数据重复的问题,由于是c端查询,随着用户数量凉的增加,使用快照方式会导致服务器内存紧张,遂放弃2和3,如果在业务能够容忍新数据暂时查询不出来,可以使用1方案来解决。使用es提供的Scroll,基于初始搜索时刻的固定快照,内存较高,需维护完整的搜索上下文,需要手动管理(clear-scroll)以避免内存泄漏,适用于数据导出、批量处理。使用es提供的Point in time,提供基于创建时刻的数据快照,自动过期释放资源,,会占用内存,占用内存较低,适用于实时搜索、分页浏览。
2025-04-02 20:29:31
762
原创 es自定义ik分词器中文词库实现热更新
2.6、在es的config下面创建analysis-ik目录,{es-path}\config\analysis-ik。2.8、编辑 IKAnalyzer.cfg.xml,将web服务中的数据接口地址填进去。2.4、在es插件目录下新建ik目录,{es-path}\plugins\ik。2.7、将ik目录下config里面的文件拷贝到analysis-ik目录中。经过测试ik读取web地址的频率是每分钟一次,暂时没找到强制刷新的方法。索引字段与属性都属于静态设置,若后期变更历史数据需要重建索引才可生效。
2025-04-02 17:41:17
1041
原创 es 第28节-深入掌握集群组建与集群设置
到这里就完成了3个节点的es集群配置,由于es的弹性扩展,当我们的集群资源不足时,可以动态的添加节点,es会自动帮助我们平衡节点上的数据,利用这个自动平衡节点数据的特性,我们可以很方便的做机房迁移,只要在新机房把节点部署起来并连接上集群,待数据都分配到新节点上后,可以依次关闭老机房的节点,但是自动平衡数据也有缺点,如果单个节点上的数据过大,集群间的网络带宽可能会被打满。# 1:有很多参数调节的设置,无需在集群启动之前设置,可以在集群启动之后,依据实际需求动态调整,即刻生效。大规模无需超过100。
2025-04-01 22:23:38
1354
5
原创 Java使用Californium 实现CoAP协议交互代码案例
CoAP(Constrained Application Protocol)是一种专为资源受限设备设计的互联网协议,特别是在物联网(IoT)环境中。它旨在允许这些设备在低功耗、低带宽和不稳定的网络连接条件下进行通信。CoAP协议基于REST架构风格,类似于HTTP,但针对的是更小、更简单的设备。CoAP非常适合用于智能家居、智能城市以及其他需要大量小型传感器和执行器相互通讯的场景。由于其高效性和适应性,使得即使是资源极为有限的设备也能参与到更大的网络和服务生态系统中。
2025-03-31 09:22:23
1004
原创 记一个阿里云CDN域名配置不当引起服务鉴权失效问题
2、排查服务器代码中前置拦截器,查看是否拦截器中从cookie获取出错,或者是拦截器中的中间件出错,经过排查在结合现有的现象表明,请求不携带JWT也会使用第一个登录该域名的用户信息身份完成操作。问题现象:用户使用新域名登录后,返回的不是该用户的身份信息,不管是哪个账号,登录后返回的都是第一个使用该域名登录的用户信息,并且原先有鉴权的接口,现在通过该域名访问都不需要写在JWT凭证就能访问成功。3、开始怀疑是域名引起的问题,开始绕过域名使用ip直接访问服务器,结果发现请求正常了,确认是域名引起的。
2025-03-27 22:41:29
566
原创 es 第27节-运用Script脚本实现复杂需求
### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性,任何企图直接替代严格事务性场景的应用项目都会失败!#### 1.Elasticsearch是数据库,不是普通的Java应用程序,传统数据库需要的硬件资源同样需要,提升性能最有效的就是升级硬件。# ES的脚本类同传统数据库的UDF,可以自定义一些规则表达式,目的是满足日益复杂的应用需求。# Lucene,继承原生lucene内置能力,性能好,简洁直接,性能同比其它,最好。
2025-03-27 22:18:18
1304
原创 MQTT协议笔记
消息格式MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息协议,专为低带宽、高延迟或不可靠的网络设计,广泛应用于物联网(IoT)设备之间的通信。
2025-03-26 15:30:57
1212
原创 ES 使用geo point 查询离目标地址最近的数据
将带有经纬度坐标的省市区数据存入es中,mappings字段使用geo point类型,索引及查询dsl如下。使用mysql计算可优化的地方在于,新版本mysql提供了空间几何字段类型POINT,优化后新表结构如下。将带有经纬度坐标的省市区数据存入mysql中,使用mysql直接计算,表结构及查询sql如下。需求描述:项目中需要通过经纬度坐标查询目标地所在的行政区。解决思路有两种,使用mysql和es分别查询。计算每个点与目标点之间的距离(单位为米)。1、使用mysql进行查询。2、使用es进行查询。
2025-03-13 15:15:38
617
原创 Elasticsearch Java High Level Client [7.17] 使用
es 的 HighLevelClient存在es源代码的引用,结合springboot使用时,会存在es版本的冲突,这里记录下解决冲突和使用方式(es已经不建议使用这个了)。es 7 high Level client 主要的集成问题还是在与springboot的版本冲突,这点解决掉就可以了,官方文档里都能找到使用说明。pom依赖文件如下,在 dependencyManagement 里解决springboot引起的版本冲突-2.3 search 分页。2.4 aggs 聚合统计。2.5 新增单条数据。
2025-03-13 14:17:17
1081
原创 Elasticsearch Java API Client [8.17] 使用
下面是按照了城市维度分组,统计了每个城市下面业务类型数量、网络类型数量、sdk版本数量、平台数量、手机型号数量,以及最后一个是带条件过滤在统计的数据平均值。es8出了个新的JavaClient,相较于HighLevelClient少了对es源代码的引用,更加的轻便了,这里记录下使用方式。建议使用模版的方式创建索引,比如我下面的dsl语句规定了索引内字段的类型。有单个新增和批量新增,使用批量时最好把索引的更新频率设置一下。聚合没有太多的通用性,按照自己业务的需求写就可以。本地运行的是es 8.6.2版本。
2025-03-10 20:59:43
1547
原创 go执行java -jar 完成DSA私钥解析并签名
起因,最近使用go对接百度联盟api需要使用到DSA私钥完成签名过程,在百度提供的代码示例里面没有go代码的支持,示例中仅有php、python2和3、java的代码,网上找了半天发现go中对DSA私钥解析支持不友好,然后决定使用在java中完成签名计算过程,生成可执行jar后由外部传入参数获取签名数据。
2025-02-20 15:52:55
515
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅