Dalle 이미지 생성도 실습했지만 어제에 이어 Langchain 활용법을 이어서 정리하겠다.

5. 실습 예제: 문서 로딩 및 QA 시스템 구축

문서 로딩 및 임베딩

# 필요한 패키지 설치# 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)

RAG(Retrieval-Augmented Generation) 시스템 구축


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)

6. 고급 기능 및 활용 방안

에이전트 (Agents)

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"])
profile
개발자 지망생. 일단 하고보자

0개의 댓글