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

Llamaindex SQLTableRetrieverQueryEngine生成SQL不符合模糊匹配需求的解决方法

解决LlamaIndex SQLTableRetrieverQueryEngine模糊匹配生成精确SQL的问题

核心解决路径

针对模糊匹配场景,需要从定制提示模板、配置表元数据、自定义SQL解析逻辑三个方向入手,直接修正模型的SQL生成行为:

1. 定制SQL生成提示模板,明确模糊匹配规则

默认提示未清晰区分精确/模糊匹配的语义,需在提示中硬编码规则:

  • 当查询出现like、类似、包含、近似等词汇时,必须使用LIKE操作符,而非=
  • 自动为匹配值添加前后%通配符

示例代码:

from llama_index.prompts import PromptTemplate

# 自定义SQL生成提示
sql_gen_prompt = PromptTemplate(
    """
    根据下方表结构,将输入问题转换为SQL查询:
    表结构:
    {schema}
    
    强制规则:
    - 如果问题包含'like'、'类似'、'包含'这类词汇,必须用LIKE操作符,且在匹配值前后加%通配符
    - 模糊匹配场景绝对不能用精确等于(=)
    
    问题:{question}
    SQL查询:
    """
)

# 传入QueryEngine生效
query_engine = SQLTableRetrieverQueryEngine(
    sql_database=sql_db,
    tables=["Suppliers"],
    sql_gen_prompt=sql_gen_prompt
)

2. 配置表字段的模糊匹配元数据

显式标记字段支持模糊匹配,增强模型对字段特性的理解:

from llama_index import SQLDatabase

sql_db = SQLDatabase(
    engine=your_db_engine,
    include_tables=["Suppliers"],
    # 标记Name字段支持模糊匹配
    table_to_field_metadata={
        "Suppliers": {
            "Name": {"is_fuzzy_matchable": True}
        }
    }
)

3. 自定义SQL解析器(进阶方案)

如果前两种方法无效,直接拦截并修正生成的SQL:

from llama_index.output_parsers import SQLStructuredOutputParser
from llama_index.llms import OpenAI

class FuzzySQLParser(SQLStructuredOutputParser):
    def parse(self, output: str) -> str:
        sql = super().parse(output)
        # 检测模糊匹配语义,替换精确匹配为模糊匹配
        if "like" in output.lower() and "=" in sql:
            sql = sql.replace("=", "LIKE '%").replace("';", "%';")
        return sql

# 替换默认解析器
llm = OpenAI(model="gpt-3.5-turbo")
parser = FuzzySQLParser(llm=llm)
query_engine = SQLTableRetrieverQueryEngine(
    sql_database=sql_db,
    tables=["Suppliers"],
    output_parser=parser
)

验证效果

执行查询contact info of supplier name like FitLife Sports,预期生成的SQL应为:

SELECT ContactInfo
FROM Suppliers
WHERE Name LIKE '%FitLife Sports%';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:32:40