langchain을 활용해서 openai 라이브러리로 prompt engineering을 간단히 수행해본다.
모든 프롬프트에 이러한 구성 요소가 모두 필요한 것은 아니지만,
좋은 프롬프트에서는 두 개 이상의 구성 요소를 사용하는 경우가 많다.
모델에 수행할 작업으로 일반적으로 원하는 출력을 생성하기 위해
입력 및/또는 외부 정보를 사용하는 방법을 알려주는 것
프롬프트에 수동으로 삽입하거나, 벡터 데이터베이스(장기 메모리)를 통해 검색하거나, 다른 수단(API 호출, 계산 등)을 통해 가져오는 추가 정보
사용자 입력 또는 질의는 일반적으로 시스템의 사용자가 직접 입력하는 질의
생성된 텍스트의 시작 부분
이러한 각 구성 요소는 일반적으로 설명된 순서대로 배치되어야 한다.
지침(Instructions)부터 시작하여 컨텍스트(필요한 경우)를 제공한 다음 사용자 입력을 추가하고 마지막으로 출력 표시기로 끝난다.
예를 들어
prompt = """Answer the question based on the context below. If the
question cannot be answered using the information provided answer
with "I don't know".
Context: Large Language Models (LLMs) are the latest models used in NLP.
Their superior performance over smaller models has made them incredibly
useful for developers building NLP enabled applications. These models
can be accessed via Hugging Face's `transformers` library, via OpenAI
using the `openai` library, and via Cohere using the `cohere` library.
Question: Which libraries and model providers offer LLMs?
Answer: """
LangChain이 제공하는 또 다른 유용한 기능은 Few Shot PromptTemplate이다.
[1] Parametric knowledge(파라메트릭 지식) - 모델 훈련용 학습 능력이 있는 모델 내부에 저장
[2] Source knowledge(지식) — 소스를 통해 지식을 제공받을 수 있음
Few Shot PromptTemplate의 기본 아이디어는 지식으로 몇 가지 상세한 교육을 제공하는 것이다. 이를 위해 모델을 만들 수 있고 사용자 입력에 적용할 수 있는 몇 가지 예를 추가할 수 있다.