- 博客(817)
- 收藏
- 关注
原创 FastAPI和SQLAlchemy的整合
⼀般情况下,每⼀个功能模块都需要⾃⼰的数据模式(schemas)。数据模式(schemas)是FastAPI模块⽤于数据传递的对象,通过继承pydantic中的类建⽴。多个pydantic模型类组成了完整的schemas。⼀旦我们定义了Pydantic模型,我们可以使⽤ orm_mode 参数将ORM模型转换为Pydantic模型。orm_mode 参数告诉Pydantic将ORM模型视为数据库记录(dict)⽽不是普通的Python对象。
2025-02-10 08:00:00
395
2
原创 FastAPI高级用法之关联复杂查询
isouter=True是否为外链接,True为外连接;full=True:全外连接。label给字段重新命名;
2025-02-09 08:00:00
160
1
原创 FastAPI之各种模型类之间的关联关系
定义关系的第⼀步是创建外键。外键是(foreign key)⽤来在A表存储B表的主键值以便和B表建⽴联系的关系字段。因为外键只能存储单⼀数据(标量),所以外键总是在“多”这⼀侧定义,多篇⽂章属于同⼀个作者,所以我们需要为每篇⽂章添加外键存储作者的主键值以指向对应的作者。注意ForeginKey的参数是<表名>.<键名>,⽽不是<类名>.<字段名>多对⼀关联的外键我们在Author 类中定义了集合关系属性articles ,⽤来获取某个作者拥有的多篇⽂章记录。
2025-02-08 07:15:00
1056
1
原创 SQLAlchemy最新2.0数据库相关操作
session⽤于创建程序和数据库之间的会话,所有对象的载⼊和保存都需通过session对象。在Web项⽬中,⼀个请求共⽤⼀个session对象。func.count:统计⾏的数量。add_all:批量添加对象。func.avg:求平均值。func.max:求最⼤值。func.min:求最⼩值。func.sum:求和。add:添加单个对象。
2025-02-07 07:00:00
571
2
原创 SQLAlchemy-2.0中模型定义和alembic的数据库迁移工具
SQLAlchemy 是 Python 生态系统中最流行的 ORM。SQLAlchemy 设计非常优雅,分为了两部分——底层的 Core 和上层的传统ORM。在 Python 乃至其他语言的大多数 ORM 中,都没有实现很好的分层设计,比如 django 的 ORM,数据库链接和 ORM 本身完全混在一起。SQLAlchemy 是 Python 中一个通过 ORM 操作数据库的框架。SOLAIchemy对象关系映射器提供了一种方法,用于将用户定义的Python类与数据库表相关联,并将这些类(对象)的实例与
2025-02-06 17:28:48
1283
1
原创 FastAPI之参数传递和参数校验
当你需要将数据从客户端(例如浏览器)发送给API时,你将其作为[请求体](request body)发送,请求体是客户端发送给API的数据,响应体是API发送给客户端的数据。当你为它们声明了 Python 类型(在上面的示例中为 int )时,它们将转换为该类型并针对该类型进行校验。这些请求参数是键值对的集合,这些键值对位于 URL的?如果参数的类型是int,float就可以采用Query进行大小校验,或者范围校验。URL请求参数不是路径的固定部分,因此它们可以是可选的,并且可以有默认值。
2025-02-05 17:36:29
895
1
原创 FastAPI的路由和请求参数
Python中的枚举数据类型:是指列出有穷集合中的所有元素,即一一列举的意思。在Python中,枚举可以视为是一种数据类型,当一个变量的取值只有几种有限的情况时,我们可以将其声明为枚举类型。路径参数 emp_id 的值将作为参数传递给你的函数。请求参数,通过路由路径携带的方式:我们称之为路由传参。参数也叫:路由参数。如果你有一个接收路径参数的路径操作,但你希望预先设定可能的有效参数值,则可以使用标准的 Python Enum 类型。路由是把客户端请求的url路径与视图函数进行绑定映射的一种关系。
2025-02-05 15:19:54
325
1
原创 基于需求文档、设计文档、测试用例的测试答疑助手
在本章节,将基于 LangChain 实现一个 mini 的实战案例。这次实战主要完成的任务,就是设计一个测试答疑助手,这个测试答疑助手的主要功能为基于本地的文档和数据,回答给出的自然语言问题,比如一些数据的统计,查找、组合。
2025-01-05 09:26:00
601
1
原创 基于 LangChain 实现数据库问答机器人
在 Retrieval 或者 ReACT 的一些场景中,常常需要数据库与人工智能结合。而 LangChain 本身就封装了许多相关的内容,在其官方文档-SQL 能力中,也有非常好的示例。
2024-12-27 09:36:02
8897
68
原创 AI 智能体开发框架 LangGraph
LangGraph 是一个使用 LLM 构建有状态、多参与者应用程序的库,用于创建代理和多代理工作流。LangGraph 允许定义涉及循环的流程。它提供了对应用程序的流程和状态的细粒度控制。LangSmith 是一个用于构建生产级 LLM 应用程序的平台。它允许您密切监控和评估您的应用程序,以便您可以快速而自信地交付。
2024-12-26 17:00:00
619
8
原创 【大语言模型】LangChain 核心模块介绍(Memorys)
大多数大模型应用中都包含对话功能,而对话功能的基础就是参与者能够基于已经发生的对话和获取到的知识产生新的对话内容。更复杂一点的场景中对话者甚至需要具有一个完整的对世界的认知,再根据对话中的信息对认知不断的进行迭代更新。在LangChain中,这种能力被称为Memory。LangChain根据实际需要的场景,提供了许多用来支持大模型应用实现这种能力的类和方法。Memory 在设计的过程中,主要考虑以下两个方面:上下文管理能力Token的消费控制。
2024-12-25 16:31:42
1786
47
原创 基于 LangChain 手工测试用例转 Web 自动化测试生成工具
在传统编写 Web 自动化测试用例的过程中,基本都是需要测试工程师,根据功能测试用例转换为自动化测试的用例。市面上自动生成 Web 或 App 自动化测试用例的产品无非也都是通过录制的方式,获取操作人的行为操作,从而记录测试用例。整个过程类似于但是通常录制出来的用例可用性、可维护性都不强,而且依然需要人手工介入录制的过程。在 LLM 问世之后,我们便在探索,是否有第二种可能性,由大模型执行功能测试用例,生成自动化测试用例?
2024-12-22 09:44:25
1199
75
原创 【智能体AI Agent开发框架】手工测试用例的 AI 自动化执行
将基于人类语言的测试用例流程通过AI转为自动化执行,可以大大降低自动化测试的实施成本。“打开百度,搜索"python",点击搜索结果中的第一条链接。
2024-12-18 09:07:44
1079
11
原创 【智能体AI Agent开发框架】基于LangChain手工测试用例生成工具
在编写测试用例的过程中,测试工程师会通过需求文档,研发的概要设计等信息编写测试用例,测试用例的输出格式常常为思维导图或者excel等数据信息。在以上的流程中,一个测试工程师可以根据比较详细的需求文档以及研发的概要设计输出对应的测试点,以及测试用例。而如果和人工智能进行结合的话,人工智能代替的工作就是测试工程师目前的位置。
2024-12-16 06:00:00
2819
27
原创 【大语言模型】LangChain 核心模块介绍(Agents)
我们都知道四肢的绝大部分动作都是由大脑决定的,大脑通过中枢神经下发自己的操作指令,四肢就可以按照我们的需求进行动作。而大语言模型其实就相当于一个大脑的角色,其本身是无法直接进行任何操作的。那么就需要一个”中枢神经“,帮助它下发指令,传递反馈信息,这个中枢神经就是 Agent。在官方文档中,有这样的一句说明,讲出了 Agents 的核心。代理的核心思想是使用语言模型来选择要采取的一系列行动。如果在前面学习的过程中,通过 LangChain 让大模型了解的是“怎么思考”。
2024-12-14 08:29:04
833
16
原创 【大语言模型】LangChain 核心模块介绍(Chains、Retrieval、Tools)
Chains 是指调用的序列,这个序列包含 LLM、工具、数据预处理等多个不同类型的步骤。1、使用LangChain LCEL 表达式语言,构建 Chains。2、通过继承旧版 Chain 类的子类而构造的链(不推荐)。其中主要推荐大家使用 LCEL 进行 Chains 的使用。1、使用简单。2、支持多种方式,包含 streaming(流),async(异步),而且开箱即用。3、非常易于观察每个实现步骤。许多 LLM 应用程序需要使用用户的数据而这些数据不属于 LLM 的一部分。
2024-12-13 15:28:39
1841
71
原创 【大语言模型LangChain】 ModelsIO OutputParsers详解
基于前边的章节,LangChain 已经可以轻松实现帮用户拿到大语言模型的输出,然而不难发现,前文介绍的模型调用,显示返回的内容通常是一个类(class)的实例,其中包含了 content 以及其他一些额外的参数。对于模型调用者来说,他们可能只关心 content 的内容,也就是模型对输入内容的回答,或者希望得到一个可操作的数据结构,比如 JSON 格式的数据。
2024-12-12 10:00:00
946
64
原创 【大语言模型LangChain】 ModelsIO LLM 与 ModelsIO ChatModels详解
LangChain 本质上还是对大语言模型的封装,其设计旨在简化对 LLM 的应用,并使应用不局限于特定的大语言模型。所以,大语言模型(LLM)仍然是 LangChain 的核心组件。聊天模型 ChatModels 是 Models 的一种变体,基于语言模型的基础上进行了优化。不同于传统的语言模型,ChatModels 更适合对话场景,因为它是基于消息进行响应和返回的。这意味着用户可以像与真人交流一样与 ChatModels 进行对话,而不需要提供原始文本。
2024-12-11 14:55:01
1328
43
原创 【大语言模型】LangChain ModelsIO与Models I/O Promopts详解
LangChain 实质上是对大语言模型(LLM)的一个扩展封装,其主要目的仍然是为了更好的使用大语言模型。通过 LangChain,用户可以通过输入文本或补充模板信息来获取符合需求的文本输出。不难看出 LangChain 最终操作的结果都是字符串,因此在使用过程中不可避免地涉及到大量的文本处理工作,例如输入的格式化和输出结果的解析等。在 LangChain Models 中输入和输出同样重要,Promots 即为对输入信息的处理。
2024-12-09 13:48:22
1769
67
原创 【大语言模型】LangChain LCEL 表达式语言
LangChain LCEL 的全称为 LangChain Expression Language 即可直译为 LangChain 表达式。为了构造更复杂的 LLM 应用并且更为简便快捷的构造 LLM 应用,Langchain 提供了类似“管道”的形式去声明提示词模板(prompt),即用 “|” 来连接各个组件之间的操作。也就是 LCEL 允许开发者将不同的模块进行简单的形式实现串联。chain = 提示词板 | 大模型调用 | 输出解析器。
2024-12-06 18:22:25
950
23
原创 大语言模型应用开发框架LangChain
对大语言模型的调用实际上是一次或多次上下文无关的独立事件,如果想要实现聊天、问答、API调用甚至一些更复杂的业务场景,直接去调用 API是无法实现的。需要在这个过程里面整合不同类型的业务代码逻辑。LangChain 就是对这些通用逻辑做了封装,让使用者可以不用关注在与大模型之间的交互细节能够更专注在业务本身上,通过组合模块和能力抽象来扩展LLM 的能力,通过chain、agent、model等多种封装工具,提供了扩展 LLM 使用场景、便捷 LLM 调用方式的一系列功能。。模块能力介绍Prompts。
2024-12-05 18:14:11
2119
75
原创 检索增强生成RAG与知识图谱
现有的 ChatGPT的大语言模型中,虽然它本身的功能已经非常强悍了,但是它依然存在一些致命的问题:1.偏见:大语言模型没有分辨好坏的能力,所以在回答问题的时候,如果不做任何调整,可能会返回一些不好的内容,比如性别歧视,种族歧视。2.幻觉:大语言模型有时候并不那么靠谱,返回的内容会让人觉得驴唇不对马嘴。包括信息也无法完全可信。3.信息过时:因为没有联网能力,那么代表着从 2023年x月x日之后所有的信息,它都是不了解的。
2024-12-03 15:34:34
2458
91
原创 Java之String类常用操作
public String(byte[] bytes,String charsetName)':通过使用指定的字符集解码当前参数中的字节数组来构造新的String。public String(byte[] bytes):通过使用平台的默认字符集解码当前参数中的字节数组来构造新的String。2、常量+变量 或者 变量+常量:都会通过new的方式创建一个新的字符串,返回堆空间中此字符串对象的地址。Serializable:可序列化的接口,凡是实现此接口的类的对象就可以通过网络或者本地流进行数据的传输。
2024-11-28 16:08:34
5444
72
原创 怎么做好白盒测试?
白盒测试,又称结构测试或逻辑驱动测试,是一种软件测试方法,它基于对程序内部结构的理解来进行。在这个测试过程中,测试人员就像是有源代码的“盒子”里的操作员一样,关注的是代码的各个组件、算法、数据结构以及控制流程。测试者会检查每一个逻辑路径、循环条件、分支判断等,验证输入是否按预期处理并得出正确的输出结果。白盒测试通常用于单元测试,能提供更深入的覆盖度,但无法揭示用户界面或外部接口的问题。主要应用于单元测试阶段先静态、后动态设计用例一般使用基本路径测试,重点模块使用多种覆盖率标准。
2024-11-20 17:01:13
1590
95
原创 Java-异常处理机制-throws
2、如果父类被重写的方法没有throws异常类型,则子类重写的方法中如果出现异常,只能考虑使用try-catch-finally进行处理,不能throws。“手动抛”:程序在执行的过程当中,不满足指定条件的情况下,我们主动的使用"throw + 异常类的对象"方式抛出异常对象。“自动抛”:程序在执行的过程当中,一旦出现异常,就会在出现异常的代码处,自动生成对应异常类的对象,并将此对象抛出。子类重写的方法抛出的异常类型可以与父类被重写的方法抛出的异常类型相同,或者是父类被重写的方法抛出异常类型的子类。
2024-11-19 15:17:23
5884
74
原创 Java-异常处理机制-try-catch
在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美客户输入数据的格式问题,读取文件是否存在 ,网络是否始终保持通畅等等。异常:指的是程序在执行过程中,出现的非正常情况,如果不处理最终会导致JVM的非正常停止。异常指的并不是语法错误和逻辑错误。语法错了,编译不通过,不会产生字节码文件,根本不能运行。代码逻辑错误,只是没有得到想要的结果,例如:求a与b的和,你写成了a-b。
2024-11-18 17:54:44
9229
62
原创 Java面向对象编程进阶之包装类
一方面,在有些场景下,需要使用基本数据类型对应的包装类的对象。此时就需要将基本数据类型的变量转化为包装类的对象。对于包装类来讲,既然我们使用的是对象,那么对象是不能进行加减乘除等运算。为了使得基本类型的数据变量具备引用类型变量的特征(封装性、继承性、多态性),我们给各个基本数据类型的变量提供了对应的包装类。(装箱)基本数据类型——》包装类 1、使用包装类的构造器;String类型——》基本数据类型、调用包装类的静态方法:parseXxx()(拆箱)包装类——》基本数据类型:调用包装类的xxxValue()
2024-11-14 16:01:32
1250
79
原创 消息队列的测试点
Kafka是一个分布式基于发布/订阅的消息系统;支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以,实时的处理大量数据以满足各种需求场景Kafka 是集群架构的,有多个broker 物理节点,Topic 和 Partition 存储在 broker 物理节点中,ZooKeeper负责维护这些broker,管理着所有的 Topic 和 Partition。如上图所示,一个典型的kafka集群中包含若干producer。
2024-11-08 11:15:00
1198
89
原创 MySQL索引、B+树相关知识总结
在 B+树中,非叶子节点不存储数据,只存储键值,这意味着非叶子节点可以拥有更多的键,从而有更多的分叉。这导致树的高度更低,进一步降低了查询时磁盘 I/O 的次数,因为每一次从一个节点到另一个节点的跳转都可能涉及到磁盘 I/O 操作。
2024-11-06 10:02:38
3297
80
原创 Java面向对象编程高级-枚举类(四)
枚举类型本质上也是一种类,只不过是这个类的对象是有限的、固定的几个,不能让用户随意创建。枚举类的例子举不胜举:星期: Monday(星期-)…Sunday(星期天)性别:Man(男)、Woman(女)月份:January(1月)…December(12月)季节:Spring(春节)…Winter(冬天)三原色:red(红色)、green(绿色)、blue(蓝色)支付方式:Cash(现金)、WechatPay(微信)、Alipay(支付宝)、BankCard(银行卡)
2024-11-04 14:18:52
1026
76
原创 web自动化测试平台开发之核心执行器
pytest_args是一个pytest(Python的测试框架)中的选项,用于在运行pytest命令时传递额外的命令行参数给测试运行器。它可以接受一个字符串列表,允许用户自定义pytest的配置,例如指定测试套件、过滤特定测试模块、设置环境变量等。
2024-10-30 15:19:03
2335
101
原创 Java面向对象编程高阶(三)
e、发现Math类中所有的属性和方法都被static修饰,那么不能创建对象去调用,只能通过类名.属性名、类名.方法名去调用。final修饰变量:既可以修饰成员变量,也可以修饰局部变量。此时的“变量”其实就是“常量”,一旦赋值就不可更改。c、里面的属性全部被final修,方法也是被final修饰,只是省略不写,因为子类没有必要重写。b、Math类没有子类,不能被其他的类继承。final修饰的方法:表示此方法不能被重写。final可以修饰的结果:类、方法、变量。final修饰的类:表示此类不能被继承。
2024-10-29 06:00:00
465
28
原创 Java面向对象编程高阶(二)
静态代码块内部只能调用静态的结构(即静态的属性和方法),不能调用非静态的结构(即非静态的属性和方法);非静态代码块内部能调用静态的结构(即静态的属性和方法),也能调用非静态的结构(即非静态的属性和方法);类中可以声明的结构:属性、方法、构造器、代码块(或初始化块)、内部类。由于类的加载只会执行一次,进而静态代码块也会执行一次;如果声明多个非静态代码块,则按照声明的先后顺序执行;如果声明多个静态代码块,则按照声明的先后顺序执行;每创建当前类的一个实例,就会执行一次非静态代码块;静态代码块的执行要先于非静态;
2024-10-28 13:11:40
558
11
原创 Java面向对象编程高阶(一)
案例:编写一个类实现银行账户的概念,包含的属性有:账号、密码、存款余额、利率、最小余额,定义封装这些属性的方法,账号要自动生成。编写主类,使用银行账户类,输入、输出3个存储的上述信息。方法内操作的变量如果是静态变量(而非实例变量)的话,则此方法建议声明为静态方法。判断当前类的多个实例是否能够共享此成员变量,且成员变量的值是相同的。静态变量:jdk之前,存放在方法区;jdk7之后存放在堆空间。例如:Math中的PI。static用来修饰的结构:属性、方法、代码块、内部类;实例变量:存放在堆空间的对象实体中。
2024-10-28 06:00:00
1037
56
原创 Java面向对象编程进阶(四)
适用性:任何引用数据都可以使用。自定义的类在没有重写Object中equals()方法的情况下,调用的就是Object类中声明的equals(),比较两个对象的引用地址是否相同。(或比较两个对象是否指向了堆空间中的同一个对象实体)。开发中使用说明:面试题:区分和equals()的区别:运算符equals():方法二、toString()方法的使用平时我们在调用System.out.println()打印对象引用变量时,其实就调用了对象的toString()自定义的类,在没有重写Object类的toS
2024-10-25 15:10:18
1353
80
原创 Java面向对象编程进阶(三)
当我们通过子类的构造器创建对象时,子类的构造器一定会直接或间接的调用到其父类的构造器,而其父类的构造器同样会直接或间接的调用到其父类的父类的构造器…正因为我们调用过子类所有的父类的构造器,所以我们就会将父类中声明的属性、方法加载到内存中,供子类的对象使用。举例1:子类继承父类以后,对父类的方法进行了重写,那么在子类中,是否还可以对父类中被重写的方法进行调用?当我们创建子类对象后,子类对象就获取了其父类中声明的所有的属性和方法,在权限允许的情况下,可以直接调用。即为当前new后面和造器对应的类的对象。
2024-10-24 18:49:35
535
23
原创 Java面向对象编程进阶(二)
当我们通过子类的构造器创建对象时,子类的构造器一定会直接或间接的调用到其父类的构造器,而其父类的构造器同样会直接或间接的调用到其父类的父类的构造器…正因为我们调用过子类所有的父类的构造器,所以我们就会将父类中声明的属性、方法加载到内存中,供子类的对象使用。举例1:子类继承父类以后,对父类的方法进行了重写,那么在子类中,是否还可以对父类中被重写的方法进行调用?当我们创建子类对象后,子类对象就获取了其父类中声明的所有的属性和方法,在权限允许的情况下,可以直接调用。即为当前new后面和造器对应的类的对象。
2024-10-24 18:40:22
675
25
原创 Java面向对象编程进阶(一)
此时,我们可以在属性和其他方法前使用“this.”,表示当前属性或者方法所属的对象。此时,我们可以在属性和其他方法前使用“this.”,表示当前属性或者方法所属的对象。子类在继承父类以后,就获取了父类中声明的所有的方法。但是,父类中的方法可能不太适用于子类,换句话说,子类需要对父类中继承过来的方法进行覆盖、覆写的操作。(3)定义类KidsTest,在类的main方法中实例化Kids的对象someKid,用该对象访问其父类的成员变量及方法。子类对父类继承过来的方法进行的覆盖、覆写的操作,就是方法的重写。
2024-10-24 16:32:34
908
30
原创 Java面向对象编程基础(二)
提供给legs属性赋值的setLegs()方法,在此方法中加入legs赋值的判断逻辑if(legs>=0 && legs % 2 == 0);在PersonTest类中实例化Person类的对象b,调用setAge()和getAge()方法,体会Java的封装性。提供给legs属性获取getLegs()方法,此方法对外暴露,使得在Animal类的外部还可以调用此属性的值。导入结构,表示可以导入a包下的所有的结构。g、如果在代码中使用不同包下的同名的类,那么就需要使用类的全类名的方式指明调用的是哪个类。
2024-10-17 06:00:00
1312
44
原创 代码覆盖率Jacoco演练
Jacoco是一个开源的java代码覆盖率工具(官网地址: htps://www.jacoco.orgjacoco)。它使用ASM框架修改被测系统的字节码文件,插入一系列不同维度的boolean[]类型探针,从而可以记录执行过的指令、代码行、分支等,得到多种维度的覆盖率。
2024-10-16 06:00:00
2188
61
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人