- 博客(109)
- 收藏
- 关注
原创 python + FastAPI搭建后台管理系统
本文介绍基于FastAPI的项目脚手架搭建流程,采用Conda创建隔离环境,规范项目结构。通过Pydantic配置管理、Loguru日志系统、SQLAlchemy异步数据库连接及Alembic迁移工具,实现模块化开发。核心设计遵循分层架构:业务模块(model/schema/repository/service/api)职责清晰,依赖注入与配置解耦,支持可扩展性与维护性,适用于中大型Python Web应用快速构建。
2026-10-10 16:59:45
186
原创 向量数据库Milvus使用与介绍
id:作为存储文本 ID 的主键。该字段的数据类型为INT64。text:用于存储文本内容。该字段的数据类型为VARCHAR,最大长度为 1000 字节。选项设置为True,以便于全文检索。text_dense:用于存储文本的密集向量。该字段的数据类型为,向量维数为 768。:用于存储文本的稀疏向量。该字段的数据类型为。:用于存储产品图像的密集向量。该字段的数据类型为,向量维数为 512。由于我们将使用内置的BM25 算法对文本字段进行全文检索,因此有必要在 Schema 中添加 Milvus。
2026-09-29 17:57:59
253
原创 大语言模型框架LlamaIndex介绍与使用
LlamaIndex 有 Python 和 Typescript 两个版本,Python 版的文档相对更完善。核心组件:Id 2 - 5 : 保证数据入库Id 6 - 9 : 查询增强Id 10 - 11:高级流程编排Id 12 - 14:周边配套所有支持的 LLM 列表:https://docs.llamaindex.org.cn/en/stable/module_guides/models/llms/modules/-//和 ollama 交互: 安装:第三步:多模态五步上手:RAG 流
2026-09-29 17:32:09
228
原创 Postgres数据库安装
Windows/Mac 下支持使用可执行文件快速安装,安装后像普通软件一样启动Postgres 即可。Docker 中安装PostgreSQL 非常简单,官方配置了镜像支持一件安装。-D 参数告诉pg_ctl 命令应该使用哪个目录中的数据文件和配置文件。安装后可通过pgAdmin工具来连接PostgreSQL 数据库。也可以写成bat 批处理,快速实现启动+关闭。
2026-08-30 10:06:52
152
原创 python中ORM框架使用
我们使用db.create_all() 将ORM 模型映射到数据库的表中,但是如果新增了ORM 模型,或者更新了ORM 模型,使用db.create_all() 都不会重新创建表或是更新表。需要先使用db.drop_all() 删除数据库中的所有表之后再调用db.create_all() 才能重新创建,但是这样的话,原来表中的数据就都被删除了,这肯定是不行的,于是就有了数据库迁移。
2026-08-30 09:52:29
303
原创 Dockerfile和docker-compose
Dockerfile是用来自动化创建Docker镜像的脚本文件,通过编写Dockerfile文件,可以自动化构建过程,减少手动操作,确保环境一致性,在Dockerfile中常见的命令有:FROM(指定基础镜像)、RUN(执行命令)、COPY/ADD(拷贝文件)、WORKDIR(设置工作目录)、CMD/ENTRYPOINT(指定容器启动时的命令)、EXPOSE(指定暴露的端口)、ENV(设置环境变量)。配置好dockerfile脚本后,就可以通过一下命令构建镜像并启动容器。
2026-08-03 16:55:47
433
原创 Ollama快速部署本地LLM与常用命令技巧
Ollama 是一个开源工具,专为在本地机器上便捷部署和运行大语言模型 (LLM) 而设计,Ollama 的设计思路和 Docker 非常接近,可以便捷地管理和运行复杂大语言模型的环境,作为轻量级框架,Ollama 保持了较小的资源占用,同时具备良好的可扩展性,允许用户根据需要调整配置以适应不同规模的项目和硬件条件,甚至是在纯 CPU/CPU+GPU 混合的环境中运行 LLM。
2026-07-30 10:55:40
190
原创 langGraph基础组件介绍(二)
如果就是想要 [1, 2, 3, 4] 呢?salary: int # 这是一个整数# 注释说明 cn_salary 不仅仅是一个int类型数据,数据还必须比27470大cn_salary = 22000 # 但是实际使用时赋值小于的数也不会报错,这是因为这仅仅是一个注释不过这样声明有一个好处,在程序中,我们可以通过 .metadata。
2026-06-07 18:14:33
353
原创 langGraph基础组件介绍(一)
LangGraph 是一个构建具有 状态、多角色 应用程序的库,用于创建智能体和多智能体工作流,与其他 LLM 框架相比,LangGraph 提供了以下核心优势:循环、可控制性和持久性。LangGraph 允许定义设计循环、条件判断的流程,这对于高级 Agent 非常重要,这和传统的有向无环图(DAG)解决方案区分开。
2026-06-07 14:10:35
517
原创 LLM 函数调用使用技巧与应用场景(二)
在 LLM 应用中,如果我们知道用户输入所需的工具使用特定顺序时,使用 LCEL 表达式构建链应用非常有用,但是对于某一些特例,我们使用工具的次数与顺序取决与输入,在这种情况下,我们希望让 LLM本身决定使用工具的次数和顺序,而 Agent智能体 能做到这一点。
2026-06-03 16:11:40
417
原创 LLM 函数调用使用技巧与应用场景(一)
在使用 函数调用 或者创建 智能体 时,我们需要提供 工具列表 ,以便大语言模型可以使用这些工具,虽然 LangChain 内部集成了大量的工具和工具包,但并不一定适合我们的业务场景,更多场合下我们会使用自定义工具,在 LangChain 中提供了 3 种构建自定义工具的技巧: @tool 装饰器 、StructuredTool.from_function()类方法 、 BaseTool子类 ,不同的方式有不同的优缺点与应用场景。
2026-06-03 10:37:40
362
原创 RAG 开发 6 个阶段优化策略分析(二)
至此,在 RAG 的 索引阶段 ,这些具有代表性的优化策略其实我们已经讲解完了,涵盖了 分割策略(语义分割、递归字符分割) 、 多向量/表征检索 、 RAPTOR递归文档树检索 ,其中 特定Embeddings 即考虑使用维度更高的文本嵌入模型,并没有复杂的使用技巧。
2026-05-30 20:12:04
245
原创 RAG 开发 6 个阶段优化策略分析(一)
多查询重写 :实现简单,使用参数较小的模型也可以完成对查询的转换(不涉及回答),因为多查询可以并行检索,所以性能较高,但是在合并的时候,没有考虑到不同文档的权重,仅仅按照顺序进行合并,会让某些高权重的文档在使用时可能被剔除。多查询融合 :在 多查询重写 的基础上引入了 RRF 算法,对不同查询检索到的文档列表的每一篇文档计算对应的权重,将排名靠前亦或者是出现次数更多的文档放置到合并文档的靠前部分。
2026-05-29 15:08:11
423
原创 VectorStore 组件深入学习与检索方法
不过由于这些内置检索器开发的时间较早,绝大部分都是在 Runnable 与 LCEL 表达式出来之前发布的,部分检索器可能并不是 Runnable 可运行组件,使用方法也有差异,使用前需要查阅文档进行使用。如果内置的检索器没法完成需求,可以考虑使用 自定义检索器 ,比方接入一个可以快速检索 百度网站 ,或者 慕课网 课程的检索器。
2026-05-25 17:39:28
419
原创 字符分割器组件的使用
在 LangChain 中,如果内置的文档分割器均没办法完成需求,还可以根据特定的需求实现自定义文档分割器(一般极少),实现的方法也非常简单,继承文本分割器基类 TextSplitter ,在构造函数中传递相关参数,然后实现 split_text() 方法即可。"""自定义文本分割器""""""分割传入的文本为字符串列表"""# 1.创建加载器与分割器loader = UnstructuredFileLoader("./科幻短篇.txt")# 2.加载文档并分割。
2026-05-25 14:30:21
569
原创 文档加载器的组件使用
对于一些企业的内部数据,例如数据库、API接口等定制化非常强的数据,如果使用通用的文档加载器进行提取,虽然可以提取记录到相应的信息,但是加载的数据格式或者样式大概率没法满足我们的需求,这个时候就可以考虑实现自定义文档加载器。WebBaseLoader 文档加载器加载网站首页的信息,会提取得到很多空白数据(空格、换行、Tab 等),将这类数据通过分割存储到向量数据库中,会极大降低检索与生成的效率和正确性。
2026-05-23 20:10:02
373
原创 向量数据库的介绍
要想使用向量数据库的相似性搜索,存储的数据必须是向量,那么如何将高维度的文字、图片、视频等非结构化数据转换成向量呢?这个时候就需要使用到Embedding嵌入模型了,例如下方就是Embedding嵌入模型的运行流程:Embeding模型是一种在机器学习和自然语言处理中广泛应用的技术,它旨在将高纬度的数据(如文字、图片、视频)映射到低纬度的空间。Embedding向量是一个N维的实值向量,它将输入的数据表示成一个连续的数值空间中的点。
2026-05-21 18:04:35
466
原创 检索增强生成RAG基础架构与手动模拟
检索增强生成(RAG)是指对大型语言模型输出进行优化,使其能够在生成响应之前引用训练数据来源之外的权威知识库。大型语言模型(LLM)用海量数据进行训练,使用数十亿个参数为回答问题、翻译语言和完成句子等任务生成原始输出。在LLM本就强大的功能基础上,RAG将其扩展为能访问特定领域或组织的内部知识库,所有都无需重新训练模型。是一种经济高效地改进LM输出的方法,让它在各种情境下都能保持相关性、准确性和实用性。简单理解:RAG就是从外部先检索对应的知识内容,和用户的提问一起构成Prompt,再让LLM生成内容。
2026-05-19 12:44:20
382
原创 Runnable组件介绍
在使用 LangChain 开发的时候,某些场合我们希望在一个 Runnable 可运行队列中调用另一个 Runnable,并传递一些常量参数,但是这些参数不是前一个 Runnable 的输出的一部分,也不是用户输入的一部分,而是某个 Runnable 组件的一部分参数。我们就可以考虑使用 Runnable.bind() 来传递这些默认参数。bind() 函数用于修改 Runnable 底层的默认调用参数,并在调用时会自动传递该参数,无需手动传递,像原始链一样正常调用即可。
2026-05-17 13:25:35
443
原创 RunnableWithMessageHistory简化代码与使用
在前面的示例中,我们将历史消息显示地传递给链,在链外单独处理历史消息的记忆存储。这是一种完全可接受的方法,除此之外,LangChain 还提供了一个名为 RunnableWithMessageHistory 的类 / 包裹器,能让链自动处理这个过程(填充 + 存储)。
2026-05-16 21:17:33
210
原创 内置Chain组件的使用与解读
在许多编程语言和库中,Chain 通常用来描述一系列的操作或函数,这些操作或函数按照特定的顺序依次执行,前一个操作的输出会作为后一个操作的输入。这种模式也被称为管道(Pipeline)或链式调用(Chain Calling)。
2026-05-16 20:58:02
490
原创 ChatMessageHistory组件
把记忆功能集成到LLM应用中,会设计到两个核心问题:存储的历史信息是什么?如何检索与处理历史信息?在Langchain中,一个记忆类是由历史消息的存储与记忆的处理逻辑两个部分组成。LangChain封装了一个管理历史信息的基类—BaseChatMessageHistory,这是一个抽象类。用于管理历史消息,涵盖了对消息的多种管理:添加消息、消息历史信息、查看历史消息列表、查看历史消息文本等。并且所有扩展的消息历史组件均继承BaseChatMessageHistory(包括自定义消息历史组件)。
2026-05-15 17:38:47
228
原创 Memory组件运行流程及不同记忆分类
在 LangChain 中使用缓冲记忆组件要不就保存所有信息(占用过多容量),要不就保留最近的记忆信息(丢失太多重要信息),那么有没有一种情况是既要又要呢?所以折中方案就出现了 —— 保留关键信息(重点记忆),移除冗余噪音(流水式信息)。ConversationSummaryMemory,摘要总结记忆组件,将传递的历史对话记录总结成摘要进行保存(底层使用 LLM 大语言模型进行总结),使用时填充的记忆为摘要,并非对话数据。
2026-05-11 17:40:57
771
原创 LLM实现记忆功能思路与常见记忆模式
除了将消息传递给LLM,还可以将消息进行总结,每次只传递总结的信息,而不是完整的消息。这种模式记忆对于较长的对话最有用,可以避免过度使用token,因为将过去的信息历史以原文的形式保留在提示中暂用太多Token。无论是长期还是短期的互动都可以记忆(模糊记忆)减少长对话中使用Token的数量,能记忆更多轮的对话信息。长对话时效果明显,虽然最初使用Token数量较多,随着对话进行,摘要方法增长速度减慢,与常规缓存内存模型相比具有优势。虽然能同时记忆近期和长远的互动内容,但是记忆的细节部分会丢失;
2026-05-06 18:45:39
451
原创 LCEL表达式与Runnable可运行协议
为了尽可能简化创建自定义链,LangChain 官方实现了一个Runnablestream:将组件的响应块流式返回,如果组件不支持流式则会直接输出。invoke:调用组件并得到对应的结果。batch:批量调用组件并得到对应的结果。astreamstream的异步版本。ainvokeinvoke的异步版本。abatchbatch的异步版本。:除了流式返回最终响应块之外,还会流式返回中间步骤。除此之外,在Runnable中还重写了__or__和__ror__方法(对应 Python 中。
2026-05-02 22:46:24
460
原创 OutputParser输出解析器
虽然整体的问题已经回答了,但是返回的内容都是一个字符串,并不是结构化的数据,某些场合下我们需要的仅仅是对应的返回值,而不是多余的内容,就需要对返回的内容进行结构化、格式化或者解析。例如下方为修改后的提示,尽可能先让大语言模型按照特定的规则输出内容,然后再进行解析因此,如果需要 LLM 理解你想要的格式,需要向 LLM 告知要输出的结构信息,当 LLM 进行推理并输出之后,我们需要对 LLM 约定的格式进行解析,于是就诞生了 输出解析器 的概念。简单拆解:输出解析器 = 预设提示 + 解析功能。
2026-05-01 22:17:43
408
原创 Modal组件及使用技巧
在 LangChain 中,无论是 LLM 亦或者 Chat Model 都可以接受/字符串/消息列表作为参数,内部会根据模型的类型自动转换成字符串亦或者消息列表,屏蔽了不同模型的差异。
2026-05-01 22:17:22
315
原创 Prompt组件以及使用技巧
在 Prompt 组件中,默认使用 f-string 方法来格式化变量。f-string 是 Python 3.6 以后版本中引入的一种特性,用于在字符串中插入表达式的值,语法简洁,直接利用 {} 花括号包裹变量或者表达式,即可执行简单的运算,性能较好,但是只限用在 Python 中。为了适配不同的 LLM,LangChain 封装了 Prompt 组件,并且 Prompt 组件是高可移植性的,同一个 Prompt 可以支持各种 LLM,在切换 LLM 的时候,无需修改Prompt。
2026-05-01 14:19:08
534
原创 LangChain简介
小时候我们都玩过乐高积木,通过堆砌各种颜色和形状的积木,我们可以构建出城堡、飞机、甚至整个城市。现在,想象一下,如果有一个数字世界的乐高,我们可以用这样的 “积木” 来构建智能程序,这些程序能够阅读、理解和撰写文本,与我们对话,甚至自主执行特定的任务。提示词、工具、大语言模型就是一个一个积木块,等待着我们来发掘和搭建,而 LangChain 就是那个让我们将这些语言模型乐高积木组合成有趣应用的工具箱。
2026-05-01 01:40:07
776
原创 Flask-SQLAIchemy和Flask-Migrate扩展的配置与使用
我们使用 db.create_all() 将 ORM 模型映射到数据库的表中,但是如果新增了 ORM 模型,或者更新了 ORM 模型,使用 db.create_all() 都不会重新创建表或是更新表。需要先使用 db.drop_all() 删除数据库中的所有表之后再调用 db.create_all() 才能重新创建,但是这样的话,原来表中的数据就都被删除了,这肯定是不行的,于是就有了数据库迁移。
2026-04-30 09:32:35
515
原创 nodejs使用RustFS容器服务搭建对象存储oss
高性能文件读写多端口服务(默认 9000 为 API 端口,9001 为控制台 / 管理端口)兼容 S3 API,可直接用 S3 SDK 对接支持本地文件系统存储,无需额外数据库。
2026-04-29 21:39:29
758
原创 PyTest配置与API测试用例
上面这段代码会重复测试两次,第1次传递的 query 值为 None,并执行代码;”,并根据参数的不同判断测试结果,以检测代码是否正常运行。在 Pytest 中,fixture 是一种用于为测试函数提供预设数据或设置测试环境的机制。简单来说,可以使用 fixture 来为测试提供预设数据和设置测试环境的功能。文件,则使用的是最接近的 fixture。定义好 fixture 后,在测试函数中,可以使用同名的参数直接使用,Pytest 会自动注入。在 Pytest 中,基础的配置可以放在。
2026-04-29 21:13:27
461
原创 react数据大屏四种适配方案
在数据大屏、可视化面板、全屏展示类项目中,固定比例、等比缩放、无拉伸变形是核心需求。传统的 rem、vw/vh 适配方案在大屏场景下容易出现布局错乱、文字模糊、比例失调等问题。这里实现一个开箱即用、支持 4 种缩放模式的 React Hook:useScreenScale,一行代码实现大屏完美自适应,支持等比缩放、宽铺满、高铺满、强制拉伸四种模式,兼容窗口 resize,真正做到一次集成、全端适配。
2026-03-27 14:51:44
316
原创 vue3基于 Vxe Table 实现可拖拽分组 + 动态求和的高级表格
在企业级后台系统中,表格往往需要支持列拖拽分组、分组内数据求和、虚拟滚动等复杂功能。本文基于 Vue3 + TypeScript + Vxe Table + SortableJS,实现一套可拖拽分组、自动计算分组合计、支持虚拟滚动的高级表格组件,解决海量数据下的分组统计需求。
2026-03-23 13:32:50
484
原创 基于 Element Plus 实现表格虚拟滚动
在前端开发中,当表格数据量达到上万条甚至更多时,直接渲染所有数据会导致 DOM 节点暴增、页面卡顿、滚动不流畅等性能问题。虚拟滚动(Virtual Scrolling)是解决这一问题的核心方案 —— 它只渲染可视区域内的 DOM 节点,通过动态计算和偏移模拟完整列表的滚动效果,大幅降低 DOM 渲染压力。
2026-03-23 11:37:10
635
原创 vue3实现时间根据系统时区转换对应的时间
根据系统时区转换,核心思路是利用 JavaScript 的 Date 对象(天然支持本地时区)处理 UTC 时间与本地时间的转换。后端返回的是 UTC 时间(如带 Z 后缀的 ISO 字符串,如 2026-03-23T08:00:00Z),直接传入 formatLocalTime 即可自动转换为本地时区时间。
2026-03-23 10:31:48
314
原创 vue3+vant4实现移动端年月日时分秒
Vant4 作为主流的移动端 Vue 组件库,其 van-date-picker 组件默认仅支持 “年月日” 选择,无法直接满足 “年月日时分秒” 的时间范围选择需求。本文基于 Vue3 + Vant4 技术栈,实现年月日时分秒组件。
2026-03-13 14:58:22
452
原创 vue3+vant4移动端实现时间范围选择
在移动端业务场景中,日期范围选择是高频需求(如订单筛选、时间区间查询)。本文基于 Vue3 + Vant4 技术栈,从零实现一款 “起始 / 结束时间双选” 的日期选择器组件,解决 “结束时间不能早于起始时间”“日期格式统一”“回显兼容” 等核心问题,适配移动端交互体验。
2026-03-13 14:48:35
594
原创 vue3 + vant移动端实现上拉刷新下拉加载
在移动端开发中,下拉刷新、上拉加载是列表类页面的核心交互需求。这里使用vant UI框架van-pull-refresh + van-list组件来实现这功能。
2026-03-13 14:31:54
227
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅