# LangChain ์ค์ ๊ฐ์ด๋
## ํ์ต ๋ชฉํ
LangChain์ผ๋ก LLM ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํฉ๋๋ค.
## 1. LangChain์ด๋?
LLM ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ ํ๋ ์์ํฌ์
๋๋ค.
- ๋ค์ํ LLM ํตํฉ
- ์ฒด์ธ๊ณผ ์์ด์ ํธ
- RAG ๊ตฌํ ์ง์
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
## 2. ์ค์น
pip install langchain langchain-openai
ํ๊ฒฝ๋ณ์:
export OPENAI_API_KEY=sk-xxxxx
## 3. ๊ธฐ๋ณธ LLM ํธ์ถ
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o")
response = llm.invoke("Hello")
print(response.content)
## 4. ํ๋กฌํํธ ํ
ํ๋ฆฟ
from langchain.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "You are a {role}."),
("user", "{input}")
])
chain = prompt | llm
response = chain.invoke({"role": "teacher", "input": "Explain Python"})
print(response.content)
## 5. ์ถ๋ ฅ ํ์
from langchain.output_parsers import JsonOutputParser
from langchain_core.pydantic_v1 import BaseModel
class Product(BaseModel):
name: str
price: float
description: str
parser = JsonOutputParser(pydantic_object=Product)
prompt = ChatPromptTemplate.from_messages([
("system", "Extract product info. {format_instructions}"),
("user", "{text}")
])
chain = prompt | llm | parser
result = chain.invoke({
"text": "iPhone 15 Pro costs 1499 dollars. Great camera.",
"format_instructions": parser.get_format_instructions()
})
## 6. ๋ฌธ์ ๋ก๋
from langchain_community.document_loaders import (
PyPDFLoader,
TextLoader,
WebBaseLoader
)
PDF:
loader = PyPDFLoader("document.pdf")
docs = loader.load()
ํ
์คํธ:
loader = TextLoader("file.txt")
docs = loader.load()
์นํ์ด์ง:
loader = WebBaseLoader("https://example.com")
docs = loader.load()
## 7. ํ
์คํธ ๋ถํ
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
chunks = splitter.split_documents(docs)
## 8. ์๋ฒ ๋ฉ๊ณผ ๋ฒกํฐ ์ ์ฅ์
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(
documents=chunks,
embedding=embeddings,
persist_directory="./chroma_db"
)
๊ฒ์:
results = vectorstore.similarity_search("query", k=3)
## 9. RAG ์ฒด์ธ
from langchain.chains import RetrievalQA
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever,
return_source_documents=True
)
result = qa_chain.invoke({"query": "What is the main topic?"})
print(result["result"])
## 10. ๋ํ ๋ฉ๋ชจ๋ฆฌ
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain
memory = ConversationBufferMemory()
chain = ConversationChain(
llm=llm,
memory=memory
)
chain.invoke({"input": "My name is Kim"})
chain.invoke({"input": "What is my name?"})
## 11. ์์ด์ ํธ
from langchain.agents import create_openai_tools_agent, AgentExecutor
from langchain.tools import tool
@tool
def calculator(expression: str) -> str:
"""Calculate math expression"""
return str(eval(expression))
@tool
def search(query: str) -> str:
"""Search the web"""
return "Search results for: " + query
tools = [calculator, search]
prompt = ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant."),
("user", "{input}"),
("placeholder", "{agent_scratchpad}")
])
agent = create_openai_tools_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools)
result = executor.invoke({"input": "What is 123 * 456?"})
## 12. LCEL (LangChain Expression Language)
from langchain_core.runnables import RunnablePassthrough
chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| llm
| parser
)
result = chain.invoke("What is the summary?")
## 13. ์คํธ๋ฆฌ๋ฐ
for chunk in chain.stream({"input": "Tell me a story"}):
print(chunk.content, end="")
## ์ถ์ฒ ํ์ต ์์
1. ๊ธฐ๋ณธ LLM ํธ์ถ
2. ํ๋กฌํํธ ํ
ํ๋ฆฟ
3. ๋ฌธ์ ๋ก๋์ ๋ถํ
4. RAG ๊ตฌํ
5. ์์ด์ ํธ ๊ฐ๋ฐ