정의와 특징:
- LLM 을 이용해서 어플리케이션을 개발하기 위한 프레임워크. 다르게 말하면 프롬프트 없이 LLM 을 프로그래밍하기 위한 Language.
- 주로 자동으로 LLM 에 사용하는 프롬프트와 RAG 체이닝을 최적화하는데 사용한다.
- 주로 프롬프트 최적화를 제공해주지만, PEFT 와 같은 소규모 파라미터를 업데이트하는 파인튜닝 기능도 제공해준다.
DSPy 에서 사용하는 language model (LM)과 retrieval model (RM) 개념:
- LM 은 사용하고자하는 언어 모델을 말함. OpenAI 의 GPT 시리즈들과 Anthropic 의 Cluade 시리즈, 오픈소스 모델 시리즈등을 사용할 수 있음.
- RM 은 Retrieve Model 임. 이걸 따로 제공하는 건 아니고, Retrieve 작업을 위한 추상화된 모듈을 제공하기 때문에 내가 가진 Retrieve 시스템을 통합시키면 됨.
- 이렇게 LM 과 RM 의 조합인 체이닝을 DSPy 에서는 최적화를 시켜줌.
DSPy 의 최적화 매커니즘:
- DSPy 에서는 모듈이라는 걸 제공해줌. Retrieve 도 모듈, LM 도 모듈, Summarizer 라는 요약하는 것도 모듈임.
- 각 모듈을 조합해서 시스템을 구성하게 되는데 모듈별로 최적화가 되는 것.
- 여기서는 각 모듈별로 조절할 수 있는 설정을 하이퍼파리미터로 취급하는데, 고급 탐색 알고리즘 (e.g 강화학습, 유전알고리즘 등) 을 사용해서 최적화를 할 수 있는 하이퍼파라미터 조합을 찾는 것.
- 아니면 단계적으로 모듈별로 최적화를 각각 먼저할 수도 있음.
- 아마 최적화는 기본적으로 제공해주는 것 위주로 사용하지 않을까 싶음.
Retrieve 모듈의 최적화:
- 검색 순서를 다듬거나
- 검색 결과를 필터링하거나 (관련 없는 것, 중복인 것)
- LM 에 입력하기 전에 형식을 다듬거나
- 초기 검색 결과 이후 추가 검색을 하거나
- 필요하다면 Summarizer 모듈을 통해서 검색 결과를 요약하는 식으로도 이용할 수 있음.
DSPy 를 실행하기 위한 준비:
- 데이터 (입력 데이터, 라벨링 되어있는 데이터)
- 파이프라인 설계
- 검증 로직 구현 (파이프라인이 학습될 수 있도록 모델의 예측이 정답인지 파악하도록)
DSPy 에서는 프롬프트 설계를 아주 단순하게만 하면 됨:
- 다음과 같이 해당 작업과, input 과 output 만 명시해주면 프롬프트가 최적화 될 것
- 이렇게 작성하는 걸 Signature 라고 함.
class GenerateSearchQuery(dspy.Signature):
"""Write a simple search query that will help answer a complex question."""
context = dspy.InputField(desc="may contain relevant facts")
question = dspy.InputField()
query = dspy.OutputField()
DSPy 의 Teleprompters
- LM 을 최적화 해주는 것. 주로 프롬프트와 파라미터를 최정화해줌.
- Deep learning 으로 치면 Adam 과 같은 최적화 도구를 말함.
- 대표적인 종류:
- BootstrapFewShot: Few-shot 에서 적절한 예시를 가져오도록 해줌. 모델이 다루기 어려워하는 예시를 알아서 추가해준다.
- BackwardChaining: 복잡한 작업을 하위 작업으로 나누는 식으로 최적화를 해준다.
DSPy 의 실용성:
- LangGraph 와 같은 것과 비교해보자. 실제로 이걸 언제 이용해볼 수 있을까?
- LangGraph 는 LLM 의 최종 출력을 위해 Workflow 를 구성해야함. 각 Workflow 마다 프롬프트를 만들어야하기도 한다.
- 그에 반해서 DSPy 는 좀 더 유연함이 강점임. 파이프라인을 조정하는 건 비교적 쉽고, 프롬프트를 만들지 않아도 되긴함. 근데 제공해주는 기능들이 좀 ㅔ제한적인듯? few-shot 과 CoT 만 있는거 같은데.
- 프롬프트 설계는 충분히 귀찮은 작업이긴 함. 언어의 미묘한 변화 만으로 결과가 달라지기도 하니까.
- LLM 의 변경에 따라 프롬프트가 잘 먹히는지 영향도 확인해봐야하는데 편하긴 한 듯. ㅡ
실습 예제: 실제로 DSPy 를 어떻게 해볼 수 있는지
'Generative AI > LLM' 카테고리의 다른 글
Key Features of LLMs (0) | 2024.08.29 |
---|---|
생성AI로 똑똑하게 일하는 법 리뷰 (0) | 2024.08.28 |
Open Source Models with Hugging Face (0) | 2024.08.26 |