- 博客(40)
- 收藏
- 关注
原创 02 MCP结构全解析
上节课我们了解了 MCP 的架构:Host、Client、Server,并且通过一份时序图,了解了 LLM+MCP 是如何工作的,如果作为使用者,了解到这个程度就足够了,但是作为开发者,我们还要熟悉它们之间是怎么通信的,传递的消息格式是什么样的,响应消息是什么样的(高频面试题)。首先是消息的编码,MCP 客户端和服务器之间的所有消息必须遵循nullresulterror通知从客户端发送到服务器,或者从服务器发送到客户端,作为单向消息。接收方。
2025-11-26 10:17:01
340
原创 01 MCP初识
MCP 全称 Model Context Protocol,即模型上下文协议,起源于 2024 年 11 月 25 日 Anthropic 发布的文章:Introducing the Model Context Protocol,MCP 定义了应用程序和 AI 模型之间交换上下文信息的方式,这使得开发者能够以一致的方式将各种数据源、工具和功能连接到 AI 模型(MCP 并不是什么框架,也不是什么技术的突破,而仅仅一个中间协议层)。以现实生活的 USB-C 为例,USB-C 可以让不同的设备能工使用相同的接口
2025-11-26 00:09:40
290
原创 15 langgraph基本组件
State 是整个工作流的共享上下文,所有节点读取和更新它。它决定了“系统当前知道什么”以及“下一步能做什么”。所有节点函数接收State作为输入,并返回一个局部更新字典,框架自动将其合并到全局状态中。TypedDictState定义数据契约;Node实现业务逻辑;Edge控制执行路径;StateGraph组装蓝图;执行流程;(可选但重要)提供状态持久化与会话管理。这些组件共同构成了 LangGraph 的核心抽象,使得开发者能够以声明式、模块化、可测试的方式构建复杂的 AI 工作流。
2025-11-07 16:22:56
827
原创 14 langgraph简单介绍
LangGraph 是构建下一代 AI 应用(尤其是具备记忆、决策和协作能力的系统)的强大工具。它将复杂的控制流抽象为图结构,既保留了编程的灵活性,又提供了清晰的逻辑表达方式。对于希望超越简单提示链(prompt chaining)的开发者来说,LangGraph 是一个值得深入掌握的框架。如果你有具体应用场景(如构建一个带审查机制的写作助手),我可以帮你设计对应的 LangGraph 结构。
2025-11-07 16:10:28
532
原创 13 langchain自定义工具的三种方式
这是最灵活、控制力最强的方式,适合需要复杂逻辑、状态管理、异步控制或特殊错误处理的高级场景。特性@tool装饰器继承BaseTool代码复杂度⭐ 最低⭐⭐ 中等⭐⭐⭐ 最高参数控制力基础(依赖类型注解)强(Pydantic 模型)极强(完全自定义)执行流程控制无有限完全可控适用场景简单函数、快速原型需要参数验证的工具复杂业务、企业级应用异步支持✅(async def✅(通过ainvoke✅(实现_arun推荐指数⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐。
2025-11-07 16:09:48
861
原创 12 langchain使用工具介绍
tool@tool"""将两个整数相乘"""# 注意:LangChain 会自动从函数签名和 docstring 推断参数 schema⚠️ 参数类型建议使用基本类型(str, int, float, bool),复杂类型需手动定义 Pydantic 模型。location: str = Field(description="城市名称")unit: str = Field(default="celsius", description="温度单位")return f"
2025-11-07 16:09:10
236
原创 11 函数调用的原理
函数名(name)描述(description)参数格式(JSON Schema)"description": "获取某只股票的当前价格","symbol": {"type": "string", "description": "股票代码,如 'AAPL'"},},函数调用 = 让大模型“知道自己不知道”,并知道“找谁问”。它把 LLM 从一个“纯文本生成器”升级为一个能与现实世界交互的智能代理,是构建实用 AI 应用(如智能客服、个人助理、自动化工作流)的核心技术之一。
2025-11-07 16:08:30
873
原创 10 文档加载器
LangChain中的 Document组件 是构建 检索增强生成(RAG) 流程的核心数据结构。它在整个文档处理流程中扮演着统一数据格式、传递信息和管理元数据的关键角色。Document类是LangChain中用于表示文档的标准格式,其核心属性包括:特点:无论文档来自哪种数据源(如PDF、Markdown、数据库等),LangChain的文档加载器(如 、)都会将原始数据转换为标准的 格式。示例:(2) 元数据管理 字段支持存储额外信息,例如:文档来源()创建时间()文件类型()分
2025-11-07 16:07:41
704
原创 06 bind函数使用技巧
在使用 LangChain 开发的时候,某些场合我们希望在一个 Runnable 可运行队列中调用另一个 Runnable,并传递一些常量参数,但是这些参数不是前一个 Runnable 的输出的一部分,也不是用户输入的一部分,而是某个 Runnable 组件的一部分参数。我们就可以考虑使用 Runnable.bind() 来传递这些默认参数。bind() 函数用于修改 Runnable 底层的默认调用参数,并在调用时会自动传递该参数,无需手动传递,像原始链一样正常调用即可。
2025-11-07 16:00:24
921
原创 05 Runnable
是 LangChain 中用于将普通函数或可调用对象转换为可运行对象(Runnable)的工具。通过这种方式,开发者可以将自定义逻辑无缝集成到 LangChain 的链式结构中,实现灵活的 AI 应用开发。
2025-11-07 15:59:30
591
原创 03 Model组件及其使用技巧
在 LangChain 中,Model是一个核心抽象概念,代表语言模型(Language Model)或聊天模型(Chat Model)的接口。它是与底层大语言模型进行交互的关键组件,负责接收输入并返回模型生成的结果。通过Model远程 API 提供的语言模型(如 OpenAI GPT 系列、Anthropic Claude、Google Gemini 等)本地部署的开源模型(如 Hugging Face Transformers 支持的各种 LLM)
2025-11-07 15:55:25
584
原创 02 Prompt组件及使用技巧
是一个字符串模板,其中包含固定文本 + 动态变量。模型输入前,这些变量会被实际值替换,形成最终的 Prompt 输入给 LLM。# 定义模板# 使用模板生成具体 Prompt# 输出: Hello Alice, could you please help me with data analysis?
2025-11-07 15:37:36
622
原创 01 LangChain介绍
初创/快速原型:LangChain(生态丰富)或 Haystack(低代码)。数据密集型应用:LlamaIndex(检索优化)。复杂代理系统:AutoGen(协作设计)。Java企业环境:Spring AI(生态整合)。技术选型本质是匹配场景需求,参考决策树明确优先级后,可进一步结合实战案例验证框架适配性。"""聊天接口"""# 1. 提取从接口中获取的输入,POST# 2. 构建LLM客户端# 百度文心一言大语言模型# 3. 将llm与输出解析器创建链。
2025-11-07 15:36:09
778
原创 字符串-单模式串匹配题目
这样,我们不需要对每个子串进行重新计算,而是可以通过对之前的哈希值进行微小的调整来得到新的哈希值,从而提高效率。这种解法利用字符串拼接和子串查找,在时间复杂度和空间复杂度上都表现较优,能够高效地判断字符串是否通过旋转能够得到另一个字符串。这种方法通过简单的字符串操作和子串查找操作,在时间和空间上都具有较好的表现,适合处理大规模字符串输入。,在时间复杂度和空间复杂度上都表现较优,适合处理较大规模的字符串匹配问题。重复若干次的子串,返回重复的次数。连接成一个重复的字符串)的子串。
2025-09-03 08:02:36
1043
原创 字符串-基础题目
因此,我们可以遍历每个字符,尝试从该字符作为中心向两边扩展,找到最长的回文子串。通过双指针法和遍历字符串,我们可以高效地将字符串中的每个单词反转,同时保留单词顺序不变。通过将每个字符串排序并使用哈希表,我们可以高效地将字母异位词分组,保证时间复杂度为。通过从末尾逐位相加并处理进位问题,我们可以高效地实现大整数加法,并确保时间复杂度为。给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。这种方法通过模拟手动乘法的过程,逐位相乘并处理进位,确保了时间复杂度为。输入字符串以字符数组。
2025-09-03 07:52:36
793
原创 数组-滑动窗口-不定长度窗口
给定一个未经排序的整数数组 ,找到最长且连续递增的子序列,并返回该序列的长度。连续递增的子序列 可以由两个或多个整数组成,且这些数组内的每个整数都比前一个整数大。示例 1:示例 2:提示:这道题的目的是找到数组中最长的连续递增子序列。可以通过一次遍历数组来解决。使用一个变量记录当前连续递增子序列的长度,并用另一个变量记录找到的最大长度。解题步骤:复杂度分析:时间复杂度:空间复杂度:给定一个二进制数组 ,计算其中最大连续 的个数。示例 1:示例 2:提示:这道题的目的是找出数组中最长的连续
2025-09-03 07:49:35
1042
原创 数组-滑动窗口-固定长度窗口
遍历字符串,将新字符添加到窗口中,并移除窗口中最左边的字符。每次更新窗口后,检查窗口中的字符是否都是唯一的(每个字符的出现次数是否为 1)。滑动窗口的本质是避免重复计算,尤其是对重复子数组的部分进行优化处理。每次移动窗口时,只需要更新窗口的边界,而不需要重新计算所有的和。来解决,滑动窗口是一种在数组或列表上移动的窗口,适合解决子数组的问题。:每当窗口中的字符都是唯一时,记录该窗口作为一个符合条件的子串。的子串,且这些子串中的字符不重复。),他们的满意度是直接加上的,这部分的满意度是无法改变的。
2025-09-03 07:45:58
780
原创 数组-双指针-快慢指针
易错点,这里compare函数中参数的顺序是有意义的,循环体内的判断应该是end-1在前面,end在后面,所以正确的写法应该是。
2025-09-03 07:42:31
859
原创 数组-双指针-对撞指针
用于需要处理数组中所有元素的情况,包括指针相遇时的元素。:用于只处理两个不同指针指向的元素,而不需要处理指针相遇的情况。通常情况下,问题的题意决定了应该使用哪种循环条件。如果你想确保处理每个元素,包括两指针重合时的元素,那么就使用;如果只需要处理指针不重合的情况,则使用。内层的三个left<right判断非常重要对于,如果不加left<right条件,假如s为xyz,那么left会一直递增,直到等于s.length(),这个时候通过s[left]来判断就会出现数组越界错误。同理对于。
2025-09-02 09:10:39
929
原创 Docker Compose使用笔记
Docker Compose 配置文件是 YAML 格式文件(通常命名为 ),其核心由 服务(services)、网络(networks) 和 卷(volumes) 三部分组成。以下是典型结构:二、服务(services)配置项详解1. 作用:指定容器使用的镜像(包括版本)。示例:说明:说明::Dockerfile 的上下文路径。:指定 Dockerfile 文件名(默认为 )。:传递构建参数(在 Dockerfile 中使用 定义)。3. 作用:将容器端口映
2025-08-23 16:34:19
1078
原创 Docker基本使用
存储驱动(适用于 Linux),它支持写时复制(Copy-on-Write)功能,适合频繁创建和销毁容器的场景。Docker 提供了多种网络模式,允许容器之间、容器与外部世界之间的通信。:Web 服务 + 数据库服务。Docker 默认使用。配置文件切换存储驱动。宿主机端口:容器端口。宿主机路径:容器路径。
2025-08-23 15:46:01
705
原创 数组-二分查找
return mid;} else {插入位置就是left的值,如果找不到就插入位置0, 如果target是最大值,left也会跑到right指针后面,插入位置也对。// 错误一:双指针循环几乎都是left<right,判断条件不用乱改// 错误二:只要考虑中点的版本问题就行了,不用考虑中点的版本与其他指针版本的对比// 错误三:不是所有的二分查找都需要边界+1或者-1} else {// 错误一:一般二分查找不需要考虑特殊情况// 错误四:这里不需要取等于号。
2025-05-06 17:36:33
589
原创 C语言学习笔记二
文件操作一、文件的基本概念文件的定义文件是计算机系统中用于存储数据的一种结构化存储单位。它可以包含文本、图像、音频、视频等各种类型的数据。文件在计算机的存储设备(如硬盘、SSD等)中以字节序列的形式存在,每个文件都有一个唯一的文件名和路径,用于标识和访问。文件的类型文件主要分为以下两种类型:文本文件(Text File)文本文件是由字符组成的文件,每个字符使用一个或多个字节表示,常见的文本文件编码包括ASCII和UTF-8等。文本文件通常可以使用文本编辑器打开和查看,例如.txt文件、
2024-06-27 17:29:32
778
原创 OpenCV项目实战02-身份证OCR扫描
导入相关包并定义图像显示的函数显示图像3 获取轮廓通过和获取图像边缘查找轮廓后,对轮廓进行降序排序,通过看是否为4个顶点来判断是不是需要的身份证轮廓4 透视变换定义排序4个坐标点的函数这一行代码的说明:默认使用后一个元素减去前一个元素,假设的结构如下那么应用 得到的结果将是:应用得到的结果为:为什么这行代码能找出是右上角的坐标?在一个标准的笛卡尔坐标系中,如果一个点越接近右上角,它的(纵坐标减横坐标)的值越小。因为越靠近右上角,x轴坐标值越大,而y
2024-01-31 16:57:08
1835
原创 OpenCV项目实战01-信用卡数字识别
3 数字模板处理轮廓数为:105 信用卡数字匹配6 展示匹配结果.5, 10062867.0, 29857338.0]最大分数的索引为:0[外链图片转存中…(img-BzZPWo1S-1706253789804)]
2024-01-26 15:25:18
1015
原创 OpenCV笔记
Sobel算子是一种用于边缘检测的算法,在图像处理和计算机视觉中应用广泛。它主要用于计算图像灰度的一阶导数,从而突出显示图像中的边缘。者相加,构成两个方向的边缘信息。方式2:将参数dx和dy的值设为“dx=1, dy=1”,获取图像在两个方向的梯度。import cv2# 方式1,水平和垂直梯度叠加# 方式2,两个方向的梯度[外链图片转存中…(img-SSAQM2ah-1706058995401)]显然方式1效果好很多。
2024-01-24 09:17:32
1913
原创 C语言学习笔记一
1. C语言概述历史和重要性:了解C语言的发展历史及其在现代编程中的重要性。环境设置:安装编译器和IDE,设置编程环境。2. 基础语法变量和数据类型在C语言中,变量和数据类型是构建程序的基础。了解它们的特性和如何使用它们是任何C语言学习者的基础任务。以下是变量和数据类型的详细知识点大纲:1. 变量基础变量的定义:理解变量是如何存储数据的。变量的声明和初始化:学习如何声明和初始化变量。变量命名规则:了解有效的变量名和命名约定。2. 数据类型基本数据类型:整型:包括char,
2024-01-24 09:13:23
1457
原创 C++面试
参考回答函数指针就是指向函数的指针变量。每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。定义形式如下:f = &func;函数指针的应用场景回调(callback)。我们调用别人提供的 API函数(Application Programming Interface,应用程序编程接口),称为Call;如果别人的库里面调用我们的函数,就叫Callback。
2024-01-22 13:12:45
1069
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅