引擎
本节介绍 SuperSQL 的引擎接口和抽象类。
SqlEngine
SqlEngine 是 SQL 引擎的核心接口,定义了生成和执行 SQL 的基本方法。
接口定义
java
public interface SqlEngine {
String generateSql(String question);
List<Map<String, Object>> executeSql(String sql);
void train(TrainBuilder trainBuilder);
}方法说明
generateSql
根据自然语言问题生成 SQL 查询。
java
String generateSql(String question)参数:
question: 自然语言问题
返回: 生成的 SQL 查询字符串
executeSql
执行 SQL 查询并返回结果。
java
List<Map<String, Object>> executeSql(String sql)参数:
sql: 要执行的 SQL 查询
返回: 查询结果列表
train
训练数据库表结构或 SQL 示例。
java
void train(TrainBuilder trainBuilder)参数:
trainBuilder: 训练构建器
AbstractSqlEngine
AbstractSqlEngine 是 SqlEngine 接口的抽象实现,提供了通用的功能。
主要属性
| 属性 | 类型 | 说明 |
|---|---|---|
chatModel | ChatModel | Chat 模型实例 |
vectorStore | SpringVectorStore | 向量存储实例 |
ragEngine | SpringRagEngine | RAG 引擎实例 |
resourceLoader | ResourceLoader | 资源加载器 |
rerankModel | RerankModel | 重排序模型实例 |
options | RagOptions | RAG 选项配置 |
主要方法
setChatModel
设置 Chat 模型。
java
protected abstract SqlEngine setChatModel(ChatModel chatModel)setOptions
设置 RAG 选项。
java
protected abstract SqlEngine setOptions(RagOptions options)setPrompt
设置自定义 Prompt。
java
protected abstract SqlEngine setPrompt(SqlpromptBuilder promptBuilder)RagEngine
RagEngine 是 RAG(检索增强生成)引擎接口。
接口定义
java
public interface RagEngine {
List<Document> retrieve(String query, RagOptions options);
String generate(String query, List<Document> context);
}方法说明
retrieve
检索相关文档。
java
List<Document> retrieve(String query, RagOptions options)参数:
query: 查询文本options: RAG 选项
返回: 相关文档列表
generate
基于检索结果生成 SQL。
java
String generate(String query, List<Document> context)参数:
query: 用户问题context: 检索到的上下文文档
返回: 生成的 SQL 查询
SpringRagEngine
SpringRagEngine 是 RagEngine 接口的 Spring 实现。
构造函数
java
public SpringRagEngine(
ChatModel chatModel,
SpringVectorStore vectorStore,
RerankModel rerankModel
)主要方法
retrieve
检索相关文档,支持重排序。
java
public List<Document> retrieve(String query, RagOptions options)实现细节:
- 使用向量存储进行相似性搜索
- 如果启用重排序,使用重排序模型重新排序
- 根据分数阈值过滤结果
generate
使用 Chat 模型生成 SQL。
java
public String generate(String query, List<Document> context)实现细节:
- 构建包含上下文的 Prompt
- 调用 Chat 模型生成 SQL
- 提取和返回 SQL 查询
使用示例
自定义引擎实现
java
public class CustomSqlEngine extends AbstractSqlEngine {
@Override
protected SqlEngine setChatModel(ChatModel chatModel) {
this.chatModel = chatModel;
return this;
}
@Override
public String generateSql(String question) {
List<Document> context = ragEngine.retrieve(question, options);
return ragEngine.generate(question, context);
}
@Override
public List<Map<String, Object>> executeSql(String sql) {
return executeService.executeSql(sql);
}
@Override
public void train(TrainBuilder trainBuilder) {
List<Document> documents = parseDocuments(trainBuilder);
vectorStore.add(documents);
}
}引擎配置
java
@Configuration
public class SqlEngineConfig {
@Bean
public SpringSqlEngine sqlEngine(
IExecuteSqlService executeService,
ChatModel chatModel,
SpringVectorStore vectorStore,
SpringRagEngine ragEngine,
ResourceLoader resourceLoader,
RerankModel rerankModel) {
return new SpringSqlEngine(
executeService,
chatModel,
vectorStore,
ragEngine,
resourceLoader,
rerankModel
);
}
}