核心类
本节介绍 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());
}
}
}