向量数据库技术系列五-Weaviate介绍
一、前言
Weaviate 是由德国公司 SeMI Technologies 开发的开源向量搜索引擎数据库。它结合了向量搜索和图数据库技术,旨在为 AI 应用提供高效的数据存储和检索能力。具有以下的特点:
- 高性能向量搜索
Weaviate 支持高效的向量索引和近似最近邻(ANN)搜索,能够在数百万个对象中实现毫秒级的 10-NN 邻近搜索。
- 图数据模型
Weaviate 采用图数据结构来组织数据,支持复杂的查询和分析。
- 机器学习集成
Weaviate 提供了丰富的机器学习模块支持,能够与 OpenAI、Hugging Face 等流行服务和模型集成,实现数据的自动向量化。
- 模块化与可扩展性
Weaviate 的模块化设计允许开发者根据需求选择不同的功能模块,如文本嵌入、生成式 AI 等。
- 丰富的 API 支持
Weaviate 提供了基于 GraphQL 的强大查询语言,支持复杂的向量和结构化数据查询。
- 云原生与高可用性
Weaviate 支持云原生部署,具备容错性和可扩展性,适合企业级应用。
- 灵活部署
Weaviate 提供了多种部署选项,包括开源版本和全托管的云服务
二、基本操作
1、本地docker部署
Weaviate提供了相关的云服务(包括Weaviate,AWS,Google等),也提供了本地部署包括docker,K8S等,本案例介绍基于docker的部署
(1)镜像拉取
首先要本地下载docker并安装,安装完成后使用如下指令,下载最新版本的weaviate镜像。
docker pull semitechnologies/weaviate:latest
默认使用的是官网的docker镜像地址,如果访问受限,可以配置国内的镜像代理地址。可以设置多个
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://docker.1ms.run","https://docker.m.daocloud.io","https://dockerhub.icu"]
下载完成后,可以通过docker images命令查看下载结果。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
semitechnologies/weaviate latest 5fb27d8e5d1f 2 weeks ago 163MB
(2)启动容器
weaviate的启动配置参数有很多,这里先用默认配置启动
docker run -p 8080:8080 -p 50051:50051 semitechnologies/weaviate:latest
其中8080位http的端口,50051为grpc的端口。启动完成后,可以使用docker ps指令查看启动结果
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e50d684ae28 semitechnologies/weaviate:latest "/bin/weaviate --hos…" 9 seconds ago Up 7 seconds 0.0.0.0:8080->8080/tcp, 0.0.0.0:50051->50051/tcp quirky_babbage
也可以访问http://localhost:8080/v1/docs确认是否启动成功
2、创建连接并测试
首先要按照 weaviate-client的python包
pip install weaviate-client
创建与服务容器连接的本地client
import weaviate# 连接 Weaviate
client = weaviate.connect_to_local( host="127.0.0.1", port=8080,grpc_port=50051)try:print(client.is_ready())#连接创建成功,则打印Truefinally:# 关闭连接client.close()
3、创建集合
接下来我们创建一个名称my_collect的集合,为了简单起见,先不指定向量化模型(手动输入向量)。
...# 创建一个名为my_collect的集合collection_name = "my_collect"if collection_name not in client.collections.list_all():#判断是否存在,如果已存在就跳过client.collections.create(name=collection_name,vectorizer_config=Configure.Vectorizer.none(),#先不用使用内置向量化器,需要手动提供向量properties=[#包含两个属性,text和content,都是text类型Property(name="text", data_type=DataType.TEXT),Property(name="content", data_type=DataType.TEXT)])
...
其中,使用client.collections.create进行创建集合,
- name,集合名称。
- vectorizer_config,嵌入式向量的配置,Weaviate支持文本,图片以及多模态的嵌入模型。简单起见,这里先设置为none
- properties,记录的属性设置(可以看做关系型数据的列),示例中包含text和content两个属性。
4、插入,查询,删除数据
插入一条测试数据
..#插入一条测试数据 collection = client.collections.get(collection_name)vector_data = [0.1, 0.2, 0.3, 0.4, 0.5] # 示例向量properties = {"title": "Sample Article","content": "This is a sample article content."}# 插入数据时手动传入向量collection.data.insert(properties=properties, vector=vector_data)print("数据插入成功!")
...
根据名称获取集合,并手动指定该条记录的文本和向量数据,调用insert进行插入数据。
接下来,使用向量数据进行近似查询数据
# 查询向量query_vector = [0.1, 0.2, 0.3, 0.4, 0.5] # 示例查询向量results = collection.query.near_vector(near_vector=query_vector,limit=3 # 返回最相似的 3 条数据)print(results)
删除整个集合
client.collections.delete(collection_name)
以下是完整的示例代码
import weaviate
from weaviate.classes.config import Configure, Property, DataType# 连接 Weaviate
client = weaviate.connect_to_local( host="127.0.0.1", port=8080,grpc_port=50051)try:print(client.is_ready())# 创建一个名为my_collect的集合collection_name = "My_collect_1"if collection_name not in client.collections.list_all():#判断是否存在,如果已存在就跳过client.collections.create(name=collection_name,vectorizer_config=Configure.Vectorizer.none(),#先不用使用内置向量化器,需要手动提供向量properties=[#包含两个属性,text和content,都是text类型Property(name="text", data_type=DataType.TEXT),Property(name="content", data_type=DataType.TEXT)])#插入一条测试数据 collection = client.collections.get(collection_name)vector_data = [0.1, 0.2, 0.3, 0.4, 0.5] # 示例向量properties = {"title": "Sample Article","content": "This is a sample article content."}# 插入数据时手动传入向量collection.data.insert(properties=properties, vector=vector_data)print("数据插入成功!")# 查询向量query_vector = [0.1, 0.2, 0.3, 0.4, 0.5] # 示例查询向量results = collection.query.near_vector(near_vector=query_vector,limit=3 # 返回最相似的 3 条数据)print(results)#删除集合client.collections.delete(collection_name)finally:# 关闭连接client.close()
打印的数据如下:
#True
#数据插入成功!
#QueryReturn(objects=[Object(uuid=_WeaviateUUIDInt('4adabf4b-8798-4639-b654-ca8be4c6f52b'), metadata=MetadataReturn(creation_time=None, last_update_time=None, distance=None, certainty=None, score=None, explain_score=None, is_consistent=None, rerank_score=None), properties={'text': None, 'content': 'This is a sample article content.', 'title': 'Sample Article'}, references=None, vector={}, collection='My_collect_1')])
三、案例实践
按照惯例,接下来我们使用一个具体的案例,并通过指定内置的嵌入向量模型进行文档向量化。
1、启动容器
上面我们使用简单的启动指令。这里使用docke的yml配置文件(docker-compose.yml)启动。
---
services:weaviate:command:- --host- 0.0.0.0- --port- '8080'- --scheme- httpimage: semitechnologies/weaviate:latestports:- 8080:8080- 50051:50051restart: on-failure:0environment:TRANSFORMERS_INFERENCE_API: 'http://t2v-transformers:8080'QUERY_DEFAULTS_LIMIT: 25AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'PERSISTENCE_DATA_PATH: '/var/lib/weaviate'DEFAULT_VECTORIZER_MODULE: 'text2vec-transformers'ENABLE_MODULES: 'text2vec-transformers'CLUSTER_HOSTNAME: 'node1't2v-transformers:image: cr.weaviate.io/semitechnologies/transformers-inference:sentence-transformers-multi-qa-MiniLM-L6-cos-v1environment:ENABLE_CUDA: '0'
volumes:weaviate_data:
启动的配置文件中,主要增加了内嵌向量器text2vec-transformers的环境配置。官网提供了文件生成的工具,可以通过选择相关的模型和参数后,自动生成。
Weaviate支持文本,图片以及多模态的嵌入模型。模型类型如下:
使用如下命令进行启动:
docker compose up -d
如果首次启动,需要下载transformers的模型镜像,耗时较长,需要保持网络的稳定。
2、创建集合
创建集合时,指定嵌入式向量和属性。
if collection_name not in client.collections.list_all():#判断是否存在,如果已存在就跳过client.collections.create(name=collection_name,vectorizer_config=[# 设置嵌入式模型Configure.NamedVectors.text2vec_transformers(name="content",source_properties=["content"], # 可选项,表示对content属性字段进行向量化vector_index_config=Configure.VectorIndex.hnsw() # 可选项,索引算法)],properties=[#包含两个属性,text和content,都是text类型Property(name="content", data_type=DataType.TEXT)])
表示使用text2vec_transformers向量模型对属性为content的值进行向量化处理。
3、插入和检索数据
接下来,插入测试的样本数据,并进行向量化。
#插入测试样本数据 collection = client.collections.get(collection_name)data_objects = [{ "content": "海内存知己,天涯若比邻"},{ "content": "大漠孤烟直,长河落日圆"},{ "content": "春眠不觉晓,处处闻啼鸟"},{ "content": "会当凌绝顶,一览众山小"},{ "content": "海上生明月,天涯共此时"},{ "content": "举头望明月,低头思故乡"},{ "content": "山重水复疑无路,柳暗花明又一村"},{ "content": "不识庐山真面目,只缘身在此山中"},{ "content": "采菊东篱下,悠然见南山"},{ "content": "谁言寸草心,报得三春晖"},{ "content": "忽如一夜春风来,千树万树梨花开"},{ "content": "落霞与孤鹜齐飞,秋水共长天一色"},{ "content": "青山遮不住,毕竟东流去"},{ "content": "春江潮水连海平,海上明月共潮生"},{ "content": "两岸猿声啼不住,轻舟已过万重山"},{ "content": "问渠那得清如许?为有源头活水来"},{ "content": "竹外桃花三两枝,春江水暖鸭先知"},{ "content": "身无彩凤双飞翼,心有灵犀一点通"},{ "content": "众里寻他千百度,蓦然回首,那人却在,灯火阑珊处"},{ "content": "莫愁前路无知己,天下谁人不识君"}]# 插入数据时手动传入向量for data in data_objects:collection.data.insert(properties=data)
插入成功后,进行相似检索,并返回top3的数据
# 查询向量query_text = "明月几时有,把酒问青天"results = collection.query.near_text(query=query_text,limit=3, # 返回最相似的 3 条数据return_metadata=MetadataQuery(distance=True))for o in results.objects:print(o)
搜索的结果如下:
#Object(uuid=_WeaviateUUIDInt('788b83cc-06eb-4167-9ce2-fc0b3b6c54b6'), metadata=MetadataReturn(creation_time=None, last_update_time=None, distance=0.369128942489624, certainty=None, score=None, explain_score=None, is_consistent=None, rerank_score=None), properties={'content': '海上生明月,天涯共此时'}, references=None, vector={}, collection='My_collect_2')
#Object(uuid=_WeaviateUUIDInt('8821cb49-efd4-444f-b459-150979b2910f'), metadata=MetadataReturn(creation_time=None, last_update_time=None, distance=0.4248510003089905, certainty=None, score=None, explain_score=None, is_consistent=None, rerank_score=None), properties={'content': '举头望明月,低头思故乡'}, references=None, vector={}, collection='My_collect_2')
#Object(uuid=_WeaviateUUIDInt('1f1321d9-c47b-4031-895d-c0588923e139'), metadata=MetadataReturn(creation_time=None, last_update_time=None, distance=0.5062708854675293, certainty=None, score=None, explain_score=None, is_consistent=None, rerank_score=None), properties={'content': '竹外桃花三两枝,春江水暖鸭先知'}, references=None, vector={}, collection='My_collect_2')
完整的代码如下:
import weaviate
from weaviate.classes.config import Configure, Property, DataType
from weaviate.classes.query import MetadataQuery# 连接 Weaviate
client = weaviate.connect_to_local( host="127.0.0.1", port=8080,grpc_port=50051)try:print(client.is_ready())# 创建一个名为my_collect的集合collection_name = "My_collect_2"if collection_name not in client.collections.list_all():#判断是否存在,如果已存在就跳过client.collections.create(name=collection_name,vectorizer_config=[# 设置嵌入式模型Configure.NamedVectors.text2vec_transformers(name="content",source_properties=["content"], # 可选项,表示对content属性字段进行向量化vector_index_config=Configure.VectorIndex.hnsw() # 可选项,索引算法)],properties=[#包含两个属性,text和content,都是text类型Property(name="content", data_type=DataType.TEXT)])#插入测试样本数据 collection = client.collections.get(collection_name)data_objects = [{ "content": "海内存知己,天涯若比邻"},{ "content": "大漠孤烟直,长河落日圆"},{ "content": "春眠不觉晓,处处闻啼鸟"},{ "content": "会当凌绝顶,一览众山小"},{ "content": "海上生明月,天涯共此时"},{ "content": "举头望明月,低头思故乡"},{ "content": "山重水复疑无路,柳暗花明又一村"},{ "content": "不识庐山真面目,只缘身在此山中"},{ "content": "采菊东篱下,悠然见南山"},{ "content": "谁言寸草心,报得三春晖"},{ "content": "忽如一夜春风来,千树万树梨花开"},{ "content": "落霞与孤鹜齐飞,秋水共长天一色"},{ "content": "青山遮不住,毕竟东流去"},{ "content": "春江潮水连海平,海上明月共潮生"},{ "content": "两岸猿声啼不住,轻舟已过万重山"},{ "content": "问渠那得清如许?为有源头活水来"},{ "content": "竹外桃花三两枝,春江水暖鸭先知"},{ "content": "身无彩凤双飞翼,心有灵犀一点通"},{ "content": "众里寻他千百度,蓦然回首,那人却在,灯火阑珊处"},{ "content": "莫愁前路无知己,天下谁人不识君"}]# 插入数据时手动传入向量for data in data_objects:collection.data.insert(properties=data)print("数据插入成功!")# 查询向量query_text = "明月几时有,把酒问青天"results = collection.query.near_text(query=query_text,limit=3, # 返回最相似的 3 条数据return_metadata=MetadataQuery(distance=True))for o in results.objects:print(o)client.collections.delete(collection_name)finally:# 关闭连接client.close()
四、总结
本文主要介绍了Weaviate的基本用法,并通过案例,实现了数据的向量化和近似检索。
附件
向量数据库技术系列一-基本原理
向量数据库技术系列二-Milvus介绍
向量数据库技术系列三-Chroma介绍
向量数据库技术系列四-FAISS介绍
向量数据库技术系列五-Weaviate介绍
相关文章:
向量数据库技术系列五-Weaviate介绍
一、前言 Weaviate 是由德国公司 SeMI Technologies 开发的开源向量搜索引擎数据库。它结合了向量搜索和图数据库技术,旨在为 AI 应用提供高效的数据存储和检索能力。具有以下的特点: 高性能向量搜索 Weaviate 支持高效的向量索引和近似最近邻&#x…...
1.Qt SDK 的下载和安装
1Qt 下载官⽹: http://download.qt.io/archive/qt/ 2版本自行选择 3下载对应版本的.exe文件 4下载包下载完成 5双击.exe文件,默认下一步,要注册一个qt的账户 6记住程序安装的位置,后面要配置环境变量 7勾3个(组件自行…...
光场中的核心概念:Macro Pixel与SAI的深度解析与实例应用
一、概念详解:从硬件到算法的核心要素 Macro Pixel(宏像素) Macro Pixel是光场相机的硬件核心单元,由微透镜阵列覆盖的一组传感器子像素构成。每个微透镜对应一个宏像素,其子像素分别记录通过该微透镜不同区域的光线方…...
机器学习(吴恩达)
一, 机器学习 机器学习定义: 计算机能够在没有明确的编程情况下学习 特征: 特征是描述样本的属性或变量,是模型用来学习和预测的基础。如: 房屋面积, 地理位置 标签: 监督学习中需要预测的目标变量,是模型的输出目标。如: 房屋价格 样本: 如: {面积100㎡…...
Ubuntu 20.04 + mysql 8 默认密码问题
问题描述: Ubuntu20.04安装完mysql8之后无法登录,不知道密码 mysql -u root 原因: 系统默认自动配置好了用户和强密码 解决办法: sudo cat /etc/mysql/debian.cnf查看该文件 利用上面的user 和 passwd 即可登录mysql mysql …...
私有云大数据部署:从开发到生产(Docker、K8s、HDFS/Flink on K8s)
1. 引言 在企业级大数据架构中,私有云部署成为了许多企业的首选,尤其是对数据安全性、合规性、资源控制要求较高的场景。相比于公有云,私有云具备更强的灵活性,能够根据业务需求进行定制化优化。本文将探讨如何在私有云环境下构建大数据平台,包括 Docker 容器化、Kuberne…...
使用DeepSeek和墨刀AI,写PRD文档、画原型图的思路、过程及方法
使用DeepSeek和墨刀AI,写PRD文档、画原型图的思路、过程及方法 现在PRD文档要如何写更高效、更清晰、更完整? 还是按以前的思路写PRD,就还是以前的样子。 现在AI这么强大,产品经理如何使用DeepSeek写PRD文档,产品经…...
拥有一台云服务器能做什么呢?
拥有一台云服务器就像拥有了一台24小时在线的远程电脑,你可以通过互联网随时随地管理它。它的用途非常广泛,无论是个人学习、开发测试,还是企业级应用部署,都能发挥重要作用。以下是常见的应用场景,按需求分类整理&…...
4大观点直面呈现|直播回顾-DeepSeek时代的AI算力管理
直播回顾 2025年2月21日晚上9点30分, 我们迎来了新春后的首场人工智能三人行宣讲活动。 这场直播聚焦于Deepseek开源大模型, 探讨了其对AI算力、算法、数据及应用带来的新发展。 本次直播邀请到了上海赞奇的总经理俞阁总和速石科技陈琳涛,…...
DBeaver安装步骤及连接数据库
一、DBeaver安装步骤 1、双击安装文件“dbeaver-ce-21.3.3-x86_64-setup.exe”,进入安装界面 2、点击ok》下一步》我接受,选择下图选项,为此所有用户使用 3、点击下一步,将重新弹出安装开始界面 4、点击ok》下一步》我接受&…...
玩转python:通俗易懂掌握高级数据结构-collections模块之UserDict
引言 UserDict是Python中collections模块提供的一个强大工具,它是dict的封装类,允许用户自定义字典的行为。通过继承UserDict,开发者可以轻松扩展字典的功能,实现自定义的字典逻辑。本文将详细介绍UserDict的关键用法和特性&…...
如何解决ChatGPTplus/pro o1/o3模型无法识别图片或者文件,限制次数?
你是否遇到ChatGPTplus无法识别图片、或者无法识别文件,甚至回答很简短,o1不思考,GPT-4o不能联网、分析图片和处理文件!感觉非常敷衍。本文教你如何确定自己的账号是否被降智;教你如何降智的原因;教你解决降…...
96.HarmonyOS NEXT工具类设计模式教程:最佳实践与实现
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT工具类设计模式教程:最佳实践与实现 1. 工具类设计原则 1.1 基本原则 原则说明示例单一职责每个类只负责一个功能Win…...
springboot+vue如何前后端联调,手搓前后端分离项目
我们首先在前端安装axios,这个npm就可以!下载完成后。我们用我们之前的页面,然后写一个card,在一个card里面渲染我们的用户数据,我们先写一个查询所有用户信息的一个效果! <el-card class"box-card…...
git备份or打补丁
起因 在工作中使用git pull突然发现仓库出现了找不到代码库问题,但是这个时候有个对策又急着需要,于是乎,就需要备份,拷贝给另一个工程师输出。 git 打补丁操作 工程师A生成补丁文件 touch a.txtgit add a.txtgit commit -m &qu…...
游戏成瘾与学习动力激发研究——多巴胺脉冲式释放与奖赏预测误差机制的神经科学解析
多巴胺脉冲式释放与奖赏预测误差机制的神经科学解析 一、核心概念 多巴胺(Dopamine) 一种关键神经递质,主要功能是调节动机、奖赏学习和行为强化。它并非直接产生“快乐感”,而是驱动“寻求奖赏”的行为动机。 脉冲式释放(Phasic Release) 多巴胺神经元以短暂、高频的爆…...
【C/C++】最长回文子串(leetcode T5)
核心考点:回文字符串匹配中心扩展法 题目描述 给你一个字符串 s,找到 s 中最长的 回文 子串。 示例 1: 输入:s "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。…...
表的操作以及增删查改
1. 表的操作 1.1 查看所有表 show tables; 1. 2 创建表 CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_namefield datatype [ 约束 ] [comment 注解内容 ][, field datatype [ 约束 ] [comment 注解内容 ]] ...) [engine 存储引擎 ] [character set 字符集 ] [collate …...
【人工智能基础2】Tramsformer架构、自然语言处理基础、计算机视觉总结
文章目录 七、Transformer架构1. 替代LSTM的原因2. Transformer架构:编码器 - 解码器架构3. Transformer架构原理 八、自然语言处理基础1. 语言模型基本概念2. 向量语义3. 预训练语言模型的基本原理与方法4. DeepSeek基本原理 九、计算机视觉 七、Transformer架构 …...
Python游戏开发自学指南:从入门到实践(第四天)
Python不仅适用于数据分析、Web开发和自动化脚本,还可以用于游戏开发!虽然Python不是传统意义上的游戏开发语言,但其简洁的语法和丰富的库使其成为初学者学习游戏开发的绝佳选择。本文将为你提供一份全面的Python游戏开发自学指南,…...
向量数据库技术系列四-FAISS介绍
一、前言 FAISS(Facebook AI Similarity Search)是由Facebook AI Research开发的一个开源库,主要用于高效地进行大规模相似性搜索和聚类操作。主要功能如下: 向量索引与搜索:FAISS提供了多种索引和搜索向量的方法&…...
【网络安全 | 漏洞挖掘】价值14981$的Google点击劫持漏洞
未经许可,不得转载。 文章目录 点击劫持前言漏洞1攻击场景漏洞2攻击场景漏洞3攻击场景漏洞4攻击场景漏洞5攻击场景漏洞6攻击场景点击劫持 点击劫持是一种恶意的用户界面攻击技术,也被称为 “UI 覆盖攻击” 或 “透明劫持”。 攻击者通过创建一个看似正常的网页,并在其中嵌…...
CMake 保姆级教程
CMake 是一个跨平台的构建工具,用于生成适合不同平台和编译器的构建系统文件(如 Makefile 或 Visual Studio 项目文件)。 在 Windows 下使用 CMake 构建项目时,CMake 会根据 CMakeLists.txt 文件生成适合 Windows 的构建系统文件&…...
IntelliJ IDEA 2023.3.1安装指南从下载到配置的完整教程(附资源下载)
安装 IntelliJ IDEA 2023.3.1 非常简单,以下是详细的安装步骤,适用于 Windows、macOS 和 Linux 系统。 1. 下载 IntelliJ IDEA IntelliJ IDEA下载链接:https://pan.quark.cn/s/3ad975664934 选择适合你的操作系统的版本: Ultimat…...
springboot树形结构 支持模糊查询,返回匹配节点和父节点,其他节点不返回
package com.me.meterdemo.ds; import java.util.ArrayList; import java.util.List;public class TreeNode {private Long id;private String name;private Long parentId;private List<TreeNode> children new ArrayList<>();// 构造方法public TreeNode(Long i…...
linux 命令 touch
Linux 的 touch 命令主要用于 创建空文件 或 修改文件的时间戳(访问时间、修改时间)。以下是其核心用法和实用示例: 基本语法 touch [选项] 文件名... 核心功能 1. 创建空文件 如果文件不存在,则创建空文件;如果存在…...
3.14-1列表
列表 一.列表的介绍和定义 1 .列表 类型: <class list> 2.符号:[] 3.定义列表: 方式1:[] 通过[] 来定义 list[1,2,3,4,6] print(type(list)) #<class list> 方式2: 通过list 转换 str2"12345" print(type(str2)) #<class str> list2lis…...
完整的模型验证套路
模型验证 0. 写在前面 经过之前的代码编写,我们已经建立了一套模型,下面就开始对我们编写的模型进行验证。 代码:代码链接 1. 验证模型 我们首先运行代码(epoch 20)得到结果如下: Files already down…...
python2和python3的区别
python2和python3的区别 核心区别Python 2 示例Python 3 示例通俗解释专业术语1. 打印方式print "Hello"print("Hello")Python 3必须加括号,像“按钮操作”;Python 2像“直接喊话”。print从语句变为函数,支…...
【时时三省】(C语言基础)用printf函数输出数据3
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 ( 5 ) e格式符。 用格式声明%e指定以指数形式输出实数。如果不指定输出数据所占的宽度和数字部分的小数位数,许多C编译系统(如VisualC)会自动给出数字部分…...
【差分约束】 P3275 [SCOI2011] 糖果|省选-
本文涉及知识点 差分约束 P3275 [SCOI2011] 糖果 题目描述 幼儿园里有 N N N 个小朋友, lxhgww \text{lxhgww} lxhgww 老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。但是小朋友们也有嫉妒心,总是会提出一些要求&…...
找第一个只出现一次的字符(信息学奥塞一本通-1130)
【题目描述】 给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。 【输入】 一个字符串,长度小于100000。 【输出】 输出第一个仅出现一次的字符,若没有则输出no。 【输入样例】 abcabd 【输出样…...
【MySQL】多表操作 —— 外键约束
目录 多表关系一对一关系一对多/多对一关系多对多关系 外键约束基本概念一对多/多对一创建外键约束外键约束下的数据操作数据插入数据删除 删除外键约束 多对多创建外键约束外键约束下的数据操作数据插入数据删除 删除外键约束 多表关系 MySQL 多表之间的关系可以概括为&#…...
自己动手打造AI Agent:基于DeepSeek-R1+websearch从零构建自己的Manus深度探索智能体AI-Research
第一章:AI Agent基础与DeepSeek-R1架构解析(1/10) 1.1 AI Agent技术演进与核心价值 人工智能代理(AI Agent)经历了从规则驱动到数据驱动的范式转移。早期基于专家系统的符号主义方法(如MYCIN医疗诊断系统…...
SpringSecurity配置(校验数据库用户信息)
文末有本篇文章的项目源码文件可供下载学习 通过SpringSecurity快速入门案例我们已经实现了基于内存的校验用户信息,但在实际项目中我们需要校验从数据库中获取的用户信息,这里我们主要是两步操作: 1.需要我们实现UserDetailsService的loadUserByUsername方法,在方法中以前端…...
中考语文的考点及相应的解题技巧
1 考点分布 1.1 作文(60 分左右) 考点:立意、选材、结构、语言表达等。要求立意深刻、新颖,选材真实、典型,结构清晰、完整,语言流畅、生动。 解题技巧:认真审题,理解题目要求和限…...
PackageManagerService
首语 PackageManagerService(以下简称PMS)是Android最核心的系统服务之一,它是应用程序包管理服务,管理手机上所有的应用程序,包括应用程序的安装、卸载、更新、应用信息的查询、应用程序的禁用和启用等。 职责 在Android系统启动过程中扫…...
基于大模型的智能客服搭建
引言:智能客服的范式转变 在数字经济浪潮中,客户服务正经历从"人力密集型"向"技术驱动型"的深刻转型。据IDC最新报告,全球智能客服市场规模预计将在2028年突破1200亿美元,年复合增长率达28.6%。这种增长背后…...
Vagrant+VMWare 安装Ubuntu24.04
背景介绍 对于众多 Windows 用户来说, 有时候需要用到 Linux 环境做一些开发或者测试. WSL 目前能覆盖到很大一部分使用场景, 但是仍然有一些场景需要用虚拟机才能解决. 开发者的痛点往往是对于虚拟机环境的配置和管理, 因为手动安装需要很长的时间, 并且每次安装完成之后需要…...
数字化转型 - 数据驱动
数字化转型 一、 数据驱动1.1 监控1.2 分析1.3 挖掘1.4 赋能 二、数据驱动案例2.1 能源工业互联网:绿色节能的数字化路径2.2 光伏产业的数字化升级2.3 数据中心的绿色转型2.4云迁移的质效优化2.5 企业数字化运营的实践2.6数字化转型的最佳实践 一、 数据驱动 从数…...
【软考-架构】11.3、设计模式-新
✨资料&文章更新✨ GitHub地址:https://github.com/tyronczt/system_architect 文章目录 项目中的应用设计模式创建型设计模式结构型设计模式行为型设计模式 💯考试真题题外话 项目中的应用 在实际项目中,我应用过多种设计模式来解决不同…...
leetcode0031 下一个排列-medium
1 题目: 下一个排列 官方标定难度:中等 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如,arr [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一…...
CmBacktrace的cmb_cfg.h
一:宏定义解析 #ifndef _CMB_CFG_H_ #define _CMB_CFG_H_#ifdef CMB_USER_CFG #include "cmb_user_cfg.h" #else /* print line, must config by user */ #define cmb_println(...) /* e.g., printf(__VA_ARGS__);printf("\r\n"…...
Redis监控:从睁眼瞎到千里眼的进化史
各位在Redis迷雾中摸黑的探险家们!今天我们要给Redis装上"天眼系统"——从连自己内存爆了都不知道的睁眼瞎,进化到连每秒哪个键被摸了几次都门儿清的监控狂魔!准备好迎接《Redisの楚门世界》了吗?👁️ 第一幕…...
mac利用“自动操作”扩展添加 Mac 访达右键菜单项
用惯了 Windows 的资源管理器,换到 Mac 的访达,最不习惯的就是不能通过右键菜单创建文件。 虽然 Mac 的 App Store 中有几个可以增加访达右键菜单的工具,但是居然都要收费(就这么一点点活都能卖钱,真是了不起…...
算法013——水果成篮
水果成篮(点击即可跳转) 这道题其实就是找到一个最长的子数组的长度,子数组中不超过两种类型的水果。 定义两个指针 left 与 right ,固定 left , 当 right 走到一个位置时,left 与 right 之间的种类 kind 2 , 当 ri…...
TCP/IP协议栈----通俗易懂(与OSI七层模型区别)
目录 一、概念 二、模型 对比 编辑(1)OSI的七层模型 (2)TCP/IP的四层模型 三、TCP/IP模型分层 (1)应用层 (2)传输层 (3)网络层 (4&…...
python中print函数的flush如何使用
在 Python 中,print 函数的 flush 参数是一个布尔值,默认值为 False。当设置为 True 时,它会强制将输出缓冲区的内容立即刷新到目标设备(通常是控制台),而不是等待缓冲区满或者程序结束时才输出。 要注意fl…...
python中有几种作用域
在 Python 中,作用域决定了变量的可见性和生命周期。Python 主要有以下四种作用域: 1. 局部作用域(Local Scope): - 在函数或方法内部定义的变量属于局部作用域。 - 这些变量只能在函数或方法内部访问。 def my_f…...
DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_13可展开行的固定表头表格
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_13可展开行的固…...