๋ณธ๋ฌธ
[์ค์ต] SQL Quicktart ์์ (Text to SQL)
๐ค AI/๐ ์ค์ต(Hands-on Labs) 2024. 3. 22. 17:22
โ ์ค์ต ์ค๋น๋ฌผ: apikey
https://server-engineer.tistory.com/983
โ ์ค์ต ์๋ฃ
โ ์๋น์ค ์ค๋ช
์ค๋ช
- ์์ฐ์ด(ํ๊ตญ์ด)๋ก ์ํ๋ ์์ฒญ์ ํ๋ฉด, 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
๋๊ธ