본문 바로가기
Linguistic Intelligence/Prompt Engineering

[Prompt Engineering] Langchain

by goatlab 2024. 4. 16.
728x90
반응형
SMALL

Langchain

 

LangChain은 LLM을 활용한 애플리케이션 개발을 단순화하기 위해 설계된 오픈 소스 프레임워크이다. 다양한 LLM과 상호 작용하고, 여러 모델을 연결하여 복잡한 AI 어플리케이션을 구축하는 데 도움을 주는 도구이다. 주로 LLM 자체를 개발하는 것보다는 만들어진 LLM을 사용하여 여러 텍스트 분석 기능, 챗봇 개발 등에 사용된다.

 

개발 환경 설치

 

pip install langchain langchain-google-genai langchain-community langchainhub langchain-chroma bs4

 

API 설정

 

API 키는 https://aistudio.google.com/app/apikey에서 발급받는다. 다만, 5월 2일부터 유료화 예정이다.

 

import os
from langchain_community.document_loaders import WebBaseLoader
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_google_genai.embeddings import GoogleGenerativeAIEmbeddings
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.prompts import SystemMessagePromptTemplate, ChatPromptTemplate, MessagesPlaceholder
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_chroma import Chroma

if "GOOGLE_API_KEY" not in os.environ:
    os.environ["GOOGLE_API_KEY"] = "YOUR_API_KEY_HERE"

 

langchain_google_genai.chat_models.ChatGoogleGenerativeAI

 

chat = ChatGoogleGenerativeAI(model="gemini-pro", temperature=1.0)
response = chat.invoke("Write me a ballad about LangChain")

print(response.content)

 

langchain.agents.schema.AgentScratchPadChatPromptTemplate

 

다양한 메시지 형식으로 채팅 프롬프트 템플릿을 만든다.

 

template = ChatPromptTemplate.from_messages([
    ("human", "Hello, how are you?"),
    ("ai", "I'm doing well, thanks!"),
    ("human", "That's good to hear."),
])
prompt = ChatPromptTemplate.from_messages(
    [
        ('system', "Answer only 'yes' or 'no'. Don't add any explanation about your answer."),
        MessagesPlaceholder(variable_name='message')
    ]
)

chain = prompt | chat
input_prompt = input("User : ")
response = chain.invoke(
    {'message' : [HumanMessage(input_prompt)]}
)

print(response.content)

 

retriever

 

# web document를 가져오는 함수
loader = WebBaseLoader("https://docs.smith.langchain.com/overview")
text = loader.load() # raw text

# 500글자씩 안겹치게 자름
text_splitter = RecursiveCharacterTextSplitter(chunk_size=100, chunk_overlap=0)
splits = text_splitter.split_documents(text)
#print(len(splits))

# split 해놓은 텍스트 데이터를 embedding한 VectorDB를 생성
vectordb = Chroma.from_documents(documents=splits,
                                 embedding=GoogleGenerativeAIEmbeddings(model="models/embedding-001"))

# 사용자 입력(질문)과 비교해서 가까운 K개의 결과 찾기
retriever = vectordb.as_retriever(k=1)

# 검색
input_prompt = input("User : ")
response = retriever.invoke(input=input_prompt)
print(response)

 

https://api.python.langchain.com/en/latest/langchain_api_reference.html

 

langchain 0.1.16 — 🦜🔗 LangChain 0.1.16

 

api.python.langchain.com

 

728x90
반응형
LIST

'Linguistic Intelligence > Prompt Engineering' 카테고리의 다른 글

프롬프트 엔지니어링 (Prompt Engineering)  (0) 2023.05.04
ChatGPT  (0) 2023.05.04
OpenAI  (0) 2023.05.04