basic
ํต์ฌ ์ ๋ฆฌ
llm์ด๋ ๋จธ์ ๋ฌ๋๋ฑ ์ด๋ป๊ฒ ์ด๊ฑธ ๋ง๋๋๊ฐ๋ ์ค๋ ํ์ง ์์ต๋๋ค. ํ์ฉ์ ํ๋๊ฑฐ๋ง ๊ณ ๋ฏผํฉ๋๋ค. ์๋๋ฉด ์ ๊ฐ ์ด๋ณด๋ผ..
llm์ ๊ทธ๋ฅ ์ ์ฝ๋์ด๋ค. ๋๋จธ์ง๋ ์ ๋ถ ๊ฐ๋ฐ์๊ฐ. ๋ง๋ง ํด์ฃผ์ง ์ง์ ์๋ฌด๊ฒ๋ ํด์ฃผ์ง ์๋๋ค.
๊ณต์ ๋ฌธ์๋ฅผ ํญ์ ์ ๋ณด๋ ๋ฒ๋ฆ์ ๋ค์ ์๋ค.
๋ณํ๊ฐ ์์ฃผ ๋นจ๋ผ์ ๊ธฐ์กด๋ฐฉ์์ ์ํ์ฝ๋๋ค์ด ๋๋ฌด ๋ง์ด ์ธํฐ๋ท์ ๋ณด์ ๋๋ค. ํ์ธํด์ ์ต์ ๋ฒ์ ์ผ๋ก ๊ณต๋ถํฉ์๋ค.
LangChain ๊ฐ๋ฐ ํ๊ฒฝ ์ค์น
docker
vscode
devcontainer
python
jupyter - on container
devcontainer
mkdir devcontainer
vi devcontainer/devcontainer.json
{
"name": "dev",
"image": "mcr.microsoft.com/devcontainers/python:1-3.12-bullseye"
// "postCreateCommand": "pip3 install --user -r requirements.txt",
// "customizations": {
// "vscode": {
// "extensions": ["ms-toolsai.jupyter"]
// }
// },
}
๊ธฐ๋ณธ ๊ณผ์
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
%pip install --user -Uq python-dotenv
from dotenv import load_dotenv
load_dotenv()
test api key
%pip install --user -Uq langchain langchain-community langchain-core langchain-openai
import openai
openai.__version__
# version์ด ๋์ค๋ฉด ์ฐ๊ฒฐ ์ฑ๊ณต
์ด์ ์ฐ๊ฒฐํด๋ณผ๊ฐ์?
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
# model="gpt-3.5-turbo", # ๋ชจ๋ธ ์ด๋ฆ
temperature = 0.1, # ์ฐฝ์์ฑ (0.0 ~ 2.0)
)
# ์ง์๋ด์ฉ
prompt = "๋ํ๋ฏผ๊ตญ์ ์๋๋ ์ด๋์ธ๊ฐ์?"
# ์ง์
print(f"[๋ต๋ณ]: {llm.invoke(prompt)}")
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๋ฅผ ์ฐ์.
# sample of OpenAI
from langchain_openai import OpenAI
llm = OpenAI(
model="gpt-3.5-turbo-instruct",
)
# ์ง์๋ด์ฉ
question = "๋ํ๋ฏผ๊ตญ์ ์๋๋ ์ด๋์ธ๊ฐ์?"
# ์ง์
print(f"[๋ต๋ณ]: {llm.invoke(question)}")
ChatOpenAI๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๊ฑฐ๊ฐ๋ค.
ChatOpenAI๋ ๋ค์ํํ์ ๋ฉ์ธ์ง๋ฅผ ๋ฐ์์ ์๋ค.
Message Type
system message : ์์คํ ์ ๋ํ ๋ฉ์ธ์ง
human message : ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ฉ์ธ์ง
ai message : ai๊ฐ ์ถ๋ ฅํ ๋ฉ์ธ์ง (assistant, openai term)
llm = ChatOpenAI(
temperature=0.1
)
messages = [
("system", "๋๋ ์์ด๋ฅผ ํ๊ตญ์ด๋ก ๋ฒ์ญํ๋ ์ ์ฉํ ๋์ฐ๋ฏธ์
๋๋ค. ์ฌ์ฉ์ ๋ฌธ์ฅ์ ๋ฒ์ญํฉ๋๋ค."),
("human", "I love programming."),
]
ai_msg = llm.invoke(messages)
ai_msg
print(ai_msg.content)
PIPELINE

ํ์ดํ๋ผ์ธ์ ๋ง๋ค์ด์ ๋๊ณ ์ฐ๊ฒฐํด๋๋ค์. ํ์ํ ๋๋ง๋ค ๋ณ์์ ๊ฐ์ ๋ฃ์ผ๋ฉด ์๋์ผ๋ก ํ์ดํ๋ผ์ธ์ ํตํด์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages(
[
("system", "๋๋ {input_language} ๋ฅผ {output_language} ๋ก ๋ฒ์ญํ๋ ์ ์ฉํ ๋์ฐ๋ฏธ์
๋๋ค. ์ฌ์ฉ์ ๋ฌธ์ฅ์ ๋ฒ์ญํฉ๋๋ค "),
("human", "{input}"),
]
)
chain = prompt | llm # prompt์ llm์ ์ฐ๊ฒฐ ํ์ดํ๋ฅผ ๋ง๋ ๋ค๊ณ ์๊ฐํ๋ฉด๋จ.
answer = chain.invoke(
{
"input_language": "English",
"output_language": "Korean",
"input": "I love you.",
}
)
answer
answer.content
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๋ก ๋ณด๋ผ์์๋ค.
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
# ์ง๋ฌธ ํ
ํ๋ฆฟ ํ์ ์ ์
template = "{country}์ ์๋๋ ๋ญ์ผ?"
# ํ
ํ๋ฆฟ ์์ฑ
prompt = PromptTemplate.from_template(template=template)
prompt
chain = prompt | llm | StrOutputParser()
chain.invoke({"country": "๋ํ๋ฏผ๊ตญ"})
chain.invoke({"country": "์บ๋๋ค"})
batch
์ฌ๋ฌ๊ฐ์ ์ ๋ ฅ์ ํ๋ฒ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ
input_list = [{"country": "ํธ์ฃผ"}, {"country": "์ค๊ตญ"}, {"country": "๋ค๋๋๋"}]
result = chain.batch(input_list)
result
# ๋ฐ๋ณต๋ฌธ์ผ๋ก ๊ฒฐ๊ณผ ์ถ๋ ฅ
for res in result:
print(res.strip())
stream: ์ค์๊ฐ ์ถ๋ ฅ
์คํธ๋ฆฌ๋ฐ ์ต์ ์ ์ง์์ ๋ํ ๋ต๋ณ์ ์ค์๊ฐ์ผ๋ก ๋ฐ์ ๋ ์ ์ฉํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด streaming=True ๋ก ์ค์ ํ๊ณ ์คํธ๋ฆฌ๋ฐ์ผ๋ก ๋ต๋ณ์ ๋ฐ๊ธฐ ์ํ StreamingStdOutCallbackHandler() ์ ์ฝ๋ฐฑ์ผ๋ก ์ง์ ํฉ๋๋ค.
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
# ๊ฐ์ฒด ์์ฑ
llm = ChatOpenAI(
temperature=0, # ์ฐฝ์์ฑ (0.0 ~ 2.0)
streaming=True,
callbacks=[StreamingStdOutCallbackHandler()],
)
# ์ง์๋ด์ฉ
prompt = "๋ํ๋ฏผ๊ตญ์ ๋ํด์ 300์ ๋ด์ธ๋ก ์ต๋ํ ์์ธํ ์๋ ค์ค"
# ์คํธ๋ฆฌ๋ฐ์ผ๋ก ๋ต๋ณ ์ถ๋ ฅ
response = llm.invoke(prompt)
์ฌ๋ฌ๊ฐ chain์ ์ฐ๊ฒฐ
์ฒซ๋ฒ์งธ ์ฒด์ธ์ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์ฒด์ธ์ผ๋ก ๋๊ธฐ๋๊ฒ์ด ๊ฐ๋ฅํ๋ค.
template = "{country}์ ์๋๋ ๋ญ์ผ?"
prompt = PromptTemplate.from_template(template=template)
chain = prompt | llm
template2 = "{city}์ ์ธ๊ตฌ๋ ๋ช๋ช
์ด์ผ?"
prompt2 = PromptTemplate.from_template(template=template2)
chain2 = prompt2 | llm
final_chain = {"city": chain} | chain2
final_chain.invoke({"country": "๋ํ๋ฏผ๊ตญ"})
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: ์ค๊ดํธ ์์ ๋ค์ด๊ฐ ๋ณ์์ ์ด๋ฆ์ ๋ฆฌ์คํธ๋ก ์ ์ํฉ๋๋ค.
# ์ง๋ฌธ ํ
ํ๋ฆฟ ํ์ ์ ์
template = "{country}์ ์๋๋ ๋ญ์ผ?"
# ํ
ํ๋ฆฟ ์์ฑ
prompt = PromptTemplate.from_template(template=template)
prompt
chain = prompt | llm
print(chain.invoke({"country": "ํ๊ตญ"}))
2๊ฐ ์ด์์ ๋ณ์๋ฅผ ํ
ํ๋ฆฟ ์์ ์ ์
# ์ง๋ฌธ ํ
ํ๋ฆฟ ํ์ ์ ์
template = "{area1} ์ {area2} ์ ์์ฐจ๋ ๋ช์๊ฐ์ด์ผ?"
# ํ
ํ๋ฆฟ ์์ฑ
prompt = PromptTemplate.from_template(template)
prompt
chain = prompt | llm
print(chain.invoke({"area1": "์์ธ", "area2": "ํ๋ฆฌ"}))
input_list = [
{"area1": "ํ๋ฆฌ", "area2": "๋ด์"},
{"area1": "์์ธ", "area2": "ํ์์ด"},
{"area1": "์ผ๋ฒ๋ผ", "area2": "๋ฒ ์ด์ง"},
]
# ๋ฐ๋ณต๋ฌธ์ผ๋ก ๊ฒฐ๊ณผ ์ถ๋ ฅ
result = chain.batch(input_list)
for res in result:
print(res.content.strip())
PromptTemplate vs ChatPromptTemplate
PromptTemplate๋ ์ผ๋ฐ์ ์ธ ์์ ์ ์ฌ์ฉ
ChatPromptTemplate๋ ๋ํํ ์์ ์ ์ฌ์ฉ๋ฉ๋๋ค.
from langchain_core.prompts import ChatPromptTemplate
template = "Hello, how are you doing {name}"
prompt = ChatPromptTemplate.from_template(template)
chain = prompt | llm
print(chain.invoke({"name": "John"}))
from langchain_core.prompts import ChatPromptTemplate
message = [
("system", "You are a helpful AI bot. Your name is {name}."),
("human", "Hello, how are you doing?"),
("ai", "I'm doing well, thanks!"),
("human", "{user_input}"),
]
prompt = ChatPromptTemplate.from_messages(message)
chain = prompt | llm
print(chain.invoke({"name": "John", "user_input": "What is the weather like today?"}))
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/
from langchain_core.output_parsers import JsonOutputParser
# from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_openai import ChatOpenAI
# Define your desired data structure.
class Joke(BaseModel):
setup: str = Field(description="๋๋ด์ ์ค๋นํ๋ ์ง๋ฌธ")
punchline: str = Field(description="๋๋ด์ ๋ต๋ณ")
model = ChatOpenAI(temperature=0)
joke_query = "๋๋ด์ ์ด์ผ๊ธฐํด์ค, ๋ต๋ณ์ ํ๊ตญ๋ง๋ก ์ค"
parser = JsonOutputParser(pydantic_object=Joke)
# parser = StrOutputParser()
prompt = PromptTemplate(
template="Answer the user query.\n{format_instructions}\n{query}\n",
input_variables=["query"],
partial_variables={
"format_instructions": parser.get_format_instructions()},
)
chain = prompt | model | parser # chain์ผ๋ก ์์ฑํด์ ์ฐ๊ฒฐ
chain.invoke({"query": joke_query})
๊ทธ๋ฐ๋ฐ ์ฃผ์์ฌํญ์ด ์๋ค. https://python.langchain.com/v0.2/docs/concepts/#output-parsers
It is recommended to use function/tool calling rather than output parsing.
function calling์ ์ฐ์.
Prompt engineering
Zero Shot : ๋ชจ๋ธ์๊ฒ ์์ ๋ฅผ ์ ๊ณตํ์ง ์์
Add 2+2:
One Shot : ๋ชจ๋ธ์๊ฒ ์์ ๋ฅผ ํ๋ฒ๋ง ์ ๊ณต
Add 3+3: 6
Add 2+2:
Few Shot : ๋ชจ๋ธ์๊ฒ ์์ ๋ฅผ ๋ช๋ฒ ์ ๊ณต
Add 3+3: 6
Add 5+5: 10
Add 2+2:
์ ๋ฆฌ
ํ์ฌ ๊ตฌ์กฐ

langchain์์ openai๋ก ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ๋ค.
๋ค์ ๊ฐ์๋ slack์์ธ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๋ณด์.
๊ธฐํ ๊ณ ๋ฏผ๋ค
์ langchain์ ์จ์ผํ ๊ฐ?
์ ์ง์ openai api ์ฌ์ฉํ์ง ์๋๊ฐ?
๋ ์ธ์ ๋ ๋ชจ๋ธ์ ๋ฐ๊ฟ์ ์์ผ๋ฉด ์ข๊ฒ๋ค. langchain์์ ๋ชจ๋ธ์ ๋ฐ๊พธ๋๊ฒ์ ์์ฃผ ์ฝ๋ค.
๊ทธ๋์ langchain ์ ์ฌ์ฉ์ค์ด๊ธฐ๋ ํ๋ฐ.. ๊ฐ์ ๋ง์๋๋ก ํ๊ธฐ ๋ฐ๋๋ค. ์ ์ค์ค๋ก๋ ์์ง ๋ต์ ๋ชป๋ด๋ฆผ. ์๋ค๊ฐ๋ค ํ๋ฃจ์ ๋ง์์ 10๋ฒ ๋ฐ๋.
๊ตฌ๊ธ AI๋ฅผ ์จ๋ณด์.
google ai studio ์ ์ ์ํด์ api Key๋ฅผ ๋ฐ๋๋ค.
.env ํ์ผ์ ์ถ๊ฐํ๋ค.
GOOGLE_API_KEY=xxx
%pip install --user -Uq langchain-google-genai pillow
# api key load
from dotenv import load_dotenv
load_dotenv()
# from langchain_openai import ChatOpenAI
from langchain_google_genai import ChatGoogleGenerativeAI
# llm = ChatOpenAI(
llm = ChatGoogleGenerativeAI(
model="gemini-pro", # ๋ชจ๋ธ ์ด๋ฆ
temperature=0, # ์ฐฝ์์ฑ (0.0 ~ 2.0)
)
# ์ง์๋ด์ฉ
question = "๋ํ๋ฏผ๊ตญ์ ์๋๋ ์ด๋์ธ๊ฐ์?"
# ์ง์
print(f"[๋ต๋ณ]: {llm.invoke(question)}")
์ ๋๋๊ฒ์ ๋ณผ์ ์๋ค.
์ด๋ ๊ฒ ์ฝ๊ธฐ ๋๋ฌธ์ langchain์ ์ฌ์ฉํ๋ค. ๊ทธ๋ฐ๋ฐ openai๋ง ์ธ๊ฑฐ๋ค ํ๋ฉด ๊ตฌ์ง layer๋ฅผ ๋ ๋ฌ์ผํ๋? ์ถ๊ธดํ๋ฐ.
Last updated
Was this helpful?