自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

OopsOutOfMemory盛利的博客

AI架构||大数据||分布式计算||数据仓库||数据挖掘

  • 博客(94)
  • 收藏
  • 关注

原创 LangChain源码分析(十三)- 运行时与监控

本文深入解析LangChain运行时与监控系统,该系统由回调、追踪和缓存三大核心组件构成。回调系统采用事件驱动架构,通过观察者模式实现组件运行状态的实时监控;追踪系统记录执行流程形成树形结构,便于问题诊断;缓存系统通过复用LLM调用结果优化性能。这些组件共同构成了一个非侵入式的智能监控中心,为开发者提供调试、性能优化和用户体验提升的强大工具,同时遵循松耦合、可扩展的设计原则,展现了事件驱动、组合模式和策略模式等优秀架构思想。

2025-10-03 10:03:03 440

原创 LangChain源码分析(十二)- Agent代理

LangChain Agents是能够自主决策执行路径的智能代理系统,通过语言模型动态选择工具完成任务。相比固定流程的传统方法,它具有动态决策、模块化设计和强适应性的优势。核心组件包括AgentAction(执行动作)、AgentFinish(结束信号)和AgentStep(执行步骤)。系统通过AgentExecutor管理执行循环,调用工具并迭代处理中间结果。主要类型包括MRKL(零样本推理)、ReAct(推理+行动)和Tool Calling(原生工具调用)代理。工具交互基于BaseTool抽象,支持参

2025-10-03 10:02:03 431

原创 LangChain源码分析(十一)- RAG检索

本文介绍了LangChain中的Retrievers(检索器)组件,主要包含以下内容:1) 检索器是LangChain核心组件,提供统一接口用于根据查询返回相关文档;2) 检索器解决了LLM的知识过时、上下文不足等问题,是RAG系统的关键组件;3) 详细说明了如何实现自定义检索器、VectorStoreRetriever的使用方式以及三种搜索类型(相似度、MMR、阈值);4) 提供了架构图、类图和时序图展示检索器的工作原理。检索器通过将查询转换为相关文档,为LLM提供上下文支持,增强生成内容的准确性和相关性

2025-10-03 10:00:57 283

原创 LangChain源码分析(十)- Memory记忆管理

LangChain记忆模块是管理对话上下文的核心组件,通过标准化机制存储和检索聊天历史。它解决了AI对话中的上下文连续性、会话隔离和状态持久化问题。核心架构包括BaseChatMessageHistory基类和RunnableWithMessageHistory包装器,支持多种存储后端和异步操作。模块采用装饰器模式,自动处理历史加载/保存,通过session_id隔离会话。典型应用包括对话助手、多轮交互和工具增强对话,能记住用户输入、AI响应及工具调用结果。设计上注重抽象分离、配置驱动和类型安全,使开发者能

2025-10-03 09:46:36 295

原创 LangChain源码分析(九)- 向量存储

本文介绍了LangChain中的向量存储(Vectorstores)技术,这是现代AI应用处理非结构化数据的核心组件。向量存储能够将文本、图像等数据转换为向量表示,实现语义级别的相似性搜索,而非传统的关键词匹配。文章详细解析了向量存储的架构、类图和工作流程,包括其抽象基类设计、存储结构、相似性搜索算法和最大边际相关性(MMR)算法。通过实际代码示例展示了如何初始化嵌入模型、添加文档、执行相似性搜索和MMR搜索。向量存储作为检索增强生成(RAG)系统的基础设施,为AI应用提供了高效的语义检索能力。

2025-10-03 09:42:06 339

原创 LangChain源码分析(八)- Document加载器

文档加载器是LangChain框架的核心组件,用于从多样化数据源(PDF、Word、网页等)加载并标准化文档内容。其核心功能包括将原始数据转换为Document对象、添加元数据、支持懒加载优化内存使用。通过抽象基类设计实现加载与解析分离,遵循单一职责和开闭原则,采用生成器模式实现惰性求值。该系统解决了AI应用开发中面临的数据格式标准化、性能优化等挑战,为构建可扩展的数据处理管道提供了基础架构。设计上强调接口标准化、组件复用和内存效率,体现了现代软件架构的最佳实践。

2025-10-03 09:39:01 446

原创 LangChain源码分析(七)- Embeddings

LangChain嵌入技术解析 LangChain的嵌入模块通过抽象接口将文本转换为语义向量,支持同步/异步处理,并遵循良好的设计原则。核心功能包括: 模块化设计: 抽象基类定义统一接口 提供测试用的假嵌入实现 支持多种第三方服务集成 技术架构: 文本预处理→向量化→存储→相似性搜索的工作流 支持向量数据库和示例选择器集成 包含缓存和异步处理机制 实现特点: 遵循单一职责和接口抽象原则 同步异步并存的设计 测试友好,提供确定性假嵌入 该技术使计算机能够理解文本语义,为RAG系统提供核心检索能力。

2025-10-03 09:37:46 314

原创 LangChain源码分析(六)- 执行器Runnables

LangChain Runnables 是 LangChain 框架的核心抽象接口,为 AI 应用组件(如提示词、语言模型、解析器等)提供了统一的执行标准。它通过Runnable基类定义标准接口,支持同步/异步、批量/流式等多种执行模式。Runnables 的关键特性包括:组件组合性(通过管道操作符|)、多模式处理能力、错误恢复机制(重试和降级)以及可观测性支持。其架构涵盖核心执行模块、组合模式、包装器模式、特殊功能(如路由、分支)和配置系统,使开发者能灵活构建复杂的 AI 应用链。Runnables 通过

2025-10-03 09:32:33 309

原创 LangChain源码分析(五)- 工具调用

LangChain工具详解:AI智能体的"超能力"扩展包 LangChain工具是扩展AI能力的关键组件,使语言模型突破文本生成的局限,实现具体任务执行。这些工具分为简单工具(@tool装饰器)、结构化工具(带输入验证)和异步工具三类,通过清晰的描述让AI智能判断使用场景。工具解决了AI的三大痛点:知识时效性、实时信息获取和实际任务执行,使AI能访问实时数据、执行计算并与外部系统交互。实现上涉及工具调用、执行和结果处理的完整流程,支持错误处理和执行追踪。开发者可通过绑定工具到语言模型,构

2025-10-03 09:29:39 258

原创 LangChain源码分析(四)- 输出解析器

LangChain输出解析器摘要 LangChain输出解析器是将语言模型(LLM)原始输出转换为结构化数据的工具,主要解决格式不一致、类型不安全等问题。它包含多种解析器类型: 基础解析器:如StrOutputParser直接返回原始字符串 JSON解析器:将输出解析为JSON对象 Pydantic解析器:提供类型安全验证 列表解析器:处理各种列表格式 XML解析器:解析XML结构 解析器工作流程分为接收原始输出、应用解析逻辑、返回结构化数据三步。架构上采用继承体系,BaseOutputParser为基类,

2025-10-03 09:25:11 406

原创 LangChain源码分析(三)- 提示词系统

LangChain提示词系统是LangChain框架的核心组件,用于创建和管理输入语言模型的文本模板。该系统提供了一套灵活的模板体系,支持动态变量替换、多轮对话和少样本学习等复杂场景。核心组件包括BasePromptTemplate基类、PromptTemplate字符串模板、ChatPromptTemplate聊天模板等。系统通过模板解析、变量替换和格式化流程生成最终提示词,支持f-string、jinja2等多种模板格式。开发者可以定义复用模板结构,提高开发效率,同时确保提示词的类型安全和格式正确性。

2025-10-03 09:22:11 398

原创 LangChain源码分析(二)- Message系统

LangChain Core消息系统是LangChain框架的核心组件,用于管理对话中的各类消息。系统提供多种消息类型:HumanMessage(用户消息)、AIMessage(AI回复)、SystemMessage(系统指令)、ToolMessage(工具执行结果)等,形成完整的对话序列。消息系统采用分层架构,包含BaseMessage基类和各类具体消息实现,支持消息的分块处理(BaseMessageChunk)。消息处理流程包括接收用户输入、调用AI模型、执行工具调用(如需要)并返回最终响应。该系统为构

2025-10-03 09:16:22 887

原创 LangChain源码分析(一)- LLM大语言模型

本文介绍了大语言模型(LLM)的概念及其管理工具LangChain的核心功能。LLM是一种基于深度学习的智能语言处理系统,能够理解和生成人类语言。LangChain作为LLM的管理框架,提供统一接口、缓存优化、回调监控和流式处理等关键功能,使LLM应用更高效可靠。文章通过架构图、时序图和代码示例,详细解析了LangChain的工作机制,包括抽象基类设计、缓存系统实现、回调机制和流式输出等技术要点,并展示了基础调用、批量处理和缓存使用等实际应用场景,帮助开发者更好地利用LLM构建AI应用。

2025-10-03 09:10:47 1130

原创 Apache Helix简介

Apache HELIX一个为partitioned和replicated分布式资源 而设计的 集群管理框架What is HELIXApache Helix是一个通用的集群资源管理框架,它能被用作自动管理存在于集群节点上的分区的,有副本的分布式资源。Helix能够在结点down掉和recovery后,集群扩容,配置更新后自动的重新分配资源。前言-What Is Cluster Management

2015-08-11 10:38:53 10999 1

原创 HDFS之Node角色

Secondary NameNode:NameNode是一种logappend方式来存储对dfs的修改操作,editlog。 NameNode启动的时候,会去从fsimage中读取HDFS的状态,然后从editlog中恢复恢复对dfs的修改操作。然后在对fsimage写入新的状态,启动一个新的空的edits file.由于NameNode只会在其启动的时候,会合并fsimage和editlog.

2015-08-04 16:13:01 2361

原创 LinkedIn Cubert 实践指南

LinkedIn Cubert安装指南Understanding Cubert Concepts(一)Partitioned BlocksUnderstanding Cubert Concepts(二)Co-Partitioned Blocks

2015-07-01 11:25:50 2152

原创 Understanding Cubert Concepts(二)Co-Partitioned Blocks

Understanding Cubert Concepts(二):Cubert Co-Partitioned Blocks话接上文Cubert PartitionedBlocks,我们介绍了Cubert的核心Block概念之一的分区块,它是一种根据partitionKeys和cost function来对原始数据进行Redistribution和Transformation来结构化数据,这种结构化的

2015-07-01 10:54:56 2682

原创 Understanding Cubert Concepts(一)Partitioned Blocks

Understanding Cubert Concepts:Cubert Concepts对于Cubert,我们要理解其核心的一些概念,比如BLOCK。这些概念也是区别于传统的关系型范式(Pig,Hive)等数据处理流程并使得Cubert在大规模数据下JOIN和Aggregation中取胜的关键因素。(自己测下来,CUBE的计算效率比Hive高好多倍。)BLOCKCubert定义了一个BLOCK的概

2015-06-29 17:59:16 2132

原创 LinkedIn Cubert安装指南

最近工作需要,调研了一下LinkedIn开源的用于复杂大数据分析的高性能计算引擎Cubert。自己测了下,感觉比较适合做报表统计中的Cube计算和Join计算,效率往往比Hive高很多倍,节省资源和时间。下面看下这个框架的介绍: Cubert完全用Java开发,并提供一种脚本语言。它是针对报表领域里经常出现的复杂连接和聚合而设计的。Cubert使用MeshJoin算法处理大时间窗口下的大数据集,

2015-06-18 11:41:31 3170

原创 Build Spark1.3.1 with CDH HADOOP

Build Spark1.3.1 with CDH HADOOP1、找到CDH的版本[root@web02 spark1.3]# hadoop versionHadoop 2.0.0-cdh4.7.0Subversion file:///var/lib/jenkins/workspace/CDH4.7.0-Packaging-Hadoop/build/cdh4/hadoop/2.0.0-cdh4

2015-04-20 16:39:53 2803

原创 sbt pom reader - sbt读取pom

sbt pom reader - sbt读取pomSpark为了依赖项的统一管理用了sbt pom reader这个插件,sbt编译发布也是从pom里读GAV了。 我记得老版本sbt的依赖项是写在project/SparkBuild.scala里的。这个工具在java/scala项目内很有使用场景。地址在:https://github.com/sbt/sbt-pom-reader1.配置插件在/ap

2015-04-20 12:05:01 3428

翻译 Apache Hadoop NextGen MapReduce (YARN)

Apache Hadoop NextGen MapReduce (YARN)MRV2的设计是基于分离JobTracker的主要职能,将以下2个职能放在2个单独的进程中,以前都是在一个(JobTracker)进程中。1、资源管理 2、Job调度/监控2个核心概念: 1、全局的资源管理器 global Resource Manager (RM) 2、Per Application 每个应用程序有一

2015-04-17 18:03:04 1612

原创 Spark SQL之External DataSource外部数据源(二)源码分析

Spark SQL在Spark1.2中提供了External DataSource API,开发者可以根据接口来实现自己的外部数据源,如avro, csv, json, parquet等等。    在Spark SQL源代码的org/spark/sql/sources目

2014-12-22 01:12:30 12074 1

原创 Spark SQL之External DataSource外部数据源(一)示例

一、Spark SQL External DataSource简介  随着Spark1.2的发布,Spark SQL开始正式支持外部数据源。Spark SQL开放了一系列接入外部数据源的接口,来让开发者可以实现。  这使得Spark SQL支持了更多的类型数据源,如json, parquet, avro, csv格式。只要我们愿意,我们可以开发出任意的外部数据源来连接到Spark SQL。之前大家

2014-12-22 01:12:20 9572

原创 Docker 安装 on Mac OS X

一、简介  Docker是一个开源的容器引擎,能提供虚机化,从而达到隔离应用,可移植到任意安装有Docker的机器上运行,这对开发者来说是一个极大的福音。  由于工作上原因,最近准备开始使用Docker(公司装Docker的时候,linux server内核版本太低,需要重新编译)。  本文主要讲解如何在Mac OSX上安装Docker。    Tips:由于Docker引擎是使用了特定于Linux...

2014-12-07 11:19:30 13704 1

原创 Hive中跑MapReduce Job出现OOM问题分析及解决

一、引子今天在跑一段很复杂而且涉及数据量10年的N个表join的长SQL时,发生了OOM的异常。由于一个map通常配置只有64MB或者128MB,则在Map阶段出现OOM的情况很少见。所以一般发生在reduce阶段。但是今天这个异常详细的看后,会发现既不是map阶段,也不是reduce阶段,发现不是执行过程,而是driver提交job阶段就OOM了。Hive中XMLEncoder序列化Mapred

2014-11-21 20:02:47 29860

原创 sbt发布assembly解决jar包冲突问题 deduplicate: different file contents found in the following

一、问题定义最近在用sbt打assembly包时出现问题,在package的时候,发生jar包冲突/文件冲突问题,两个相同的class来自不同的jar包在classpath内引起冲突。具体是:我有一个self4j的jar, 还有一个hadoop-common-hdfs的jar包,其中hadoop-common-hdfs.jar内包含了self4j这个jar包,导致冲突。此类异常一般是由于打包不规范

2014-11-20 20:48:48 17121

原创 Spark 常见问题小结

1、WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster uito ensure that workers are registered and have sufficient memory当前的集群的可用资源不能满足应用程序所请求的资源。资源分2类: cores 和 ramCo

2014-11-06 19:43:02 4090

原创 Java GC 垃圾回收器的类型小结

JVM GC 垃圾回收器类型小结JVM的垃圾回收器大致分为四种类型:1、串行垃圾回收器2、并行垃圾回收器3、并发标记扫描垃圾回收器4、G1垃圾回收器1、串行垃圾回收器串行垃圾回收器在进行垃圾回收时,它会持有所有应用程序的线程,冻结所有应用程序线程,使用单个垃圾回收线程来进行垃圾回收工作。串行垃圾回收器是为单线程环境而设计的,如果你的程序不需要多线程,启动串行

2014-10-22 14:26:21 5324

原创 Java GC 概念小结

Java GC 介绍,Heap介绍,GC过程,回收机制。

2014-10-21 19:12:41 4685

原创 Spark SQL 源码分析之 In-Memory Columnar Storage 之 in-memory query

Spark SQL源码分析之如何查询cache后的table

2014-10-02 13:16:47 6706

原创 Spark SQL 源码分析之 In-Memory Columnar Storage 之 cache table

Spark SQL缓存到内存中的数据的存储策略

2014-09-25 18:20:23 11853

原创 Spark SQL UDF使用

spark sql udf编写及使用

2014-09-19 18:17:14 17750

原创 Spark SQL Catalyst源码分析之UDF

Spark SQL UDF 源码分析

2014-09-19 17:30:10 9491

原创 brew软件包管理利器

linuxbrew一款软件包管理工具 类似mac os 上的brew

2014-09-12 16:14:35 3078

原创 Spark Executor Driver资源调度小结

Spark中Executor的生成策略

2014-08-23 01:08:12 25364 3

原创 Run Test Case on Spark

本文讲述了如何运行Spark的测试用例

2014-08-14 19:03:43 5398

原创 Tachyon 分布式内存文件系统

随着分布式内存计算的升温,

2014-08-08 18:40:51 6174

原创 Spark的应用程序执行模型

Spark应用程序编写,执行应该注意的问题。

2014-08-05 19:18:47 3708

原创 scala eclipse sbt 应用程序开发

在Eclipse里利用Sbt构建开发Scala程序的一般步骤,并用实例讲解了整个流程。

2014-08-04 01:29:38 13677

空空如也

空空如也

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

TA关注的人

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