know-engine

解决路由错误导致问答失败问题

查询路由,会根据用户的问题,路由到不同的存储类型中做检索,比如关系型数据库,图数据库,以及知识库。 但是,模型存在幻觉,有可能出现路由错的情况,比如应该路由到知识库,但是路由到了关系型数据库。 这种情况,我们通过兜底策略来解决,即我…

TL;DR

查询路由,会根据用户的问题,路由到不同的存储类型中做检索,比如关系型数据库,图数据库,以及知识库。 但是,模型存在幻觉,有可能出现路由错的情况,比如应该路由到知识库,但是路由到了关系型数据库。 这种情况,我们通过兜底策略来解决,即我…

查询路由,会根据用户的问题,路由到不同的存储类型中做检索,比如关系型数据库,图数据库,以及知识库。 但是,模型存在幻觉,有可能出现路由错的情况,比如应该路由到知识库,但是路由到了关系型数据库。 这种情况,我们通过兜底策略来解决,即我们在KnowEngineSqlDatabaseContentRetriever和KnowEngineNeo4jContentRetriever中都做了兜底。

@Override
public List<Content> retrieve(Query query) {
    List<Content> results;
    try {
        ...
        results = sqlDatabaseContentRetriever.retrieve(query);
    } catch (Exception e) {
        log.warn("SQL 检索异常,降级使用知识库检索, query: {}", query.text(), e);
        return fallbackRetriever.retrieve(query);
    }

    if (results == null || results.isEmpty() || isSqlResultEmpty(results)) {
        log.info("SQL 检索结果为空,降级使用知识库检索, query: {}", query.text());
        return fallbackRetriever.retrieve(query);
    }

   ....
}

即检索报错、或者检索结果为空时,再走知识库做一次检索。尽量减少拒答的情况。

版本提示

模型、框架与接口会持续变化。涉及版本号、参数与生产配置时,请在实践前对照对应官方文档。

LLMentor系统化学习大模型应用工程

内容来自个人课程知识库备份,并经过结构化整理。技术版本持续演进,生产使用前请结合官方文档验证。