text2sql
text2sql copied to clipboard
将自然语言转换为对应的SQL查询语句
Text2SQL
ä¸ä¸ªåºäºèªç¶è¯è¨å¤ççå·¥å ·ï¼å¯ä»¥å°èªç¶è¯è¨è½¬æ¢ä¸ºå¯¹åºçSQLæ¥è¯¢è¯å¥ã
åè½ç¹ç¹
- æ¯æå°ä¸æèªç¶è¯è¨è½¬æ¢ä¸ºSQLæ¥è¯¢è¯å¥
- èªå¨éªè¯çæçSQLè¯å¥çæ£ç¡®æ§
- æ¯æå¤æ¬¡éè¯ä»¥æé«æåç
- å¯éæ©æ¯å¦æ§è¡çæçSQLè¯å¥
å®è£
go get github.com/wangle201210/text2sql
ä½¿ç¨æ¹æ³
åºæ¬ç¨æ³
package main
import (
"github.com/wangle201210/text2sql"
"fmt"
)
func main() {
cfg := &text2sql.Config{
DbLink: "root:password@tcp(127.0.0.1:3306)/database?charset=utf8mb4&parseTime=True&loc=Local",
Try: 5, // 失败æ¶çéè¯æ¬¡æ°
ShouldRun: true, // æ¯å¦æ§è¡çæçSQL
Times: 3, // åæ¶çæ3个SQLï¼éæ©æåéçä¸ä¸ª
// OnlyView: true, // åªæ¥è¯¢viewç»æï¼ä½¿ç¨viewæé«æ¥è¯¢ææ
}
newEino, err := eino.NewEino(&openai.ChatModelConfig{
APIKey: os.Getenv("OPENAI_API_KEY"), // sk-******
BaseURL: os.Getenv("OPENAI_BASE_URL"), // https://api.openai.com/v1
Model: os.Getenv("OPENAI_MODEL_NAME"), // gpt-4o-mini
})
if err != nil {
log.Fatalf("NewEino err: %+v", err)
return
}
ts := text2sql.NewText2sql(cfg, newEino)
sql, result, err := ts.Pretty("çäºå¨2025å¹´1æä¸æ¬çé¤é¥®é£åç±»å«æ»é¢")
if err != nil {
log.Fatalf("text2sql err: %+v", err)
}
fmt.Printf("sql: %s \n", sql)
if run {
fmt.Printf("result: %+v \n", result)
}
}
é 置说æ
DbLink: MySQLæ°æ®åºè¿æ¥ä¿¡æ¯Try: SQLçæå¤±è´¥æ¶çéè¯æ¬¡æ°ShouldRun: æ¯å¦æ§è¡çæçSQLè¯å¥- 设置为
trueæ¶ä¼æ§è¡SQLå¹¶è¿åç»æ - 设置为
falseæ¶åªè¿åçæçSQLè¯å¥
- 设置为
Times: åæ¶çæSQLçæ¬¡æ°ï¼å¯éï¼é»è®¤1ï¼- åå¼èå´ï¼1-10
- æ°å¼è¶å¤§ï¼çæçSQLåéæ°è¶å¤ï¼éæ©æåéçSQLçåç¡®çè¶é«
- 注æï¼æ°å¼è¶å¤§æ¶èçtokenä¹è¶å¤
OnlyView: åªä½¿ç¨viewç»æï¼ä½¿ç¨viewæé«æ¥è¯¢ææOnlyTable: åªä½¿ç¨tableç»æï¼ä¸å è½½view
å½ä»¤è¡å·¥å ·
注æäºé¡¹
- ç¡®ä¿æ°æ®åºè¿æ¥å符串ä¸å 嫿£ç¡®çç¨æ·åãå¯ç åæ°æ®åºå
- 建议å¨ç产ç¯å¢ä¸éå½è®¾ç½®éè¯æ¬¡æ°ï¼é¿å è¿å¤éè¯
- 妿åªéè¦çæSQLè䏿§è¡ï¼è¯·å°
ShouldRun设置为false - ç¨ä¾çæ°æ®å¨note20250226.sql.zip
ä¾èµ
- gorm.io/gorm
- gorm.io/driver/mysql
- github.com/cloudwego/eino
许å¯è¯
MIT License
