생성형ai 6

Langchain을 이용한 LLM 애플리케이션 구현 #15 - LCEL

LCEL (LangChain Expression Language) 조대협 (http://bcho.tistory.com) 앞에서 소개한 Chain은 개념적으로는 훌륭하지만, 코드양이 다소 많아지고, 병렬처리나 비동기 처리, 스트리밍 같은 고급 기능을 구현하기 어렵다. 이런 한계를 극복하기 위해서 2023년 8월에 LangChain Expression Language (이하 LCEL이 개발되었다.) Chain의 기능을 대처하는 컴포넌트로, 병렬,비동기,스트리밍 같은 고급 워크플로우 처리에서 부터 FallBack이나 Retry 와 같은 장애 처리 기능을 지원하며, 추후에 소개할 Langchain 모니터링/평가 솔루션인 LangSmith와 쉽게 연동이 된다. 이번장에서는 앞에서 구현한 LLMChain, Sequ..

LLM 애플리케이션 개발을 위한 Langchain #5- 캐싱을 이용한 API 비용 절감

Langchain 캐싱을 이용한 비용 절감 조대협 (http://bcho.tistory.com) LLM 애플리케이션을 개발하다보면 개발이나 테스트 단계에서 동일한 프롬프트로 반복해서 호출해야 하는 경우가 생긴다. 코딩을 하다가 에러가 나거나 아니면 테스트 결과를 보거나 할때는 동일 프롬프트로 동일 모델을 계속 호출하는데, 결과값은 거의 비슷하기 때문에, 계속해서 같은 질문을 호출하는 것은 비용이 낭비 된다. 같은 프롬프트라면 결과 값을 캐슁해놓고 개발에 사용해도 큰문제가 없다. Langchain에서는 동일(또는 유사) 프롬프트에 대해서 결과를 캐슁하여 API 호출을 줄일 수 있는 기능을 제공한다. 메모리 캐싱 캐싱을 저장하는 장소에 따라서 여러가지 캐싱 모델을 지원하는데, 가장 간단한 캐싱 모델은 로컬 ..

LLM 애플리케이션 개발을 위한 Langchain - #2 주요 컴포넌트

Langchain의 주요 구성 요소 소개 조대협 (http://bcho.tistory.com) Langchain이 어떤 컴포넌트로 구성되어 있는지 살펴보자. 2023년 12월 현재 Langchain 라이브러리는 많은 업데이트가 있어서 이전 버전에 비교해서 컴포넌트 구성이나 기능이 다소 변경되었다. Langchain을 구성하는 주요 컴포넌트로는 Model, Prompt Template, Output Parser, Chain, Agent, Retrieval이 있다. 각각의 컴포넌트에 대해서 살펴보자. Model 먼저 Model 컴포넌트는 LLM 모델을 추상화하여 제공한다. 모델 컴포넌트는 입력으로 들어온 프롬프트에 대해서 텍스트 답변을 리턴하는 기능을 제공한다. Langchain은 다양한 LLM 모델을 지원..

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #8 임베딩 API 비교

임베딩 API 비교 및 선택 조대협 (http://bcho.tistory.com) 이 글에서는 접근이 쉽고 많이 사용되는 open ai의 임베딩 모델을 사용했지만, 여러 임베딩 모델들이 있고, 임베딩 모델 마다 성능이 다르며 임베딩의 목적또한 다르다. RAG 를 소개하는 글이기 때문에, 문서 검색 (Document Retrieval) 기능이 주요 유스 케이스이지만, 임베딩은 분류(Classification), 클러스터링(Clustering) 등 다양한 시나리오로 사용이 가능하다. 구글의 Vertex.AI 임베딩 모델의 경우, 임베딩의 목적에 따라서 임베딩 타입을 지정하게 할 수 있다. 출처 : https://cloud.google.com/vertex-ai/docs/generative-ai/embeddin..

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #7 RAG 쿼리한 정보로 LLM에 질의하기

RAG 쿼리한 정보로 LLM에 질의하는 프롬프트 조대협(http://bcho.tistory.com) RAG 구조를 이용해서 원하는 정보를 저장하고, 검색했으면 이를 LLM에 전달해서 답변을 생성하게 해야 한다. LLM에 컨텍스트 정보를 전달하기 위해서는 프롬프트를 사용하는데, 이때 LLM이 컨텍스트 정보 이외의 정보, 예를 들어 LLM 자체가 알고 있는 정보를 이용해서 유추한 답변을 만들어 낼 수 있기 때문에, 이를 방지하기 위한 프롬프팅이 필요하다. 아래는 RAG에서 추출한 정보를 기반으로 질의를 하는 프롬프트 예제이다. You are an intelligent assistant helping the users with their questions on {{company | research papers..

주제와 관계 없는 질문을 막기 위한 DARE 프롬프팅 기법

주제와 관계 없는 질문을 막기 위한 DARE 프롬프팅 기법 조대협 (http://bcho.tistory.com) LLM모델을 기반으로 채팅 서비스등을 개발할때, 마주하는 문제중 하나가 사용자가 주제와 관련 없는 질문을 하는 경우 이를 어떻게 판별하고 필터링할 것인가이다. 예를 들어 LLM(ChatGPT등) API를 바로 연결해서 여행 사이트용 챗봇을 만들었다고 가정하자. 이때 사용자가 악의적으로 여행과 관련 없는 질문을 하더라도 LLM API로 전달된 질문은 답변이 되기 때문에 악용 될 수 있다. 예를 들어 아래 프롬프트는 챗봇에게 여행사이트 챗봇의 역할을 부여하고 컨택스트를 강제하여 주었지만 사용자가 미국 자동차 모델중 최고 모델을 질의하는 프롬프트인데, 여행 챗봇임에도 불구하고 이 질문에 대해서 답변..