- 博客(44)
- 收藏
- 关注
原创 详解JVM
摘要: JVM(Java虚拟机)是Java程序运行的核心,支持跨平台执行(“一次编译,到处运行”)。其架构分为类加载器(双亲委派机制)、运行时数据区(堆、方法区、虚拟机栈等)、执行引擎(解释器与JIT编译器)及本地接口。堆内存采用分代模型(新生代/老年代),垃圾回收(GC)通过Minor GC(新生代)和Full GC(整堆)自动管理内存,使用可达性分析标记对象,结合复制/标记-整理算法回收。调优参数如-Xmx设置堆大小,G1回收器通过分区平衡吞吐量与低延迟。常见问题包括OOM(堆/栈溢出)和GC停顿,需结
2025-06-17 17:44:07
1058
原创 LangChain之Chains(链)
摘要: Chain是LangChain框架的核心组件,通过组合LLM、记忆系统等模块实现复杂任务处理。主要特性包括可组合性(支持嵌套调用)、状态保持(通过Memory维护对话上下文)和工具集成(调用外部API)。其局限性在于线性/分支结构(DAG模型)和状态独立性,适用于无状态顺序化流程。基础链如LLMChain结合Prompt模板与LLM,支持多种调用方式(invoke、predict、apply等),示例展示了带记忆的问答系统实现。对于动态路径或循环场景,建议使用langGraph扩展功能。 (字数:1
2025-06-17 10:37:54
806
原创 LangChain框架下的RAG索引技术全景指南(3)-transformers&splitter
摘要: LangChain提供强大的文档处理工具,主要包括转换器(document_transformers)和分割器(text_splitters)。转换器支持文档去重(如EmbeddingsRedundantFilter)、元数据提取、翻译、内容精简及格式转换等功能,适用于RAG优化和多语言处理。分割器(如RecursiveCharacterTextSplitter)按语义或语法切分文本,适配模型输入限制,保留上下文连贯性。关键参数包括chunk_size和chunk_overlap,建议根据场景组合使
2025-06-16 17:08:09
750
原创 LangChain框架下的RAG索引技术全景指南(2)-Document Loaders
本文介绍了LangChain框架中的Document Loaders模块,该模块用于将不同数据源转换为标准化的Document对象,为RAG应用构建索引提供支持。Document Loaders分为文件系统类、云存储类和特殊格式类三大类型,涵盖了CSV、PDF、HTML、JSON等多种数据格式,以及AWS S3、Azure Blob等云存储服务。文章通过多个代码示例展示了DirectoryLoader、S3FileLoader、ArxivLoader等不同加载器的使用方法,包括批量加载、多线程处理、自定义映
2025-06-16 16:35:52
1050
原创 LangChain框架下的RAG索引技术全景指南(1)
LangChain构建RAG索引的关键模块包括文档加载器(Document Loaders)、文本转换器(Transformers)、分割器(Splitters)、向量嵌入(Embedding)和向量数据库(VectorStores)。文档加载器将不同格式的数据转换为标准文本;转换器进行去重、翻译等处理;分割器将长文本切分为语义连贯的片段;嵌入模型将文本映射为向量;向量数据库存储并高效检索这些向量。这些模块协同工作,构建完整的RAG系统,实现外部知识的检索与增强生成。
2025-06-16 16:29:59
843
原创 提示词Prompts(2)
摘要 本文深入探讨了LangChain中提示词模板的高级应用方法。首先介绍了PipelinePrompt的组合使用,通过模块化设计实现Prompt的灵活组装,包括多模态场景下的图像与文本结合处理。随后详细解析了聊天提示词模板的四种消息类型(System、Human、AI、Chat)及其协同工作流程,展示了如何构建结构化对话。最后讲解了MessagesPlaceholder的动态占位功能,支持运行时插入对话历史等可变内容。这些技术为开发复杂Agent系统提供了高效的提示词设计范式,显著提升开发效率与应用效果。
2025-06-13 14:10:25
973
原创 提示词Prompts(1)
摘要: 本文介绍了LangChain中提示词模板(Prompt Templates)的用法,包括基础文本模板(PromptTemplate)、对话模板(ChatPromptTemplate)、小样本模板(FewShotPromptTemplate)以及两种示例选择器(LengthBasedExampleSelector和SemanticSimilarityExampleSelector)。基础文本模板通过变量占位实现动态内容生成,对话模板支持多角色结构化对话,小样本模板提供示例引导模型生成更精准的响应。示例
2025-06-13 11:30:14
758
原创 langChain构建ChatRobot(2)—有记忆的会话系统
摘要: 本文介绍了如何实现带上下文记忆的对话系统,基于LangChain框架展示了多种记忆组件和持久化存储方案。通过ConversationBufferMemory示例演示了多轮对话上下文保持,对比不同记忆类型(滑动窗口、摘要记忆、知识图谱等)的适用场景,并介绍了Redis、PostgreSQL等持久化存储方式。最后指出在实际应用中可采用LangGraph等更灵活的技术方案。全文覆盖了从基础实现到高级扩展的完整技术方案,为构建智能对话系统提供实用参考。
2025-06-12 14:03:46
1022
原创 langChain构建ChatRobot(1)—基础对话
本文介绍了如何利用LangChain核心组件中的Chat Models构建基础聊天机器人,实现简单的问答功能。主要内容包括: Chat Model简介 - 与LLM不同,Chat Model提供结构化聊天消息接口,支持多种消息类型(HumanMessage用户输入、AIMessage AI响应、SystemMessage系统指令等) 消息对象详解 - 包括不同消息类型的适用场景和示例,如利用SystemMessage控制输出语言 基础实现 - 展示了单轮问答、批量问题处理等基本功能,通过代码示例演示如何调用
2025-06-12 10:57:04
1013
原创 初识LangChain
文章摘要: LangChain是一个开源框架,用于构建基于大语言模型(LLM)的应用程序,支持Python、JavaScript和Java生态。它通过组件化设计(如链、代理、检索)简化复杂应用开发,连接私有数据源弥补LLM局限,并集成主流模型(如GPT-4、DeepSeek)实现统一调用。核心功能包括向量存储、记忆管理、多代理协作(LangGraph)及全周期监控(LangSmith)。应用场景涵盖智能客服(多Agent协同)、金融分析(自动化报告生成)、风险管理(实时合规检测)等垂直领域,显著降低开发门槛
2025-05-26 17:23:54
792
原创 基础篇:进程与线程基础
进程是指一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。它是操作系统中运行的应用程序,是资源分配的最小单位。从用户角度看,进程是程序的一次执行过程;从操作系统角度看,进程是分配CPU、内存、时间片等资源的基本单位。
2025-01-18 08:56:53
936
原创 Nginx反向代理架构介绍
Nginx的七层反向代理架构是一种强大的服务器架构模式,它位于用户和原始服务器之间,接收用户的请求并将其转发到一个或多个后端服务器,然后将从后端服务器获取的响应返回给用户,就好像这些内容都是由代理服务器本身直接提供的一样。以下是对Nginx七层反向代理架构的详细剖析:
2025-01-16 10:49:37
1427
原创 CDN 缓存策略
CDN(Content Delivery Network,内容分发网络)缓存策略是优化CDN性能、提高用户访问速度和降低源服务器负载的关键。以下是对CDN缓存策略的分析:
2025-01-15 17:10:36
1167
原创 CDN基本概念
CDN(Content Delivery Network)即内容分发网络,其原理主要基于分布式节点技术和智能路由、负载均衡等技术,通过在全球不同地理位置部署服务器,将网站、应用、视频、音频等静态或动态资源内容分发到用户所在的最近节点,从而提高用户访问这些内容的速度和稳定性,降低网络拥塞和延迟。以下是CDN原理的详细解释:
2025-01-15 17:06:40
1072
原创 DNS介绍(5):DNS 劫持及解决方案
DNS劫持是一种常见的网络攻击手段,但通过采取上述解决方案,用户可以有效地预防和应对这种攻击。同时,网络管理员也需要加强对网络的监控和管理,及时发现和解决DNS被劫持的问题。
2025-01-15 10:23:46
1488
原创 DNS介绍(4):产品选型
DNS(Domain Name System)产品选型是一个复杂的过程,需要考虑多个因素以确保选择的DNS产品能够满足企业的具体需求。以下是对DNS产品选型分析的详细探讨:
2025-01-15 10:19:18
715
原创 DNS介绍(3):应用场景
DNS(Domain Name System,域名系统)的应用场景非常广泛,它不仅在互联网的基础架构中扮演着关键角色,还在许多特定的场景中发挥着重要作用。以下是对DNS应用场景的详细分析:
2025-01-15 10:15:53
1374
原创 DNS介绍(2):DNS协议
DNS协议主要用于完成域名地址与IP地址之间的转换。域名是易于人类记忆的字符串,而IP地址则是网络上设备的唯一标识。DNS协议通过建立一个分布式数据库,将域名映射到相应的IP地址,使得用户可以通过输入域名来访问互联网上的资源。
2025-01-15 10:09:40
411
原创 DNS介绍(1):基本概念
DNS(Domain Name System,域名系统)协议是互联网的一项核心服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。以下是对DNS协议的详细分析:
2025-01-15 10:05:00
821
原创 服务网关及技术选型对比分析
在选择服务网关技术时,需要根据企业的实际需求和场景进行综合考虑。对于使用Spring Cloud生态的企业来说,Spring Cloud Gateway是一个不错的选择;如果需要高度定制化和扩展性,可以考虑Kong;如果需要在容器化部署的微服务架构中使用,Traefik是一个值得考虑的选择;而Zuul则适合与Netflix的其他组件一起使用。此外,Nginx也是一个性能卓越、广泛使用的选择,但可能不太适合处理高级微服务方案。在实际应用中,还需要结合具体的业务场景、技术栈以及性能需求等因素进行权衡和决策。
2025-01-14 16:13:51
965
原创 【kafka】生产者
如果生产者发送消息的速度超过发送到服务器的速度,则会导致生产者空间不足,这个时候KafkaProducer的send()方法调用要么被阻塞,要么抛出异常,这个取决于参数max.block.ms的配置,此参数的默认值为60000,即60秒。增大这个参数的值会增加消息的延迟,但是同时能提升一定的吞吐量。方法的返回值是一个Future类型的对象,那么完全可以用Java语言层面的技巧来丰富应用的实现,比如使用Future中的 get(long timeout,TimeUnit unit)方法实现可超时的阻塞。
2024-09-13 15:46:39
990
2
原创 【DIP】依赖倒置原则
依赖倒置原则(The Dependency Inversion Principle, DIP)主要想告诉我们的是,如果想要设计一个灵活的系统,在源代码层次的依赖关系中就应该多引用抽象类型,而非具体实现。按照DIP原则,对于Java这类静态类型的编程语言中,在使用use、import、include这些语句时应该只引用那些包含接口、抽象类或者其他抽象类型声明的源文件,不应该引用任何具体实现。当然,在实际的软件系统构造中,肯定会在所难免地遇到依赖具体的实现。
2024-06-04 19:41:57
1119
原创 【ISP】接口隔离原则
SRP约束了类职责的内聚性,而对于另一类抽象体——“接口”的设计也有相应的内聚性要求,这就是接口隔离原则(The Interface Segregation Principle, ISP)。ISP描述的是:使用多个专门的接口比使用单一的总接口要好。也就是一个接口应当简单地代表一个角色,而不是多个角色。如果系统涉及多个角色,那么每一个角色都应该由一个特定的接口代表。ISP的目的是为不同角色提供宽窄不一的接口,以对付不同的客户端。这种办法在服务行业中称为定制服务。也就是说,我们只提供给客户端需要的方法。
2024-06-04 15:27:23
403
原创 【SRP】单一职责原则
SRP(The Single Responsibility Principle)描述了一种设计要求:“对一个类而言,应该只有一类功能相关的职责。SRP经常被误解成:每个模块都应该只做一件事。这也是一个原则,指的是底层实现原则,例如把大函数拆解成功能单一的小函数。这并不是SRP的全部。功能内聚,是指模块内所有元素共同完成一个功能,缺一不可,模块不能再被分割,对于类设计来说,单个类也应保持高内聚,即达到功能内聚,也就是:“对一个类而言,应该只有一类功能相关的职责。
2024-06-03 19:56:03
1134
原创 【OCP】开闭原则
开闭原则(The Open-Close Principle, OCP)是Bertrand Meyer在1988年提出的,该设计原则认为:设计良好的计算机软件应该易于扩展,同时抗拒修改。什么样的设计才能应对需求的变更,且可以保持相对稳定呢?这就是开放—封闭原则(The Open-Close Principle, OCP)所要解答的问题。“开放”和“封闭”这两个互相矛盾的术语分别用于实现不同的目标。
2024-05-31 15:55:38
1103
原创 【LSP】里氏替换原则
1988年,Barbara Liskov在描述如何定义子类型时写下了这样一段话:这里需要的是一种可替换性:如果对于每个类型是S的对象o1都存在一个类型为T的对象o2,能使操作T类型的程序P在用o2替换o1时行为保持不变,我们就可以将S称为T的子类型。反过来讲:假设某个函数f(),它的参数是指向某个基类B的指针或者引用;与此同时,存在B的某个派生类D,如果把D的对象作为B类型传递给f(),就会导致f()出现错误的行为。那么此时D就违反了LSP;因为用D的对象替换B的对象后,f()的行为发生了变化。
2024-05-29 20:12:56
718
原创 静态内部类介绍与使用场景
java中 用static 修饰的类为静态类,静态类只能是内部类;内部静态类,是外部类的成员,可以访问外部类成员(包括私有成员),但因为有static约束,和静态方法类似,只能访问静态成员/方法,不能访问普通成员/方法//外部类 public class Outer {//静态成员 private static int static_parm_out;//普通成员 private int parm_out;} //内部静态类 static class InnerStatic {
2023-03-21 10:45:05
754
1
原创 Jupyte修改默认工作路径
Jupyte 默认工作路径并不是我们希望的地方,修改Jupyte默认工作路径需要1 找到Jupyte 配置路径在cmd命令行下输入:jupyter notebook --generate-config2 修改 jupyter_notebook_config.py在jupyter_notebook_config.py文件中查找 “notebook_dir”配置项,将其改为自己希望的工作路...
2020-02-19 18:20:39
244
原创 python mandelbrot
mandelbrot python代码实现 mandelbrotpython代码实现 mandelbrotimport numpy as npimport matplotlib.pyplot as pltdef mandelbrot(h, w, maxit = 20): """Returns an image of the Mandelbrot fractal of size (h...
2019-10-22 19:19:30
352
原创 Zookeeper设置监视点
Zookeeper的API中的getData、getChildren和exists均可选择在读取的znode 上设置监视点。使用监视点,我们可以使用Watcher接口在process(WatchedEvent event)中捕获event1. WatchEvent说明zk会话状态:KeeperState public void process(WatchedEvent watched...
2019-07-16 21:21:41
761
Database .NET
2024-10-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人