当前位置: 首页 > news >正文

【AI学习笔记】Coze平台实现将Excel文档批量导入数据库全过程

背景前摇&原视频教程:

最近看到很多同学都在用Coze平台操作数据,我也想了解一下工作流的搭建和数据处理过程,但是一下子又看不懂太复杂的逻辑,于是上B站搜索相关的基础教程。

Coze官方教程:

之前有看过Coze平台的官方教程:传送门
https://www.bilibili.com/video/BV1zC35eFEyN?spm_id_from=333.788.videopod.sections&vd_source=cdfd0a0810bcc0bcdbcf373dafdf6a82
在这里插入图片描述
但是这个教程稍微有些太基础了,学完以后面对真实数据处理场景还是一脸懵逼。而且实操案例的那一p视频顺序有些乱,跟不上思路。
但如果是完全零基础的小白,建议还是先看看官方教程的视频和文档,对Coze的一些诸如创建智能体、各类节点是做什么的有一个基础了解。

@包子AI实验室 的教程:

我换了搜索关键词,在B站上搜“Coze数据处理”相关的视频,然后发现一个还不错的视频专栏——来自@包子AI实验室 的实操系列视频。
在这里插入图片描述

本文写作目的:

因为我最常见的用法就是通过Coze操作Excel数据表,所以我最先看的就是《【Coze 功能全解】工作流之“Excel 文档批量导入数据库”》这一篇,然后自己实操了整个流程。
在模仿学习的过程中,作为经验几乎为0的小白,我发现我还是遇到了很多疑难卡点,因此决定把原视频中省略的一些细节,以及我解决问题的一些参考资料记录下来。

正文:

数据准备:

首先我们需要准备一个Excel表格,这个表格的名字跟着作者起名“书籍列表_测试.xlsx”即可(其实这个名称不重要,随便叫啥都行)。如果能要到下图这个原作者的Excel文件更省心,我这里就自己随便照着视频截图写了几行数据。
原作者的Excel表
这个书籍列表里需要有四个字段,并且字段名要严格一致:title,author,purchase_price,description。
具体数据写个几排意思一下就好。
在这里插入图片描述
如果不想自己编,可以直接复制我用的数据:

titleauthorpurchase_pricedescription
活着余华35我只想活着
哈利·波特系列J.K.罗琳299魔法世界
小王子安托万·德·圣埃克苏佩里25童话故事
1984乔治·奥威尔45反乌托邦小说

新建数据库:

准备好数据以后,我们需要去Coze平台新建一个名为book_list的数据库。
1.可以通过工作空间——资源库——右上角新建——数据库来新建数据库。
在这里插入图片描述
2.也可以在Agent智能体页面点击+号,弹出的页面支持添加已有现成的数据库,也支持新建数据库。
在这里插入图片描述
如果要新建数据库的话,步骤是:点击”新建数据库“——自定义数据表,然后建立一个新数据库。
在这里插入图片描述

输入数据库信息:

进入新建数据库页面以后,就需要输入数据库的名称和描述,这里我们就按照原作者的来,数据表头像这个无所谓,可以用默认的,也可以点击旁边的按钮让AI重新生成一个:
在这里插入图片描述在这里插入图片描述
我们一共需要4个字段,按照原作者这样填写就可以,注意,这几个自定义字段的名称,author,title,puchase_price,description,一定要和Excel文件的列名完全一样!不然可能导致数据无法正确对应,后续编写插件的时候,代码无法正常运行。
在这里插入图片描述
不然,在读入Excel
假设我们初学就简单点,按照完全对应关系来建立数据库,字段就按照下图原作者的抄成一模一样的:
在这里插入图片描述
创建完成后,应该这个数据表会长得跟我这张截图一样:
(关于上面的默认字段,我想应该是版本差异问题?看原作者的数据表里面没有那4个删不掉的默认字段)
在这里插入图片描述

创建Bot:

我们创建一个名为”批量导入数据库数据“的Bot。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

智能体如何与数据库交互:

原作者提供了两种思路。
1.把文件发给智能体。配合提示词(打字对话),跟智能体说,把这个文件的内容插入到数据库。在这里插入图片描述
但原作者发现这个方法行不通,经过我测试,确实也不行。
在这里插入图片描述
2.通过拼接SQL来实现数据库增删改查,也就是我们现在采用的这套工作流的思想。
获取用户上传的Excel文档地址——》读取文档内容——》拼接成SQL语句——》数据库节点执行SQL实现添加数据。
原作者本来想直接使用Coze的代码节点来实现读取文件链接,并且读取文档内容形成SQL的方法,但是发现代码节点不支持安装Python包。
(读取文件链接需要pandas等依赖包,但是代码节点装不了,就没法解析Excel)
在这里插入图片描述
于是,只能先创建一个插件,插件就支持安装读取Excel链接必要的Python依赖包,先在插件实现了读取文件链接拼接SQL的功能,然后再在工作流里面调用插件,把SQL写入数据库,最后再把这个工作流给智能体,并且配合提示词,让智能体知道,每次我们给他发个文件链接,就是希望用到这个工作流。

实现流程示意图:

我按照自己的理解画了一张示意图,这里面有一些陌生的工作流和插件的名字,没关系,我们后面会一一讲到他们是什么。
在这里插入图片描述

实现读取文件链接功能的插件:

官方插件的尝试和不足:

在新建插件以前,作者先尝试了一个名为“文件读取”的官方插件,这个本来读取文件链接没有什么问题,但是在对文件内容进行处理时,作者提到,“只能通过大模型来输出SQL,这样便对文档的长度做出了限制。倘若文档过长,便会导致输出内容不完整。”
在这里插入图片描述
“只能通过大模型来输出SQL”——这一点我也不是很明白是什么意思,也许是这个文件读取节点返回的数据很有限,只能喂给大模型节点,配合提示词来依赖大模型生成SQL?也就是说,这个SQL能不能把数据完好无损地插入数据表,全靠大模型自身对数据的理解和整合SQL的能力???如果模型不靠谱,那么就可能导致插入失败,或者漏数据,数据错位??
“这样便对文档的长度做出了限制。倘若文档过长,便会导致输出内容不完整”——这个我猜测是不是大模型的输出有token限制?如果要插入的数据很多的话,SQL语句会很长,超出限制了模型没法写完,自然插入就会少内容。

我打开这个文件读取的示例,手动连了下工作流测试,看看输入输出。我们就看下图上面那个红框内的输出就好,下面的红框是正式工作流,后面会讲到。
在这里插入图片描述
在看工作流的结果之前,先点开节点看看示例输入输出:
在这里插入图片描述
文件读取这个节点的输入就是一个普通的url,没什么操作空间:
在这里插入图片描述

{"url": "https://lf-bot-studio-plugin-resource.coze.cn/obj/bot-studio-platform-plugin-tos/lyc_test.docx"
}

文件读取节点的输出
在这里插入图片描述

{"code": 0,"data": "## 4.1角色游戏中小班幼儿同伴互动主要类型的分析\n\n表2 幼儿角色游戏同伴互动分布表\n\n|      互动类型 |           次数|            百分比||\n|---|---|---|---|\n|        合作|             46|            42.6% ||\n|        冲突|             37|           34.3% ||\n|        协商|             25|           23.1% ||\n\n\n\n通过观察,发现小班幼儿角色游戏同伴互动的类型中,合作、冲突和协商出现的频率最高,所以将这三个维度作为研究的重点。由表2可知,幼儿的合作行为最多,共46次,占42.6% ;冲突行为其次,共37次,占34.3% ,协商行为最少,共25次,占23.1% 。\n\n### 4.1.1 合作行为最多\n\n案例1:我们一起烤串吧\n\n      ![img](福\n-\n♠)\n\n                   图1 我们一起烤串吧场景图\n\n希希一个人在摆摊烤串,依依看到之后走了过来说:“我们一起烤串可以吗希希?”希希说:“好啊,我们一起烤。”不一会儿,烧烤摊旁边的小朋友越来越多,他们一起围在桌子旁边做起了烧烤。但是烤炉只有一个,好几个小朋友都抢着要烤串。老师走过来对他们说:“烧烤店是不是要有收银员和客人呀?”于是幼儿们开始合作开烧烤店,有的幼儿负责烤,有的负责卖,有的幼儿当顾客,他们在一起玩的非常开心。\n\n\n\n","log_id": "20241227172728FE828D29AFD8C77811CD","msg": "success"
}

这是一个json对象,我们需要的文件数据就在“data”字段对应的值里面。
然后我再看了下我刚刚尝试读取的Excel结果,发现翻车了…
在这里插入图片描述
这就很搞人心态了,因为我还专门加了个大模型节点上去,并且班门弄斧了一段提示词,想看看大模型拼接SQL的水平,没想到创业未半而中道崩殂。
(我先看看能否跑通工作流,所以提示词写的很随意,建议不要照抄我的,现在有个观点是用AI就像拜神,祈祷词——也就是提需求的提示词不说明白,神满足不了愿望,所以我这个祈祷词绝对会很loser)
在这里插入图片描述
但是看我们下面那条链路,也就是原作者最终采用的工作流,就十分顺畅地走到了结束,我们还是把重点放在正确的事情上吧。

新建自定义插件“read_excels":

还是点击工作空间——资源库——右上角“资源”按钮——选择“插件”选项。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
进入插件页面,点击“创建工具”,还是照样输入工具名称,说明等信息。
在这里插入图片描述在这里插入图片描述

插件read_excels详细配置:

点击“+”号安装依赖包。
在这里插入图片描述
然后在中间区域粘贴实现功能的代码。
代码是原作者写的,我加了点AI解读的注释,详细功能如果逻辑看不明白,转AI问答。

输入是文件链接,数据表名称,和数据表头字段列表(也就是title,author,purchase_price,description这几个),如果程序执行成功,输出拼接好的SQL,如果程序执行失败,输出报错和网址状态码。

from runtime import Args
from typings.read_excels.read_excels import Input, Output
import requests
import io
import pandas as pd"""
Each file needs to export a function named `handler`. This function is the entrance to the Tool.Parameters:
args: parameters of the entry function.
args.input - input parameters, you can get test input value by args.input.xxx.
args.logger - logger instance used to print logs, injected by runtime.Remember to fill in input/output in Metadata, it helps LLM to recognize and use tool.
每个文件都需要导出一个名为handler的函数。这个函数是工具的入口。
参数:
args:入口函数的参数。
args.input:输入参数,可以通过args.input.xxx获取测试输入值。
args.logger:用于打印日志的日志实例,由运行时注入。
请记得在元数据中填写输入和输出信息,这有助于大型语言模型(LLM)识别和使用该工具。Return:
The return data of the function, which should match the declared output parameters.
"""
def handler(args: Args[Input])->Output:# 文档地址urlurl = args.input.file_link# 数据库表名database_table = args.input.database_table# 数据库表字段名(注意:文档的表头名字必须与数据库表字段名相同)database_table_list = args.input.database_table_listresponse = requests.get(url)values_list = []s = ""m = ""if response.status_code == 200:df = pd.read_excel(io.BytesIO(response.content))for index, row in df.iloc[0:].iterrows(): #使用df.iloc[0:]选择DataFrame中的所有行 使用iterrows()方法逐行遍历DataFramefor i in database_table_list: #遍历database_table_list中的每个字段名s = f"{s}'{row[i]}'," #使用row[i]获取当前行中对应字段的值 将每个值用单引号括起来,并用逗号分隔,拼接到字符串s中values_list.append(f"({s[:-1]})") #每行数据拼接完成后,去掉最后一个多余的逗号(s[:-1]),然后将整个行的值部分以括号包裹的形式添加到values_list中s = "" #清空字符串s,以便下一次循环使用。for i in database_table_list: #遍历database_table_list中的每个字段名m = f"{m}{i}," #将每个字段名用逗号分隔,拼接到字符串m中#使用f-string格式化字符串,构建完整的SQL INSERT语句'''INSERT INTO {database_table}:插入目标数据库表。({m[:-1]}):字段名部分,去掉最后一个多余的逗号。VALUES {', '.join(values_list)}:值部分,将values_list中的每个值部分用逗号分隔。'''content = f"INSERT INTO {database_table} ({m[:-1]}) VALUES {', '.join(values_list)};"else:content = f"无法从网址获取文件,状态码:{response.status_code}"return {"output": content}

代码部分后,在右侧区域输入一个json对象格式的测试用例,点击“运行”查看测试结果。
在这里插入图片描述
注意:每次修改插件,必须要有至少一个测试用例跑过测试流程,不然可能导致插件无法发布,如下图。
在这里插入图片描述
在这里插入图片描述

插件配置的坑:

关于这个插件配置的过程中,有几个我翻车的坑,在这里给大家同步下:

pandas依赖包导入报错:

pandas依赖包明明版本正确,也没有写错名字,但是就是底下标红线,还没有解决办法,删了重新写这行还有一样的问题。
在这里插入图片描述
查了原作者教程视频评论区,这个疑似是Coze的老bug了,刷新重开插件即可。
在这里插入图片描述

输入测试用例怎么写:

原作者的是视频没提到这一点,应该是想到视频受众都有相关基础。
这个输入需要写成Json对象的格式,其中包含了三个键值对:
file_link:文件的 URL 地址。
database_table:数据库表名。
database_table_list:数据库表的字段名列表。

{"file_link": "https://p9-bot-sign.byteimg.com/tos-cn-i-v4nquku3lp/d8c93855ce474d0fad4e375b7aad65c9.xlsx~tplv-v4nquku3lp-image.image?rk3s=68e6b6b5&x-expires=1745072334&x-signature=xfT9Gdp8FB%2Bjkd3neNpY5%2FZa0QI%3D","database_table": "book_list","database_table_list": ["title", "author", "purchase_price", "description"]
}

在这里插入图片描述
这个database的名字要写对,不是Excel文件名,是数据库的名字

输入的这个file_link文件链接如何获取:

输入有三个参数,file_link:文件的 URL 地址,database_table:数据库表名,database_table_list:数据库表的字段名列表。

database_table需要输入数据库的名称,也就是我们定义的book_list。

"database_table": "book_list"

在这里插入图片描述
database_table_list需要跟我们Excel文件当中的列名完全一致。

"database_table_list": ["title", "author", "purchase_price", "description"]

在这里插入图片描述

那么,file_link,文件链接,应该从哪里来呢?
我试过传到飞书的个人云文档,但是发现获取失败。

教程评论区有人问到这个问题,原作者回复最好直接传到Coze服务器。
在这里插入图片描述
那么,如何把Excel文件(图片也可以)传给Coze平台,并且得到对应链接呢?

把文件发给智能体让他返回链接:

其实很简单,只需要随便创建个智能体,把文件/图片发给他,提示词写上需要他返回文件链接,就可以了。
例如:
给这个智能体发张屏幕截图,要求他返回链接。
在这里插入图片描述
再比如,给智能体发个Excel,然后请他返回文件链接:
在这里插入图片描述
当然,智能体的回复也有不稳定的时候,他找各种理由不愿意,没关系,改改提示词,多许几次愿。
(有句话说得好,重复是最好的催眠,这我感觉对于AI也适用)
在这里插入图片描述

在调试区域找文件链接:

另外,还可以按照原作者在评论区说的方法。
在这里插入图片描述

点开“调试”按钮,在智能体的思考过程中,找到这个文件或者图片的对应链接。
在这里插入图片描述
等调试页面出现后,向下滚动,即可找到模型传入的链接参数。
在这里插入图片描述

获取图片/文件链接的原理:

关于为什么可以通过以上两种方法获取图片/文件的链接,这就必须要搬出我搜到的另一个@大圣AI超级个体 的教程了:传送门
https://www.bilibili.com/video/BV18s421M78V/?spm_id_from=333.337.search-card.all.click&vd_source=cdfd0a0810bcc0bcdbcf373dafdf6a82
在这里插入图片描述
大概原理我摘抄过来了:

图片和文件在Coze中,都是被转换成链接处理的。也就是说,我们不用自己把图片上传到某个自已的图床,然后转换成链接给到扣子,扣子它本身就会把图片存到自己的服务器,然后转换成链接供后续使用。
所以,后面我们处理图像流也好,OCR工作流识别也好,都是用这个链接作为一个输入的——处理文件的时候,其本质是处理文件的链接。只要能把文件转成URL,剩下的就和文字处理是类似的了。

所以,即便是这位UP主演示的,这样什么提示词都没有的空白草台班子智能体。也是可以返回存储图片/文件的链接的。
在这里插入图片描述

搭建专门的“文件上传测试机器人”:

视频中还介绍了把这个功能专门包装成了一个智能体,名为“文件上传测试机器人”,只要跟着知道提示词写哪里,工作流怎么搭建就能跟着这个视频完成。
我在这只放出我跟着视频里面敲的提示词、工作流等关键要点截图,就不仔细详解该怎么搭这个返回链接用的智能体了。
在这里插入图片描述
人设与回复逻辑——提示词:

你是一个文件处理工具机器人。
### 处理文件
当用户上传文件时,你会返回该文件的url给用户。### 处理图片
1.当用户上传一张图片时,你应该首先获取图片的链接。
2.然后将图片的链接作为参数调用工作流{image_ocr}
3.你应该使用将图片的地址作为入参'image_url'传递给工作流{image_ocr}

image_ocr工作流:
这个工作流的主要作用是接受图片链接,理解图片内容并输出。
我们就把下面这个截图的链接喂给智能体,然后把返回的链接传给工作流识别测试一下。
在这里插入图片描述
在这里插入图片描述
点击打开工作流,把图片链接给它,能看到更直观的节点运行过程:
在这里插入图片描述
开场白文案——非必须,可以根据发布时提供的AI自动生成文案修改:

嗨,我能处理各种文件和图片哦。你好呀!如果你想要获取文件的url,请把你的文件发给我吧,如果你发我的是图片,除了返回url,我还能解读图片内容噢~

如果还有不清楚的,建议辅助原视频学习搭建测试。

batch_import工作流搭建:

我们已经介绍完了read_excels插件中涉及到的代码,以及输入参数必须的图片链接该如何获取,现在让我们回到主线,搭建完整的Excel链接读取、SQL写数据库的工作流batch_import。
可以理解为,read_excels是一块拼图,batch_import工作流是一整块大图,有了read_excels才能完整实现功能。
之前为了测试官方的插件,我在原作者工作流的基础上加了一条和主流程互不干扰的测试链路,大家可以忽略上面那条线,只需按照原作者的工作流搭建下方的线路。
在这里插入图片描述

完整工作流:

怕大家不清楚,放出一张大家可以照抄的图:
blog.csdnimg.cn/direct/fb90178413b646ab9dc78793a545737e.png)

详细解读:

第一个节“开始”节点接受读者传入的url,然后进入一个代码节点。
在这里插入图片描述
代码节点双击打开,点击”在IDE中编辑“——切换编程语言为Python,并且删除多余的变量,比如key,key2,“输出”那一栏按照现有逻辑,只需保留key1。
在这里插入图片描述
粘贴下列代码:

async def main(args: Args) -> Output:params = args.paramsarray = params["input"].split(",")ret: Output = {"key1": array,}return ret

这段代码定义了一个异步函数 main,它的作用是接收一个输入字符串,将字符串按照逗号分隔成一个列表,然后将这个列表作为值,以键 “key1” 存储在一个字典中并返回。
在这里,input是一句话,里面是我们输入的四个book_list字段名,代码节点会帮我们分割成列表,并且给下一个节点。
在这里插入图片描述
接下来,代码节点即可链接我们之前做好的read_excels插件。在这里插入图片描述
file_link是我们传入的文件url,database_table就是我们数据表的名字,book_list,database_table_list就是我们代码节点解析出的字段列表。
在这里插入图片描述
read_excels当中的代码会把我们传入的参数自动拼接成符合SQL语法的INSERT语句,并且将SQL语句传给下一个数据库自定义节点。
原作者的工作流这里数据库节点跟我名字不一样,其实就是双击节点名字改了下。
在这里插入图片描述
这里如果发现老代码报错SQL执行失败,但是传入的参数又都是正确无误的,建议看看是不是read_excels插件里面代码的问题。

content = f"INSERT INTO {database_table} ({m[:-1]}) VALUES {', '.join(values_list)};"

这句代码如果空格少了,比如写成f"INSERT INTO{database_table},看着不影响什么,但是会导致SQL报错,就是这么邪门。
在这里插入图片描述
最后,链接结束节点,选择“返回文本”,(返回变量只能得到单纯变量的值,返回文本才可格式化输出其他信息),这里我们让结束节点输出我们成功插入的行数。
在这里插入图片描述
试运行工作流,如果无误的话,打开book_list数据库,会发现Excel中原有的4行数据已经插入成功了。
在这里插入图片描述在这里插入图片描述
注意,目前没有去重功能,如果多次执行工作流,并且传入同一个文件链接,会导致数据库中有重复数据,不过可手动勾选删除。
在这里插入图片描述

智能体制作:

最后即可搭建一个智能体,将batch_import工作流加到智能体的“工作流”部分,book_list加到智能体的“数据表”部分,这样智能体在遇到符合这个工作流应用场景的需求的时候,就知道自己判断调用这个工作流了。(如果在人设和回复逻辑那里写一些提示词,效果会更好!)
在这里插入图片描述

快捷指令添加:

为了进一步简化调用这个功能的流程,可以给智能体加一个快捷指令。
在这里插入图片描述
输入按钮指令名称,类型,描述等,勾选“直接使用插件、工作流”,然后在弹窗中选择刚刚搭建好的batch_import工作流。
在这里插入图片描述
在“组件”栏写上组件名称,描述,并且把组件类型改为“上传文件”。
在这里插入图片描述
指令内容,我理解为一个简单的提示词。只要执行了这个快捷指令,相当于就是同时给模型发送了文件+这段预设好的指令。
在这里插入图片描述
到这里,智能体制作就完全结束了。

评论区提到的其他讨论问题:

最大数据量的限制:

这个问题我目前没遇到,看评论区讨论的内容,似乎扣子工作流对于运行时间超过一定限制的情况有超时处理?
在这里插入图片描述在这里插入图片描述
在Coze官方文档中,也有关于超时限制的描述:传送门
https://www.coze.cn/open/docs/guides/workflow_limits
在这里插入图片描述
我把原始数据文件复制粘贴到了超过200行,然后再喂智能体测试看看:在这里插入图片描述
果然报错了。
在这里插入图片描述
看看调试部分。
在这里插入图片描述
果然是插件工具调用这里就开始报错:
在这里插入图片描述
把错误给KIMI解读一下:
在这里插入图片描述
关于评论区这位大神提到的异步运行的方法,我在扣子官方文档传送门里面查了下,但是似乎只有扣子专业版用户才能使用异步。
在这里插入图片描述
https://www.coze.cn/open/docs/developer_guides/workflow_run?from=search
在这里插入图片描述
异步这块我也不是很了解,看了一下扣子官方文档的《查询工作流异步执行结果》部分传送门,好像之前看到别的同学的代码似乎有跟这部分相似的内容,我还正好没太读懂这部分,或许可以结合今天发现的官方文档内容辅助理解。
对于这篇文章,就先不涉及异步的探索内容了,如果有突破性进展,也许会再写一篇学习笔记记录。

扣子平台官方文档关于开启异步工作流的方法:https://www.coze.cn/open/docs/guides/use_workflow
传送门
打开链接后向下滚动网页:
在这里插入图片描述
按照官方文档,我尝试把batch_import节点开启异步:
在这里插入图片描述
在这里插入图片描述
然后再把那个200多行的文件喂给模型,确实是返回了异步执行的回复内容。在这里插入图片描述
这个时候再跟智能体聊别的跟读取文件无关的内容,他也能响应。
在这里插入图片描述
但依旧没有读取成功,报异常System exception, please try again later(我想应该就是我没开通要氪金的Coze专业版??)
在这里插入图片描述
完整对话:
在这里插入图片描述

相关文章:

【AI学习笔记】Coze平台实现将Excel文档批量导入数据库全过程

背景前摇&原视频教程: 最近看到很多同学都在用Coze平台操作数据,我也想了解一下工作流的搭建和数据处理过程,但是一下子又看不懂太复杂的逻辑,于是上B站搜索相关的基础教程。 Coze官方教程: 之前有看过Coze平台…...

c++之迭代器

一.迭代器的基本概念 1.什么是迭代器 迭代器是一种对象,它提供了一种访问容器中各个元素的方法,同时隐藏了容器内部的实现细节。简单来说,迭代器就像是一个指针,它可以指向容器中的某个元素,并且能够通过一些操作&am…...

Elasticsearch 索引

一、简介 在 Elasticsearch 中,索引(Index)是存储相关文档的地方,类似于关系数据库中的数据库。索引是 Elasticsearch 中最重要的概念之一,用于组织和存储数据。 二、索引的基本概念 索引(Index&#xf…...

Java EE(16)——网络原理——TCP协议解析二

4.滑动窗口(效率机制) 上篇博客讲到的确认应答/超时重传/连接管理都是安全机制,但也会降低传输效率。滑动窗口就是在保证可靠传输的基础上,尽可能地提高传输效率。 根据确认应答机制,客户端每发送一个请求都需要收到服务器的确认应答报文后才…...

解决address already in use报错:如何查看占用某个端口的程序并杀死

文章目录 问题背景解决策略概述端口占用诊断步骤 1:确认占用端口的进程步骤 2:确认进程的详细信息 解决端口占用问题方案 1:安全终止进程方案 2:修改应用配置 最佳实践与预防措施端口使用规范开发环境配置 进阶技巧批量处理端口占…...

linux 设置tomcat开机自启动

tomcat自启动配置 1.添加tomcat.service文件 vim /etc/systemd/system/tomcat.service 2.编辑文件内容,路径修改为自己的 [Unit] DescriptionTomcat8 Aftersyslog.target network.target remote-fs.target nss-lookup.target[Service] Typeoneshot ExecStart/us…...

如何配置本地git

配置本地 Git 主要包含设置用户信息、配置 SSH 密钥、设置 Git 仓库等步骤,以下是详细的配置过程: 1. 安装 Git 在开始配置之前,你需要先安装 Git。不同操作系统的安装方式有所不同: Windows:访问 Git 官方下载页面&a…...

VSCode 生成HTML 基本骨架

在VSCode 新建html文件中敲一个英文感叹号 ! <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><titl…...

蓝桥杯备考:DFS暴搜之健康的荷斯坦奶牛

这道题数据量很小很小&#xff0c;我们可以用dfs暴搜来搜索 这是我们的决策树 #include <iostream> using namespace std; int n, m; const int N 45; int rq[N]; int g[N][N]; int cnt; int path; int ret 45; int st; bool check() {for (int i 1; i < n; i){in…...

android adjust 卸载与重装监测

想要洞察应用内用户的留存率,可以通过Adjust 的卸载与重装进行监测 名词解释: 卸载:集成完成后,卸载应用,安装状态为:卸载 重装:如果应用已经卸载,但一段时间后又进行安装,则会被视为重装。 📢📢📢:adjust 文件中说到24 小时后,可以再 adjust 控制台看安装…...

WPF Reactive 数据绑定

文章目录 Combox 绑定List-通过枚举绑定方法一:方法二:Button 绑定TextBlock绑定NumericUpDown绑定Expander绑定checkbox绑定NumericUpDownCombox 绑定List-通过枚举绑定 方法一: ViewControl using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; usin…...

2.创建Collection、添加索引、加载内存、预览和搜索数据

milvus官方文档 milvus2.3.1的官方文档地址: https://milvus.io/docs/v2.3.x 使用attu创建collection collection必须要有一个主键字段、向量字段 确保字段类型与索引类型兼容 字符串类型&#xff08;VARCHAR&#xff09;通常需要使用 Trie 索引&#xff0c;而不是 AutoInd…...

yaffs

YAFFS&#xff08;Yet Another Flash File System&#xff09;是专为NAND闪存设计的日志结构文件系统&#xff0c;其核心原理围绕NAND闪存的特性优化数据管理。以下是其关键原理的详细说明&#xff1a; 1. NAND闪存适配 写入限制&#xff1a;NAND闪存需按页写入&#xff08;通…...

CMake-环境变量介绍

文章目录 作用域获取环境变量初始化查看特殊的环境变量 环境变量类似普通变量&#xff0c;但也有些不同&#xff0c;如下&#xff1a; 作用域 在一个CMake进程中环境变量具有全局作用域 获取环境变量 使用ENV操作符获取环境变量&#xff0c;例如$ENV{<name>}&#xff…...

wordpress表单插件CF7调用方式

Contact Form 7(CF7)是WordPress中非常流行的表单插件&#xff0c;以下是其常见的调用方式&#xff1a; 通过短代码调用 在页面或文章编辑器中添加&#xff1a;完成表单设置后&#xff0c;复制表单对应的短代码&#xff0c;然后在需要显示表单的页面或文章的编辑器中直接粘贴…...

小程序开发中的用户反馈收集与分析

我们在开发小程序的过程中根据开发过程中的代码及业务场景,以下是针对需求管理系统的用户反馈收集与分析方案设计: 需求管理系统用户反馈收集与分析方案 一、反馈数据模型设计 // 新增Feedback模型(app/admin/model/Feedback.php) namespace app\admin\model; use think\…...

【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解

【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解 &#xff08;图1-1&#xff09; 一、鸿蒙中App、HAP、HAR、HSP是什么&#xff1f; &#xff08;1&#xff09;App Pack&#xff08;Application Package&#xff09; 是应用发布的形态&#xff0c;上架应用市场是以App Pa…...

Linux:一些命令记录

netstat -antp|grep -i 27017 | awk {print $5}| cut -d: -f1 | sort | uniq -c | sort -n 查看磁盘大小 du -sh /usr/local/* 查看剩余内存&#xff1a; free -m linux下获取占用CPU资源最多的10个进程&#xff0c;可以使用如下命令组合&#xff1a; ps aux|head -1;ps aux|gr…...

Microsoft Edge浏览器的取证分析(基于Chromium)

概述 早在2019年&#xff0c;微软就用Chromium替换了EdgeHTML浏览器引擎&#xff0c;这是微软支持谷歌Chrome浏览器的一个开源项目。通过切换到Chromium&#xff0c;Edge与Chrome浏览器共享一个共同的架构&#xff0c;这意味着用于Chrome浏览器调查的取证技术也适用于Edge。 …...

Java面试黄金宝典6

1. 什么是 CAS 原理&#xff1a; CAS &#xff08;Compare-And-Swap&#xff09;是一种硬件级别的原子操作指令&#xff0c;在 Java 并发编程中常被用于实现无锁算法。其核心逻辑是&#xff1a;在进行数据更新时&#xff0c;会先将内存位置 V 的值与预期原值 A 进行比较&#x…...

【计算机网络】网络编程

文章目录 1. 客户端/服务器2. TCP/UDP协议3. 网络编程套接字-socket3.1 API的使用3.1 DatagramScoket类3.1 DatagramScoket类 4. 通过UDP实现回显服务器程序4.1 服务器代码4.2 客户端代码4.3 代码执行过程4.4 通过UDP实现翻译客户端 5. 通过TCP实现回显服务器5.1 服务器代码5.2…...

算法刷题整理合集(七)·【算法赛】

本篇博客旨在记录自已的算法刷题练习成长&#xff0c;里面注有详细的代码注释以及和个人的思路想法&#xff0c;希望可以给同道之人些许帮助。本人也是算法小白&#xff0c;水平有限&#xff0c;如果文章中有什么错误或遗漏之处&#xff0c;望各位可以在评论区指正出来&#xf…...

【开源宝藏】30天学会CSS - DAY6 第六课 流光文字动画

第 0 步&#xff1a;项目结构 lighting-text/├─ index.html└─ style.cssindex.html&#xff1a;包含列表 <ul>&#xff0c;其中每个 <li> 放一个字母或符号。style.css&#xff1a;设置背景、文字样式&#xff0c;以及关键帧动画&#xff08;lighting&#xf…...

C#与西门子PLC的六大通信库

C#与西门子PLC的六大通信库&#xff1a; 一、S7.NET S7.NET是一款开源的S7协议通信库&#xff0c;支持西门子S7通信。 二、Sharp7 Sharp7与S7.NET一样&#xff0c;是一款.NET版本的S7通信库。 三、Snap7 Snap7是一个开源的C通信库&#xff0c;支持西门子S7通信。 四、Prodave P…...

VScode

由于centos停止了维护 ,后面使用ubuntu 在Ubuntu中用vscode 充当记事本的作用 替代了centos中vim的作用 后面使用vscode编辑 vscode中继续使用makefile , xshell中的cgdb进行debug (半图形写 ,半命令行debug&&运行) 官网下载地址&#xff1a;https://code.visuals…...

Linux文件系统与磁盘管理

文件系统和磁盘管理是Linux系统管理的核心组成部分&#xff0c;直接影响系统的性能、数据安全性和存储效率。本文将从Linux文件系统的基本概念出发&#xff0c;深入探讨其架构、类型、管理工具以及实际操作技巧&#xff0c;帮助读者全面理解并掌握这一关键领域。 第一章&#x…...

【云馨AI-大模型】大模型的开发和应用中,Python、PyTorch和vLLM关系概括

说明 1. Python 定位&#xff1a;基础编程语言。作用&#xff1a;Python 是大模型生态系统的核心语言&#xff0c;几乎所有深度学习框架&#xff08;如 PyTorch、TensorFlow&#xff09;和工具链&#xff08;如 vLLM&#xff09;都通过 Python 接口提供服务。特点&#xff1a…...

AWS SAP学习笔记-概念

1、什么是ETL应用程序&#xff0c;举个例子说明&#xff1f; ETL&#xff08;Extract, Transform, Load&#xff09;应用程序是一种用于数据处理和迁移的工具或程序&#xff0c;它主要负责从多个数据源提取数据&#xff0c;对数据进行转换和清洗&#xff0c;然后将处理后的数据…...

kotlin知识体系(三) : Android Kotlin 中的函数式编程实践指南

前言 Kotlin以函数式编程革新了Android开发&#xff0c;通过高阶函数、扩展函数等特性&#xff0c;帮助开发者构建高可维护性代码。接下来我们来看一下Kotlin 中的函数式编程的各个特性。 1. 高阶函数与 Lambda 表达式&#xff1a;函数作为参数或返回值 在 Kotlin 中&#x…...

SpringBoot3+Vue3实战(Vue3快速开发登录注册页面并对接后端接口、表单项自定义校验规则、Hutool工具类)(4)

目录 一、SpringBoot3Vue3实现基本增删改查。前后端通信交互、配置后端跨域请求。数据批量删除。(博客链接) 二、SpringBoot3Vue3快速开发登录、注册页面并实现对接。 &#xff08;1&#xff09;操作数据表employee(员工信息表)。 <1>修改employee表的字段组成。 <2&g…...

OpenCV图像拼接项目指南

引言 图像拼接是计算机视觉领域中的一个重要应用&#xff0c;它可以将多张有重叠区域的图像拼接成一张全景图。这项技术广泛应用于虚拟现实、医学影像、卫星图像处理等领域。OpenCV作为一个强大的开源计算机视觉库&#xff0c;提供了丰富的工具和函数来实现图像拼接。本文将详…...

机器学习--DBSCAN聚类算法详解

目录 引言 1. 什么是DBSCAN聚类&#xff1f; 2. DBSCAN聚类算法的原理 3. DBSCAN算法的核心概念 3.1 邻域&#xff08;Neighborhood&#xff09; 3.2 核心点&#xff08;Core Point&#xff09; 3.3 直接密度可达&#xff08;Directly Density-Reachable&#xff09; 3…...

使用 Docker 构建 LangChain 开发环镜及 ChatOllama 示例

文章目录 Github官网简介Dockerfilerequirements.txt构建 LangChain 镜像ChatOllama 示例Ollama 示例模拟 tools Github https://github.com/langchain-ai/langchain 官网 https://python.langchain.com/docs/introduction/ 简介 LangChain 是一个用于构建 LLM 驱动的应用…...

持续集成与持续交付:这里有从开发到部署的全流程优化

阅读原文 在上一篇中&#xff0c;我们深入探讨了安全测试的核心内容&#xff0c;强调了它在发现安全漏洞和提升系统安全性中的重要作用。接下来&#xff0c;我们将聚焦于持续集成&#xff08;CI&#xff09;与持续交付&#xff08;CD&#xff09;&#xff0c;这是现代软件开发…...

CH32V208蓝牙内部带运放32位RISC-V工业级微控制器CH32V208CBU6、CH32V208GBU6开发板原理图和PCB

开发板 CH32V208CBU6立创格式的开发板上述链接可下载&#xff0c;官方文件进行了转换&#xff0c;使用前请仔细核对。 CH32V208CBU6原理图&#xff0c;上述图片为芯片部分。已进行DRC。 CH32V208CBU6 PCB三维图&#xff0c;上述图片为芯片部分。已进行DRC。 CH32V208GBU6开发…...

机器臂运动控制算法工程师面试

大厂的经验总结: 一、基础概念理解 请解释机器臂运动学正解和逆解的概念,并分别说明其用途。 正解:已知机器臂各关节的角度(或位移),通过运动学模型计算出机器臂末端执行器在笛卡尔空间中的位置和姿态。用途在于可以根据给定的关节驱动值,预测末端的实际位置,用于运动…...

【一起来学kubernetes】21、Secret使用详解

Secret 的详细介绍 Secret 是 Kubernetes 中用于存储和管理敏感信息&#xff08;如密码、令牌、密钥等&#xff09;的资源对象。Secret的设计目的是为了安全地存储和传输敏感信息&#xff0c;如密码、API密钥、证书等。这些信息通常不应该直接硬编码在配置文件或镜像中&#x…...

Java架构师成长之路

概述 本教程主要从6个方面&#xff0c;全面讲解Java技术栈的知识。 1.性能调优 深入理解MySQL底层原理、索引逻辑&#xff0c;数据结构与算法。使用Explain进行优化分析MVCC原理剖析日志机制解析 2.框架源码 掌握Spring底层原理带你手写一个Spring解析IOC、AOP源码、以及事…...

Cyberchef实用功能之-json line格式文件美化和查询

本文将介绍一下如何使用cyberchef对json line格式数据进行美化方便阅读&#xff0c;以及json line格式数据的批量查询操作。 之前的文章介绍了json格式数据的美化和查询&#xff0c;即Cyberchef实用功能之-json解析美化和转换&#xff0c;Cyberchef实用功能之-批量提取json数据…...

span与span之间的空白如何解决?

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>标题</title> <style>div{background: yellow;}span:first-of-type{background: red;}span:last-of-type{background: blue;}</styl…...

2024年MathorCup数学建模B题甲骨文智能识别中原始拓片单字自动分割与识别研究解题全过程文档加程序

2024年第十四届MathorCup高校数学建模挑战赛 B题 甲骨文智能识别中原始拓片单字自动分割与识别研究 原题再现&#xff1a; 甲骨文是我国目前已知的最早成熟的文字系统&#xff0c;它是一种刻在龟甲或兽骨上的古老文字。甲骨文具有极其重要的研究价值&#xff0c;不仅对中国文…...

3.23学习总结

字符串 String java.lang,String 类代表字符串&#xff0c;Java程序中所有的字符串文字都为此类的对象 字符串的内容是不会发生改变的&#xff0c;它的对象在创建之后不能呗更改 字符串的内存模型 当使用双引号直接赋值时&#xff0c;系统会检查该字符串在串池中是否存在。 …...

RT-Thread CI编译产物artifacts自动上传功能介绍

近期在RT-Thread开源项目中&#xff0c;我们引入了一项实用的功能改进——将每次CI&#xff08;持续集成&#xff09;编译生成的产物&#xff08;artifacts&#xff09;自动上传到GitHub&#xff0c;方便开发者和用户能够更便捷地获取和测试最新的编译结果。 参考链接&#xf…...

Android adb调试应用程序

启动app 有的时候app不是预先安装的&#xff0c;也不能从界面start一个app&#xff0c;这时需要后台拉起app。 $adb shell am start package.name/Activity.name 例如&#xff0c;android原生camera app&#xff0c; 包名为com.android.camera2&#xff0c; mainActivity名为…...

仅靠prompt,Agent难以自救

Alexander的观点很明确&#xff1a;未来 AI 智能体的发展方向还得是模型本身&#xff0c;而不是工作流&#xff08;Work Flow&#xff09;。还拿目前很火的 Manus 作为案例&#xff1a;他认为像 Manus 这样基于「预先编排好的提示词与工具路径」构成的工作流智能体&#xff0c;…...

【嵌入式学习2】函数

目录 ## 函数 ## 函数分类 ## 函数定义 1、无参数无返回值 2、有参数无返回值 3、有参数有返回值 ## 函数声明 ## 局部变量和全局变量 ## 多文件编程 如何避免把同一个头文件 include 多次&#xff0c;或者头文件嵌套包含&#xff1f; 命令行编译文件 头文件包含的…...

平芯微PW5012应用电路

PW5012应用电路板介绍&#xff1a; 1.1 单节和两节锂电池升压 12V 或 9V&#xff0c; 1A 至 3A 电路板&#xff0c; 1.2 应用&#xff1a; 升压电压转换板 1.3 VIN 输入电压&#xff1a; 3V-9V 1.4 VOUT 输出电压&#xff1a; 9V 2A&#xff08;VIN3.7V&#xff09; &#xff0…...

Langchain4J框架相关面试题

以下是关于Langchain4J框架的面试题目及答案 ### Langchain4J基础概念类 1. **Langchain4J框架是什么&#xff1f;它的核心功能有哪些&#xff1f;** Langchain4J是一个用于构建语言模型应用的Java框架&#xff0c;它为开发者提供了一套简洁高效的API&#xff0c;使得在Jav…...

【MySQL】用户管理

目录 一、用户1.1 用户信息1.2 创建用户1.3 删除用户1.4 修改用户密码1.4.1 用户修改自己密码1.4.2 root用户修改指定用户的密码 二、数据库的权限2.1 给用户授权2.2 回收用户权限 结尾 一、用户 1.1 用户信息 MySQL中的用户&#xff0c;都存储在系统数据库mysql的user表中。…...

5.高频加热的原理与常用集成电路介绍

一、高频加热的类型 利用高频电源加热通常由两种方法&#xff1a;电介质加热&#xff08;被加热物体绝缘&#xff09;与感应加热&#xff08;被加热物体导电&#xff09;&#xff0c;详细解释如下&#xff1a; 电介质加热&#xff08;利用高频电压的高频电场导致物体自身分子摩…...