Dalle 이미지 생성도 실습했지만 어제에 이어 Langchain 활용법을 이어서 정리하겠다.
# 필요한 패키지 설치# pip install langchain-community faiss-cpu tiktoken
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import FAISS
# 문서 로딩
loader = TextLoader("example_data.txt")
documents = loader.load()
# 문서 분할
text_splitter = CharacterTextSplitter(
separator="\n\n",
chunk_size=1000,
chunk_overlap=200
)
docs = text_splitter.split_documents(documents)
# 임베딩 및 벡터 스토어 생성
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(docs, embeddings)
# 검색 테스트
query = "인공지능이란 무엇인가요?"
docs = vectorstore.similarity_search(query)
print(docs[0].page_content)
from langchain.chains import RetrievalQA
from langchain_openai import ChatOpenAI
# 검색기 생성
retriever = vectorstore.as_retriever()
# LCEL을 이용한 RAG 파이프라인 구축
from langchain_core.runnables import RunnablePassthrough
# 템플릿 정의
template = """
다음은 주어진 질문에 관련된 문서 내용입니다:
{context}
이 정보를 바탕으로 다음 질문에 답변해주세요: {question}
"""
prompt = ChatPromptTemplate.from_template(template)
# 체인 구성
rag_chain = (
{
"context": lambda input: retriever.get_relevant_documents(input["question"]),
"question": RunnablePassthrough()
}
| prompt
| ChatOpenAI(temperature=0)
| StrOutputParser()
)
# 실행
response = rag_chain.invoke({"question": "문서에서 설명하는 인공지능의 정의는?"})
print(response)
from langchain.agents import AgentExecutor, create_react_agent
from langchain.tools import Tool
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
# 도구 정의
def search_google(query):
# 실제로는 구글 API를 호출하겠지만, 여기서는 예시로 대체
return f"{query}에 대한 검색 결과입니다."
def calculate(expression):
try:
return str(eval(expression))
except:
return "계산할 수 없는 수식입니다."
tools = [
Tool.from_function(
func=search_google,
name="GoogleSearch",
description="인터넷에서 정보를 검색할 때 사용합니다."
),
Tool.from_function(
func=calculate,
name="Calculator",
description="수학적 계산을 수행할 때 사용합니다."
)
]
# 에이전트 프롬프트
prompt = ChatPromptTemplate.from_messages([
("system", """다음 도구를 사용하여 사용자의 질문에 답변하세요:
{tools}
문제를 단계별로 생각하고, 필요한 도구를 활용하세요."""),
("human", "{input}")
])
# 에이전트 생성
llm = ChatOpenAI(temperature=0)
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 에이전트 실행
response = agent_executor.invoke({"input": "2023년 노벨 물리학상 수상자는 누구이며, 그들의 나이 합을 계산해줘"})
print(response["output"])