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
728x90
반응형
LIST
'Linguistic Intelligence > Prompt Engineering' 카테고리의 다른 글
프롬프트 엔지니어링 (Prompt Engineering) (0) | 2023.05.04 |
---|---|
ChatGPT (0) | 2023.05.04 |
OpenAI (0) | 2023.05.04 |