ๅพ .NET ๅณ็ตฑๆถๆงๅฐ Python / Cloud-Native AI ๅนณๅฐ,ๆๅๅจ Navi 2.0 ็จ 14 ๅๆๆ้,่ฎใ่ช็ถ่ช่จๆฅ่ณๆๅบซใ้ไปถไบ็็่ฝ่ทๅจ productionใ้็ฏๅไบซๅพๆถๆง่จญ่จใPrompt ๅทฅ็จใๅค้ฒๅๆๅฐ่ฉไผฐๆนๆณ็ๅฎๆดๅฏฆๆฐๅฟๅพใ
ๅจไผๆฅญๅ ง้จ,่ณๆๅๆ็ๆๅคง็้ปไธๆฏใ่ณๆไธๅค ใ,่ๆฏใๆ SQL ็ไบบๅคชๅฐใใ็ขๅ็ซฏใๆฅญๅ็ซฏใๅฎขๆ็ซฏๆฏๅคฉๆๅคง้็ใๆๆณ็ฅ้ๆ X ็่ณๆใ้ๆฑ,ๆๅพ้ฝ่ฎๆๅทฅ็จๅธซๆ้ๆน ad-hoc queryใ
ๆๅๅจ่ไบๅ Navi 2.0 ๆ,ๆ ธๅฟ็ฎๆจๅฐฑๆฏ่ฎไปปไฝไธๅๆฅญๅๅไบ้ฝ่ฝ็จไธญๆๅๅ้ก,็ณป็ตฑ่ชๅทฑ็ SQLใๆฅ่ณๆๅบซใๅๆ็ตๆใ
ๅธ้ขไธๆๅพๅค Text2SQL ่งฃๆฑบๆนๆก(LangChain SQLDatabaseChainใVannaใDataHerald ็ญ),ไฝ่ทไธไพ้ฝ้ๅฐๅๆจฃ็ๅ้ก:
- ่ทจ่ณๆๅบซๆฏๆดไธไธ่ดโโMySQL ่ท MSSQL ็ๆน่จใไฟ็ๅญใJOIN ่ชๆณไธๅ
- Schema ๅคชๅคงๆ token ็็ธโโ็ดๆฅๆ schema ๅ จๅก็ตฆ LLM,ๅ่ผ 50K+ token
- ๆบ็ขบ็ไธ็ฉฉโโๅไธๅๅ้ก็ฌฌไธๆฌก็ญๅฐ,็ฌฌไบๆฌก็ญ้ฏ
- ๅฎไธ LLM ้ขจ้ชโโ็ถๆญป OpenAI ็ญๆผๆๆๆฌ่ๅฏ็จๆง้ฝไบค็ตฆๅฎไธไพๆๅ
ๆผๆฏๆๅๆฑบๅฎ่ชๅทฑๅใ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ User Natural Language โ
โ "ไธๅๆ้ทๅฎๅไธๅ็ๅๅๆฏไป้บผ?" โ
โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Question Classifier โ
โ (ๆฅ่ฉข้กๅ / ่ค้ๅบฆ / ่กจๆ ผ็ฏๅๅคๆท) โ
โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโ
โผ โผ โผ
โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ
โ Schema โ โ Few-Shot โ โ Business โ
โ Retriever โ โ Selector โ โ Rules โ
โ (vector DB) โ โ (RAG) โ โ Injector โ
โโโโโโโโฌโโโโโโโโ โโโโโโโโฌโโโโโโโโ โโโโโโโโฌโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Prompt Composer โ
โ (system + schema + examples + Q) โ
โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ LLM Router โ
โ โโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโ โ
โ โ Azure โ AWS โ GCP โ โ
โ โ OpenAI โ Bedrock โ Vertex โ โ
โ โ (primary)โ (POC) โ (POC) โ โ
โ โโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ SQL Validator & Sanitizer โ
โ (read-only, schema check, sandbox)โ
โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Database Executor โ
โ (MySQL / PostgreSQL / MSSQL) โ
โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Result Formatter & Cache โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
็ดๆฅๆ schema ๅ จๅก็ตฆ LLM ๆฏๆฐๆๆๅธธ็ฏ็้ฏ่ชคใๆๅ็่ณๆๅบซๆ 200+ ่กจ,full schema ๅคง็ด 60K token,ๆฏๆฌกๆฅ่ฉข้ฝ้ไธไปฝๆๆฌๅฎๅ จไธๅฏๆงใ
ๆๅ็ๅๆณ:Schema-as-Vector
-
ๅปบ็ดขๅผๆ:ๆๆฏๅ่กจ็ตๆง่ฝๆ่ช็ถ่ช่จๆ่ฟฐ,็จ embedding model ็ทจ็ขผๅฐ vector DB
่กจๅ:order_items ๆ่ฟฐ:่จๅฎๆ็ดฐ่กจ,่จ้ๆฏ็ญ่จๅฎๅ ๅซ็ๅๅใๆธ้ใๅฎๅน ไธป่ฆๆฌไฝ:order_id (FK), product_id (FK), quantity, unit_price ้่ฏ:JOIN orders ON order_items.order_id = orders.id JOIN products ON order_items.product_id = products.id -
ๆฅ่ฉขๆ:ๆไฝฟ็จ่ ๅ้ก็ทจ็ขผ,ๅพ vector DB ๅๆ็ธ้็ 5-10 ๅ่กจ
-
ๅๆ ็ต่ฃ prompt:ๅชๆ้ไบ่กจ็ schema ๆพ้ฒ prompt,token ๅพ 60K ้ๅฐ 3-5K
ๆๆ:ๅนณๅ token ็จ้้ไฝ 92%,ไธ LLM ไธๆ่ขซ็ก้ schema ๅนฒๆพใ
Text2SQL ไธๆฏใไธๅๅ้ก็ตฆ LLMใๅฐฑๆ็ญๆก,prompt ่จญ่จ็ดฐ็ฏ็ดๆฅๆฑบๅฎๆบ็ขบ็ใ
ๆๅ็ถญ่ญทไธๅ็ฏไพๅบซ(็ด 200 ๅ question-SQL pair),ๆฏๆฌกๆฅ่ฉขๆ:
- ่จ็ฎไฝฟ็จ่ ๅ้ก่ๆฏๅ็ฏไพ็ embedding ็ธไผผๅบฆ
- ๅ top-5 ๆ็ธไผผ็็ฏไพๆพ้ฒ prompt
- ็ขบไฟ 5 ๅ็ฏไพๆถต่ไธๅ็ SQL ๆจกๅผ(JOINใ่ๅใๅญๆฅ่ฉขใ่ฆ็ชๅฝๆธ)
ไฝ ๆฏไธไฝ่ณๆๅบซๅฐๅฎถใ่ซๆ นๆไปฅไธ schema ่็ฏไพ,ๅฐไฝฟ็จ่
ๅ้ก่ฝๆ็บ SQLใ
[Schema ๅ]
{retrieved_schemas}
[็ฏไพๅ]
{few_shot_examples}
[ๆฅญๅ่ฆๅๅ]
- ่จๅฎ็ๆ
status=1 ่กจ็คบๅทฒไปๆฌพ
- ๅๅ่กจ deleted_at ไธ็บ NULL ่กจ็คบๅทฒไธๆถ,ๆฅ่ฉขๆ่ซๆ้ค
- ๆฅๆๆฌไฝ็็บ UTC,้่ฝๆ็บ +08:00
[ไฝฟ็จ่
ๅ้ก]
{user_question}
่ซไพไปฅไธๆญฅ้ฉๆ่:
1. ่ญๅฅๅ้กๆถๅๅชไบ่กจ
2. ่ฆๅ JOIN ้ ๅบ่ๆขไปถ
3. ๅฅ็จๅฟ
่ฆ็ WHERE ้ๆฟพ(ๅ
ๅซๆฅญๅ่ฆๅ)
4. ๆฑบๅฎ GROUP BYใORDER BYใLIMIT
5. ่ผธๅบๆ็ต SQL(ๅชๅ SQL,ไธ่ฆ่งฃ้)
CoT ่ฎๆบ็ขบ็ๆๅ็ด 15%,ไปฃๅนๆฏ token ็ฅๅขใ
ๅช็จๅฎไธ LLM ๆไธๅคง้ขจ้ช:
- ๅฎ้ปๆ ้(2024 ๅนด GPT-4 ๆพ้ฃ็บ 4 ๅฐๆ outage)
- ๆๆฌ็ถๆญป(ไพๆๅๆผฒๅนๅช่ฝๅ)
- ่ฝๅๅทฎ็ฐ(ๆไบ query ็จ Claude ่กจ็พๆดๅฅฝ)
class LLMRouter:
def route(self, question: str, complexity: str) -> LLMProvider:
# ็ฐกๅฎๆฅ่ฉข็จไพฟๅฎๆจกๅ
if complexity == "simple":
return AzureOpenAI("gpt-4o-mini") # ไธปๅ,ๆๆฌไฝ
# ่ค้ๆฅ่ฉข็จๅผทๆจกๅ
if complexity == "complex":
return AzureOpenAI("gpt-4o") # ไธปๅ
# A/B test ๆต้ๅๅฐ POC ๅนณๅฐ
if self.in_ab_test_group(question):
return random.choice([
AwsBedrock("claude-sonnet-4-5"),
GcpVertex("gemini-2.0-pro")
])
return AzureOpenAI("gpt-4o") # ้ ่จญไธป LLM ๅคฑๆ(timeout / rate limit / API ้ฏ่ชค)ๆ,่ชๅๅๅฐๅๆด:
Azure OpenAI โ AWS Bedrock โ GCP Vertex AI โ ้็ดๅฐ cached response
ๆฏๆฌกๅๆ้ฝ่จ้ๅฐ OpenTelemetry,ๆนไพฟ SRE ็ฃๆงใ
ๆณจๆ:Bedrock ่ Vertex AI ๅจๆๅ็ณป็ตฑไธญ้ๅจ POC ้ๆฎต,production ไธปๅไปๆฏ Azure OpenAIใๅค้ฒๆฏใๅๆด่ๆๆฌๅชๅใ็็ญ็ฅ,ไธๆฏใๅๆไธๅฎถๅ จ่ทใใ
LLM ็ๅบ็ SQL ็ตๅฐไธ่ฝ็ดๆฅๅท่ก,ๆไธๅคง้ขจ้ช:
- SQL injection(LLM ๅฏ่ฝ่ขซไฝฟ็จ่ ๅ้กๆณจๅ ฅ)
- ไธๅฏ้ๆไฝ(LLM ๅฏซๅบ DELETE / UPDATE / DROP)
- ๆ่ฝๆฎบๆ(LLM ๅฏซๅบ cross join ๆ DB ๆๅฎ)
LLM SQL Output
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 1. AST ่งฃๆ (sqlparse) โ
โ - ๆฏๅฆ็บ SELECT? โ
โ - ๆฏๅฆๅซ DDL/DML? โ
โโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโ
โ pass
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 2. Schema ้ฉ่ญ โ
โ - ่กจๅ/ๆฌไฝๆฏๅฆๅญๅจ? โ
โ - JOIN ๆขไปถๆฏๅฆๅๆณ? โ
โโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโ
โ pass
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 3. EXPLAIN PLAN ๅๆ โ
โ - ไผฐ่จ row count โ
โ - ๆฏๅฆ่ตฐ full scan? โ
โโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโ
โ pass
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 4. Read-only ๅธณ่ๅท่ก โ
โ - ่จญๅฎ query timeout โ
โ - ้ๅถ result row limit โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ไปปไธๆญฅๅคฑๆๅฐฑ reject ไธฆ้ๆฐ็ๆ SQLใ
ๅพๅคไบบๅๅฎ Text2SQL ๅฐฑ่ชชใๆ่ฆบๅพ่ ปๆบ็ใ,ไฝใ่ฆบๅพใไธๆฏๅทฅ็จใ
ๆๅ่ฑ 2 ้ฑๅปบ็ซ 150 ้ก Golden Set:
- ๆถต่ simple / medium / complex ไธ็จฎ้ฃๅบฆ
- ๆฏ้ก็ฑๆฅญๅๅไบๆไพๅ้ก,DBA ๅฏซๆจๆบ SQL
- ๆถต่ JOINใ่ๅใๅญๆฅ่ฉขใ่ฆ็ชๅฝๆธใๆฅๆๅฝๆธๅ ญๅคง้ก
| ๆๆจ | ๅฎ็พฉ |
|---|---|
| Execution Accuracy | LLM ็ๆ็ SQL ่ทๅบไพ็็ตๆๆฏๅฆ่ Golden SQL ็ตๆไธ่ด |
| Exact Match | LLM ็ๆ็ SQL ๆฏๅฆ่ Golden SQL ๅญไธฒๅฎๅ จ็ธๅ(ๅดๆ ผ) |
| Semantic Match | LLM ็ๆ็ SQL ็ตๆงๆฏๅฆ่ Golden SQL ็ญๅน(ๅ ่จฑ alias ไธๅ) |
ๆฏๆฌกๆน prompt ๆๆๆจกๅ,่ชๅ่ท Golden Set ไธฆๆฏๅฐ:
pytest tests/eval/test_text2sql.py --eval-set golden_v3
# Output:
# Simple: 98.5% (148/150)
# Medium: 91.2%
# Complex: 76.8%
# Total: 88.9% Execution Accuracyไฝๆผ baseline ๅฐฑ block PR,็ขบไฟๆนๅไธๆ regressionใ
็็:LLM ใ่
ฆ่ฃใไบไธๅ customer_email ๆฌไฝ,ไฝๅฏฆ้่กจๅชๆ email
ๅฐ็ญ:Schema ้ฉ่ญ้ๆฎต็ดๆฅ reject,ไธฆๆ้ฏ่ชคๆฌไฝ + ๆญฃ็ขบๆฌไฝๅ่กจ้คตๅๅป้็
็็:200+ ่กจ็ schema ๅ จๅก,ๆฏๆฌกๆฅ่ฉข 60K token,ๆๆฌไธๅๆ็ๆๅนพ่ฌ็พๅ ๅฐ็ญ:Schema-as-Vector(ไธ้ข่ฌ้)
็็:ไธๅๅทฅ็จๅธซๅๆๆน prompt,ๆฒไบบ็ฅ้ๅช็็ๆบ็ขบ็ๆ้ซ ๅฐ็ญ:ๆ prompt ็ถๆ code ็ฎก็,ๅฏซๅ ฅ Git,ๆฏ็่ท Golden Set,็ตๆๅญๅฐ metric DB
็็:ไฝฟ็จ่
ๅใ2024 ๅนด็ฌฌไธๅญฃ็ revenueใ,LLM ๆใrevenueใ็ถ่ฑๆไธ็ฟป่ญฏ,ไฝ SQL ๆฌไฝๆฏ ็ธฝ็ๆถ
ๅฐ็ญ:Schema ๆ่ฟฐๅๆ็จไธญ่ฑ้่ชๆจ่จ,ไธฆๅจ system prompt ๆ้ใ่ก่ชๅฐ็
ง่กจใ
้ๅๅฐๆก็ๅฆไธๅฑคๆถ็ฉซ,ๆฏๅ จ็จไฝฟ็จ Cursor ่ Claude Code ้็ผ็้ซ้ฉใ
้ๅปๅฏซไธๅ่ค้็ retriever ๆจก็ต,ๅฏ่ฝ่ฆ่ฑ 2-3 ๅคฉ็ LangChain ๆไปถใๅฏซๆธฌ่ฉฆใdebugใ็พๅจ็จ Cursor ็ multi-file edit + Claude ็ agentic mode,ๅพ่จญ่จๅฐๆธฌ่ฉฆๅคงๆฆ 4-6 ๅฐๆๅฐฑ่ฝๅฎๆไธๅๅฏ็จ็็ๆฌใ
ไฝ้ไธไปฃ่กจ AI ๅไปฃๅทฅ็จๅธซใๆ็ผ็พ็้้ตๆฏ:
AI ๅทฅๅ ทๆพๅคง็ๆฏๅทฅ็จๅธซ็ใๅๅณใโโไฝ ่ถ็ฅ้ๅฅฝ็จๅผ้ทไป้บผๆจฃ,AI ็ตฆไฝ ็ๅนๅผ่ถ้ซ;่ถไธๆ review ็จๅผ็ขผ,AI ็ตฆไฝ ็ๅฐฑๅชๆฏไธๅจ OK-ish ็ spaghettiใ
ๅฆๆๆไป้บผไธๅฅ่ฉฑๅฟๅพๅธถ่ตฐ,ๆๆ่ชช:ๅฅฝ็ๅทฅ็จๅธซไธๅช็จ AI,้่ฆ review AIใ
- ๅ ๅ ฅ Schema ่ชๅๆดๆฐๆฉๅถ(่ณๆๅบซ่ฎๆดๆ่ชๅ้ๅปบ vector index)
- ๆข็ดข Multi-Agent ๆจกๅผ(่ฆๅ Agent + ็ๆ Agent + ้ฉ่ญ Agent ๅๅทฅ)
- ๆดๅ MCP Protocol ่ฎ Text2SQL ่ฎๆๅฏๆๆ็ LLM tool
- ๅปบ็ซ Prompt A/B test ๅนณๅฐ,็ณป็ตฑๅ่ฟญไปฃ
- ๅจไฝ ็ GitHub ๅปบไธๅ repo,ไพๅฆ
text2sql-engineering-notes - ๆ้็ฏ .md ๅฝๅ็บ
README.mdๆtext2sql-from-zero.md - ๅ ไธๆถๆงๅ(ๅฏไปฅ็จ mermaid ้็ซ,ๆไธๅณ PNG)
- Push ไธๅป
- ้้ป:ๅจไฝ ็ GitHub Profile README ่ฃก pin ้ๅ repo
ๆ่ ๆด้ฒ้็ๅๆณ:็จ GitHub Pages ๅ blog
- Repo ๅปบ
your-username.github.io - ็จ JekyllใHugoใAstro ไปปไธๆกๆถ
- ๆ้็ฏๆพ้ฒ
_posts/ๆcontent/posts/ - ่ชๅ็ๆ blog ็ถฒ็ซ
- Email:ko1314520ya@gmail.com
- GitHub:D11225687
- ๅฐ้ป:ๅฐๅ