Want to Become a Sponsor? Contact Us Now!🎉

claude
클로드-셉션: LangChain을 사용하여 클로드에게 자체 프롬프트 엔지니어링을 가르치기

클로드-셉션: LangChain을 사용하여 클로드에게 자체 프롬프트 엔지니어링을 가르치기

Published on

이 문서에서는 Anthropic의 강력한 클로드 3 AI 모델과 LangChain 프레임워크를 사용하여 자동 프롬프트 엔지니어링에 대한 혁신적인 접근 방식을 소개합니다. 핵심 아이디어는 클로드의 프롬프트 엔지니어링 능력을 활용하여 주어진 작업에 대한 프롬프트를 지속적으로 개선하여 피드백 루프를 통해 최적화된 프롬프트를 만들 수 있다는 것입니다.

소개

Anthropic의 강력한 AI 어시스턴트인 클로드는 탁월한 언어 이해 및 생성 능력을 보여줬습니다. 특히 최근 출시된 클로드 3 모델과 특히(Opus 변형)은 프롬프트 엔지니어링 - 언어 모델로부터 고품질 출력을 유도하기 위해 효과적인 프롬프트를 설계하는 예술 - 에 뛰어납니다.

이런 점에서 흥미로운 가능성이 열리게 됩니다. 우리가 클로드의 프롬프트 엔지니어링 능력을 활용하여 자체 프롬프트를 지속적으로 개선할 수 있으면 어떨까요? 초기 프롬프트에서 생성된 출력의 품질을 클로드 3이 분석하고 개선을 제안함으로써 주어진 작업에 대한 프롬프트를 최적화하는 자동 피드백 루프를 만들 수 있습니다.

이 문서에서는 클로드 3 Opus와 언어 모델을 사용하여 이러한 자체 개선 프롬프트 전략을 구현하는 방법에 대해 설명합니다. 우리는 AI 연구원 Elvis Saravia(@omarsar0)의 매력적인 스타일로 학문적인 논문을 요약하는 작업에 적용해 보겠습니다.

Anakin AI - The Ultimate No-Code AI App Builder

프롬프트 엔지니어링 워크플로우

Alex Albert(@alexalbert__)씨가 최근에 클로드 3 Opus를 사용한 프롬프트 엔지니어링에 효과적인 워크플로우를 공유했습니다:

  1. 작업에 대한 초기 프롬프트 작성
  2. 프롬프트를 평가하기 위한 테스트 입력 생성
  3. 테스트 케이스에서 프롬프트 실행
  4. 출력을 수동으로 검토하고 평가
  5. 평가한 예제를 클로드 3 Opus에 다시 제공하여 프롬프트 수정 요청
  6. 반복

Will Hinthorn(@WHinthorn)과 Ross Lance Martin(@rlancemartin)씨는 LangSmith를 사용하여 이 과정을 단순화하는 방법을 보여줍니다:

  1. 테스트 케이스의 데이터셋 생성
  2. 생성된 출력을 피드백과 함께 주석 달기
  3. 피드백을 클로드 3 Opus에 전달하여 프롬프트 재작성
  4. 이를 반복하여 개선 루프 실행

여러분은 Elvis Saravia의 훌륭한 Twitter 글의 스타일로 학문적인 논문을 요약하는 작업에 대해 이 접근 방식을 어떻게 구현하는지 알아볼 것입니다.

1단계: 논문을 데이터셋에로드

먼저, Elvis가 트윗한 논문 중 몇 개를 선택하고 LangChain의 ArxivLoader를 사용하여 로드합니다:

from langchain_community.document_loaders import ArxivLoader
 
ids = ["2403.05313", "2403.04121", "2402.15809"] 
 
docs = []
for paper_id in ids:
    doc = ArxivLoader(query=paper_id, load_max_docs=1).load() 
    docs.extend(doc)

그런 다음 논문 텍스트를 LangSmith 데이터셋에 추가합니다:

from langsmith import Client
 
client = Client()
 
ds_name = "트윗 생성기"  
ds = client.create_dataset(dataset_name=ds_name)
client.create_examples(
    inputs=[{"paper": doc.page_content} for doc in docs], dataset_id=ds.id
)

2단계: 초기 프롬프트로 테스트

다음으로, 클로드 3 Opus가 논문 요약 트윗을 생성하기 위해 합리적인 초기 프롬프트를 작성합니다:

from langchain_anthropic import ChatAnthropic
from langchain_core.prompts import ChatPromptTemplate
 
chat = ChatAnthropic(temperature=0, model_name="claude-3-opus-20240229")
 
system = (
    "<role> 여러분은 학술 논문 또는 오픈 소스 프로젝트를 요약하기 위해"
    " 트윗을 생성하는 어시스턴트입니다. 견고하지만 광고성이나 낯선 어구에" 
    " 지나치게 의존하지는 않는 스타일로 작성되어야 합니다. </role>"
)
human = "다음은 트윗으로 변환할 논문입니다: <paper> {paper} </paper>"
current_prompt_str = system + human
prompt = ChatPromptTemplate.from_messages([("system", system), ("human", human)])
 
tweet_generator = prompt | chat

테스트를 위해 예제 논문에 대해 실행해 볼 수 있습니다:

tweet_example = tweet_generator.invoke({"paper": docs[0].page_content})
print(tweet_example)

이렇게 하면 논문에 대한 초기 트윗 요약이 생성됩니다.

3단계: 데이터셋에서 실행

프롬프트를 보다 철저히 평가하기 위해 전체 데이터셋에서 실행합니다:

res = client.run_on_dataset(
    dataset_name=ds_name, 
    llm_or_chain_factory=tweet_generator,
)

4단계: 수동 평가

LangSmith의 주석 대기열 기능을 사용하여 생성된 트윗을 수동으로 검토하고 피드백을 제공할 수 있습니다:

q = client.create_annotation_queue(name="트윗 생성기")
client.add_runs_to_annotation_queue(
    q.id,
    run_ids=[
        r.id 
        for r in client.list_runs(project_name=res["project_name"], execution_order=1)
    ],  
)

평가를 가이드하기 위해 목표 스타일과 내용의 몇 가지 실제 논문 요약 트윗을 참고할 수 있습니다.

5단계: 프롬프트 개선

출력에 주석을 달은 후 구조화된 피드백을 수신합니다:

formatted_feedback = get_formatted_feedback(res["project_name"])

그런 다음 LangChain Hub에서 프롬프트 최적화 템플릿을 사용하여 이를 클로드 3 Opus에 다시 제공합니다:

from langchain import hub
from langchain_core.output_parsers import StrOutputParser
 
optimizer_prompt = hub.pull("rlm/prompt-optimizer-tweet-drafts") 
optimizer = optimizer_prompt | chat | StrOutputParser() | extract_new_prompt
new_prompt_str = optimizer.invoke(
    {
        "current_prompt": current_prompt_str,
        "annotated_predictions": "\n\n".join(formatted_feedback).strip(),  
    }
)

다음 코드 조각은 피드백을 통해 개선된 프롬프트를 생성하여 엘비스의 글쓰기 스타일과 스레드 구조와 더 잘 일치하도록 합니다.

단계 6: 새로운 프롬프트 평가하기

마지막으로, 업데이트된 프롬프트를 데이터셋에 다시 적용하여 개선 사항을 확인할 수 있습니다:

new_prompt = ChatPromptTemplate.from_messages([("user", new_prompt_str)])
tweet_generator_v2 = new_prompt | chat
 
updated_results = client.run_on_dataset(
    dataset_name=ds_name,
    llm_or_chain_factory=tweet_generator_v2, 
)

초기 프롬프트와 개정된 프롬프트의 결과를 비교해보면, 클로드 3 오퍼스와의 피드백 루프가 엘비스 스타일의 더 매력적인 논문 요약을 생성하는 데 효과적이었음을 알 수 있습니다.

예를 들어, 새로운 테스트 논문에 대한 초기 프롬프트와 개선된 프롬프트로 생성된 트윗을 다음과 같이 비교해보겠습니다:

초기 프롬프트:

거대한 언어 모델 (LLM)을 사용한 테이블 데이터 작업, 예측, 생성 및 질문에 대한 새로운 설문조사. 직렬화, 프롬프트 엔지니어링 및 벤치마크와 같은 주요 기법을 다룹니다. 기회와 도전 사항을 확인합니다.

개선된 프롬프트:

테이블 데이터에 대한 LLM의 잠재력 풀기 🔑

이 포괄적인 조사는 거대한 언어 모델이 예측, 생성, 이해와 같은 테이블 데이터 작업에 어떻게 적용될 수 있는지 탐구합니다.

주요 기법은 다음과 같습니다:

  • 테이블을 LLM에서 읽을 수 있는 형식으로 직렬화
  • 문맥 길이에 맞게 테이블 조작
  • 프롬프트 엔지니어링 트릭
  • end-to-end 시스템 구축

이 논문에서는 각 애플리케이션 영역별 데이터셋, 메트릭 및 방법에 대한 분류 체계를 제공합니다. 또한 현재 제한 사항과 향후 연구 방향에 대해 논의합니다.

LLM은 적절한 전처리 단계와 프롬프트 전략을 결합할 때 구조화된 데이터 작업에 대해 큰 잠재력을 보여줍니다. 이를 통해 테이블 데이터를 분석하는 더 똑똑하고 자동화된 시스템에 대한 흥미로운 가능성이 열립니다.

테이블 데이터에 대한 LLM의 다른 혁신적인 응용 분야들은 어떤 것이 있을까요? 🤔

개정된 트윗은 주요 요점을 잘 나타내며 시각적 흥미를 위해 이모지를 추가하고, 대화를 유도하는 생각을 고백으로 마무리하는 등 엘비스 스타일의 특징적인 요소를 더 잘 반영하고 있습니다.

결론

클로드 3 오퍼스의 프롬프트 엔지니어링 기능과 LangChain 및 LangSmith 프레임워크를 결합하여 특정 글쓰기 스타일에 맞게 논문을 요약하는 프롬프트를 점진적으로 최적화하는 자동 피드백 루프를 만들었습니다.

이는 언어 모델을 특정 사양에 맞게 작업하거나 대상 스타일을 에뮬레이트하기 위한 강력한 일반적인 접근 방식을 보여줍니다. 동일한 기술은 다양한 텍스트 생성 작업에 대한 프롬프트를 자동으로 개선하는 데에도 적용될 수 있습니다.

언어 모델이 계속 발전함에 따라 보다 정교한 프롬프트 엔지니어링 도구와 워크플로우가 개발자들에게 더 넓은 범위로 접근 가능하게 되고 흥미로운 새로운 응용 분야가 개방될 것으로 기대할 수 있습니다.

Anakin AI - The Ultimate No-Code AI App Builder