尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ToolJet 集成 Weaviate 向量数据库:从连接配置到语义查询的完整实战指南

ToolJet 集成 Weaviate 向量数据库:从连接配置到语义查询的完整实战指南 ToolJet 集成 Weaviate 向量数据库从连接配置到语义查询的完整实战指南【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJetWeaviate 是一款开源向量数据库将它与 ToolJet 集成后应用可以获得基于向量相似度的语义检索能力——不再是依赖精确关键词匹配而是按含义召回相关信息。本文以当前仓库中的 Weaviate 市场插件位于 marketplace/plugins/weaviate为对象完整讲解云上与本地两种连接方式、Schema / Collection / Objects 三大类共 8 个受支持操作的全部参数与响应结构并结合插件源码index.ts、query_operations.ts剖析底层 API 调用链帮助读者在 ToolJet 中直接构建 AI 搜索、推荐系统与知识库检索类应用。为什么在 ToolJet 中集成 WeaviateWeaviate 的核心能力是把非结构化数据文本、图片等转换为高维向量并建立索引再通过余弦相似度等距离度量完成语义查询。ToolJet 的可视化查询面板与事件处理机制让开发者无需编写后端代码即可基于语义而非关键词检索文档、商品、问答对等数据为 AI 应用搭建知识检索层RAG 的数据来源在低代码应用中快速落地推荐系统、去重、异常检测等向量场景。从仓库中的插件清单定义operations.json可以看出该插件被声明为type: database通过 ToolJet 数据源管理界面即可添加并立即在查询编辑器中使用。建立连接Cloud 与 Local 两种方式插件在创建数据源时要求先选择连接类型。从 manifest.json 可以看到connection_type是一个下拉切换组件默认值为cloud可选值为Cloud与Local两项。连接 Weaviate Cloud连接 Weaviate 云服务需要两个凭据参数说明Instance URLWeaviate 云实例的访问地址例如https://your-weaviate-instance.comAPI Key访问密钥可在 Weaviate Console 中生成其中 API Key 在插件定义中被标记为encrypted: true见 manifest.jsonToolJet 会对其加密存储不会以明文形式落库或展示。两个字段均在数据源required列表中为必填项。从源码 index.ts 可以看到云连接的真实请求构造逻辑当connection_type不是local时插件直接以instanceUrl作为基础地址并在每次请求头中附加Authorization: Bearer apiKeyBASE_URL ${sourceOptions.instanceUrl}; headers[Authorization] Bearer ${sourceOptions.apiKey};连接本地 Weaviate本地部署只需提供Host与Port。源码中本地连接的地址拼接为http://${host}:${port}并且不附加任何鉴权头index.ts因此请确保本地实例的网络访问策略可控。文档推荐用如下 Docker 命令快速拉起一个本地容器将 Host 设为localhost、Port 设为8080docker run -p 8080:8080 -p 50051:50051 cr.weaviate.io/semitechnologies/weaviate:1.28.4其中8080是 REST API 端口50051是 gRPC 端口。启动完成后即可在 ToolJet 数据源表单中填入localhost/8080建立连接。连接测试的底层原理数据源保存时 ToolJet 会调用插件实现的testConnection方法index.ts。它的做法是向/v1/schema发起一次GET请求本地连接GET http://host:port/v1/schema无请求头云连接GET instanceUrl/v1/schema带Authorization: Bearer apiKey。只有响应状态为ok时才判定连接成功否则抛出Connection failed错误。这一设计保证了表单能保存与实例真正可达是一致的。支持的操作总览插件的查询模型由三层结构驱动见 types.tsData Type数据类型schema、collection、objects三选一Operation操作在所选数据类型下进一步选择具体操作参数不同操作暴露不同的必填/可选参数。运行时由 index.ts 的switch (queryOptions.data_type)分发到getSchema、collectionOperation、objectsOperation三个处理函数任一操作最终都会映射为对 Weaviate REST API 的fetch调用结果以{ status: ok, data: result }形式返回给查询面板。全部支持的操作如下数据类型操作底层 HTTP 调用SchemaGet Database SchemaGET /v1/schemaCollectionGet CollectionGET /v1/schema/{collection}CollectionCreate CollectionPOST /v1/schemaCollectionDelete CollectionDELETE /v1/schema/{collection}ObjectsList ObjectsGET /v1/objects?class...ObjectsCreate ObjectPOST /v1/objectsObjectsGet Object By IdGET /v1/objects/{collection}/{uuid}ObjectsDelete Object By IdDELETE /v1/objects/{collection}/{uuid}Data Type - Schema读取数据库结构Get Database Schema该操作返回整个数据库的全部类class定义用于快速了解实例中有哪些集合及其索引、向量与分片配置。可选参数Consistency一致性开关型参数开启后确保请求由 leader 节点处理以维持读取准确性。从源码看开启时该值会作为请求头consistency附加到GET /v1/schema请求上query_operations.ts。响应示例节选自文档完整结构可在 Weaviate 实例中验证{ classes: [ { class: Createcollection, description: Test collection create, invertedIndexConfig: { bm25: { b: 0.75, k1: 1.2 }, cleanupIntervalSeconds: 300, indexNullState: true, indexPropertyLength: true, indexTimestamps: true, stopwords: { additions: [custom1], preset: en, removals: [the] } }, moduleConfig: { text2vec-contextionary: { vectorizeClassName: true } }, multiTenancyConfig: { autoTenantActivation: false, autoTenantCreation: false, enabled: false }, properties: [ { dataType: [text], description: Main text field, indexFilterable: true, indexRangeFilters: false, indexSearchable: true, name: content, tokenization: word } ], replicationConfig: { asyncEnabled: true, deletionStrategy: NoAutomatedResolution, factor: 1 }, shardingConfig: { virtualPerPhysical: 128, desiredCount: 1, actualCount: 1, desiredVirtualCount: 128, actualVirtualCount: 128, key: _id, strategy: hash, function: murmur3 }, vectorIndexConfig: { skip: false, cleanupIntervalSeconds: 300, maxConnections: 64, efConstruction: 128, ef: -1, dynamicEfMin: 100, dynamicEfMax: 500, dynamicEfFactor: 8, vectorCacheMaxObjects: 1000000000000, flatSearchCutoff: 40000, distance: cosine, pq: { enabled: false, bitCompression: false, segments: 0, centroids: 256, trainingLimit: 100000, encoder: { type: kmeans, distribution: log-normal } }, bq: { enabled: false }, sq: { enabled: false, trainingLimit: 100000, rescoreLimit: 20 }, filterStrategy: sweeping }, vectorIndexType: hnsw, vectorizer: none } ] }这个响应中值得关注的字段包括vectorIndexType默认hnsw图索引、vectorIndexConfig.distance默认cosine余弦距离、invertedIndexConfig.bm25BM25 关键词排序权重以及multiTenancyConfig多租户开关它们共同决定了集合的检索行为。Data Type - Collection集合生命周期管理Collection 数据类型下包含三个操作对应集合的读取、创建与删除。Get Collection获取单个集合的详细定义。必填参数Collection Name要查询的集合名称。可选参数Consistency与 Schema 操作相同的一致性开关开启后附加consistency请求头。响应示例返回该集合的属性数组与复制/分片/向量索引配置结构与上文的单个 class 定义一致{ [ { dataType: [text], description: Main text field, indexFilterable: true, indexRangeFilters: false, indexSearchable: true, name: content, tokenization: word } ], replicationConfig: { asyncEnabled: true, deletionStrategy: NoAutomatedResolution, factor: 1 }, shardingConfig: { virtualPerPhysical: 128, desiredCount: 1, actualCount: 1, desiredVirtualCount: 128, actualVirtualCount: 128, key: _id, strategy: hash, function: murmur3 }, vectorIndexConfig: { skip: false, cleanupIntervalSeconds: 300, maxConnections: 64, efConstruction: 128, ef: -1, dynamicEfMin: 100, dynamicEfMax: 500, dynamicEfFactor: 8, vectorCacheMaxObjects: 1000000000000, flatSearchCutoff: 40000, distance: cosine, pq: { enabled: false, bitCompression: false, segments: 0, centroids: 256, trainingLimit: 100000, encoder: { type: kmeans, distribution: log-normal } }, bq: { enabled: false }, sq: { enabled: false, trainingLimit: 100000, rescoreLimit: 20 }, filterStrategy: sweeping }, vectorIndexType: hnsw, vectorizer: none }Create Collection创建新集合是搭建语义检索能力的第一步。该操作参数最多分为必填与可选两组。必填参数参数说明类型/示例Collection Name集合名称文本Vectorizer集合中数据对象使用的向量化器JSON如{}表示不启用向量化模块Vector index config向量索引类型相关设置含距离度量JSON如{distance: cosine}Module config模块相关设置JSON如{text2vec-contextionary: {vectorizeClassName: true}}Description供参考的集合描述文本Properties属性数组结构与 Property Object 一致JSON 数组可选参数参数说明默认/示例Consistency确保请求由 leader 节点处理开关Sharding config多节点场景下控制集合的分片行为JSON默认{}Stop words控制倒排索引中忽略哪些词JSON如{preset: en, additions: [], removals: []}Index time stamps按对象内部时间戳维护倒排索引trueIndex null state针对每个属性维护其 null 状态的倒排索引trueIndex property length按属性长度维护倒排索引trueBm 25关键词排序权重通过可调 k1 与 b 提升结果准确性默认k1 1.2、b 0.75示例{k1: 1, b: 1}Factor控制复制/分片行为以支持扩展1Async enabled后台异步执行操作以获得更好性能trueDeletion strategy定义删除数据的处理方式立即或延迟NoAutomatedResolutionCleanup interval seconds设置旧数据/已删除数据的清理频率300上述参数在源码中有着明确的类型转换逻辑query_operations.tsJSON 字符串参数vector_index_config、sharding_config、bm_25、stop_words、module_config、properties通过JSON.parse解析factor、clean_up_interval_seconds通过Number()转换async_enabled、index_time_stamps、index_null_state、index_property_length通过Boolean()转换最终组装成POST /v1/schema的请求体。因此表单中输入true、1等字符串会被正确转换为布尔与数值类型。响应示例返回新创建集合的完整定义包括倒排索引、模块配置、多租户、复制、分片、向量索引等全部配置项结构同Get Database Schema中的 class 对象此处不再赘述完整 JSON。Delete Collection删除指定集合及其全部数据。必填参数Collection Name需要删除的集合名称。该操作在源码中映射为DELETE /v1/schema/{collectionName}query_operations.ts成功时返回布尔值true。删除为不可逆操作建议先通过 Get Collection 确认集合名称无误再执行。Data Type - Objects对象数据操作Objects 数据类型对应GET/POST/DELETE /v1/objects系列接口query_operations.ts覆盖数据的写入、分页读取、按 ID 查询与删除。List Objects列出某个集合下的全部对象支持分页与排序。必填参数Collection Name要列出对象的集合名称。可选参数参数说明输入示例Include vectors指定要包含的向量名称true或[title,review_body]After从该阈值 UUID 之后开始检索游标分页UUID 字符串Offset结果窗口的起始索引数字Limit每页最多返回的条目数10Include附加返回信息如分类信息允许值包括 classification、vector、interpretation逗号分隔如vector, classificationSort按属性名排序逗号分隔如title, createdAtOrder排序方向asc或descTenant多租户类中指定目标租户文本源码中的参数映射值得注意query_operations.tsinclude_vectors支持布尔或 JSON 解析include、sort、order会按逗号拆分为数组offset、limit转为数字class参数始终固定为集合名称。空值或{}会被跳过不会进入 URL 查询串。响应示例{ deprecations: [], objects: [ { class: Testcollection, creationTimeUnix: 1739009190787, id: 296f9f17-628a-463a-b273-6ae369a3bb59, lastUpdateTimeUnix: 1739009190787, properties: { content: This is a test document stored in Weaviate., title: New Sample Document }, vectorWeights: null }, { class: Testcollection, creationTimeUnix: 1738941448311, id: 550e8400-e29b-41d4-a716-446655440000, lastUpdateTimeUnix: 1738941448311, properties: { content: This is a test document stored in Weaviate., title: Sample Document }, vectorWeights: null }, { class: Testcollection, creationTimeUnix: 1739008896994, id: 98a6628d-f07d-4f56-b64b-1b818201095c, lastUpdateTimeUnix: 1739008896994, properties: { content: This is a test document stored in Weaviate., title: Sample Document }, vectorWeights: null } ], totalResults: 3 }Create Object在指定集合内写入新对象。必填参数Collection Name要写入对象的集合名称Properties属性数组/对象结构与 Property Object 一致例如{question: This vector DB is OSS, newProperty: 123}Vector对象的向量。源码支持两种形式传入数组时写入vector字段传入命名向量对象时写入vectors字段query_operations.ts。可选参数Object uuid对象的 UUID不填则由 Weaviate 自动生成。响应示例{ class: Testcollection, creationTimeUnix: 1739009190787, id: 296f9f17-628a-463a-b273-6ae369a3bb59, lastUpdateTimeUnix: 1739009190787, properties: { content: This is a test document stored in Weaviate., title: New Sample Document }, vector: [0.12345, 0.12345, ......, 0.12345, 0.12345] }Get Object By Id按对象 ID 精确获取对象详情。必填参数Collection Name对象所属集合Object ID要查询的对象 UUID。源码将其映射为GET /v1/objects/{collection}/{uuid}query_operations.ts。响应示例返回对象属性与时间戳与 List Objects 中的单个对象结构一致{ class: Testcollection, creationTimeUnix: 1738941448311, id: 550e8400-e29b-41d4-a716-446655440000, lastUpdateTimeUnix: 1738941448311, properties: { content: This is a test document stored in Weaviate., title: Sample Document }, vectorWeights: null }Delete Object By Id按对象 ID 删除对象。必填参数Collection Name对象所属集合Object ID要删除的对象 UUID。源码将其映射为DELETE /v1/objects/{collection}/{uuid}query_operations.ts成功时返回布尔值true。插件工作原理一次查询的完整调用链结合 index.ts 与 query_operations.ts可以还原一次 ToolJet 查询的完整链路ToolJet 查询编辑器将用户填写的表单值组装为QueryOptions结构见 types.tsWeaviate.run()根据connection_type决定基础地址与鉴权头本地为http://host:port无鉴权云端为instanceUrlBearer apiKey按data_type分发schema→getSchema()collection→collectionOperation()objects→objectsOperation()各函数内部再次按操作类型映射到具体的 Weaviate REST 端点并完成参数类型转换JSON.parse/Number/Boolean与查询串拼装任何 HTTP 非 2xx 响应都会抛出带状态码的错误最终包装为QueryError返回给前端方便在查询面板中排查。这种表单参数 → REST 端点的一一映射设计意味着插件所有能力都建立在 Weaviate 官方 REST API 之上若后续 Weaviate 版本新增端点插件升级时只需在query_operations.ts中补充对应的映射函数即可。在应用中消费查询结果查询执行完成后ToolJet 会把结果暴露为queries.queryName.data可在任意组件的数据属性或事件处理器的表达式中引用例如{{ queries.listObjects.data.objects }}建议的使用模式知识库检索先用 Create Collection Create Object 写入带向量的文档再用一个输入组件捕获用户问题通过查询参数绑定把向量查询条件传入 List Objects将结果渲染到 Table 或 Listview 组件集合管理面板用 Get Database Schema 动态渲染全部集合配合 Create/Delete Collection 做成可视化的 Schema 管理界面多租户数据隔离在 List Objects 中传入 Tenant 参数按租户过滤数据。小结本文从连接配置出发完整覆盖了 ToolJet Weaviate 插件的全部 8 个操作Schema 层的Get Database Schema、Collection 层的Get/Create/Delete Collection、Objects 层的List/Create/Get By Id/Delete By Id并给出了每个操作的必填/可选参数、类型与默认值以及可复现的响应示例。同时结合 marketplace/plugins/weaviate/lib 下的源码与 operations.json 配置说明了参数如何被转换、如何映射到 Weaviate REST API。按照本文步骤即可在 ToolJet 中快速搭建具备语义检索能力的 AI 应用、推荐系统或知识库工具。【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表