๐Ÿค– AI/ML ๐ŸŒณ ๊ณ ๊ธ‰

LangChain ์‹ค์ „

LangChain์œผ๋กœ AI ์—์ด์ „ํŠธ ๊ตฌ์ถ•ํ•˜๊ธฐ

โฑ๏ธ 8์‹œ๊ฐ„ ๐Ÿ‘๏ธ 23 ์กฐํšŒ โญ ์ถ”์ฒœ ๊ฐ•์ขŒ
๐Ÿ“– ๊ฐ•์ขŒ ๋‚ด์šฉ
# 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. ์—์ด์ „ํŠธ ๊ฐœ๋ฐœ