Skip to content

核心类 ​

本节介绍 SuperSQL 的核心类和接口。

SpringSqlEngine ​

SpringSqlEngine 是 SuperSQL 的核心引擎类,用于生成和执行 SQL 查询。

构造函数 ​

java
public SpringSqlEngine(
    IExecuteSqlService executeService,
    ChatModel chatModel,
    SpringVectorStore store,
    SpringRagEngine springRagEngine,
    ResourceLoader resourceLoader,
    RerankModel rerankModel
)

主要方法 ​

setChatModel ​

设置使用的 Chat 模型。

java
public SpringSqlEngine setChatModel(ChatModel chatModel)

参数:

  • chatModel: Chat 模型实例

返回: SpringSqlEngine (支持链式调用)

示例:

java
sqlEngine.setChatModel(azureChatModel)

setOptions ​

设置 RAG 检索选项。

java
public SpringSqlEngine setOptions(RagOptions options)

参数:

  • options: RAG 选项配置

返回: SpringSqlEngine (支持链式调用)

示例:

java
sqlEngine.setOptions(RagOptions.builder()
        .topN(5)
        .rerank(true)
        .build())

generateSql ​

根据自然语言问题生成 SQL 查询。

java
public String generateSql(String question)

参数:

  • question: 自然语言问题

返回: 生成的 SQL 查询字符串

示例:

java
String sql = sqlEngine.setChatModel(chatModel)
        .generateSql("查询所有用户");

executeSql ​

执行 SQL 查询并返回结果。

java
public List<Map<String, Object>> executeSql(String sql)

参数:

  • sql: 要执行的 SQL 查询

返回: 查询结果列表

异常:

  • IllegalArgumentException: SQL 为空或无效
  • RuntimeException: SQL 执行失败

示例:

java
List<Map<String, Object>> result = sqlEngine.executeSql("SELECT * FROM user");

train ​

训练数据库表结构或 SQL 示例。

java
public void train(TrainBuilder trainBuilder)

参数:

  • trainBuilder: 训练构建器

示例:

java
sqlEngine.train(TrainBuilder.builder()
        .content(ddl)
        .policy(TrainPolicyType.DDL)
        .build());

SpringVectorStore ​

SpringVectorStore 是向量存储接口,用于存储和检索数据库表结构的向量表示。

。

主要方法 ​

add ​

添加文档到向量存储。

java
public void add(List<Document> documents)

参数:

  • documents: 文档列表

similaritySearch ​

相似性搜索。

java
public List<DocumentWithScore> similaritySearch(String query, int topK)

参数:

  • query: 查询文本
  • topK: 返回的 top K 结果

返回: 相似文档列表

delete ​

删除文档。

java
public void delete(List<String> ids)

参数:

  • ids: 文档 ID 列表

SpringRagEngine ​

SpringRagEngine 是 RAG(检索增强生成)引擎,负责检索相关数据并生成 SQL。

主要方法 ​

retrieve ​

检索相关文档。

java
public List<Document> retrieve(String query, RagOptions options)

参数:

  • query: 查询文本
  • options: RAG 选项

返回: 相关文档列表

generate ​

生成 SQL 查询。

java
public String generate(String query, List<Document> context)

参数:

  • query: 用户问题
  • context: 检索到的上下文文档

返回: 生成的 SQL 查询

使用示例 ​

完整使用流程 ​

java
@Service
@RequiredArgsConstructor
public class QueryService {

    private final SpringSqlEngine sqlEngine;
    private final ChatModel chatModel;

    public List<Map<String, Object>> query(String question) {
        String sql = sqlEngine.setChatModel(chatModel)
                .setOptions(RagOptions.builder()
                        .topN(5)
                        .rerank(true)
                        .limitScore(0.4)
                        .build())
                .generateSql(question);
        
        return sqlEngine.executeSql(sql);
    }

    public void trainDatabase(String ddl) {
        sqlEngine.setChatModel(chatModel)
                .train(TrainBuilder.builder()
                        .content(ddl)
                        .policy(TrainPolicyType.DDL)
                        .build());
    }
}

Controller 集成 ​

java
@RestController
@RequestMapping("/api")
@RequiredArgsConstructor
public class SuperSqlController {

    private final SpringSqlEngine sqlEngine;
    private final ChatModel chatModel;

    @PostMapping("/query")
    public ResponseEntity<?> query(@RequestBody QueryRequest request) {
        try {
            String sql = sqlEngine.setChatModel(chatModel)
                    .setOptions(RagOptions.builder()
                            .topN(request.getTopN())
                            .rerank(request.isRerank())
                            .limitScore(request.getLimitScore())
                            .build())
                    .generateSql(request.getQuestion());
            
            List<Map<String, Object>> result = sqlEngine.executeSql(sql);
            
            return ResponseEntity.ok(Map.of(
                    "sql", sql,
                    "result", result
            ));
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                    .body(Map.of("error", e.getMessage()));
        }
    }

    @PostMapping("/train")
    public ResponseEntity<String> train(@RequestBody TrainRequest request) {
        try {
            sqlEngine.setChatModel(chatModel)
                    .train(TrainBuilder.builder()
                            .content(request.getContent())
                            .question(request.getQuestion())
                            .policy(request.getPolicy())
                            .build());
            return ResponseEntity.ok("训练成功");
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                    .body("训练失败: " + e.getMessage());
        }
    }
}

下一步 ​

最近更新

基于 Apache 2.0 许可证发布