- 博客(51)
- 资源 (1)
- 收藏
- 关注
原创 在 Java 中创建你的第一个Model Context Protocol (MCP) 服务器
我是一名有十年以上经验的Java老码农,曾经沉迷于代码的世界,也曾在传统业务系统中摸爬滚打。现在你应该能在 Claude Desktop 的界面中看到你的 MCP 服务器,以及它所提供的工具。也许是连接你的 CRM 系统的接口、通往内部知识库的网关,或者是操作企业数据的智能工具?这个公众号,记录的不是鸡汤,也不是“割韭菜”的教程,而是我一个程序员真实的思考、学习、实战经验,以及从困惑到突破的全过程。Claude 会请求使用相应的工具,从你的 MCP 服务器中检索课程信息,并将其包含在回复中。
2025-07-03 22:01:32
901
原创 在 Java 中创建你的第一个Model Context Protocol (MCP) 服务器
Model Context Protocol(MCP)是一种开放标准,用于定义 AI 模型如何与外部工具和数据源进行通信。
2025-07-01 22:29:01
1439
原创 使用最强大的AI开发工具 LangChain 构建RAG应用-第2部分构建智能体Agents
Agents(智能体)利用大型语言模型(LLM)的推理能力在执行过程中做出决策。使用智能体可以将更多的检索过程决策权交由模型处理。尽管它们的行为不像上面的 “chain(链式流程)” 那样可预测,但它们能够为了完成一个查询: 执行多轮检索步骤,或 反复优化某一次检索。
2025-06-27 22:36:41
925
原创 使用最强大的AI开发工具 LangChain 构建RAG应用-第2部分
在 RAG 教程的第 1 部分中,我们将用户输入、检索到的上下文和生成的答案作为状态(state)中的独立键(key)来表示。正如在RAG教程的查询分析部分所讲的,这让模型能够将用户的原始提问重写为更有效的搜索查询。在许多问答应用中,我们希望允许用户进行来回的对话交流,这就意味着应用程序需要某种“记忆”机制,能够记住之前的问题和回答,并在当前的推理过程中将它们加入进来。这个公众号,记录的不是鸡汤,也不是“割韭菜”的教程,而是我一个程序员真实的思考、学习、实战经验,以及从困惑到突破的全过程。
2025-06-26 21:55:49
497
原创 使用最强大的AI开发工具 LangChain 构建检索增强生成(RAG)应用-第1部分
<<接上一节查询分析(Query analysis)到目前为止,我们一直是使用用户的原始输入查询来执行检索。然而,使用模型来生成查询语句具有下面的优势。例如:除了语义搜索之外,我们还可以构建结构化的过滤条件(例如:“查找自 2020 年以来的文档”);模型可以将用户的查询重新优化成更有效的搜索查询,就算是原始查询比较复杂或包含无关内容。查询分析利用模型将用户的原始输入转换或构建为优化过的搜索查询。我们可以很容易地将查询分析步骤集成到我们的应用中。
2025-06-24 20:26:40
275
原创 使用最强大的AI开发工具 LangChain 构建构建检索增强生成(RAG)应用-第1部分
LLM(大语言模型)所赋能的最强大应用之一,就是复杂的问答(Q&A)聊天机器人。此类应用能够针对特定的源信息回答问题,背后的关键技术被称为“检索增强生成”(Retrieval Augmented Generation,简称 RAG)。:介绍 RAG 并演示最简实现。(后续章节):在此基础上扩展实现,以支持对话式交互和多步骤检索流程。本章节将演示如何基于文本数据源构建一个简单的问答应用。过程中,我们会梳理典型的问答架构。
2025-06-22 19:15:43
734
原创 使用最强大的AI开发工具 LangChain 构建多人聊天机器人
需要注意的事,我们已经在提示中添加了一个新的输入参数 language。如果你也是在技术瓶颈中思考转型、想了解 AI 如何与传统开发结合、又或仅仅想看一个普通工程师的进化之路,欢迎关注,一起探索,一起成长。这个公众号,记录的不是鸡汤,也不是“割韭菜”的教程,而是我一个程序员真实的思考、学习、实战经验,以及从困惑到突破的全过程。目前,我们所做的只是给模型加了一个简单的持久化层。将我们的聊天模型封装在一个最小化的 LangGraph 应用中,可以自动持久化消息历史,从而简化多轮对话应用的开发。
2025-06-20 19:52:44
490
原创 私有部署必看:2025年最值得使用的本地LLM工具TOP 5(2)
无论是简单的命令行操作、图形界面、网页界面,还是完整的开发者API——都能找到适配的本地解决方案。👨💻我是一名有十年以上经验的Java老码农,曾经沉迷于代码的世界,也曾在传统业务系统中摸爬滚打。📌 如果你也是在技术瓶颈中思考转型、想了解 AI 如何与传统开发结合、又或仅仅想看一个普通工程师的进化之路,欢迎关注,一起探索,一起成长。这个公众号,记录的不是鸡汤,也不是“割韭菜”的教程,而是我一个程序员真实的思考、学习、实战经验,以及从困惑到突破的全过程。需要灵活、API兼容的本地LLM部署的开发者。
2025-06-17 19:30:15
732
原创 私有部署必看:2025年最值得使用的本地LLM工具TOP 5
👨💻我是一名有十年以上经验的Java老码农,曾经沉迷于代码的世界,也曾在传统业务系统中摸爬滚打。📌 如果你也是在技术瓶颈中思考转型、想了解 AI 如何与传统开发结合、又或仅仅想看一个普通工程师的进化之路,欢迎关注,一起探索,一起成长。这个公众号,记录的不是鸡汤,也不是“割韭菜”的教程,而是我一个程序员真实的思考、学习、实战经验,以及从困惑到突破的全过程。在2025年,本地运行强大的AI语言模型以提升隐私性、响应速度和节省成本。未完待续,下一章节继续为您分析最适合本地部署的6个模型。
2025-06-17 19:28:18
1817
原创 LangChain系列之LangChain4j集成Spring Bot
将 LangChain4j 集成到 Spring Boot 中,为与语言模型的交互提供了强大且稳定的框架。通过本文介绍的步骤,你可以搭建起使用 LangChain4j 的 Spring Boot应用,初始化ChatModel,并向语言模型发送提示以获取响应。最后,将组合后的提示发送给聊天模型,并返回模型的响应结果。在配置好 Spring Boot 应用后,我们可以初始化一个 ChatModel,用于与语言模型进行交互。方法用于向聊天模型发送用户输入的提示,并返回模型的响应。方法,并将响应结果返回给客户端。
2025-06-03 21:21:13
485
1
原创 LangChain学习系列之LangChain4j介绍
LangChain4j 是一个 Java 库,旨在简化语言链模型(Language Chain Models)在 Java 应用中的集成。它提供了一个简洁的 API,用于与各种语言模型交互,使开发者能够轻松构建复杂的自然语言处理应用。LangChain4j API简化了将大型语言模型(LLMs)整合到Java应用中的过程,提供了高级抽象和辅助方法,实现与不同 LLM 的无缝对接。健壮的生态系统:属于成熟生态,拥有详尽的文档和社区支持。与 Java 集成:支持与 Java 应用的无缝集成。
2025-06-03 21:16:36
924
原创 Spring AI系列之使用 Spring AI 转录音频文件(基于OpenAI)
本文介绍了如何在 Spring AI 中使用 OpenAI 进行音频文件转录。我们详细讲解了所需的配置,并基于 OpenAI 的 Whisper 语音转文字模型实现了一个音频转录器。随后,我们对应用进行了测试,展示了提供上下文提示如何提升转录的准确性。关注我不迷路,系列化的给您提供当代程序员需要掌握的现代AI工具和框架。
2025-05-30 09:03:50
809
原创 Spring AI系列之使用 Mistral AI API 实现函数调用
利用大型语言模型(LLM),我们可以检索大量有用的信息。我们可以学习关于任何事物的许多新知识,并基于互联网上已有的数据获得答案。我们可以让它们处理输入数据并执行各种操作。但如果我们让模型调用API来准备输出呢?为此,我们可以使用函数调用(Function Calling)。函数调用使大型语言模型能够交互并操作数据,执行计算,或获取超出其固有文本能力的信息。本文将探讨函数调用是什么,以及如何利用它将大型语言模型与我们内部的业务逻辑集成。作为模型提供方,我们将使用 Mistral AI 的 API。
2025-05-28 20:39:23
840
原创 Spring AI 系列之使用 Spring AI 开发模型上下文协议(MCP)
现代网页应用越来越多地集成大型语言模型(LLMs)来构建解决方案,这些解决方案不仅限于基于常识的问答。为了增强 AI 模型的响应能力,使其更具上下文感知,我们可以将其连接到外部资源,比如搜索引擎、数据库和文件系统。然而,整合和管理多种格式和协议不同的数据源是一个挑战。由 Anthropic 提出的模型上下文协议(Model Context Protocol,简称 MCP)解决了这一整合难题,提供了一种标准化的方式,将AI驱动的应用与外部数据源连接。
2025-05-28 20:05:47
1304
原创 Spring AI 系列之使用Spring AI和Ollama运行Hugging Face模型
人工智能正在改变我们构建 Web 应用程序的方式。Hugging Face 是一个广受欢迎的平台,提供了大量开源和预训练的大语言模型(LLM)。我们可以使用 Ollama 这一开源工具,在本地机器上运行 LLM。它支持运行来自 Hugging Face 的 GGUF 格式模型。在本教程中,我们将探索如何结合HuggingFace模型、SpringAI和 Ollama使用。我们将构建一个简单的聊天机器人,使用聊天补全模型,并通过嵌入模型实现语义搜索功能。接下来,我们创建一个带有@Bean@Bean。
2025-05-27 20:08:52
1181
原创 Spring AI系列之使用 MongoDB 和 Spring AI 构建 RAG 应用
在现代开发中,掌握 AI 技术的使用正逐渐成为一项关键技能。本文将构建一个RAG 应用程序,它能够基于存储的文档回答用户的问题。我们将使用SpringAI,将应用程序与MongoDB向量数据库和大语言模型(LLM) 进行集成。
2025-05-27 20:01:30
836
原创 Spring AI 系列之一个很棒的 Spring AI 功能——Advisors
由AI驱动的应用程序已成为我们的现实。我们正在广泛地实现各种RAG应用程序、提示API,并利用大型语言模型(LLM)创建项目。借助 Spring AI,我们可以更快速地完成这些任务。,它可以为我们处理各种日常任务。Advisor 是拦截器,用于处理我们 AI 应用程序中的请求和响应。我们可以使用它们为提示处理流程设置额外的功能。例如,我们可以建立聊天记录、排除敏感词,或者为每个请求添加额外的上下文。该功能的核心组件是接口。我们通过实现这个接口,来创建一系列Advisor,它们会影响我们的请求或响应。
2025-05-26 21:11:22
1095
原创 Spring AI系列之Spring AI 集成 ChromaDB 向量数据库
在传统数据库中,我们通常依赖精确的关键词或基本的模式匹配来实现搜索功能。虽然这种方法对于简单的应用程序已经足够,但它无法真正理解自然语言查询背后的含义和上下文。向量存储解决了这一限制,它通过将数据以数值向量的形式存储,从而捕捉数据的语义。相似的词会在向量空间中靠得很近,这使得语义搜索成为可能——即使查询中没有包含确切的关键词,也能返回相关结果。在本教程中,我们将探讨如何将 ChromaDB(一款开源的向量存储库)与 Spring AI 集成使用。
2025-05-26 21:05:30
1931
2
原创 Spring AI系列之使用 Spring AI 图像识别
在本教程中,我们将探索如何使用 Spring AI 和 OpenAI 的聊天模型,从图像中提取结构化数据。OpenAI 的聊天模型可以分析上传的图像并返回相关信息。它还可以返回结构化的输出,便于将结果传递给其他应用程序以进行进一步操作。为了说明这一点,我们将创建一个 Web 服务,用于接收来自客户端的图像并将其发送给 OpenAI,以统计图像中有多少辆彩色汽车。该 Web 服务将以 JSON 格式返回每种颜色的数量。在本文中,我们学习了如何从OpenAI 聊天模型中提取结构化输出。
2025-05-25 17:15:30
1604
原创 Spring AI 系列之实现使用 Spring AI 和 PGVector 的语义搜索原创
PGVector的配置确保了向量存储的正确设置:通过初始化数据库模式(initialize-schema: true), 使向量维度与常见的嵌入尺寸保持一致(dimensions: 768),并且使用分(HNSW)索引(index-type: hnsw)来优化搜索效率,实现快速的近似最近邻搜索。与简单的语义搜索返回三个独立的图书描述不同,Ollama 会综合搜索结果中最相关的信息。在本例中,1984 是最相关的匹配项,因此 Ollama 重点提供详细的总结,而不是列出无关的书籍。
2025-05-25 14:55:20
591
原创 Spring AI 系列之用Spring AI和DeepSeek模型打造AI聊天机器人
摘要:本文介绍了如何使用Spring AI框架集成DeepSeek大语言模型构建AI聊天机器人。首先概述了DeepSeek-V3和DeepSeek-R1模型的特点,重点说明了DeepSeek-R1模型提供的思维链(CoT)功能。然后详细讲解了两种集成方式:通过OpenAI API兼容接口访问DeepSeek云服务,以及使用Ollama在本地运行模型进行开发调试,包括相关依赖配置和参数设置。最后展示了如何构建聊天机器人服务,包括实现对话记忆功能、创建自定义输出转换器解析模型响应(包含思维链和最终答案),以及定
2025-05-23 22:25:45
760
原创 Nacos源码服务端集群系列第10篇集群管理之心跳报告
目录 心跳任务(MemberInfoReportTask) 处理返回结果 接收集群节点上报请求(NacosClusterController ) 处理上报请求(ServerMemberManager)总结
2022-06-05 14:50:15
1404
原创 Nacos源码服务端集群系列第2篇gRPC 流入门
上一章节我们通过一个简单的例子入门和了解了gRPC的一元rpc,知道如何配置一个服务和请求、相应消息,并通编译工具生成java代码。以及讲解了如何创启动一个服务器,并添加我们的服务类。使用client stub 跟服务端完成服务的调用和返回。...
2022-06-05 08:01:03
1139
原创 Nacos源码服务端集群系列第1篇gRPC之初识
gRpc是最初由 Google 开发的高性能、开源的 RPC 框架,实现服务之的远程调用,屏蔽了底层的通讯、连接、序列化等技术,用户只需要专注于定义服务、实现服务、调用服务。更重要的它是语言无关的RPC框架。
2022-06-02 12:33:32
1291
原创 Nacos源码学习系列服务端第12篇心跳管理
流程图接收心跳请求public class InstanceController { ..... @PutMapping("/beat") @Secured(action = ActionTypes.WRITE) public ObjectNode beat(HttpServletRequest request) throws Exception { //设置心跳间隔时间 ObjectNode result = JacksonU
2022-06-01 07:02:01
654
原创 Nacos源码学习系列服务端第13篇udp推送与ack机制
UdpConnector 基本属性pubic class UdpConnector { //存储要发送的数据和key //创建发送任务时塞入ackmap //直到以下情况发送会从map移除 //1、收到客户端的ack 2、重试已达最大次数 3、发送出现异常 private final ConcurrentMap<String, AckEntry> ackMap; //ackkey <-> 回调对象(包括有成..
2022-05-31 19:30:23
672
原创 Nacos源码服务端系列第14篇事件中心之发布订阅者
目录事件订阅者一起回顾下常用的订阅实现类默认事件发布者uml 类图初始化事件处理事件发布总结学习目标:要了解事件订阅者和事件发布者的基本功能以及事件订阅者和发布者之间的关系。事件发布者是如何发布事件和处理事件的。事件订阅者是如何注册事件和处理事件的。事件订阅者订阅事件Event 有一个全局的序号自增属性.所有集成该类的事件类型共用该属性的值private static final AtomicLong SEQUENCE = ne...
2022-05-31 19:29:39
260
原创 Nacos源码服务端系列第15篇事件中心之共享发布者
目录DefaultSharePublisheruml 类图实现方式更优的发布者(NamingEventPublisher)总结学习目标: 了解什么是共享发布者,跟DefaultPublisher有什么区别,它有哪些实现类。DefaultSharePublisher从代码中可以看出DefaultSharePublisher 的逻辑跟上一节的DefaultPublisher 的区别和联系区别:1、DefaultPublisher 是针对Event类型 而...
2022-05-31 19:28:45
405
原创 Nacos源码服务端系列第16篇事件中心
学习目标:了解notifyCenter 跟之前的DefaultPublisher 、Subscriber、 DefaultSharedPublisher之间的关系是什么,起的作用又是什么,怎么使用,哪些场景用到的了。属性public class NotifyCenter { ..... public static int ringBufferSize; public static int shareBufferSize; private st..
2022-05-31 19:27:29
194
原创 Nacos源码学习系列服务端第11篇元数据管理之数据更新
上一篇我们讲述了元数据处理器是怎么注册到JRaftProtocol的,用户提交更新请求后,又是如果把请求提交给JraftProtocol,以及JraftProtocol是如何分发请求的。本篇,我们讲请求处理器接收到任务和是如果处理本地元数据的。元数据更新处理器@Componentpublic class InstanceMetadataProcessor extends RequestProcessor4CP { //元数据管理器统一的入口 private final ..
2022-05-28 21:45:46
1736
原创 Nacos源码学习系列服务端第10篇元数据管理之Jraft一致性更新
从控制台修改服务的元数据从控制台修改实例的元数据修改后的结果向JRaftProtocol注册元数据变更处理器服务在启动的时候通过构造函数进行初始化bean构造函数里面除了需要自动注入的属性后 还向JRaftProtocol 注册了当前对象处理器。实例和服务的处理器bean的实例化和注册过程是一样的。//实例元数据处理器@Componentpublic class InstanceMetadataProcessor extends RequestProcess
2022-05-28 19:49:23
1597
原创 Nacos源码学习系列服务端第9篇服务查询之实例过滤与阈值保护
流程图服务查询(InstanceOperatorClientImpl)public class InstanceOperatorClientImpl implements InstanceOperator { //客户端管理器 private final ClientManager clientManager; //客户端操作服务 有2种具体实现 // EphemeralClientOperationServiceImpl // Persistenc
2022-05-28 10:36:52
736
原创 Nacos源码学习系列服务端第8篇服务查询之实例查询
我们接着上篇的服务订阅部分,本篇我们继续讲解服务查询的实例列表是如果查询出来的流程图服务查询(InstanceOperatorClientImpl)public class InstanceOperatorClientImpl implements InstanceOperator { //客户端管理器 private final ClientManager clientManager; //客户端操作服务 有2种具体实现 // ...
2022-05-27 22:39:19
1133
原创 Nacos源码学习系列服务端第7篇服务查询之订阅
服务订阅入口 @GetMapping("/list") @Secured(action = ActionTypes.READ) public Object list(HttpServletRequest request) throws Exception { //获取命名空间id String namespaceId = WebUtils.optional(request, CommonParams.NAMESPACE_ID,
2022-05-27 18:10:29
570
原创 Nacos源码学习系列服务端第6篇服务下线
服务的下线相比服务的注册主要少了客户端创建及客户端的健康检查任务和客户端发布事件的功能,初次之外,服务端跟客户端的逻辑基本都是再相同的处理类里面,如果很好的理解了服务注册的流程和逻辑,服务下线的流程就很容易理解。目录流程图请求处理入口服务下线处理入口服务下线核心逻辑总结流程图请求处理入口 public String deregister(HttpServletRequest request) throws Exception { //...
2022-05-27 14:26:18
1286
原创 Nacos源码学习系列服务端第5篇服务注册服务之变更事件
接上篇我们继续讲解 服务端变更事件 和 客户端变更事件ServiceEvent.ServiceChangedEvent 和ServiceEvent.ClientChangedEventServiceChangedEventpublic class NamingSubscriberServiceV2Impl extends SmartSubscriber implements NamingSubscriberService { private static final..
2022-05-27 11:26:29
732
原创 Nacos源码学习系列服务端第4篇服务注册之注册事件
Nacos通过前面3篇的讲解我们已经见识到了事件几乎充斥再各个方法里面各种事件让人眼花缭乱,服务注册要发布ClientRegisterServiceEvent和InstanceMetadataEvent事件, 客户端初次要发布ClientChangedEvent事件,而且一个事件的处理完毕又会触发另外一个事件,同时因为事件都是基于异步的处理方式所以调试起来不方便,基于Nacos事件机制的复杂性,这里我不一上来就讲解事件机制。而是先根据几个具体的事件及处理逻辑让大家对Nacos事件有一个逐步的了解,有了一定.
2022-05-27 09:27:28
899
2
原创 Nacos源码学习系列服务端第3篇服务注册之客户端心跳检查
客户端初始化public class IpPortBasedClient extends AbstractClient { .... /** * Init client. */ public void init() { if (ephemeral) { //这里开始创建心跳检查任务并加入定时任务执行 beatCheckTask = new ClientBeatCheckTaskV2(th
2022-05-25 22:12:23
676
原创 Nacos源码学习系列服务端第2篇服务注册之客户端管理
官方对Client说明:The abstract concept of the client stored by on the server of Nacos naming module. It is used to store whichservices the client has published and subscribedThe client is bind to the ip and port users registered. It's a abstract content to ..
2022-05-25 19:16:18
591
原创 Nacos源码学习系列服务端第1篇服务注册之主流程
服务端注册会分三块讲解主流程讲解 client管理 注册过程中发布的事件服务注册流程图注册请求入口方法上的 @CanDistro 和 @Secured注解后面再作说明这里的Instance 对象的属性跟 客户端篇 的Instance 对象的属性是一样的这里部赘述@RequestMapping(UtilsAndCommons.NACOS_NAMING_CONTEXT + UtilsAndCommons.NACOS_NAMING_INSTANCE_CONTEXT).
2022-05-25 14:12:18
568
程序员群体真的需要职业导师/教练平台吗?感觉技术人对这类需求不大?
2025-05-22
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅