AI 기능 개발 플레이북
이 플레이북은 대형 언어 모델 (LLMs), 프롬프트, 데이터, 평가 및 시스템 아키텍처와 함께 작업하는 주요 측면을 개요합니다. AI 기능 개발 및 운영에 대한 고려 사항으로 작동합니다.
프롬프트 엔지니어링 이해
개요는 이 비디오를 참조하세요.
가장 중요한 포인트:
-
프롬프트의 정의:
- 언어 모델에 전달된 작업 해결 지침
- UI에서 AI 기능의 핵심을 형성함
-
프롬프트 품질의 중요성:
- 언어 모델의 응답 품질에 큰 영향을 미침
- 프롬프트를 반복하여 최적의 결과를 얻는 것이 중요함
-
프롬프트 작성 시 고려해야 할 사항:
- 수행할 작업을 이해
- 기대하는 응답 유형을 파악
- 프롬프트를 테스트할 데이터셋을 준비
- 구체적이며 AI가 이해하는 데 많은 세부 정보와 맥락을 제공
- 잠재적인 질문과 원하는 답변의 예시 제공
-
프롬프트의 일반성:
- 프롬프트는 다른 언어 모델 간에 일반적이지 않음
- 모델을 변경할 때 프롬프트를 조정해야 함
- 특정 팁을 위해 언어 모델 제공 업체의 문서를 참조
- 완전히 전환하기 전에 새로운 모델을 테스트
-
프롬프트 작업을 위한 도구:
- Anthropic 콘솔: 프롬프트 작성 및 테스트 플랫폼
- 프롬프트 생성기: 작업 설명을 기반으로 제작된 프롬프트 생성 도구
-
프롬프트 구조:
- 일반적으로 일반 작업 설명을 포함
- 입력 텍스트의 자리 표시자를 포함
- 특정 지침 및 제안된 출력 형식을 포함할 수 있음
- 데이터 이해와 추출을 위해 입력을 XML 태그로 래핑하는 것을 고려
-
시스템 프롬프트:
- AI의 일반적인 톤과 역할 설정
- 모델의 성능을 향상시킬 수 있음
- 일반적으로 프롬프트 시작 부분에 배치
- 언어 모델의 역할 설정
-
최상의 실천 방법:
- 과제를 이해하는 데 시간 투자
- 프롬프트 생성 도구를 시작점으로 활용
- 결과 향상을 위해 프롬프트를 테스트하고 반복
- AI가 이해하는 데 영어 문법과 구문을 올바르게 사용
- 불확실성 허용 - AI에게 “내가 모르겠어”라고 말하도록 지시
- 긍정적인 표현 사용 - AI가 해야 할 일에 대해 말하고 부정적인 행동을 규정하지 말 것
효과적인 프롬프트 작성을 위한 최상의 실천 방법
개요는 효과적인 프롬프트 작성에 대한 이 비디오를 참조하세요.
이 비디오에서 주요 요점은 다음과 같습니다:
-
일반적으로 “좋은” 프롬프트가 없음:
- 프롬프트의 효과는 특정 작업에 따라 다름
- 프롬프트 작성에 대한 일반적인 접근 방식은 없음
-
효과적인 프롬프트의 특성:
- 작업 및 기대 결과를 명확하게 설명하고 이해하기 쉬움
- 직접적이고 상세함
- 원하는 출력물에 대해 구체적으로 명시
-
고려해야 할 주요 요소:
- 작업, 대상 그룹 및 최종 목적을 이해
- 이러한 요소들을 프롬프트에서 명확하게 설명
-
프롬프트 성능 향상 전략:
- 순차적 단계별 지침 추가
- 관련 예시 포함
- 모델이 단계별로 생각하도록 요청
- 답변 제공 전에 추론 요청
- 입력을 안내 - 사용자 입력이 시작되고 끝나는 지점을 명확히 나타내기 위해 구분 기호 사용
-
모델 선호도에 적응:
- 모델의 선호하는 데이터 구조에 맞게 프롬프트 조정
- 예를 들어, Anthropic 모델은 XML 태그와 잘 작동
-
시스템 프롬프트의 중요성:
- 언어 모델의 역할 설정
- 상호작용의 시작 부분에 배치
- 도구 또는 범위 메모리 등의 인식 포함
-
반복이 중요함:
- 프롬프트 작업에서 가장 중요한 부분으로 강조
- 계속적인 개선이 더 나은 결과로 이끔
- 품질 통제 구축 - RSpec 또는 Rake 작업을 사용하여 프롬프트 자동 테스트를 자동화하여 차이를 잡아냄
-
전통적인 코드 사용:
- LLM 호출 외에도 효율적으로 수행될 수 있는 작업의 경우 신뢰성이 높고 결정적인 출력을 위해 코드를 사용
프롬프트의 작업을 위한 워크플로우 조정 및 최적화
Langsmith와 Anthropic Workbench를 함께 사용하여 LLM을 위한 프롬프트 튜닝
Anthropic 콘솔을 사용한 프롬프트 반복
개요는 다음 비디오를 참조하세요.
Langsmith를 사용한 프롬프트 반복
개요는 다음 비디오를 참조하세요.
Langsmith를 사용한 프롬프트 튜닝을 위한 데이터셋 사용
개요는 다음 비디오를 참조하세요.
Langsmith에서 자동 평가 사용
개요는 다음 비디오를 참조하세요.
Langsmith에서 페어웨이 실험 사용
개요는 다음 비디오를 참조하세요.
Langsmith 및 ELI5 사용 시기
개요는 다음 비디오를 참조하세요.
ELI5 (5살처럼 설명) 프로젝트의 주요 포인트
- 초기 개발
- 프롬프트 반복에 순수 Langsmith 이용
- 설치가 더 쉽고 빠름
- 초기 단계에 더 비용 효율적
- ELI5로 전환하는 시기
- 기능에 더 많은 투자 필요할 때
- 대규모 데이터셋 작업 시
- 반복 및 장기간 사용 시
- ELI5 설정 고려 사항
- 초기 시간 투자가 필요
- 특정 기능에 대한 평가를 조정해야 함
- 입력 데이터 설정(예: 채팅 기능을 위한 로컬 GDK)
- 도전과제
- 여러 사용자 간 일관된 데이터 보장
- 데이터 공유를 위해 좌석 및 가져오기와 같은 옵션 탐색
- 현재 ELI5 기능
- 코드에 관한 채팅 질문 지원
- 문서 관련 쿼리 처리
- 코드 제안을 위한 평가 포함
- ELI5의 이점
- 로컬 GDK에서 평가 실행 가능
- Langsmith UI에서 결과 확인 가능
- 대규모 데이터셋 사용 가능
- 유연성
- 구체적인 사용 사례에 대해 사용자 정의가 필요함
- 일관된 솔루션이 아님
- 문서
- ELI5는 폭넓게 문서화되어 있음
- 도입
- 코드 제안 및 팀 생성 등 일부 팀에서 이미 사용 중
평가 및 모니터링
평가용 데이터셋 작성
데이터셋이 필요한 이유는 무엇인가요?
가장 간단한 형태의 데이터셋은 대략적인 출력이 예상되는 여러 입력의 모음입니다. 이제 대화 애플리케이션과 같이 명확한 기대 출력을 정의하는 것이 불가능한 경우도 있습니다. 이 경우에는 여전히 데이터셋이 매우 유용하지만 평가 기술은 달라질 것입니다. 우리는 지금 코드 테스트 아이디어에 대해 대부분이나 덜 편안하다는 가정 하에 간단하게 유지하고 예상 출력이 있는 데이터셋으로 작업해보겠습니다.
어떤 애플리케이션을 만들기로 결정한 후에는 애플리케이션이 고장 나는 방법과 성공해야 하는 방법에 대해 고려하는 것이 매우 중요합니다. 잠재적 입력 및 그들의 예상 출력이 수집된 데이터셋을 개발 초기 및 나중에도 매우 유용합니다.
애플리케이션을 개발한 후에 넓은 범위의 입력에서 기대한 대로 작동하는지 확인할 수 있는 능력은 매우 중요합니다. 합리적인 범위 내에서 가능한 한 많은 프롬프트를 보유하는 것이 좋습니다. 프롬프트를 변경하거나 도구 선택을 하는 경우, 또는 새로운 모델을 선택하는 경우 변경 사항이 얼마나 성공적인지 비교할 수 있는 능력에는 예상 출력과 결합된 많은 입력을 가진 데이터셋이 필요합니다.
데이터셋을 만들 때 고려해야 할 중요한 사항
LLM 위에 애플리케이션을 만들기 시작할 때, 평가를 실시하려고 할 것입니다. 데이터셋에 얼마나 많은 레코드를 가지고 있어야 하는지에 대한 공통된 첫 번째 질문은 조만간 명확해질 이유로 약간 이른 것입니다.
먼저, 데이터 양을 생각하기 전에 데이터가 문제를 해결할 앱의 문제를 나타내고, 그 데이터를 어디에서 얻을 수 있는지를 고려해보겠습니다.
이를 GitLab에서 지속적으로 반복하는 예로, 코드 완성 오퍼링을 평가해보겠습니다. 실제 평가에 우리가 사용하는 데이터셋은 GitLab 코드베이스에서 가져온 함수들로 구성되어 있습니다. 첫 번째 절반은 프롬프트(입력)이고, 두 번째 절반은 모델이 생성하는 결과물과 비교할 부분입니다.
말했듯이, 코드 완성 애플리케이션을 GitLab 코드에서 생성된 데이터셋으로 평가합니다. 이는 많은 루비, Go, Python 및 기타 여러 언어를 포함합니다. 여기서 우리의 많은 고객이 자신의 코드를 Java로 작성한다는 것을 기억해야 합니다. 여기서 가치 있는 질문은 저희 데이터셋을 대표적이라고 할 수 있을까요? 솔직히 말하자면, 처음에는 아마 그렇지 않을 것입니다. 때로는 우리가 평가해야 할 대상과 우리의 애플리케이션이 다른 것들만 용인해야 하는 시점이 있습니다. 그러나 이러한 점을 명심하고 데이터셋을 만들거나 개선할 때 우리가 평가 조건과 어플리케이션 사이의 일치를 개선하려는 것이 가장 중요합니다. 이 데이터셋 생성/개선 노력의 일환으로 우리는 다양한 유형의 프롬프트들을 유지하고 싶습니다. 앞서 언급했듯이 코드 완성을 예로 들면 우리는 아마 더 많은 Java 프롬프트를 원할 것입니다. 하지만 우리는 리트코드 같은 스타일의 인터뷰 문제 뿐만 아니라 기업 백엔드 애플리케이션, 안드로이드 애플리케이션, 그래들 플러그인, 심지어 몇 가지 기본 인터뷰 문제와 같이 Java가 사용될 수 있는 더 다양한 곳의 예제들을 원합니다.
대표적인 데이터를 가지고 있다는 점에 대해 생각해보았으니, 이제 얼마나 많은 데이터포인트가 필요한지 생각해봅시다. 우리는 평가에서 애플리케이션이 얼마나 잘 작동하는지를 평가하려고 합니다. 만약 불공평할 수도 있는 동전을 던진다고 상상해본다면, 10번 던진다고 해서 큰 자신감을 얻지 못할 것입니다. 하지만 10,000번을 던진다면 자신감을 얻게 될 것입니다. 이와 유사하게 10,000개의 프롬프트를 실행하는 것은 약 100개 정도 실행하는 것보다 시간이 더 오래걸릴 것입니다. 개발 초기 단계에서는 반복 속도와 정확도를 조화시키고자 하며, 이를 위해 70개에서 120개의 프롬프트를 권장하지만 반복 시간을 희생하지 않고 더 많은 프롬프트를 추가할 수 있다면 강력히 권장합니다. 내부 베타 및 확실히 GA로 이동함에 따라 몇 천 개의 프롬프트로 평가를 실행하는 것을 권장합니다.
출력, 실제 값 또는 예상 답변이란 무엇인가요?
출력: 선택한 LLM에 메시지를 보내었을 때의 결과. “어느 은하수를 여행하는 히치하이커를 위한 안내서에서 인생의 의미를 나타내는 숫자는 무엇입니까?”라고 묻는다면, 출력은 “어느 은하수를 여행하는 히치하이커를 위한 안내서에서 인생의 의미를 나타내는 숫자는 42입니다.”와 같은 것일 수 있습니다.
실제 값 또는 예상 결과: 실제 상황에서 우리가 진실로 알고 있는 예시들. 집값을 예측하려고 하는 상황을 상상해보면 부동산 매물 리스트에서 가져온 유효성 검사 데이터를 많이 가지고 있다고 상상해볼 수 있습니다. 이 데이터는 집에 대한 정보와 집값에 대한 정보가 포함되어 있습니다. 이 데이터는 우리의 실제 값이 될 수 있습니다.
CEF 대시보드 사용 및 문제 해결
CEF를 위한 자동화된 평가 파이프라인 사용
도커 컨테이너에서 promptlib를 사용하는 개요에 대해서는 이 비디오를 참조하세요.
지속적인 모니터링 및 프롬프트 튜닝 가이드로 적용
Gen AI 기능을 위한 A/B 테스트 전략
추가 자료
더 포괄적인 프롬프트 엔지니어링 가이드는 다음을 참조하세요: