自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(93)
  • 收藏
  • 关注

原创 LangChain v1 多智能体(Multi-Agent)

Multi-Agent(多智能体)系统通过协调多个专业化组件来处理复杂的工作流程。设计多智能体系统的核心是“上下文工程”——决定每个智能体能看到哪些信息。Subagents 架构中,一个中央主代理(常称为监督者)通过将子代理包装为工具来协调它们。主代理决定调用哪个子代理、提供什么输入,以及如何组合结果。特性说明集中控制所有路由都通过主代理无直接用户交互子代理将结果返回给主代理,而非用户子代理作为工具调用子代理通过工具被调用并行执行主代理可以在单次回合中调用多个子代理上下文隔离。

2026-07-29 20:50:12 196

原创 LangChain v1 MCP (Model Context Protocol)

工具接口格式不统一:需为每个服务定制解析逻辑缺乏动态发现能力:模型侧需硬编码工具定义(函数名、参数 schema)多平台兼容性差:不同服务使用不同协议(REST、gRPC、XML 等)应运而生,它是一个开放标准协议,为 Tool Calling 提供统一、可扩展、跨平台的连接基础设施。1. 基本拦截器模式"""在执行前后记录工具调用日志。"""

2026-07-27 15:48:59 414

原创 LangChain v1 Agent 核心能力

LangChain Agent 是一个将大语言模型(LLM)与工具(Tools)相结合的系统,能够对任务进行推理,自主决定使用哪些工具,并迭代地朝着最终目标努力。核心公式:Agent = LLM(推理引擎)+ 工具(执行能力)+ 自主决策(控制循环)Agent 遵循ReAct(Reasoning + Acting)模式Reasoning(推理):分析当前状态,决定需要调用的工具Acting(行动):执行工具调用,获取观察结果(Observation)循环。

2026-07-25 20:22:53 372

原创 LangChain v1 中间件(Middleware)

中间件是 LangChain Agent 中一个核心的扩展机制,允许我们在 Agent 运行的生命周期中,插入自定义的逻辑来干预、监控或增强其行为。在 LangChain 中,Agent 的核心运行循环通常包括调用模型和执行工具等步骤。中间件就像是在这些核心步骤前后安装的"钩子"(hooks),让我们能够介入这个过程。对话摘要中间件的核心功能是自动监控并总结对话历史,以防止 Agent 的上下文窗口被过长的对话填满。

2026-07-24 22:26:02 317

原创 LangGraph 项目部署知识点总结

LangGraph 应用基于构建,它建立在开源的 LangGraph 框架之上,用于开发有状态的应用程序。LangGraph 提供核心抽象和执行模型LangSmith 支持从开发到生产的整个生命周期,包括托管基础设施、可观察性、部署选项、助手和并发控制等。整个流程将 Agent 应用打包、构建为,并进行部署。字段必需描述$schema是Schema 验证 URL是依赖项(如表示本地包,或路径、包名)graphs是图定义映射,格式{"图ID": "文件路径:导出对象"}auth否。

2026-07-19 21:22:50 212

原创 LangGraph 知识点补充

上下文是程序运行时可访问的数据和环境信息,用于传递用户身份、配置参数、数据库连接、API 密钥、会话状态等。维度类型描述示例可变性静态上下文运行中不变的数据用户ID、数据库连接动态上下文运行中会变化的数据对话记录、中间结果生命周期运行时上下文单次运行/线程有效当前请求的临时数据跨会话上下文多次会话持久化用户偏好、历史记录类型可变性生命周期访问方式静态运行时上下文静态单次运行/线程context参数传入动态运行时上下文动态单次运行图状态对象(State)

2026-07-15 13:28:14 290

原创 LangGraph基础知识点

知识点:所有节点共享 State。Annotated实现列表追加/数值累加,而非覆盖。# 列表使用 operator.add,每次更新会追加,而非替换# 普通字段默认覆盖(替换)# 数值使用 operator.add,实现累加知识点:节点是接收 state 返回部分更新的函数。START是入口,END是终止。条件边通过路由函数动态选择下一节点。# 1. 定义节点函数# 返回的字典会根据 Reducer 规则合并。

2026-07-14 21:04:01 381

原创 6.3.2RAG--存储(向量库)

我们将使⽤ LangChain 的来实现向量的内存存储。

2026-06-07 10:53:44 676

原创 6.3.1RAG--存储(嵌入向量)

model="text-embedding-3-large", # 是 OpenAI 2024年发布的最新嵌⼊模型,⽣成3072维的⾼质量向量。

2026-06-05 21:31:41 245

原创 6.2RAG--文档分割器

前文我们利用构建知识库利用文档加载器将我们的本地文件等加载进来,文档加载器会对文档进行初步的拆分(PDF加载:按照PDF文档的分页进行拆分,MD加载:按照类型或者默认的方式进行拆分),但在初次拆分可能会出现同一个Q&A或者语义相近的资料被拆分为不同的子文档,这样不符合我们的期望。因此LangChain提出了文本切割器帮助我们进行文档的二次拆分。

2026-06-04 22:14:29 243

原创 6.1RAG--文档加载器

在某些应⽤程序中,例如对具有复杂布局、图表或扫描的 PDF 进⾏问答,可以跳过 PDF 解析,直接将 PDF ⻚⾯转换为图像并将其直接传递给模型可能是更准确的。想实现 RAG,⾸先就需要从源中获取数据,即加载数据或⽂档。将本地的 PDF ⽂档加载到 LangChain 中,其实就是将 PDF ⽂档转换为⼀个个。:可选的⽂档标识符。LangChain ⽂档加载器可以将各种数据源加载成⼀系列的⽂档对象。:将数据加载到⽂档对象中。:将数据加载到⽂档对象中。,表⽰要加载的 PDF ⽂件的路径。

2026-06-03 20:09:44 62

原创 6.LangChain--RAG

当前对于大部分人来说我们利用LLM都是进行AI搜索来帮助我们进行知识的获取与总结。对于【AI ⼤模型】来说,它最擅⻓的是语义理解和⽂本总结,最不擅⻓的就是获取实时的信息。因为⼤模型的训练数据是有截⽌⽇期的!对于【搜索引擎】来说,它最擅⻓的就是获取实时的信息,缺点是信息分散,每次都需要⼈为进⾏总结。⼤模型与搜索引擎的结合,就是给 AI 配备了⼀个活字典,让 AI 可以随时进⾏查阅但是搜索引擎只能获取到公开在⽹络中的数据,⽽⽆法获取到⼀些本地数据,或企业内部的私有数据等,此时该如何?

2026-06-03 15:12:43 385

原创 5.LangChain--输出解析器

前面LangChain系列中我们或多或少都在代码中体现过输出解析结构化,今天我们系统总结其中比较常见的。

2026-06-02 14:49:32 207

原创 4.LangChain--Prompt提示词

少样本提⽰是⼀种通过向 LLM 提供少量具体⽰例或样本,来教会它如何执⾏某项特定任务的技术。提⾼模型性能的最有效⽅法之⼀是给出⼀个【模型⽰例】指导⼤模型你想做什么、怎么做。

2026-06-01 21:43:05 287

原创 2.LangChain--聊天模型之流式传输

前面我们知道LangChain可以将多个组件链起来进行封装使用,当时我们提到过一个输出解析器组件StrOutputParser,它能自动从 AIMessageChunk中提取内容字段,为 我们提供模型返回的令牌。我们可以在此基础上自定义输出格式,使流式输出更符合我们的要求。sream返回的是一个迭代器,我们可以操作该迭代器进行自定义的消息块处理并输出。比如前面的案例的流式输出是一个字token输出,我们可以让其按照一句话一句话进行输出# 定义⼤模型# 定义输出解析器# 定义⽣成器。

2026-05-29 17:11:41 217

原创 3.LangChain组件--消息

本文介绍了LangChain中的消息处理机制,主要包括原生LLM消息结构、LangChain统一消息格式、历史消息缓存管理以及消息的裁剪、筛选和合并操作。LangChain通过BaseMessage子类提供跨模型统一消息格式,支持多模态内容。文章详细讲解了如何使用RunnableWithMessageHistory管理对话历史,并演示了trim_messages()进行token/消息数裁剪、filter_messages()按类型/ID筛选消息,以及merge_message_runs()合并同类型消息的

2026-05-29 17:11:20 521 2

原创 2.LangChain--聊天模型结构化返回

传统的LLM调用返回的信息一般为字符串的文本形式,当我们想要让LLM仅返回我们想看到的信息我们就要自己设置结构化格式给LLM,让其返回我们所需的内容。在 LangChain 中,聊天模型提供了额外的功能:结构化输出。⼀种使聊天模型以结构化格式(例如 JSON)进⾏响应的技术。例如,可能希望将模型输出存储在数据库中,并确保输出符合数据库模式。这种需求激发了结构化输出的概念,其中可以指⽰模型使⽤特定的输出结构进⾏响应。

2026-05-26 20:24:03 351

原创 2.LangChain--聊天模型工具篇

tooldef add (a:int, b:int)->int: #加法工具"""两数相加Args:a : 一个整数b : 另一个整数"""# 方式二class AddInput(BaseModel): #类中定义函数描述和参数描述"""两数相加"""a: int = Field(..., description="第一个整数")#...表示必填字段b: int = Field(..., description="第二个整数")@tooldef add(

2026-05-26 11:28:04 701

原创 2.LangChain--定义聊天模型

该方式在初识篇中的定义模型中已经出现过,其是LangChain为OpenAI的聊天模型提供的具体实现类,但兼容OpenAI的模型也可使用(deepseek)init_chat_model是langchain自己封装的一个工厂函数,可以支持初始化多种模型LLM本身是封闭的知识系统,为解决直接计算、查询实时信息、操作数据库或调⽤任何外部 API等问题可以进行工具调用实现与外界交互@tooldef add(a : Annotated[int, ..., "第一个整数"], #...表示必填字段。

2026-02-24 13:00:12 817

原创 1.LangChain--安装篇

如果使⽤的功能仅在该依赖项的特定版本中可⽤,则可以选择这样做。如果这样做,则应确保已安装或固定的版本与我们使⽤的任何其他集成包兼容。Anthropic)、各类组件集成(如数据存储、⼯具等)等,对于所需依赖项,我们需要单独安装。LangChain生态系统中所有包都依赖core,但其不用显示安装,由langchain自动安装,LangChain 的⼤部分价值来⾃于将各种能⼒进⾏集成,如各类模型集成(如 OpenAI 和。任何尚未拆分到⾃⼰的包中的集成,都存在于该包中。二、langchain-core包。

2026-02-22 23:42:33 364

原创 1.LangChain--初识篇

导言:本文主要介绍langchain出现的原因与背景。

2026-02-22 23:27:40 823

原创 0.LangChain--大模型篇

通俗来说模型就是一个可以从海量数据中学习规律的“数学函数”或“程序”。通过从⼤型数据集中学习模式和洞察,这些模型可以进⾏预测、⽣成⽂本、图像或其他输出,从⽽增强各个⾏业的各种应⽤。LLM是基于大规模神经网络通过自监督或半监督方式,对海量文本进行训练的语言模型相对于大语言模型这类生成类模型来说,嵌入式模型一般是表达类模型,将用户输入生成一个最佳富含语义的数值表示,这个数值在向量空间中可以是很多维度。

2026-02-21 23:38:30 894

原创 Coze实战案例分享

导言:本文是我做的实战案例的记录,并介绍sdk的封装和使用。

2026-02-20 23:30:26 702

原创 Coze开发平台

智能体就像是基于LLM构建的具有自适应能力和持续学习能力的一种工具。sdk(Software Development Kit - 软件开发⼯具包)由平台⽅提供给开发者的⼀个“⼀站式⼯具包”,⾥⾯包含了创建该平台应⽤所必需的代码库、⼯具、说明书和规范用户可以直接进行使用避免中途操作出现的失误与API相比优点:开箱即用、封装复杂、降低门槛。

2026-02-20 23:30:13 948

原创 手撕简易版的vector

/(2)更新_finish时,由于_start已经指向新地方所以原size(_finish-_start)也会变化,所以要保存原数据的大小。//(1)移动数据时,memcpy是浅拷贝,所以涉及到深拷贝的内容如vector<string>,析构原空间时会造成数据string的析构。//库函数的参数为迭代器,因此会引入扩容和删除会引发迭代器失效问题,所以返回更新后的迭代器进行迭代器的更新。//这里使用T*充当迭代器,并不是所有的函数迭代器都是T*,迭代器可以屏蔽底层代码细节。(2)//拷贝构造和赋值重载。

2026-02-01 20:44:55 86

原创 手撕丐版string(学习)

/无参构造和有参构造可以一起结合为全缺省参数,由于char*str默认到\0,所以直接默认传""再补充\0即可。//扩容,重新开辟空间,将所有内容全部移到新位置。//拷贝构造,开辟足够大小利用strcpy函数复制内容。//赋值重载,利用swap函数进行交换。//尾插字符,注意size和\0的变化。//析构需按字符数组删除,并置空为0。//追加,扩容加strcat进行追加。//[]需判断是否合法。

2026-01-28 22:57:09 332

原创 手撕简易版的智能指针

/2.自己=other,other先改变(释放)原指针的管理,在挂接到新的指针上。//所以引入包装器function,可以对所有的lambda表达式和仿函数进行包装,不用考虑类型。3.使用静态成员的话,所有类成员均可见,换一个对象再计数也不合理*///构造析构时无法实例化(类型)和传参lambda表达式和仿函数。(特殊的函数类型传入相应的析构函数),完成正确的析构,避免内存泄漏。//shared_ptr是函数构造时添加的表达式或者仿函数。//unique_ptr添加定制删除器是实例化模板添加,

2026-01-28 22:56:57 578

原创 Linux网络--8、NAT,代理,网络穿透

(3)缓存加速:反向代理服务器可以缓存后端Web服务器的响应内容,对于重复的请求,它可以直接从缓存中返回响应,⽽⽆需再次向后端服务器发起请求。(1)从应⽤上讲, NAT设备是⽹络基础设备之⼀, 解决的是IP不⾜的问题. 代理服务器则是更贴近具体应⽤, ⽐如通过代理服务器进⾏翻墙, 另外像迅游这样的加速器, 也是使⽤代理服务器。反向代理服务器是⼀种⽹络架构模式,其作为Web服务器的前置服务器,接收来⾃客⼾端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回给客⼾端。

2025-11-02 11:38:27 1038

原创 Linux网络--7、数据链路层

前面我们已经认识到用户间的数据由网络转发时,会在应用层进行序列化包装,再经由传输层进行流量控制,拥塞控制包装给网络层,网络层确定目标主机ip和port包装好就可以在网络中传输了。那么数据报具体是怎么在路由器间转发的?为什么网络层有切片和报文大小限制这一切的源头--数据链路层MAC帧!

2025-11-01 13:43:47 857

原创 Linux网络--6、网络层

基础概念中我们提到IP地址分为两个部分:网络号和主机号•⽹络号: 保证相互连接的两个⽹段具有不同的标识;•主机号: 同⼀⽹段内, 主机之间具有相同的⽹络号, 但是必须有不同的主机号;通过合理设置主机号和⽹络号, 就可以保证在相互连接的⽹络中, 每台主机的IP地址都不相同.•有⼀种技术叫做DHCP, 能够⾃动的给⼦⽹内新增主机节点分配IP地址, 避免了⼿动管理IP的不便.•⼀般的路由器都带有DHCP功能. 因此路由器也可以看做⼀个DHCP服务器.

2025-10-18 14:18:19 991

原创 Linux网络--5、传输层协议

之前我们介绍了UDP和TCP的代码使用和部分特性,今天我们正式从理论学习传输层这两个关键的协议。当我们在应用层完成对data的包装协议化,报文就进入到传输层进行传输,如何保证报文传输的稳定,安全,高效?

2025-10-06 14:14:29 699

原创 Linux网络--4、应用层协议Http

在浏览器上对于一个网站的访问我们可以看到​这样一个格式的网址请求URL(网址定位符),今天我们就了解其中的应用层协议http。

2025-10-01 00:00:00 663

原创 Docker--架构篇

应用服务和数据库服务共用一台服务器2.2原因出现在互联网早期,访问量比较小,单机足以满足需求2.3原理图应用服务和数据库分离引入负载均衡,应用服务以集群方式运行将数据库读写操作分散到不同节点,数据库服务器搭建主从集群,一主一从,多主多从,主机负责写,从机负责读引入缓存服务器,实行冷热数据分离,将热点数据缓存在缓存服务器中,每次访问先从缓存中寻找,从而达到快速响应拆分数据库数据,数据库数据分布式存储、处理和查询,分布式数据库架构按照业务来划分应用服务,使单个应用职责更清晰相互之间可以独立迭代。

2025-09-04 00:00:00 1322

原创 CMake命令篇--2、cmake项目基本完整流程

a.设置最低的cmake版本b.设置项目名称c.添加构建目标。

2025-09-03 15:23:43 574

原创 CMake命令篇--1、简单基本代码运行(hello world)

一个写好的代码运行需要通过配置文件进行编译链接形成可执行程序,这些工作开始由我们自己手动配置,但当项目工程数量增加时,手写就显得不方便,而且兼容性很差CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。

2025-09-03 12:00:13 492

原创 Mysql系列--11、使用c/c++访问mysql服务

前面我们已经学习并练习了本地命令行形式的sql语句的使用,可在以后开发中我们一般不会直接命令行操作数据库,今天我们认识如何在自己的代码中调用指令对数据库进CURD操作。

2025-08-29 19:57:26 1441

原创 Mysql系列--9、事务

事务是一组DML语句组成,本质为多个sql语句组合成一个集合,这些语句逻辑上相关,执行时要么全部成功要么全部失败,是一个整体。事务主要用来处理操作量大,复杂度高的数据mysql中仅Innode存储引擎支持,Myisam等不支持。

2025-08-29 11:33:11 1204

原创 Mysql系列--10、用户管理

我们可以看出其实对用户的操作,本质也是在user表中进行增删改查,所以本质也是对表的操作,所以以上命令也可以使用sql语句(insert,drop,update)进行修改,但操作麻烦不如上面的指令。

2025-08-29 07:30:00 372

原创 Protocol Buffer(Protobuf)

依赖⽣成的接⼝,将编译⽣成的头⽂件包含进我们的代码中,实现对 .proto ⽂件中定义的字段进⾏设置set和获取get(一般省略get,直接写字段名),和对 message 对象进⾏序列化和反序列化。你可以定义数据的结构,然后使⽤特殊⽣成的源代码轻松的在各种数据流中使⽤各种语⾔进⾏编写和读取结构数据。你甚⾄可以更新数据结构,⽽不破坏由旧数据结构编译的已部署程序。Protocol Buffers 是 Google 的⼀种语⾔⽆关、平台⽆关、可扩展的序列化结构数据的⽅法,它可⽤于(数据)通信协议、数据存储等。

2025-08-26 10:38:57 1211

原创 Linux网络--3、序列化

协议是⼀种 "约定". socket api的接⼝, 在读写数据时, 都是按 "字符串" 的⽅式来发送接收的. 如果我们要传输⼀些 "结构化的数据" 怎么办呢?我们可以通过定制结构化的类对象或者结构体,在传输时利用序列化传输到网络,在另一台主机按照相同的约定反序列化出数据,完成结构化数据传输!

2025-08-26 03:00:00 382

空空如也

空空如也

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

TA关注的人

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