十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MCP Toolbox for Databases:用 vector-assist-delete-spec 工具删除 Vector Assist 向量规格

MCP Toolbox for Databases:用 vector-assist-delete-spec 工具删除 Vector Assist 向量规格 MCP Toolbox for Databases用 vector-assist-delete-spec 工具删除 Vector Assist 向量规格【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox在 MCP Toolbox for Databases开源的数据库 MCP 服务器中vector-assist-delete-spec是 Cloud SQL for PostgreSQL 集成里 Vector Assist 工具族的一员负责按spec_id删除一个已存在的向量规格及其关联元数据。本文以官方工具文档为骨架结合仓库中的工具实现、预置配置与集成测试完整讲解该工具的参数定义、YAML 配置方式、底层 SQL 调用链与验证手段读完你即可在自己的 Toolbox 配置中正确注册该破坏性工具并理解它从 MCP 调用到 PostgreSQLvector_assist.delete_spec函数执行的完整路径。工具定位Vector Assist 规格生命周期中的“删除”环节vector-assist-delete-spec工具的核心职责只有一件事使用唯一的spec_id删除一个已存在的向量规格vector specification。官方文档给出了明确的使用边界当用户明确请求删除、移除或清理一个“在 Vector Assist 工具语境下创建的”向量规格时才应使用此工具底层实现是连接到目标数据库执行 PostgreSQL 的vector_assist.delete_spec函数。Vector Assist 是 Cloud SQL for PostgreSQL 提供的一套向量工作负载管理能力。本工具不是孤立存在的它与同目录下的其他工具共同构成一个完整的规格生命周期闭环各工具的文档见 vector-assist-define-spec、vector-assist-modify-spec、vector-assist-apply-spec、vector-assist-get-spec、vector-assist-list-specs、vector-assist-generate-query 与 vector-assist-improve-query-recalldefine针对目标表定义向量规格索引类型、量化、目标召回率等约束modify调整已有规格的约束条件apply将规格的推荐方案实际应用到数据库get / list查询单个或多个规格generate / improve基于规格生成向量检索 SQL、调优召回率delete清理不再需要的规格即本文主角。前置要求与兼容数据源数据库侧必须安装 vector_assist 扩展官方文档给出了明确提示确保目标 PostgreSQL 数据库已安装所需的vector_assist扩展否则该工具无法成功执行。仓库中的集成测试也印证了这一点tests/cloudsqlpg/cloud_sql_pg_vectorassist_test.go 在搭建测试环境时会执行CREATE EXTENSION IF NOT EXISTS vector_assistsetupVectorAssistTable函数并在测试结束后DROP EXTENSION清理。需要特别留意一个适用前提该集成测试目前被显式跳过原因是“Vector Assist 曾对所有 Cloud SQL for PostgreSQL 实例临时禁用”见 集成测试 中的t.Skip调用及注释。也就是说在你的 Cloud SQL for PostgreSQL 实例上使用前应确认该实例的 Vector Assist 功能当前处于可用状态否则vector_assist.delete_spec函数本身可能不存在或不可用。数据源侧兼容的 Source 类型从源码结构看该工具对数据源的要求被定义为一个接口工具实现type compatibleSource interface { PostgresPool() *pgxpool.Pool RunSQL(context.Context, string, []any) (any, error) }即数据源必须提供pgxpool连接池以及一个可执行带命名参数的RunSQL方法。在仓库的 internal/sources 目录下postgres、cloud-sql-postgres、alloydb-postgres三个源均实现了PostgresPool()与RunSQL()方法如 cloud-sql-postgres 源可以推断它们是本文工具的主要兼容数据源cockroachdb源同样对外暴露了PostgresPool()方法。针对本文档所属的 Cloud SQL for PostgreSQL 集成典型的source配置如下字段说明见 Cloud SQL for PostgreSQL Sourcekind: source name: my-cloud-sql-pg-source type: cloud-sql-postgres project: my-project-id region: us-central1 instance: my-instance database: my_db user: ${USER_NAME} password: ${PASSWORD} # ipType: private其中ipType可取public、private或psc默认publicuser/password缺省时自动走 IAM 认证。该源还支持readOnly字段设为true时在数据库会话级别强制执行只读cloudsql_session_read_onlylocked并抑制写能力工具。由于vector-assist-delete-spec被标记为破坏性工具见下文将源配置为readOnly: true是不合理的——删除操作必然要求写权限。参数与配置参考调用参数Parameters工具接受如下输入参数与 工具实现 中的参数定义一致ParameterTypeDescriptionRequiredspec_idstring要删除的向量规格的唯一 ID。Yes参数按工具定义标注为必填或可选底层函数可能对可选参数做进一步校验以确保返回响应前所有必要数据可用。spec_id在源码中通过parameters.WithStringRequired(true)显式声明为必填。配置字段Referencefieldtyperequireddescriptiontypestringtrue必须为 vector-assist-delete-spec。sourcestringtrueSQL 执行所针对的源名称。descriptionstringfalse传递给 Agent 的工具描述。源码中的Config结构工具实现与上表完全对应Type与Source均带validate:required校验Description可选另支持annotations字段用于覆盖工具注解。若未提供descriptionInitialize会使用内置默认描述与官方文档给出的措辞一致保证 Agent 端始终能看到规范的用途说明。最小配置示例官方文档给出的 YAML 配置示例kind: tool name: delete_spec type: vector-assist-delete-spec source: my-database-source description: This tool deletes an existing vector specification using its spec_id. Use this tool when a user explicitly requests to delete, remove, or clean up an existing vector specification which was created in the context of the vector assist tools.预置配置中的实际用法仓库自带的 Cloud SQL for PostgreSQL 预置配置 cloud-sql-postgres.yaml 展示了生产环境更简练的写法——description直接省略依赖内置默认值kind: tool name: delete_spec type: vector-assist-delete-spec source: cloudsql-pg-source同一文件中还注册了完整的 Vector Assist 工具族define_spec、modify_spec、apply_spec、generate_query、delete_spec、list_specs、get_spec、improve_query_recall见 预置配置并将它们统一收进一个vectorassist工具组group 定义组描述为“通过表达意图与性能需求即可搭建并优化生产级向量工作负载”。将delete_spec与list_specs、get_spec同组暴露便于 Agent 在“先列出/查看规格、再按需删除”的对话流中正确串联工具。源码深潜一次删除调用的完整链路该工具的实现在 vectorassistdeletespec.go调用链路清晰且短小1. 工具注册const resourceType string vector-assist-delete-spec func init() { if !tools.Register(resourceType, newConfig) { panic(fmt.Sprintf(tool type %q already registered, resourceType)) } }init阶段将vector-assist-delete-spec这一类型名注册进全局工具工厂Toolbox 解析kind: tool配置时按type字段找到对应工厂并反序列化 YAML 为ConfignewConfig使用goccy/go-yaml解码器。2. 固定 SQL命名参数绑定const deleteSpecQuery SELECT vector_assist.delete_spec(spec_id spec_id::TEXT); 注意这里使用 pgx 的命名参数spec_id并在 SQL 中显式将参数转型为TEXT这与文档中“spec_id为字符串类型”的定义一致避免了客户端拼接 SQL 的注入风险——参数值始终由驱动侧绑定。3. 破坏性注解让 Agent 知道这是个危险操作Initialize中有一个容易被忽略但很重要的细节工具实现tools.GetAnnotationsOrDefault(cfg.Annotations, tools.NewDestructiveAnnotations)当用户未显式提供annotations时工具默认使用 NewDestructiveAnnotationsfunc NewDestructiveAnnotations() *ToolAnnotations { readOnly : false destructive : true return ToolAnnotations{ ReadOnlyHint: readOnly, DestructiveHint: destructive, } }这是 MCP 规范中的工具注解readOnlyHint: false、destructiveHint: true。对于接入的 Agent/客户端而言这意味着调用前应当取得用户确认、且不应把该工具与只读查询工具同等对待。这也解释了为什么文档反复强调“仅在用户明确请求删除时使用该工具”。4. Invoke校验数据源并执行func (t Tool) Invoke(ctx context.Context, s sources.Source, params parameters.ParamValues, accessToken tools.AccessToken) (any, util.ToolboxError) { source, ok : s.(compatibleSource) if !ok { return nil, util.NewClientServerError(source used is not compatible with the tool, http.StatusInternalServerError, nil) } paramsMap : params.AsMap() namedArgs : pgx.NamedArgs{} for key, value : range paramsMap { namedArgs[key] value } resp, err : source.RunSQL(ctx, deleteSpecQuery, []any{namedArgs}) if err ! nil { return nil, util.ProcessGeneralError(err) } return resp, nil }执行顺序为断言源实现了compatibleSource接口否则返回 500 级错误“source used is not compatible with the tool”ValidateSource在更早期工具初始化/装配阶段做同样的类型断言把配置错误尽早暴露将 MCP 传入的参数值映射为pgx.NamedArgs通过source.RunSQL在数据源连接池上执行SELECT vector_assist.delete_spec(...)数据库错误经util.ProcessGeneralError归一化为 Toolbox 标准错误结构返回给 MCP 客户端成功时透传数据库响应。由于 SQL 是SELECT形式对存储过程/函数取返回值工具自身不额外加事务或COMMIT删除语义完全由vector_assist.delete_spec函数承担。测试与验证仓库为该工具提供了两级测试单元测试YAML 配置解析vectorassistdeletespec_test.go 的TestParseFromYaml用一段与官方文档示例同构的配置验证解析结果kind: tool name: delete-spec-tool type: vector-assist-delete-spec description: a test description source: a-source并断言解析出的Config各字段名称、类型、源、描述与期望值完全一致保证文档示例可直接通过服务端配置解析。集成测试HTTP 调用端到端验证tests/cloudsqlpg/cloud_sql_pg_vectorassist_test.go 中的RunVectorAssistDeleteSpecToolInvokeTest测试主体启动真实 Toolbox 服务后向 REST 端点POST /api/tool/delete_spec/invoke发送请求验证两类行为合法参数{spec_id: va_spec_001}期望 HTTP 200 且结果中包含delete_spec即函数返回体标识删除动作缺少spec_id{}期望结果中包含error字段——必填参数在工具层即被拦截。该测试与define_spec、modify_spec、apply_spec、generate_query等测试串联在TestVectorAssistIntegration中形成“定义 → 修改 → 应用 → 查询 → 删除”的完整生命周期验证测试在 AddVectorAssistConfig 中批量注册了全部 8 个 Vector Assist 工具。再次提醒由于 Vector Assist 功能在 Cloud SQL 上的可用性会变化测试中有t.Skip与说明注释实际部署时请以你所在实例的功能状态为准。小结vector-assist-delete-spec是 MCP Toolbox for Databases 中 Cloud SQL for PostgreSQL 集成里 Vector Assist 工具族的收尾工具配置上只需type: vector-assist-delete-spec、source指向实现了PostgresPool/RunSQL的 PostgreSQL 系源与可选description三个字段调用参数仅有必填的字符串spec_id实现上以 pgx 命名参数绑定执行固定的vector_assist.delete_spec(spec_id spec_id::TEXT)参数经驱动绑定避免 SQL 注入语义上默认携带destructiveHint: true注解提示 Agent 这是破坏性操作应仅在用户明确请求删除时调用前提上目标库必须安装vector_assist扩展且 Cloud SQL 实例的 Vector Assist 功能处于可用状态。配合预置配置 cloud-sql-postgres.yaml 中的vectorassist工具组你可以把“列出规格 → 查看详情 → 删除规格”的能力一次性交给 Agent完成向量规格的全生命周期治理。【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表