- 博客(121)
- 资源 (7)
- 收藏
- 关注
原创 自动化测试(Pytest)
自动化测试(Playwright)自动化测试(Pytest)Pytest 是一个基于 python 的测试框架,用于编写和执行测试代码。在当今的 REST 服务中,pytest 主要用于 API 测试,尽管我们可以使用 pytest 编写简单到复杂的测试,即我们可以编写代码来测试 API、数据库、UI 等。Pytest 的优点:在不提及文件名的情况下运行 pytest,将运行当前目录和子目录中所有符合格式(test_*.py 或 *_test.py)的测试文件。Pytest 会自动将这些文件识别为测试文件
2025-12-12 17:22:20
603
原创 自动化测试(Web Playwright)
playwright 是由微软开发的 Web UI 自动化测试工具, 支持 Node.js、Python、C# 和 Java 语言。下面介绍如何使用 python 语言编写简单的 playwright 自动化脚本。用例1步骤如下:chrome浏览器打开百度搜索框输入“test”点击百度一下搜索点击搜索结果的第2页用例2步骤:chrome浏览器打开搜狗搜索搜索框输入“test”点击搜狗搜索点击搜索结果的第2页。
2025-12-04 10:35:00
1084
原创 Python 操作 Redis
从 Redis 官网下载压缩包,解压后双击 redis-server.exe 启动,建议配置环境变量方便命令行调用。在集合基础上为每个元素分配分数(score),支持按分数排序和范围查询,适合排行榜、计分系统。Redis 列表是有序可重复的元素集合,底层实现为双向链表,适合实现队列、栈等结构。字符串是 Redis 最基础的数据类型,可存储文本、数字等,最大容量 512MB。无序且唯一的元素集合,支持交集、并集等集合运算,适合标签、好友关系等场景。
2025-11-17 09:52:11
719
原创 dify 源码分析(七)ratelimiter
dify 本地源码启动Ollama 安装部署dify 智能体实践dify 源码分析(一)功能概述dify 源码分析(二)源码结构dify 源码分析(三)agentdify 源码分析(四)toolsdify 源码分析(五)chatflowdify 源码分析(六)eventdify 源码分析(七)ratelimiter运行结果:java1.2. 漏桶算法 (Leaky Bucket)漏桶算法(Leaky Bucket Algorithm)是一种常用的流量整形和速率限制算法。它的工作
2025-11-14 10:58:59
805
原创 dify 源码分析(六)event
Dify平台提供多种AI应用模式:1)文本生成(一次性内容创作);2)聊天助手(多轮对话交互);3)智能体(自主规划与工具调用);4)工作流(自动化业务流程)。各模式在交互方式、技术核心和应用场景上存在差异,从简单的文本生成到复杂的任务自动化处理,形成由简到繁的功能体系。Chatflow作为可视化编排工具,用于构建聊天助手和智能体的后台逻辑。
2025-11-12 17:36:32
681
原创 dify 源码分析(四)tools
以下是workflow 执行流程总结读取配置信息初始化 trace_manager,用于跟踪任务初始化 application_generate_entity ,用于存放运行所需要的信息初始化 queue_manager,通过队列传输线程中的结果启动线程,调用 _generate_workera. 根据节点信息构建 graphb. 依次运行各节点,把结果包成对应 Event 并放进 queue_manager调用 _handle_response。
2025-10-14 17:52:37
1120
原创 dify 源码分析(三)agent
dify 本地源码启动Ollama 安装部署dify 智能体实践dify 源码分析(一)概述dify 源码分析(二)agentdify 源码分析(三)tools2.1. _init_prompt_tools(初始化并转换工具信息)2.1.1. _convert_tool_to_prompt_message_toolget_agent_tool_runtime 智能体工具加载并合并工具参数PromptMessageTool 实际为 json2.1.1.1. get_agent_to
2025-10-11 16:16:43
526
原创 dify 源码分析(一)功能概述
BaseAgentRunner:所有 Agent Runner 的基类,提供了基础功能如:工具初始化和转换Agent 思考过程的创建和保存历史消息的组织和处理文件处理CoT Agent Runner:基于 Chain of Thought 的 Agent 实现继承自 BaseAgentRunner实现了反应式思考过程支持多轮迭代工具调用使用 CotAgentOutputParser 解析模型输出。
2025-09-23 16:44:43
1082
原创 OpenAI 实现额外传参
目录 ~\dify\api 里是 dify 的后台代码,使用 python 实现,每个模块内容按文件夹分类如下表所示。模块(文件夹)主要职责与功能configs配置管理,存放环境变量、默认参数、插件配置等静态或全局配置。constants各类全局常量与枚举,如状态码、类型标识、默认值等。contexts请求/业务上下文管理,用于在接口层传递状态、用户信息、追踪等上下文数据。控制层(Controller),处理外部 HTTP 请求、解析参数、调用服务、返回响应。core。
2025-09-23 16:07:27
916
原创 python 实现定时任务
使用 time.sleep 和 threading 模块实现定时任务使用 Timeloop 库实现定时任务使用 threading.Timer 实现定时任务使用内置模块 sched 实现定时任务使用调度模块 schedule 实现定时任务使用任务框架 APScheduler 实现定时任务。
2025-09-17 15:58:08
965
原创 MNIST 线性模型训练过程
super().__init__() # 初始化父类x= input.view(-1, 28*28) # 将输入展平为2维,28*28行,1列作为输入特征,return x定义一个模型,继承自 torch.nn.Module。在init() 中,初始化父类init() 方法;定义网络结构(三个线性结构)。开始输入是一张图片上的28*28=784个像素值特征,这里设定输出为120个。即第一层神经网络传播向第二层时每张图片上的784个输入特征给以一组权重偏置参数,w1*x1+b1+ w2*x2。
2025-09-04 15:51:13
928
原创 Python 进程调用(subprocess)
在 Python 编程中,subprocess 库是一个功能强大的工具,它允许我们创建新进程、连接到其输入/输出/错误管道,并获取其返回代码。
2025-08-27 14:06:45
1122
原创 Python 多进程(multiprocessing)
Python 提供了非常好用的多进程包 multiprocessing,借助这一个包,可以轻松地从单进程到多进程的转换。只需要定义一个函数,Python 会完成其他所有的事情。multiprocessing 支持子进程、通信和共享数据、执行不同形式的同步,提供了Process,Queue,Pipe,Lock 组件。
2025-08-27 11:09:10
1647
原创 python 流式响应 StreamingResponse 和 EventSourceResponse
流式响应在大模型服务中可大大提高用户体验,在 Python 中主要有两种方式实现流式响应,即fastapi 的 StreamingResponse和SEE 模块的 EventSourceResponse,既然两者都可以实现流式响应,那么我们在实际应用中应该如何选择呢?
2025-08-26 12:08:37
851
原创 wxPython 实践(七)GDI 介绍
wxPython 提供了一个称作设备上下文(Device Context, 简称DC)的对象wx.DC,所有的 GDI 绘图都基于该 DC。同时 GDI 还提供基本的绘制工具,包括颜色选择wx.Colour,画笔wx.Pen,画刷wx.Brush,字体wx.Font ,调色板wx.Palette,以及关于空间定位的相关类比如矩形 wx.Rect,区域 wx.Region,点wx.Point,尺寸wx.Size等来共同构成整个GDI系统。
2025-08-02 22:36:24
1041
原创 wxPython 实践(五)高级控件
wxPython 实践(一)概述wxPython 实践(二)基础控件wxPython 实践(三)页面布局wxPython 实践(四)事件响应wxPython 实践(五)高级控件
2025-08-01 10:10:19
1298
原创 wxPython 实践(四)事件响应
wxPython 实践(一)概述wxPython 实践(二)基础控件wxPython 实践(三)页面布局wxPython 实践(四)事件响应wxPython 实践(五)高级控件。
2025-07-29 10:43:14
1058
原创 wxPython 实践(三)页面布局
wxPython 实践(一)概述wxPython 实践(二)基础控件wxPython 实践(三)页面布局wxPython 实践(四)事件响应wxPython 实践(五)高级控件。
2025-07-29 10:41:37
983
原创 wxPython 实践(二)基础控件
wxPython API包含一个wx.Choice类,其对象也是一个下拉列表,它是永久只读的。尽管控件可以通过指定屏幕坐标的位置来手动放置在面板上,但建议使用一个合适的布局方案,在 wx.Python 中称为 sizer ,以便更好地控制放置和解决大小调整的问题。一个框架中的 Notebook 对象有一个或多个标签(称为页),每个标签有一个显示控件布局的面板。一个 wx.RadioBox 在一个静态框中放置了一组互斥的按钮,该组中的每个按钮都从 List 对象 choices 获取标签。
2025-07-29 10:41:09
878
原创 wxPython 实践(一)概述
wxPython 是一个构建图形用户界面(GUI)的工具包,它为 Python 带来了 wxWidgets 的功能。这个库非常适合创建跨平台的桌面应用程序。使用 wxPython,开发者可以利用 Python 的简洁语法快速设计出丰富的用户界面。wxPython 提供了丰富多样的控件(Widgets),这些控件是构成用户界面的基础元素。在构建桌面应用程序时,熟练使用和理解这些控件是必不可少的。wx.Button : 最基本的按钮控件,用于触发事件。wx.StaticText : 显示静态文本信息的控件。
2025-07-29 10:40:12
781
原创 FFmpeg 安装与使用
如果 TS 文件包含特定的编码或封装格式需要被转换(例如从 MPEG-TS 封装转换为 MP4 封装),可以省略 -c copy 选项,让 FFmpeg 自动选择合适的编解码器进行转换。-safe 参数是 FFmpeg 中用于控制文件路径安全检查的选项,主要在使用 -f concat 进行文件拼接时使用。-i playlist.txt 是一个文本文件,包含所有 TS 文件的路径,每一行一个文件路径。ffmpeg [全局参数] -i [输入文件] [输出参数] [输出文件]-vn:忽略视频流。
2025-07-28 10:12:19
6131
原创 Python 封装继承多态
重写指的是子类重新定义父类中已有的方法,子类的方法会覆盖掉父类的同名方法。当调用该方法时,执行的是子类中重写后的方法逻辑,而非父类原有的逻辑。子类能在继承父类的基础上,添加新的属性和方法,或者对父类的方法进行重写(覆盖),以实现特定功能。类的继承是一种面向对象编程的重要特性,允许一个类(子类、派生类)继承另一个类(父类、基类、超类)的属性和方法。执行对象方法时,优先去当前对象所关联的类中找,没有的话才去她的父类中查找。可以通过调用继承的父类的共有方法,间接的访问父类的私有方法、属性。
2025-07-27 00:29:00
714
原创 Python 面向对象基础
面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。类就是一个模板,模板里可以包含多个函数,函数里实现一些功能。对象则是根据模板创建的实例,通过实例对象可以执。# obj.xdel obj.x由于属性和实例变量的调用方式相同,所以在编写时属性名称不要实例变量重名。一旦重名,可能就会有报错。如果真的想要在名称上创建一些关系,可以让实例变量加上一个下划线。
2025-07-26 23:10:07
1015
原创 python 线程锁
线程锁是一种同步原语,用于协调多个线程对共享资源的访问。它的主要目的是防止多个线程同时修改同一资源,从而避免数据竞争和不一致性问题。当一个线程需要访问共享资源时,它首先尝试获取锁。如果锁是可用的,该线程获得锁,并可以安全地访问共享资源。如果锁已被其他线程持有,当前线程将被阻塞,直到锁被释放。线程完成对共享资源的访问后,必须释放锁,以允许其他线程访问该资源。通过这种机制,线程锁确保在任何给定时刻,只有一个线程可以访问受保护的共享资源,从而维护了数据的一致性和完整性。
2025-07-24 15:36:22
1269
原创 python 线程池
线程池(Thread Pool)是一种高效管理多线程任务的机制,通过复用固定数量的线程来处理多个任务,避免频繁创建和销毁线程的开销。线程池在系统启动时即创建大量空闲的线程,程序只要将一个线程执行函数提交给线程池,线程池就会启动一个空闲的线程来执行它。当该函数执行结束后,该线程并不会死亡,而是再次返回到线程池中变成空闲状态,等待执行下一个函数。此外,使用线程池可以有效地控制系统中并发线程的数量。
2025-07-24 11:38:46
1558
原创 Python 爬取 M3U8 视频文件
m3u8 是一种基于文本的媒体播放列表文件格式,通常用于指定流媒体播放器播放在线媒体流。它是一个简单的文本文件,其中包含多个由 URI 引用的媒体资源文件的 URL。m3u8 文件通常包含多个 ts 文件的链接,这些 ts 文件是实际的视频和音频数据文件,通常是通过 HTTP 协议传输。ts 文件是一种流媒体传输格式,是 MPEG-2 传输流(MPEG-2 Transport Stream)的缩写。ts 文件通常用于存储视频、音频和字幕等媒体数据,是流媒体传输的基本单位。
2025-07-23 18:21:19
1243
原创 M3U8 文件格式详解
M3U8 是 Unicode 版本的 M3U,用 UTF-8 编码。M3U 和 M3U8 文件都是苹果公司使用的 HTTP Live Streaming(HLS) 协议格式的基础,这种协议格式可以在 iPhone 和 Macbook 等设备播放。可以看到,m3u8 文件其实是 HTTP Live Streaming(缩写为 HLS) 协议的部分内容,而 HLS 是一个由苹果公司提出的基于 HTTP 的流媒体网络传输协议。
2025-07-23 16:00:36
3783
原创 python 流式请求(基于 httpx)
次要参考:https://blog.csdn.net/gitblog_00079/article/details/139587558https://blog.csdn.net/gitblog_00626/article/details/141801526https://www.cnblogs.com/kaibindirver/p/18755942https://juejin.cn/post/7088892051470680078https://cloud.tencent.com/developer/
2025-07-15 17:30:42
683
原创 python 协程进阶
Eventloop 是 asyncio 应用的核心,把一些异步函数注册到这个事件循环上,事件循环会循环执行这些函数。当执行到某个函数时,如果它正在等待 I/O 返回(如它正在进行网络请求,或者 sleep 操作),事件循环会暂停它的执行去执行其他的函数;当某个函数完成 I/O 后会恢复,下次循环到它的时候继续执行。因此,这些异步函数可以协同(Cooperative)运行:这就是事件循环的目标。主线程和跑的协程函数是在同一个线程中。
2025-07-10 17:48:22
469
原创 MCP 实践(四)Context
Context 对象给 MCP Server 提供了更多获取客户端信息、以及和客户端进行交互的接口。request_idclient_id服务端的 session 对象可以发送服务端的日志给客户端在处理一些耗时操作时,可以在处理过程中发送处理进度给客户端当服务端需要客户端的大模型能力时,可以调用客户端的大模型能力通过 Context,可以实现更加复杂的需求。注意,Context 对象只能在 Tool 中使用,不能在 Resource 和 Prompt 中使用。
2025-07-08 12:02:32
912
原创 MCP 实践(三)标准能力
Resources 是 Model Context Protocol (MCP) 中的一个核心原语,它允许 servers 暴露可以被 clients 读取并用作与 LLM 交互的上下文数据和内容。提供数据和上下文信息只读操作类似 REST API 的 GET 请求使用 URI 风格的路径适合缓存读取文件内容获取配置信息查询数据库数据获取系统状态每个 resource 都由一个唯一的 URI 标识,并且可以包含文本或二进制数据。
2025-07-04 18:31:00
916
原创 MCP 实践(二)传输机制(Streamable HTTP)
HTTP + SSE 存在的问题 和 Streamable HTTP 的改进:https://developer.aliyun.com/article/1661971HTTP+SSE 的传输过程实现中,客户端和服务器通过两个主要渠道进行通信:(1)HTTP 请求/响应:客户端通过标准的 HTTP 请求向服务器发送消息。(2)服务器发送事件(SSE):服务器通过专门的 /sse 端点向客户端推送消息,这就导致存在下面三个问题:• 服务器必须维护长连接,在高并发情况下会导致显著的资源消耗。• 服务器消息只
2025-07-03 12:11:13
1959
原创 MCP 实践(二)传输机制
MCP(Model Context Protocol)模型上下文协议提供三种核心的通信模式:STDIO、SSE 和 Streamable HTTP,在不同的场景中为开发者提供了灵活且高效的数据传输方式。今天,我们将一起深入分析这三种模式,探讨它们的应用场景与差异。参考: https://blog.csdn.net/2401_85375151/article/details/148841215。
2025-06-25 17:30:20
1362
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1