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

LlamaIndex对接PostgreSQL异常:生成空表且返回空响应求助

问题

使用AzureOpenAI + PostgreSQL + LlamaIndex + Python技术栈,尝试对接已存储向量的PostgreSQL数据库。数据库中存在cars表,包含字段:ID(字符串类型)、verbatim(字符串类型)、embedding(verbatim的嵌入向量),表内已有24条完整数据。

尝试查询生成客户负面评论文本摘要,代码实现如下:

from llama_index.llms.azure_openai import AzureOpenAI
from llama_index.embeddings.azure_openai import AzureOpenAIEmbedding
from llama_index.core import Settings
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

llm = AzureOpenAI(
    model="gpt-4",
    deployment_name="gpt-4",
    api_key=api_key,
    azure_endpoint=azure_endpoint,
    api_version=api_version,
)

embed_model = AzureOpenAIEmbedding(
    model="text-embedding-ada-002",
    deployment_name="text-embedding-ada-002",
    api_key=api_key,
    azure_endpoint=azure_endpoint,
    api_version=api_version,
)
Settings.llm = llm
Settings.embed_model = embed_model
vector_store = PGVectorStore.from_params(
    database="DATABASE",
    host="HOST",
    password="PASSWORD",
    port=5432,
    user="USERNAME",
    table_name="cars",
    embed_dim=1536,
    debug=True
)
index = VectorStoreIndex.from_vector_store(vector_store=vector_store)
query_engine = index.as_query_engine()

response = query_engine.query("Resume negative verbatim of my client")

执行后,数据库生成空表data_cars,且返回结果为Response(response='Empty Response', source_nodes=[], metadata=None),修改字段名和from_params参数后问题仍存在。


原因分析与解决方案

1. PGVectorStore默认字段映射不匹配

LlamaIndex的PGVectorStore默认使用的字段名与你的cars表不匹配:

  • 默认主键字段为小写id,但你的表使用大写ID
  • 默认存储文本的字段为text,但你的表使用verbatim
  • 向量字段embedding虽匹配,但主键和文本字段不匹配会导致无法读取数据

解决方法:初始化PGVectorStore时显式指定字段映射参数:

vector_store = PGVectorStore.from_params(
    database="DATABASE",
    host="HOST",
    password="PASSWORD",
    port=5432,
    user="USERNAME",
    table_name="cars",
    embed_dim=1536,
    debug=True,
    id_column="ID",  # 指定自定义主键字段名
    text_column="verbatim",  # 指定存储文本的字段名
    embedding_column="embedding"  # 可选,明确指定向量字段增强可读性
)

2. data_cars空表生成的原因

当PGVectorStore无法正确识别现有表结构时,会尝试创建默认辅助表data_<table_name>存储元数据,但因原表数据无法读取,所以该表为空。解决字段映射问题后,此表不会再生成或会正确关联数据。

3. 查询语句的优化

原查询语句"Resume negative verbatim of my client"表述不够明确,可能导致向量检索无匹配结果。可先测试基础查询验证数据是否能正常读取:

response = query_engine.query("Summarize all client verbatim")

若能返回结果,再优化查询语句精准筛选负面评论:

response = query_engine.query("Summarize all negative client verbatim, focusing on complaints about the cars")

4. 向量维度一致性验证

确认cars表中embedding字段的向量维度确实为1536(与text-embedding-ada-002输出维度一致),维度不匹配会导致检索失败。可在数据库执行SQL验证:

SELECT length(embedding) FROM cars LIMIT 1;

确保返回结果为1536。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:33:13