MCP Toolbox 集成 Gemini Embedding为数据库工具配置文本向量化【免费下载链接】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下称 Toolbox中配置 Google Gemini 嵌入模型将客户端传入的原始文本自动转换为高维数值向量并注入 PostgreSQL、ClickHouse 等数据库工具的参数从而为向量检索与相似度查询提供基础能力。读完本文你将掌握 Gemini Embedding 的两种认证模式、kind: embeddingModel配置项的完整语义、embeddedBy参数挂载方式以及背后的批处理调用与向量格式化原理。关于 Gemini EmbeddingGoogle Gemini 提供了业界领先的文本嵌入模型能够把自然语言文本转换为高维浮点向量embedding这是语义搜索、RAG检索增强生成与向量数据库写入的关键一步。在 Toolbox 中嵌入模型被建模为一种独立的原语配置primitive config通过kind: embeddingModel在 YAML 配置文件中声明并可在任意工具的字符串参数上通过embeddedBy字段按名称引用。从源码结构看当前仓库的嵌入模型实现位于 internal/embeddingmodels 目录其中gemini子包是唯一的现成实现核心代码见 gemini.go。它依赖 Google 官方google.golang.org/genaiSDK 完成底层 API 调用因此并不局限于某一种数据库任何接入 Toolbox 的数据源都能复用同一套向量化能力。认证模式Toolbox 的 Gemini Embedding 支持两种认证模式二者由配置字段与对应的环境变量共同决定具体解析逻辑在Config.Initialize()中实现gemini.go模式触发条件认证方式底层后端Google AIAPI Key配置了apiKey或设置了GOOGLE_API_KEY/GEMINI_API_KEY环境变量API KeyGoogle AI StudioGemini APIVertex AIADC同时配置了project与location或设置了GOOGLE_CLOUD_PROJECT/GOOGLE_CLOUD_LOCATION环境变量Application Default CredentialsADCVertex AI推荐策略快速测试用 API Key生产环境用 Vertex AI ADC。API Key 可以从 Google AI Studio 的控制台申请ADC 则是 Google Cloud 推荐的服务身份认证方式适合在运行于 Google Cloud 或已配置工作负载身份的环境中安全使用。值得注意的细节是两种模式并非互斥的开关而是按优先级动态判定。从 gemini.go 的初始化逻辑可以看到若project与location均非空无论来自 YAML 还是环境变量走Vertex AI后端否则若apiKey非空走Google AIGemini API后端两者皆缺失则直接报错退出错误信息会同时提示两种模式的补齐方式。也就是说即使同时配置了apiKey和project/locationprojectlocation也会优先命中 Vertex AI。环境变量仅作为兜底配置字段为空时才读取对应的环境变量apiKey→GOOGLE_API_KEY→GEMINI_API_KEYproject→GOOGLE_CLOUD_PROJECTlocation→GOOGLE_CLOUD_LOCATION。工作行为自动向量化与维度匹配自动向量化Automatic Vectorization当某个工具参数通过embeddedBy: your-gemini-model-name引用嵌入模型时Toolbox 会在工具真正执行前拦截客户端传来的原始文本输入将其批量发送到 Gemini API把返回的数值数组按目标数据库的格式要求格式化后再作为参数值传给数据库 source。这一过程的底层实现在 parameters.go 的EmbedParams函数中关键机制如下按模型分组批处理所有声明了同一嵌入模型的参数会被聚合为一次批量请求stringBatch而不是逐条调用有效降低 API 调用次数与延迟输入必须是字符串只有type: string的参数才能挂载embeddedBy如果被标记参数的运行值不是字符串会直接返回parameter ... is marked for embedding but has a non-string value错误输出数量校验模型返回的向量数量必须与输入文本数量一致否则报错防止静默错位向量格式化原始[]float32向量会经过VectorFormatter转换为目标数据库可接受的形态见下文向量格式化小节。此外从 parameters.go 的ParseParameter可以看到integer、float、boolean、array、map类型的参数若声明了embeddedBy会直接被拒绝——向量化仅面向字符串参数这是配置期的强约束而非运行时约定。维度匹配Dimension Matching嵌入模型输出的向量维度必须与数据库列定义一致例如 PostgreSQL 的vector(768)列要求向量长度为 768。因此 Toolbox 提供了可选的dimension字段用于显式指定输出维度。在 gemini.go 的EmbedParameters实现中只有当dimension大于 0 时才会把该值作为OutputDimensionality传给 Gemini API不配置则使用模型默认维度。需要特别注意的限制dimension只被2024 年之后发布的较新模型支持使用早期模型models/embedding-001时不能设置该字段具体某个模型支持哪些维度以官方可用 Gemini 模型列表为准可查阅 Vertex AI 文档中 get-text-embeddings 的 supported models 说明。任务类型Task Type从源码可以看到每次嵌入请求都会固定携带TaskType: SEMANTIC_SIMILARITYgemini.go。这是 Google 嵌入 API 支持的任务类型之一用于让模型针对语义相似度场景优化向量质量适用于向量检索、相似度排序等典型用途。配置示例使用 Google AIAPI KeyGoogle AI 模式使用 API Key 认证。API Key 从 Google AI Studio 申请后可以安全地通过环境变量注入kind: embeddingModel name: gemini-model type: gemini model: gemini-embedding-001 apiKey: ${GOOGLE_API_KEY} dimension: 768使用 Vertex AIADCVertex AI 模式使用 ADC 认证需要事先在目标环境完成 ADC 的配置例如通过gcloud auth application-default login或服务账号kind: embeddingModel name: gemini-model type: gemini model: gemini-embedding-001 project: ${GOOGLE_CLOUD_PROJECT} location: us-central1 dimension: 768安全建议请使用${ENV_NAME}形式的环境变量替换来引用密钥避免把凭据硬编码进配置文件。Toolbox 会在加载配置时自动完成替换。上面两个示例均被 gemini_test.go 的单元测试覆盖测试分别验证了仅含基础字段、Google AI 全字段apiKey dimension、Vertex AI 全字段project location dimension三种 YAML 的解析结果其中dimension: 768与dimension: 512均被正确解析为Config.Dimension。配置字段参考原文档给出了完整的字段语义结合 gemini.go 中Config结构体的定义各字段说明如下字段类型必填说明typestring是必须为gemini用于路由到 gemini 嵌入模型实现对应源码常量EmbeddingModelTypenamestring是嵌入模型的唯一名称供工具参数的embeddedBy引用源码中带required校验标签modelstring是Gemini 模型 ID如gemini-embedding-001源码中带required校验标签apiKeystring否Google AI 模式的 API Key留空时依次回退到GOOGLE_API_KEY、GEMINI_API_KEY环境变量projectstring否Vertex AI 项目 ID留空时回退到GOOGLE_CLOUD_PROJECT环境变量locationstring否Vertex AI 区域如us-central1留空时回退到GOOGLE_CLOUD_LOCATION环境变量dimensioninteger否输出向量维度如768须与数据库列维度一致仅较新模型支持models/embedding-001不可设置字段校验是严格模式从 gemini_test.go 的失败用例可以看到缺失必填的model字段会报Field validation for Model failed on the required tag配置文件中出现未知字段如invalid_param也会被[1:1] unknown field拒绝而同时缺失两套凭据时初始化会以明确的错误信息失败。因此建议在写配置时保持字段名拼写精确。把嵌入模型接入数据库工具kind: embeddingModel只是声明了向量化能力要让它在真实工具中生效还需要在工具参数上挂载它。以下示例取自 ClickHouse 工具配置的单元测试clickhousesql_test.gokind: tool name: vector_insert type: clickhouse-sql source: my-instance description: Stores content and its vector embedding. statement: INSERT INTO docs (content, embedding) VALUES (?, ?) parameters: - name: content type: string description: The text content to store. - name: text_to_embed type: string description: The text content used to generate the vector. embeddedBy: gemini-model valueFromParam: content这里的embeddedBy: gemini-model引用了上文声明的嵌入模型名称valueFromParam: content则指示 Toolbox 把content参数的实际值作为该参数的取值来源——即客户端只传一个contentToolbox 会自动为它生成向量并绑定到 SQL 的第二个占位符。对于 PostgreSQL 等数据源写法完全相同只需把statement改为INSERT INTO docs (content, embedding) VALUES ($1, $2)之类的目标方言。底层调用链一次带向量化的工具调用会依次经过参数解析parameters.go 的ParseParams先把客户端 JSON 参数解析为有序的ParamValues向量化入口各工具实现EmbedParams方法并调用 parameters.go 的EmbedParams例如 PostgreSQL 的 postgressql.go 与 ClickHouse 的 clickhousesql.go模型调用EmbedParameters通过genai客户端调用Client.Models.EmbedContentgemini.go携带SEMANTIC_SIMILARITY任务类型与可选的OutputDimensionality结果注入向量经格式化后写回对应参数槽位随 SQL 一起下发到数据库。同时HTTP 层api.go以及 MCP 各协议版本v20241105、v20250326、v20250618、v20251125、v20260728的 method.go都会在调用工具前统一触发tool.EmbedParams保证 REST 与 MCP 通道行为一致。向量格式化适配不同数据库不同数据库接收向量的方式不同Toolbox 通过VectorFormatter函数类型embeddingmodels.go解耦了这一差异目前已内置两种格式化器PostgreSQL / SingleStorepgvector 风格FormatVectorForPgvector把[]float32序列化为字符串字面量[x, y, z]可直接用于 pgvector 的vector类型列ClickHouseFormatVectorForClickHouse直接返回原始[]float32切片由 clickhouse-go 驱动原生绑定为Array(Float32)参数。如果某个工具没有显式传入 formatter如 ArcadeDB 的 execute 类工具则原始[]float32会直接作为参数值透传。这意味着同样的 Gemini 嵌入模型写入 pgvector 列时得到[...]字符串写入 ClickHouse 时得到浮点数组无需为不同数据库重复配置模型。小结与注意事项认证二选一快速验证用apiKeyGoogle AI生产环境优先projectlocationVertex AI ADC两者都没有时会初始化失败日志会给出补齐指引。维度对齐dimension必须与数据库列如vector(768)严格一致且只适用于 2024 年后的新模型models/embedding-001不可设置。仅字符串参数可向量化embeddedBy只能挂在string类型参数上其他类型在配置期即被拒绝。配置校验严格type、name、model为必填未知字段、缺失必填项都会在加载配置时直接报错参见 gemini_test.go 的解析测试。凭据安全统一使用${ENV_NAME}环境变量替换避免在 YAML 中明文保存密钥。上述配置与源码路径均可在本仓库中直接查阅主题文档 gemini.md、实现 gemini.go、通用嵌入模型接口与格式化器 embeddingmodels.go、参数向量化管线 parameters.go。【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
