basic
ํต์ฌ ์ ๋ฆฌ
llm์ด๋ ๋จธ์ ๋ฌ๋๋ฑ ์ด๋ป๊ฒ ์ด๊ฑธ ๋ง๋๋๊ฐ๋ ์ค๋ ํ์ง ์์ต๋๋ค. ํ์ฉ์ ํ๋๊ฑฐ๋ง ๊ณ ๋ฏผํฉ๋๋ค. ์๋๋ฉด ์ ๊ฐ ์ด๋ณด๋ผ..
llm์ ๊ทธ๋ฅ ์ ์ฝ๋์ด๋ค. ๋๋จธ์ง๋ ์ ๋ถ ๊ฐ๋ฐ์๊ฐ. ๋ง๋ง ํด์ฃผ์ง ์ง์ ์๋ฌด๊ฒ๋ ํด์ฃผ์ง ์๋๋ค.
๊ณต์ ๋ฌธ์๋ฅผ ํญ์ ์ ๋ณด๋ ๋ฒ๋ฆ์ ๋ค์ ์๋ค.
๋ณํ๊ฐ ์์ฃผ ๋นจ๋ผ์ ๊ธฐ์กด๋ฐฉ์์ ์ํ์ฝ๋๋ค์ด ๋๋ฌด ๋ง์ด ์ธํฐ๋ท์ ๋ณด์ ๋๋ค. ํ์ธํด์ ์ต์ ๋ฒ์ ์ผ๋ก ๊ณต๋ถํฉ์๋ค.
LangChain ๊ฐ๋ฐ ํ๊ฒฝ ์ค์น
docker
vscode
devcontainer
python
jupyter - on container
devcontainer
๊ธฐ๋ณธ ๊ณผ์
setup .env file
api key๋ฅผ ๋ฐ๊ธ๋ฐ์์ .env ํ์ผ์ ์ ์ฅ
https://platform.openai.com/settings/profile?tab=api-keys
OPENAI_API_KEY=sk-xxx
openai์์ Project key๋ฅผ ์ฌ์ฉํ๋๊ฑธ ์ถ์ฒ
https://platform.openai.com/api-keys
read .env file
test api key
์ด์ ์ฐ๊ฒฐํด๋ณผ๊ฐ์?
prompt
๋ง์ ์ ๋ฌํ๋๊ฒ์ ํ๋กฌํํธ๋ผ๊ณ ํ๋ค. ์ด ์ฉ์ด๋ฅผ ์ฒ์์ ๋ค์์๋ ์ฐธ ์ดํด๊ฐ ์๋ฌ๋ค. ๊ทธ๋ฅ ๋ด๊ฐ ํ๋ ๋ง์ด๋ค.
openai model and price
https://platform.openai.com/docs/models
https://openai.com/api/pricing/
context windows๊ฐ ์ปค์ ธ์ ์์ฆ์ ๊ตฌ์ง ํ์ผ์ ์งค๋ผ์ผํ๋ ํ๋ ๋๋์ด ์์. ๊ทธ๋ฐ๋ฐ ๋น์ฉ์ด ๋ง์ด ๋์ค๊ฒ์ง..
context windows ๋ณด๊ธฐ
๊ฐ๊ฒฉ ๋ณด๊ธฐ
gpt-3.5-turbo๋ฅผ ์ฐ๊ฒ์. -> 0.5usd / 1M
gpt-4o -> 5usd / 1M
https://platform.openai.com/docs/deprecations (deprecated)
๊ธฐ์กด์๋ gpt-3.5-turbo ๊ฐ 4000 token์ด max ์ง๊ธ์ ๋ชจ๋ธ์ด ์ ๋ฐ์ดํธ๋์ gpt-3.5-turbo-0125 ์ด๊ฑธ ์๋์ผ๋ก ๊ฐ๋ฅดํค๊ณ ์์.
16,385 tokens ์ ๋ฐ์์ ์๋ค. 4๋ฐฐ๊ฐ ๋ง์ง๋ง ์ฌ์ ํ ์ข ์ ์ ๊ฐ์ ์๋ค.
LLM model vs Chat Model
llm mode์ chat mode๋ OpenAI์ GPT-3 ์ธ์ด ๋ชจ๋ธ์ ์ฌ์ฉํ ๋ ์ ํํ ์ ์๋ ๋ ๊ฐ์ง ๋ชจ๋์ ๋๋ค.
LLM Mode (Language Model Mode): ์ด ๋ชจ๋๋ ์ฃผ์ด์ง ์ ๋ ฅ์ ๋ํด ๊ฐ์ฅ ๊ฐ๋ฅ์ฑ ์๋ ๋ค์ ํ ์คํธ๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ ๋ฌธ์ฅ ์์ฑ, ๋ฌธ์ ์์ฑ ๋ฑ์ ์์ ์ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, "์ค๋ ๋ ์จ๋"์ด๋ผ๋ ํ๋กฌํํธ์ ๋ํด "๋ง์ต๋๋ค"๋ผ๋ ํ ์คํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
Chat Mode: ์ด ๋ชจ๋๋ ๋ํํ ์์ ์ ์ฌ์ฉ๋ฉ๋๋ค. ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ํ ์๋ต์ ์์ฑํ๋ ๊ฒ์ด ๋ชฉํ์ ๋๋ค. ์ด๋ ์ฑ๋ด, ๋ํํ ์์คํ ๋ฑ์ ์์ ์ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ "์ค๋ ๋ ์จ๋ ์ด๋?"๋ผ๊ณ ๋ฌผ์ผ๋ฉด, "์ค๋์ ๋ง์ ๋ ์จ์ ๋๋ค"๋ผ๊ณ ์๋ตํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์, llm mode์ chat mode์ ์ฃผ์ ์ฐจ์ด์ ์ ๊ทธ๋ค์ด ํด๊ฒฐํ๋ ค๋ ์์ ์ ์ ํ์ ์์ต๋๋ค.
llm mode๋ ์ผ๋ฐ์ ์ธ ์ธ์ด ๋ชจ๋ธ๋ง ์์ ์
chat mode๋ ๋ํํ ์์ ์ ์ฌ์ฉ๋ฉ๋๋ค.
https://python.langchain.com/v0.2/docs/integrations/chat/openai/
vs
https://python.langchain.com/v0.2/docs/integrations/llms/openai/
OpenAI๋ gpt-3.5-turbo-instruct์ด๊ฑฐ ์ธ๋๋ง ์ด๋ค. ์ด๊ฑฐ ์ธ๊ฑฐ์๋๋ฉด chatOpenAI๋ฅผ ์ฐ์.
ChatOpenAI๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๊ฑฐ๊ฐ๋ค.
ChatOpenAI๋ ๋ค์ํํ์ ๋ฉ์ธ์ง๋ฅผ ๋ฐ์์ ์๋ค.
Message Type
system message : ์์คํ ์ ๋ํ ๋ฉ์ธ์ง
human message : ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ฉ์ธ์ง
ai message : ai๊ฐ ์ถ๋ ฅํ ๋ฉ์ธ์ง (assistant, openai term)
PIPELINE
ํ์ดํ๋ผ์ธ์ ๋ง๋ค์ด์ ๋๊ณ ์ฐ๊ฒฐํด๋๋ค์. ํ์ํ ๋๋ง๋ค ๋ณ์์ ๊ฐ์ ๋ฃ์ผ๋ฉด ์๋์ผ๋ก ํ์ดํ๋ผ์ธ์ ํตํด์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
chain
๋ง์ ํ๋๋ฐ ๋ณ์๋ก ์ฒ๋ฆฌํ๊ณ ์ถ์ด์ template ๊ฐ ์๊ฒผ๋ค. ํ๋กฌํํธ ํ ํ๋ฆฟ์ ๋ง๋ค๊ณ ๋ชจ๋ธ๊ณผ ์ฒด์ธ์ผ๋ก ์ฐ๊ฒฐํ๋ค. Invoke๋ฅผ ํ ๋ ํ๋กฌํํธ์ ๋ค์ด๊ฐ๋ ๊ฒ๋ค์ ๋ค ๋ฃ์ด์ค๋ค.
LCEL (LangChain Express Language)
https://python.langchain.com/v0.2/docs/concepts/#langchain-expression-language-lcel
LangChain ํํ ์ธ์ด(LCEL)๋ LangChain ๊ตฌ์ฑ ์์๋ฅผ ์ฐ๊ฒฐํ๋ ์ ์ธ์ ๋ฐฉ๋ฒ์ ๋๋ค
stream: ์๋ต์ ์ฒญํฌ๋ฅผ ๋ค์ ์คํธ๋ฆฌ๋ฐํฉ๋๋ค.
invoke: ์ ๋ ฅ์ ๋ํ ์ฒด์ธ ํธ์ถ
batch: ์ ๋ ฅ ๋ชฉ๋ก์ ๋ํ ์ฒด์ธ ํธ์ถ
์ด ๋ฉ์๋๋ค์๋ ๋์์ฑ์ ์ํด asyncio await ๊ตฌ๋ฌธ๊ณผ ํจ๊ป ์ฌ์ฉํด์ผ ํ๋ ํด๋น ๋น๋๊ธฐ ๋ฉ์๋๋ ์์ต๋๋ค:
astream: ์๋ต ์ฒญํฌ๋ฅผ ๋น๋๊ธฐ์์ผ๋ก ๋ค์ ์คํธ๋ฆฌ๋ฐํฉ๋๋ค.
ainvoke: ์ ๋ ฅ ๋น๋๊ธฐ์์ ์ฒด์ธ์ ํธ์ถํฉ๋๋ค.
abatch: ์ ๋ ฅ ๋ชฉ๋ก์์ ์ฒด์ธ์ ๋น๋๊ธฐ ํธ์ถํฉ๋๋ค.
astream_log: ์ต์ข ์๋ต ์ธ์๋ ์ค๊ฐ ๋จ๊ณ๊ฐ ๋ฐ์ํ ๋ ์คํธ๋ฆผ๋ฐฑํฉ๋๋ค.
astream_events: ์ฒด์ธ์์ ๋ฐ์ํ๋ ๋ฒ ํ ์คํธ๋ฆผ ์ด๋ฒคํธ (langchain-core 0.1.14์์ ๋์ )
์ ๋ฆฌํ๋ฉด
Runnable interface ๋ง ์๋ฉด๋๊ณ ๋์ค์ ๊ธฐํ๋๋ฉด ์ค๋ช .
ํนํ invoke,batch,stream์ ์๋ฉด๋จ. ๊ฐ์ ํ์ดํ์ ๋ฃ์ด์ฃผ๋๊ฒ์.
Invoke
Invokeํจ์๋ฅผ ์ด์ฉํด์ openai์ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ผ์ ์๋ค.
PromptTemplate ๋ chatPromptTemplate๋ณด๋ค ๊ฐ๋จํด์ ์ผ๋ค.
๊ฒฐ๊ณผ๋ฅผ outputParser๋ก ๋ณด๋ผ์์๋ค.
batch
์ฌ๋ฌ๊ฐ์ ์ ๋ ฅ์ ํ๋ฒ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ
stream: ์ค์๊ฐ ์ถ๋ ฅ
์คํธ๋ฆฌ๋ฐ ์ต์ ์ ์ง์์ ๋ํ ๋ต๋ณ์ ์ค์๊ฐ์ผ๋ก ๋ฐ์ ๋ ์ ์ฉํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด streaming=True ๋ก ์ค์ ํ๊ณ ์คํธ๋ฆฌ๋ฐ์ผ๋ก ๋ต๋ณ์ ๋ฐ๊ธฐ ์ํ StreamingStdOutCallbackHandler() ์ ์ฝ๋ฐฑ์ผ๋ก ์ง์ ํฉ๋๋ค.
์ฌ๋ฌ๊ฐ chain์ ์ฐ๊ฒฐ
์ฒซ๋ฒ์งธ ์ฒด์ธ์ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์ฒด์ธ์ผ๋ก ๋๊ธฐ๋๊ฒ์ด ๊ฐ๋ฅํ๋ค.
Runnable interface
https://python.langchain.com/v0.2/docs/concepts/#runnable-interface
prompt๋ dictionary๋ฅผ ์ธํ๋ฐ๊ณ prompt value๋ฅผ ๋ฆฌํดํ๋ค. ๋ชจ๋ธ์ธ Prompt value๋ฅผ ์ธํ๋ฐ๊ณ chat message๋ฅผ ๋ฆฌํดํ๋ค. output parser๋ chat model์ ์ธํ ๋ฐ๊ณ ํ์์ ๋ฐ๋ผ์ ๋ฆฌํดํ๋ค.
ํ๋กฌํํธ ํ
ํ๋ฆฟ์ ํ์ฉ
PromptTemplate : ํ๋กฌํํธ ๋ฌธ์์ด์ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋๋ ํ
ํ๋ฆฟ
template: ํ ํ๋ฆฟ ๋ฌธ์์ด์ ๋๋ค. ์ด ๋ฌธ์์ด ๋ด์์ ์ค๊ดํธ {}๋ ๋ณ์๋ฅผ ๋ํ๋ ๋๋ค.
input_variables: ์ค๊ดํธ ์์ ๋ค์ด๊ฐ ๋ณ์์ ์ด๋ฆ์ ๋ฆฌ์คํธ๋ก ์ ์ํฉ๋๋ค.
2๊ฐ ์ด์์ ๋ณ์๋ฅผ ํ
ํ๋ฆฟ ์์ ์ ์
PromptTemplate vs ChatPromptTemplate
PromptTemplate๋ ์ผ๋ฐ์ ์ธ ์์ ์ ์ฌ์ฉ
ChatPromptTemplate๋ ๋ํํ ์์ ์ ์ฌ์ฉ๋ฉ๋๋ค.
ChatPromptTemplate์ ์ํ์ฒ๋ผ system,human,ai ๋ฉ์ธ์ง๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค. PromptTemplate์ ๋จ์ํ ํ ์คํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
output parser
์์ํ์ ํ์ฑํด์ค๋ค.
https://python.langchain.com/v0.2/docs/concepts/#output-parsers
json parser : https://python.langchain.com/v0.2/docs/how_to/output_parser_json/
๊ทธ๋ฐ๋ฐ ์ฃผ์์ฌํญ์ด ์๋ค. https://python.langchain.com/v0.2/docs/concepts/#output-parsers
function calling์ ์ฐ์.
Prompt engineering
Zero Shot : ๋ชจ๋ธ์๊ฒ ์์ ๋ฅผ ์ ๊ณตํ์ง ์์
One Shot : ๋ชจ๋ธ์๊ฒ ์์ ๋ฅผ ํ๋ฒ๋ง ์ ๊ณต
Few Shot : ๋ชจ๋ธ์๊ฒ ์์ ๋ฅผ ๋ช๋ฒ ์ ๊ณต
์ ๋ฆฌ
ํ์ฌ ๊ตฌ์กฐ
langchain์์ openai๋ก ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ๋ค.
๋ค์ ๊ฐ์๋ slack์์ธ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๋ณด์.
๊ธฐํ ๊ณ ๋ฏผ๋ค
์ langchain์ ์จ์ผํ ๊ฐ?
์ ์ง์ openai api ์ฌ์ฉํ์ง ์๋๊ฐ?
๋ ์ธ์ ๋ ๋ชจ๋ธ์ ๋ฐ๊ฟ์ ์์ผ๋ฉด ์ข๊ฒ๋ค. langchain์์ ๋ชจ๋ธ์ ๋ฐ๊พธ๋๊ฒ์ ์์ฃผ ์ฝ๋ค.
๊ทธ๋์ langchain ์ ์ฌ์ฉ์ค์ด๊ธฐ๋ ํ๋ฐ.. ๊ฐ์ ๋ง์๋๋ก ํ๊ธฐ ๋ฐ๋๋ค. ์ ์ค์ค๋ก๋ ์์ง ๋ต์ ๋ชป๋ด๋ฆผ. ์๋ค๊ฐ๋ค ํ๋ฃจ์ ๋ง์์ 10๋ฒ ๋ฐ๋.
๊ตฌ๊ธ AI๋ฅผ ์จ๋ณด์.
google ai studio ์ ์ ์ํด์ api Key๋ฅผ ๋ฐ๋๋ค.
.env ํ์ผ์ ์ถ๊ฐํ๋ค.
GOOGLE_API_KEY=xxx
์ ๋๋๊ฒ์ ๋ณผ์ ์๋ค.
์ด๋ ๊ฒ ์ฝ๊ธฐ ๋๋ฌธ์ langchain์ ์ฌ์ฉํ๋ค. ๊ทธ๋ฐ๋ฐ openai๋ง ์ธ๊ฑฐ๋ค ํ๋ฉด ๊ตฌ์ง layer๋ฅผ ๋ ๋ฌ์ผํ๋? ์ถ๊ธดํ๋ฐ.
Last updated
Was this helpful?