You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过PyVespa将ONNX模型传入Vespa向量数据库,代码报错求助

PyVespa ONNX模型导入Vespa问题排查与修复

代码中的核心问题

  • 语法错误:add_fields和add_model方法调用未闭合括号,且未传入任何参数,属于无效语法。
  • 字段缺失:未定义文档核心字段(如唯一ID、embedding向量字段),Vespa无法识别数据结构。
  • ONNX模型配置缺失:add_model未添加任何模型定义,无法将ONNX模型传入Vespa。
  • RankProfile配置不完整:first_phase中的closeness函数未明确匹配文档的embedding字段,query输入与文档字段未对应。
  • 部署逻辑为空:deploy_app方法没有实际部署代码,无法完成应用包的部署。

错误原因分析

json.decoder.JSONDecodeError是因为应用包定义不完整,导致PyVespa生成的配置无效,Vespa服务启动失败或返回非JSON格式响应,最终触发解析错误。

修复后的完整代码

Mapping部分(create_finance_app)

def create_finance_app(self):
    # 添加文档字段:必须包含唯一ID和embedding向量字段
    self.app_package.schema.add_fields(
        Field(name="id", type="string", indexing=["summary", "attribute"]),
        Field(
            name="embedding",
            type="tensor<float>(x[1024])",
            indexing=["summary", "attribute"]
        )
    )
    
    # 添加RankProfile:关联query输入与文档embedding字段
    self.app_package.schema.add_rank_profile(
        RankProfile(
            name="default",
            first_phase="closeness(query(query_embedding), embedding)",
            inputs=[("query(query_embedding)", "tensor<float>(x[1024])")],
        )
    )
    
    # 添加ONNX模型配置:指定模型路径、输入输出
    self.app_package.schema.add_model(
        Model(
            name="finance_model",
            type="onnx",
            path="/path/to/your/model.onnx",
            inputs={"input": "tensor<float>(x[1024])"},
            outputs={"output": "tensor<float>(x[1024])"}
        )
    )
    
    self.app_package.schema.mode = "streaming"

Deployment部分(deploy_app)

from vespa.deployment import VespaDocker

def deploy_app(self, **kwargs):
    # 使用Docker部署本地Vespa实例
    vespa_docker = VespaDocker()
    # 部署应用包
    self.app = vespa_docker.deploy(application_package=self.app_package)
    # 等待服务启动完成
    self.app.wait_for_service_up()

关键修复点说明

  1. 字段定义:添加id作为唯一标识字段,embedding作为存储向量的tensor字段,确保与RankProfile和模型的维度一致(1024维)。
  2. RankProfile修正:closeness(query(query_embedding), embedding)明确指定query输入query_embedding与文档的embedding字段计算相似度。
  3. ONNX模型配置:通过Model类指定模型类型、路径、输入输出tensor的维度,Vespa会自动加载该模型用于推理或检索。
  4. 部署逻辑:补充Docker部署代码,完成应用包的部署并等待服务启动,确保PyVespa能与Vespa服务正常交互。

内容的提问来源于stack exchange,提问作者user10516115

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:52:48