๋ณธ๋ฌธ

[์‹ค์Šต] SQL Quicktart ์˜ˆ์ œ (Text to SQL)

๋ฐ˜์‘ํ˜•

โœ…  ์‹ค์Šต ์ค€๋น„๋ฌผ: apikey

https://server-engineer.tistory.com/983

 

[์‹ค์Šต] OpenAI apikey ๋ฐœ๊ธ‰ ๋ฐ ์‚ฌ์šฉํ•˜๊ธฐ

1. ํšŒ์›๊ฐ€์ž…ํ•˜๊ธฐ ๋จผ์ € OpenAI ํ”Œ๋žซํผ์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค. (๋ฐ”๋กœ๊ฐ€๊ธฐ) ํ™ˆํŽ˜์ด์ง€์—์„œ ํšŒ์›๊ฐ€์ž… ์ ˆ์ฐจ๋ฅผ ์™„๋ฃŒํ•ด์ฃผ์„ธ์š”. 2. API ํ‚ค ๋ฐœ๊ธ‰ ๋ฐ›๊ธฐ ๋กœ๊ทธ์ธ ํ›„, ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์— ์žˆ๋Š” 'View API Keys'๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ์ง์ ‘ ๋ง

server-engineer.tistory.com


https://python.langchain.com/docs/use_cases/sql/quickstart
Text to SQL
Answer the question
ํ…Œ์ด๋ธ” ํŠน์ •์ •๋ณด ์งˆ์˜์‘๋‹ต

 

โœ…  ์‹ค์Šต ์ž๋ฃŒ

https://colab.research.google.com/github/i-am-shuan/learn-langchain/blob/main/langchain_sql_quickstart.ipynb

 

langchain_sql_quickstart.ipynb

Run, share, and edit Python notebooks

colab.research.google.com

 

โœ…  ์„œ๋น„์Šค ์„ค๋ช…

์„ค๋ช…

  • ์ž์—ฐ์–ด(ํ•œ๊ตญ์–ด)๋กœ ์›ํ•˜๋Š” ์š”์ฒญ์„ ํ•˜๋ฉด, LLM์ด ๊ทธ๊ฒƒ์„ SQL๋กœ ์ž๋™๋ณ€ํ™˜ํ•˜์—ฌ DB์™€ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•  ์ˆ˜ ์žˆ๋Š” SQL Agent๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ํ…์ŠคํŠธ๋กœ ์งˆ๋ฌธํ•˜๋ฉด ๊ทธ์— ๋งž๋Š” SQL์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ํ…Œ์ด๋ธ”์˜ ์ •๋ณด๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ์‹ถ์„๋•Œ ํ…์ŠคํŠธ๋กœ ์งˆ๋ฌธํ•˜๋ฉด ํ…Œ์ด๋ธ”์˜ ์ •๋ณด๋ฅผ ์š”์•ฝํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

์„œ๋น„์Šค ํ™œ์šฉ๋ฐฉ์•ˆ

๋žญ์ฒด์ธ SQL Quicktart ์˜ˆ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ณ ๊ฐ ์„œ๋น„์Šค: ๊ณ ๊ฐ์ด ์ œํ’ˆ์ด๋‚˜ ์„œ๋น„์Šค์— ๋Œ€ํ•ด ์งˆ๋ฌธํ•  ๋•Œ, AI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋‹ต๋ณ€์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋ถ„์„: AI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ํ†ต์ฐฐ๋ ฅ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณด๊ณ ์„œ ์ž‘์„ฑ: AI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๊ณ  ๋ณด๊ณ ์„œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜์‚ฌ ๊ฒฐ์ • ์ง€์›: AI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์˜์‚ฌ ๊ฒฐ์ •์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์‚ฌ์šฉ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • ๋žญ์ฒด์ธ: ๋žญ์ฒด์ธ์€ ํ”„๋กฌํ”„ํŠธ ์—”์ง€๋‹ˆ์–ด๋ง, ๋‚ด๋ถ€ ์ง€์‹๋ฒ ์ด์Šค ๋ฐ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ AI ๋ชจ๋ธ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์˜คํ”ˆ์†Œ์Šค ๋„๊ตฌ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค. ๋žญ์ฒด์ธ์€ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜์—ฌ AI์™€ SQL์„ ์ž˜ ๋ชจ๋ฅด๋Š” ์‚ฌ์šฉ์ž๋„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • create_sql_query_chain: ๋žญ์ฒด์ธ์—์„œ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ์ œ๊ณตํ•œ ํ”„๋กฌํ”„ํŠธ์™€ SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SQL ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฒด์ธ์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

  • create_sql_query_chain ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ LLM๊ณผ SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(db)๋ฅผ ์ธ์ˆ˜๋กœ ์ฒด์ธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ์ฒด์ธ์€ ์‚ฌ์šฉ์ž์˜ ์งˆ๋ฌธ์„ ๋ถ„์„ํ•˜์—ฌ SQL ์งˆ์˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ทธ ์งˆ์˜๋ฅผ SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‹คํ–‰ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
from langchain.chains import create_sql_query_chain
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0, openai_api_key=OPENAI_KEY)
db = SQLDatabase.from_uri("sqlite:///chinook.db")
chain = create_sql_query_chain(llm, db)
response = chain.invoke({"question": "employees๋Š” ๋ช‡๋ช…์ด ์žˆ์–ด?"})

 

  • ๊ฒฐ๊ณผ: SELECT COUNT("EmployeeId") AS "EmployeeCount" FROM employees
๋ฐ˜์‘ํ˜•

๊ณต์œ 

๋Œ“๊ธ€