langchain 생태계? 그림 참고하기
1, 2의 retriever 차이? community는 langchain이 다른걸 활용할 수 있게 의존성을 떨어뜨린 것. 외부 검색도구 등의 tool 활용가능하도록.
langchain - chains, agents, retrieval strategies
langchain-community: model IO(model, prompt, example selector, output parser), retrieval(retriever, document loader, vector store, text splitter, embedding model), Agent tooling(tool, toolkit)
langchain core: LCEL 지원
RunnableWithMessageHistory 로 multi turn 구현 가능
from langchain_core.chat_history import (
BaseChatMessageHistory,
InMemoryChatMessageHistory,
)
from langchain_core.runnables.history import RunnableWithMessageHistory
store = {}
# session_id를 key로 삼아 dictionary에 저장
# value 값에는 chat history를 저장
def get_session_history(session_id: str) -> BaseChatMessageHistory:
#입력된 session id에 대한 정보가 store에 ㅇ벗다면 inmemorychat어쩌구객체 생성해서 이번대화넣음
if session_id not in store:
store[session_id] = InMemoryChatMessageHistory()
#해당 세션id의 대화 history 반환
return store[session_id]
# get_session_history를 통해 우리가 관리하는
#얘는 체인으로 결합할 수 없어서.. RunnableWith활용해서 대화기록 자동으로 처리.. runnable한 객체 생성
with_message_history = RunnableWithMessageHistory(llm, get_session_history)
#대화형 모델을 실행하는 동시에 히스토리도 관리
-> session_id로 관리함
config = {"configurable": {"session_id": "random123"}}
response = with_message_history.invoke(
[HumanMessage(content="내 이름이 뭐라고 했는지 기억나?")],
config=config,
)
response.content
from langchain_text_splitters import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
splits = text_splitter.split_documents(pages)
#문단/문장/단어/청크 크기까지 줄어들때까지 계속 자름. 재귀적으로. 단순 글자수로 자르는 것보다 문맥 유지하기에 낫군
반응형
'AI > LLM' 카테고리의 다른 글
구조 (0) | 2025.02.24 |
---|---|
Adaptive RAG (0) | 2025.02.24 |
tool calling (0) | 2025.02.10 |
[LLM] 데이터 엔지니어링부터 LLM활용 DB검색 챗봇 만들기- 2.Langchain, LLM, Streamlit 설정 - 자연어를 이해하고 sql query 로 변환해 Postgresql DB 탐색하기 (7) | 2024.03.08 |
[LLM] 데이터 엔지니어링부터 LLM활용 DB검색 챗봇 만들기 1- Postgresql 설정 및 데이터 전처리 (Airflow, Kafka, (1) | 2024.03.07 |