- 博客(143)
- 收藏
- 关注
原创 LangGraph流式输出失效问题解决
摘要:使用LangGraph时遇到流式输出失效问题,发现是Python版本低于3.11导致异步任务不支持上下文参数。解决方案是升级Python到3.12+:1)修改项目配置文件(.python-version/pyproject.toml/uv.lock);2)重建虚拟环境。升级后成功实现流式输出效果。该问题源于Python 3.11以下版本无法自动传播异步上下文,需手动传递RunnableConfig参数。参考文章提供了详细解决方案。
2025-12-26 16:37:54
377
原创 fastapi使用jose进行token的加密与解密
本文介绍了使用FastAPI框架和jose库实现JWT加密解密的完整过程。核心代码包括token生成函数encode_jwt()和解析函数decode_jwt(),前者通过jwt.encode()生成带过期时间的token,后者通过HTTPBearer获取并验证token,使用jwt.decode()解析出用户数据。两个函数都依赖环境变量配置的密钥和算法,并处理了各种异常情况。最后展示了如何在路由中调用这两个函数实现token的签发和验证功能。
2025-12-13 10:34:35
177
原创 fastapi实现上传图片到本地服务器
本文介绍了使用FastAPI实现图片上传功能的方法。主要包括:1)引入UploadFile类型处理上传文件;2)对文件进行大小(10MB限制)和类型(JPEG/PNG/WEBP)校验;3)使用UUID重命名文件防止冲突;4)构建存储路径并保存文件;5)返回可访问的图片URL。最后通过Postman测试验证了功能,成功上传图片并返回访问链接。整个过程涵盖了文件上传的核心处理流程,包括校验、存储和访问控制等关键步骤。
2025-12-13 09:43:06
421
原创 LangChain文档嵌入模型、向量数据库以及检索器(Retriever)的学习和使用,并实现一个简单的RAG对话助手
本文介绍了文本向量化模型及其在LangChain中的应用。主要内容包括: 文本嵌入模型的作用:将文本编码为向量,用于文档向量化和查询匹配。LangChain提供两种接口:embed_documents处理文档,embed_query处理句子。 向量数据库功能:内置similarity_search等召回函数,通过计算向量相似度实现检索。LangChain还提供更复杂的Retriever组件。 实践示例: 句子和PDF文档的向量化实现 使用Chroma等向量数据库存储和检索文档 多种召回策略:相似性搜索、L2
2025-11-29 15:59:46
981
原创 LangChain 四种常用文档切分器的使用
文档拆分方法比较与实现 本文介绍了四种文档拆分方法及其应用场景: 字符拆分(CharacterTextSplitter):按固定字符数切分,简单高效但可能破坏语义完整性。 递归字符拆分(RecursiveCharacterTextSplitter):最常用方法,优先在自然语言边界(如段落、句子)处分割,通过递归尝试多种分隔符实现智能分段。 Token拆分(TokenTextSplitter):按Token数量分割,与LLM处理逻辑一致,适合需要精确控制Token数的场景。 语义拆分(SemanticChun
2025-11-27 15:47:12
824
原创 LangChain关于Agent的创建和使用示例以及报错
本文探讨了Agent智能体的概念及其在LangChain框架中的实现方式。Agent作为协调大语言模型和工具的系统,具备记忆、任务规划和自主调用工具等能力。文章对比了两种创建模式(Function Call和ReAct模式)及其实现方式,指出旧方法initialize_agent存在提示词固定和参数传递问题,推荐使用新方法AgentExecutor。重点分析了ReAct模式的核心标签体系(Thought、Action、Action Input、Final Answer等)及其结构化交互机制,并通过代码示例展
2025-11-25 10:52:16
881
原创 LangChain使用之Tools
文章摘要: 本文介绍了LangChain中Tools的概念与使用方法。Tools用于扩展大语言模型(LLM)的能力,使其能与外部系统交互。Tools由名称、描述、参数模式等属性组成。文章详细展示了两种自定义Tools的方式:使用@tool装饰器和StructuredTool.from_function()方法,并提供了完整的代码示例。最后,文章演示了如何实现大模型调用工具的过程,包括判断调用时机、解析输出格式以及实际调用工具执行计算任务。通过Tools,LLM可以完成仅靠文本生成无法实现的功能,如数学计算等
2025-11-21 14:22:18
1003
原创 LangChain 常用Memory模块的分类和使用
本文介绍了LangChain中的6种常见记忆模块,重点讲解了ChatMessageHistory、ConversationBufferMemory、ConversationBufferWindowMemory和ConversationTokenBufferMemory四种模块。这些模块可帮助大模型实现对话记忆功能,各有特点:ChatMessageHistory是基础存储工具;ConversationBufferMemory保存完整对话历史;ConversationBufferWindowMemory仅保留最
2025-11-19 17:01:32
992
原创 LangChain中LLMChain结合SimpleSequentialChain和SequentialChain实现一个简单的工作流案例
本文介绍了LangChain中的两种链式工作流构建方式:LLMChain和LCEL。LLMChain适合简单问答任务但已过时,LCEL则支持复杂流程开发。重点讲解了顺序链的两种实现:SimpleSequentialChain(单输入/输出)和SequentialChain(多输入/输出)。通过代码示例展示了如何用SimpleSequentialChain实现知识问答与总结的串联,以及用SequentialChain实现产品价格查询与广告生成的流程。最后指出虽然LLMChain将被废弃,但在维护旧代码时仍有学
2025-11-13 15:33:13
733
原创 Mac使用ollama本地部署deepseek,并使用LangChain调用本地大模型以及如何安装旧版本Ollama
本文介绍了在MacOS系统版本较低(13.4)的情况下安装使用Ollama大模型的方法。首先通过在GitHub发布页面下载旧版本0.11.2安装包完成安装,然后下载了deepseek-r1:1.5b模型并测试运行。最后展示如何使用LangChain的ChatOllama类在Python中调用本地Ollama大模型,提供了完整代码示例并确认调用成功。整个过程解决了系统版本不兼容的问题,实现了大模型在本地环境中的部署与应用。
2025-11-12 15:29:49
579
原创 LangChain Output Parser的基本使用,Json解析器使用示例
摘要:本文介绍了LangChain中的输出解析器(Output Parser)的主要用途和分类,包括字符串、JSON、XML等多种格式解析器。重点讲解了使用步骤:实例化模型→创建解析器和提示词模板→添加格式指令→链式调用。通过一个让大模型输出兔子笑话并转换为JSON格式的Python代码示例,展示了JsonOutputParser的实际应用效果。输出解析器能将大模型的文本输出转换为结构化数据,便于后续程序处理。
2025-11-12 10:30:52
219
原创 LangChain少量样本示例的提示词模板 FewShotPromptTemplate、FewShotChatMessagePromptTemplate、Example select(示例选择器)
本文介绍了在构建prompt时使用样本示例的几种方法:FewShotPromptTemplate适用于单次回复场景,通过示例格式化输出;FewShotChatMessagePromptTemplate专为聊天对话设计,可转换示例为对话格式;示例选择器则通过向量匹配筛选相关性高的样本。这些方法都能有效提升模型输出的准确性和一致性,其中FewShotChatMessagePromptTemplate特别适合需要保持对话轮次结构的场景,而示例选择器能优化上下文资源的使用效率。文章通过天气查询和数学计算等实例代码,
2025-11-11 16:28:30
1460
原创 LangChain使用通义千问的向量模型时的报错和大坑 code:400 - ‘error‘: {‘message‘: ‘contents is neither str nor list of str
摘要: 使用LangChain接入通义千问的向量模型时遇到400报错,显示输入内容格式不符。解决方案是在OpenAIEmbeddings构造方法中添加check_embedding_ctx_length=False参数,成功解决问题。该参数可能绕过了长度检查机制,最终实现了示例选择器的相似度匹配功能,效果验证通过。(98字) 精简版(60字): LangChain接入通义千问向量模型报400错误,通过设置check_embedding_ctx_length=False解决。该参数可能跳过长度验证,成功实现语
2025-11-11 16:04:38
295
2
原创 LangChain 中 ChatPromptTemplate 的几种使用方式
ChatPromptTemplate是LangChain中处理多轮对话的核心工具。它支持多种实例化方式(构造方法和from_messages()),提供四种调用方法(invoke/format/format_messages/format_prompt),可接受tuple/str/dict/Message/BaseChatPromptTemplate等多种参数类型。通过MessagesPlaceholder实现消息列表的动态插入,特别适合多轮对话场景。配合大语言模型使用时,能有效维护对话上下文,构建智能对话
2025-11-08 17:31:11
1043
原创 LangChain提示词模版 PromptTemplate
本文介绍了LangChain中的PromptTemplate概念及其使用方法。PromptTemplate是一个模板化字符串,通过插入变量创建不同的提示词。文章展示了两种构造方式:一是直接使用PromptTemplate构造函数,指定template、input_variables和partial_variables参数;二是通过from_template()方法生成模板,并用partial()方法初始化参数。此外,还介绍了format()和invoke()两种调用方式,前者返回字符串,后者返回Prompt
2025-11-08 09:28:26
866
原创 使用LangChain 实现基本的流式输出
本文介绍了如何使用LangChain框架调用通义千问(QWEN)模型的API实现对话功能。代码展示了两种输出方式:非流式调用使用invoke方法,流式输出则用stream方法配合for循环遍历。文章重点解释了流式输出时end=''和flush=True参数的作用——前者避免自动换行,后者强制实时显示内容而非缓冲。示例包含环境配置、模型初始化、消息构建等完整流程,适用于需要实现AI对话流式输出的开发者参考。
2025-11-07 16:49:06
196
原创 LangChain的基本调用方式
本文介绍了使用LangChain调用大模型的几种方式。首先概述了LangChain作为快速构建大模型应用的便捷工具,随后详细展示了四种调用方法:1)硬编码方式直接写入参数,存在安全隐患;2)通过系统环境变量存储密钥;3)使用.env配置文件管理敏感信息;4)结合.env和环境变量的最优实践,自动获取默认参数。最后展示了调用阿里千问大模型的运行效果。文章重点比较了不同方法在安全性和便捷性上的差异,为开发者提供了实用的技术参考。
2025-11-07 14:54:29
445
原创 基于NodeJs实现一个MCP客户端(会话模式和无会话模式)
本文介绍了如何使用Node.js实现MCP协议客户端开发,重点讲解了会话模式和无会话模式的区别。主要内容包括: 环境搭建 创建项目并安装必要的依赖包 配置TypeScript和nodemon开发环境 实现带会话模式的MCP客户端 解释了MCP会话管理机制,通过sessionId维护对话上下文 创建MCPClient类,包含连接服务器、获取工具列表和调用工具等方法 使用StreamableHTTP传输协议实现客户端与服务端的通信 代码实现 展示了如何建立连接、获取sessionId 演示了工具列表的获取和格式
2025-10-28 17:08:38
925
原创 对MCP的学习和理解以及基于NodeJS实现一个爬取公众号文章信息MCP服务器
MCP(模型上下文协议)是一个用于连接AI应用与外部系统的开源标准协议。它类似于AI应用的"USB-C接口",通过标准化方式实现大模型与数据源、工具和工作流的对接。MCP的演进经历了三个阶段:基于提示词的Function Calling存在格式不稳定、幻觉等问题;基于API的Function Calling减少了token消耗但存在格式不统一问题;最终MCP通过统一通信协议和数据格式解决了这些问题。MCP采用客户端-服务器架构,支持多种传输协议,并能通过NodeJS实现MCP服务器。该协
2025-10-24 09:53:51
1065
原创 git reset --soft <commit>和 git revert <commit>的区别
本文介绍了Git中两种撤销提交的方法。git reset --soft HEAD~1可将HEAD指向上一个提交,保留修改内容,适合本地开发时撤销提交并重新调整。git revert HEAD则会创建一个新的撤销提交,保留原提交记录,适合撤销已推送的提交或需要记录撤销操作的情况。两种方法各有适用场景:前者保留修改便于重新提交,后者则更适用于公共代码库的撤销操作,能避免影响协作开发并保留完整操作历史。
2025-09-26 17:21:01
365
原创 NestJs将上传的文本转换为向量数据并存储到向量数据库
本文介绍了文件管理的总体流程代码实现,主要包括文档上传、处理和向量化存储三个核心步骤。首先通过控制器接收上传文件,使用Langchain库读取和拆分文档内容;然后将原始文本存入数据库并获取ID;接着利用阿里云Embedding模型将文档标题和内容分批次向量化;最后将向量数据存入Milvus向量数据库,按用户ID创建独立集合进行存储。整个过程实现了文档从上传到向量化存储的完整流程,为后续的语义检索和分析奠定了基础。
2025-09-20 10:38:36
347
原创 NestJs上传文件处理(multer)
本文介绍了如何在NestJS中使用multer实现文件上传。通过安装@types/multer类型定义,可以配置FileFieldsInterceptor来接收多个文件。文中详细说明了拦截器的参数设置,包括文件存储位置、重命名规则、类型过滤和大小限制等,并提供了完整的代码示例。最后展示了如何在控制器中使用@UploadedFiles()装饰器获取上传的文件。
2025-09-18 11:05:44
213
原创 NestJS实现鉴权(Jwt)
本文介绍了在NestJS中实现JWT身份验证的完整流程。首先安装@nestjs/jwt模块,然后在服务层注入JWT服务,将用户信息转换为token。接着创建AuthGuard进行token验证,包括从请求头提取token、验证token有效性等步骤。最后在控制器中使用@UseGuards装饰器注册守卫,并演示了如何通过curl测试JWT验证功能。整个过程涵盖了JWT的生成、验证及使用,实现了完整的身份鉴权流程。
2025-09-18 09:35:59
176
原创 圣杯布局的两种实现方法flex和float
圣杯布局是一种很经典的布局方法,经典的float方式实现圣杯布局是通过左、中、右三层的包裹层设置左右padding来预留左右元素的位置,重难点是margin 负值;而flex方法实现则简单得多,即给中间元素设置flex:1,接着写死左右元素宽度,最后利用order进行顺序排列。
2022-09-08 12:58:36
455
原创 浏览器缓存顺序
的缺点是其精确单位为秒,所以可能会出现缓存判断不准确的情况,例如用户在1s内发送多次请求,若这1s内服务端资源已经改变,由于精确度问题会导致客户端误判为资源未更新,只会从本地缓存中获取资源。值是不一样的,若出现负载均衡情况时也可能导致一致的数据却重新加载。的缺点是因为不同服务器存储的。
2022-09-03 20:33:44
456
原创 proxy反向代理解决前端跨域问题vue2
proxy解决跨域的原理主要是基于跨域只会出现浏览器与服务器之间,而服务器与服务器之间进行网络请求就不会出现跨域,所以先配置proxy后会将请求发送给本地服务器,再由本地服务器发送给目标服务器,本地服务器获取到数据后再与客户端通信。
2022-09-03 17:40:38
995
原创 express演示前端解决跨域的方法jsonp、cors
即json外面包了一层js函数外衣,jsonp主要是利用了html中等带有src属性的标签进行服务器请求时可以不受跨域影响。成功打印,说明客户端中src请求回来的资源会当作js代码执行,所以我们利用这个特性,希望获取的数据能通过外包裹一层函数的形式传递过来,客户端预先定义了一个接受数据的函数,接着将该函数的函数名作为参数传递到服务端,后续服务端会将这个函数名和返回的数据拼接而返回。字段,即设置上允许跨域访问的域,* 即代表所有域都可以访问。1.在标签的src属性中发请求。
2022-09-03 13:24:50
639
原创 js构造函数中this一个箭头函数大坑
之前错误地认为直接运行 fn() ,函数中的this就指向window,然后认为箭头函数中的this就一定指向window。其实不然,做题还是得深究其原理而不是总结所谓的规律。
2022-08-29 18:52:43
290
原创 JS3 分隔符(递归)
描述请补全JavaScript代码,要求返回参数数字的千分位分隔符字符串。题目请补全JavaScript代码,要求返回参数数字的千分位分隔符字符串。示例输入:_comma(12300)输出:‘12,300’代码function _comma(number){ if(number<1000){ return number.toTring() }else{ return _comma(parseInt(number/1000))+','+_comma(number%1000)
2022-05-27 13:01:16
284
原创 为什么需要等待2MSL
为什么第四次握手要等待2MSL后客户端才进入CLOSED状态?MSL(Max Segment Lifetime):最长报文段寿命报文最长存活时间就是1MSL,服务端在第三次挥手后也会等待2MSL时间,为的就是怕第四次挥手的ACK确认报文丢失。因为若不等待2MSL客户端就立即进入CLOSED,有可能ACK包丢失从而导致服务端一直处于LAST_ACK状态,此时即使服务端再怎么重发也没用了,因为客户端已经进入CLOSED状态了。所以客户端发送ACK包后等待2MSL,即假设发ACK包要1MSL,若下一个1
2022-05-25 20:53:01
1721
原创 JS2 文件扩展名(lastIndexOf和slice)
描述请补全JavaScript代码,要求以字符串的形式返回文件名扩展名,文件名参数为"filename"。题解:<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8"> </head> <body> <script> const _getExFilenam
2022-05-11 20:00:50
460
原创 JS1 直角三角形
描述请补全JavaScript代码,要求在页面上渲染出一个直角三角形,三角形换行要求使用"br"实现。三角形如下:******题解:<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8"> </head> <body> <div class='triangle'></div>
2022-05-11 11:14:08
897
原创 vue2 vuex的使用步骤
1.下载vuexnpm i vuex@3.6.2版本太高容易报错2.新建store目录并新建index.js3.修改store中的index.jsimport Vue from "vue"import Vuex from "vuex"Vue.use(Vuex)export default new Vuex.Store({ modules: { }})4.新建状态管理模块(放在store目录)本处建立tab.js,其实也可直接不用引模块的方式,直接state、getters
2022-04-06 17:41:03
1353
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅