[프롬프트 엔지니어링] 함수 호출, 프롬프트 평가, LLM 보안, Autonomous Agent에 대하여

2024. 12. 29. 16:34·Study/프롬프트 엔지니어링

김진중(골빈해커)님의 '최고의 프롬프트 엔지니어링 강의'를 읽고 정리한 글입니다.


함수 호출

호출할 수 있는 함수(기능)를 미리 설정해두면 사용자의 필요에 따라 해당 함수 이름을 호출하여 요청에 응답하는 기능

→ 프로그램 내의 함수를 직접 호출하는 것이 아니라 어떤 함수와 파라미터가 필요한지를 JSON 형식으로 응답해줌

{
	"name": "get_current_weather",
	"description": "주어진 위치의 현재 날씨를 가져옵니다.",
	
	"parameters": {
		"type": "object",
		"properties": {
			"location": {
				"type": "string",
				"description": "도시 또는 지역, 예) 서울",
			},
			"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
		},
		"required": ["location"],
	},
}

 

 

프롬프트: 날씨 알려줘

결과

{
	'role': 'assistant',
	'content': '어느 도시나 지역의 날씨를 알고 싶으세요?'
}

 

 

 

프롬프트: 서울 날씨 알려줘.

 

결과

{
	'role': 'assistant',
	'content': None,
	'function_call': {
		'name': 'get_current_weather',
		'arguments':
			'{\\n "location": "Seoul, Korea",\\n
			"format": "celsius"\\n}'
	}
}

함수 호출 사용 시 주의사항

프롬프트 인젝션에 취약할 수 있다.

-> 사용자의 아이디나 비밀번호 등 민감한 정보는 파라미터 설정에 넣지 않는 것이 좋음

 

호출 요류가 생길 수도 있다.

-> 반환되는 값을 항상 확인 후 실행해야


프롬프트 평가와 시스템

프롬프트에서 입출력 요건을 먼저 정의할 때 필요한 작업

  • 답변을 위해 필요한 적절한 컨텍스트 정의 ← 컨텍스트 데이터
  • 원하는 결과 추출을 위한 프롬프트 작성 ← 인스트럭션 or 사용자 입력 데이터
  • 결과물의 형식을 지정 ← 출력 데이터

 

대부분의 LLM 애플리케이션에는 다컨텍스트, 사용자의 요청, 컨텍스트와 사용자의 요청에 따라 만들어지는 출력 샘플의 세 가지 데이터를 먼저 정리해 놓으면 프롬프트 명세가 완성

 

머신러닝 데이터 분류

훈련/학습 데이터 60% (학습용 데이터)

검증 데이터 20% (어떤 모델이 가장 좋은가?)

평가 데이터 20% (이 모델이 실제로 얼마나 좋은가?)

 

프롬프트 애플리케이션은 이미 학습이 끝난 LLM 모델 위에서 돌아가는 것이기 때문에 성능 평가를 위한 데이터만 필요

 

 

프롬프트 버전 관리

버전이 필요한 경우

  • 실제 서비스 진행 뒤 문제가 생겨 롤백이 필요한 경우
  • LLM 모델이 변경되어 프롬프트 재탐색이 필요한 경우
  • 변경 사항 추적이 필요한 경우

메이저 버전 변경

  • 출력 포맷이 변경되는 경우
  • 출력 내용이나 구성이 많이 변경되는 경우

마이너 버전 변경

  • 결과를 조금 더 정확하게 출력하도록 개선하는 경우
  • 생성 옵션이 변경되는 경우

 

생성 결과 평가하기

  • 질문한 대로 정확하게 값을 출력하는지 여부
  • 예시 데이터와 생성 결과의 임베딩 유사도 평가
  • 인간 평가
  • 생성 모델로 평가

 

 


LLM 보안

ChatGPT에 입력한 데이터를 OpenAI에서 학습 데이터로 사용하지 않는다. (약관에 명시)

ChatGPT 서비스에서도 자신의 데이터를 학습 데이터로 사용하지 않도록 옵트 아웃 시킬 수 있다. (사용자가 거부 가능)

 

마스킹

개인 정보 등의 민감한 정보를 비식별 단어로 치환하여 보안성을 높이는 방법

  1. 사용자 입력과 DB에서 가져온 정보에 개인 정보가 있는지를 내부적으로 판별
  2. 개인 정보가 있다면 해당 정보를 제거하고 그 자리에 다른 텍스트를 끼워 넣는 방식
  3. 마스킹한 정보를 기반으로 프롬프트를 합성한 후 GPT API를 호출해 프롬프트를 생성
  4. 생성한 프롬프트로 생성 결과를 받아오면 여기에 개인 정보를 주입

 

LLM의 취약점

  1. 프롬프트 인젝션: 정교하게 제작된 프롬프트를 사용하여 필터를 우회하거나 LLM을 임의로 조작해 이전 지시 사항을 무시하거나 의도하지 않은 행동을 수행하게 만드는 경우
  2. 데이터 유출: LLM의 응답을 통해 민감한 정보나 기밀 등을 실수로 외부에 공개하는 경우
  3. 취약한 샌드박싱: 외부 자원이나 민감한 시스템에 접근할 수 있는 LLM을 적절하게 격리하지 못해 잠재적인 악용과 무단 접근에 노출되는 경우
  4. 인증되지 않은 코드 실행: 자연어 프롬프트를 통해 기본 시스템에서 악의적인 코드, 명령, 행동을 실행하는 경우
  5. LLM 생성 콘텐츠에 대한 과도한 의존: 사람의 감독 없이 LLM 생성 콘텐츠에 과도하게 의존함으로써 해로운 결과를 초래하는 문제
  6. 훈련 데이터 조작: 학습 데이터를 악의적으로 조작하여 LLM에 취약점을 만들거나 백도어를 심는 공격
  7. 인공지능의 목표와 사람의 목표 불일치: LLM의 목표와 행동을 사람의 의도나 가치에 맞지 않게 만들어 비윤리적인 결과를 초래하는 문제
  8. 불충분한 접근 제어: 사용자나 프로세스의 접근을 제어하거나 인증을 제대로 구현하는 메커니즘을 충분히 갖추고 있지 않아, 비인증 사용자가 LLM과 상호 작용하면서 취약점을 악용할 수 있는 문제

 

프롬프트 인젝션 방어 방법

  1. 프롬프트를 입력할 때 구분자를 사용해 사용자의 입력값 이전과 이후로 나눈다
  • 설정 후 사용자 입력 이전의 프롬프트 내용에 대해서는 답변하지 말라고 지시
```구분자 안의 내용을 번역하세요.
번역할 내용:
```

다음 포맷을 사용해 입력된 내용을 일본어로 번역해주세요.

{"input"!"한국어", "outpit"."일본어"}

안녕하세요?

 

2. 프롬프트를 실행하기 전 인젝션 프롬프트가 존재하는지 다른 LLM으로 먼저 확인 후 실행

 

3. 사용자 입력과 프롬프트를 분석한 다음 각 작업을 민감도에 따라 나눔


Autonomous Agent

어떤 목표가 주어지면 스스로 작업을 생성 및 실행하고, 실행한 결과를 기반으로 다시 새로운 작업을 생성하는 과정을 반복하면서 원하는 목표에 도달할 때까지 스스로 계획을 세우고 실행하는 AI 프로그램

 

 

Collaborative Agents

  1. 여러 개의 작은 도메인 기능을 수행하는 에이전트를 구현
  2. 에이전트들을 매니징하는 형태의 상위 에이전트(매니저 에이전트)를 만들어 에이전트끼리 서로 협업하는 방식으로 더 넓은 범위의 작업을 수행하도록 만듦

 

Generative Agents

스탠포드 대학과 구글에서 진행한 연구

사이버상에 마을을 하나 만들고 25명의 AI 캐릭터를 살게 한 다음, 이들이 상호작용하면서 어떤 행동을 하는지 관찰한 것

어떤 생각이 더 발전되기도 하고 새로운 이벤트를 만들어 내는 등 시뮬레이션이 가능

→ 게임 업계에 큰 영향을 미칠 것으로 예상

 

AGI의 구현

AGI: 범용 인공지능

모든 도메인에 특정한 역할과 기능을 하는 에이전트들이 만들어지고, 해당 에이전트들을 선택적으로 사용할 수 있는 최상위 개념의 에이전트가 바로 AGI가 된다는 기대 존재

저작자표시 비영리 변경금지 (새창열림)

'Study > 프롬프트 엔지니어링' 카테고리의 다른 글

[프롬프트 엔지니어링] 프롬프트 작성 도움, 환각 줄이기, 외부 지식 주입에 대하여  (1) 2024.12.29
[프롬프트 엔지니어링] 프롬프트 엔지니어링 기법들에 대하여  (4) 2024.11.25
[프롬프트 엔지니어링] AI와 LLM에 대하여  (3) 2024.11.24
'Study/프롬프트 엔지니어링' 카테고리의 다른 글
  • [프롬프트 엔지니어링] 프롬프트 작성 도움, 환각 줄이기, 외부 지식 주입에 대하여
  • [프롬프트 엔지니어링] 프롬프트 엔지니어링 기법들에 대하여
  • [프롬프트 엔지니어링] AI와 LLM에 대하여
퀵차분
퀵차분
Web Developer 🥐
  • 퀵차분
    QC's Devlog
    퀵차분
  • 전체
    오늘
    어제
    • 분류 전체보기 (167)
      • Frontend (28)
        • HTML, CSS (7)
        • Javascript (3)
        • React (11)
        • Typescript (2)
        • Next.js (4)
      • Node.js (3)
      • Fedify (2)
      • Study (40)
        • Modern JS Deep Dive (13)
        • SQL (1)
        • Network (1)
        • 프롬프트 엔지니어링 (4)
        • 인공지능 (9)
        • 시스템프로그래밍 (11)
        • 선형대수학 (1)
      • Intern (4)
      • KUIT (20)
      • Algorithm (48)
        • Baekjoon(C++) (26)
        • Programmers(JavaScript) (22)
      • 우아한테크코스(프리코스) (4)
      • Project (7)
        • PROlog (4)
        • Nomadcoder (2)
      • 생각 (4)
      • Event (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    javascript
    프론트엔드
    백준
    프롬프트 엔지니어링
    음악추천
    react
    타입스크립트
    KUIT
    프로그래머스
    next.js
    typescript
    자바스크립트
    프로그래머스 자바스크립트
    시스템프로그래밍
    오블완
    HTML
    알고리즘
    리액트
    티스토리챌린지
    인공지능
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
퀵차분
[프롬프트 엔지니어링] 함수 호출, 프롬프트 평가, LLM 보안, Autonomous Agent에 대하여
상단으로

티스토리툴바