LLM(큰 언어 모델)은 강력하지만 제한이 있습니다. 기본적으로 LLM이 수행할 수 있는 일과 이를 조정하여 생성 AI 앱에 가장 적합한 결과를 얻는 방법을 알아야 합니다. 이 문서에서는 LLM의 주요 과제를 다루며, 빌드하는 생성 AI 기능 종류에 관계없이 이를 해결하고 콘텐츠를 생성하는 방법을 개선하는 간단한 방법을 보여 줍니다.
LLM을 사용할 때 발생하는 엔지니어링 문제
LLM을 사용할 때 유의해야 할 가장 중요한 과제와 제한 사항은 다음과 같습니다.
지식 차단: LLM은 특정 날짜까지 학습된 내용만 알고 있습니다. 외부 데이터 연결이 없으면 실시간 또는 개인 정보에 액세스할 수 없습니다.
환각: LLM은 부정확하거나 오해의 소지가 있는 정보를 생성할 수 있습니다. Azure AI Foundry의 근거 검색 기능은 LLM의 응답이 사용자가 제공하는 원본 자료를 기반으로 하는지 여부를 확인하는 데 도움이 됩니다. 비경지 응답에는 데이터에서 지원되지 않는 정보가 포함됩니다. 이 빠른 시작에서 접지 검색을 사용하는 방법을 알아봅니다.
투명성: 생성된 콘텐츠의 원본 또는 정확도를 항상 추적할 수 없으며 기본 제공 확인 단계가 없습니다.
도메인별 지식 없음: LLM은 통합하지 않는 한 내부 또는 독점 데이터를 알지 못합니다.
상호 작용에서 학습할 수 없음: LLM에는 과거 상호 작용에 대한 메모리나 인식이 없으므로 사용자 피드백에 따라 시간이 지남에 따라 적응하거나 개선할 수 없습니다. 이러한 문제를 극복하고 최상의 결과를 얻으려면 LLM의 지식을 사용자 고유의 데이터로 보완하고 유효성 검사 도구를 사용합니다.
LLM이 정보를 얻는 출처
LLM은 책, 문서, 웹 사이트 및 기타 원본의 큰 데이터 세트에 대해 학습됩니다. 응답은 이 데이터의 패턴을 반영하지만 학습 중단 후에 발생한 모든 작업은 포함되지 않습니다. 외부 연결이 없으면 LLM은 실시간 정보에 액세스하거나 인터넷을 탐색할 수 없으므로 오래되었거나 불완전한 답변이 발생할 수 있습니다.
유추의 작동 방식에 영향을 주는 요소
LLM을 사용하는 경우 모델이 전체 대화를 기억하는 것처럼 보일 수 있습니다. 실제로 보내는 각 새 프롬프트에는 이전 프롬프트와 모델의 회신이 모두 포함됩니다. LLM은 이 전체 기록을 컨텍스트로 사용하여 다음 답변을 만듭니다. 이 실행 기록은 컨텍스트 창입니다.
각 LLM에는 모델 및 버전별로 변경되는 최대 컨텍스트 창 크기가 있습니다. 대화가 이 제한을 초과하면 모델은 가장 오래된 부분을 삭제하고 응답에서 무시합니다.
컨텍스트 창이 길면 모델이 더 많은 데이터를 처리해야 하므로 속도가 느려지고 비용이 더 많이 들 수 있습니다.
컨텍스트 창 크기는 단어가 아닌 토큰을 사용합니다. 토큰은 모델에서 처리할 수 있는 텍스트의 가장 작은 부분입니다. 이러한 부분은 언어 및 토큰화자에 따라 전체 단어, 단어 부분 또는 단일 문자일 수 있습니다.
개발자의 경우 토큰 사용량은 다음 사항에 직접적인 영향을 줍니다.
- 모델에서 고려할 수 있는 최대 대화 기록 양(컨텍스트 창)
- 청구는 처리된 토큰 수를 기반으로 하므로 각 프롬프트 및 완료 비용
토큰화란?
토큰화 는 텍스트를 토큰으로 나누는 프로세스로, 모델에서 처리할 수 있는 가장 작은 단위입니다. 토큰화는 LLM을 사용한 학습 및 유추 모두에 필수적입니다. 언어 및 토큰화자에 따라 토큰은 전체 단어, 하위 단어 또는 단일 문자일 수 있습니다. 토큰화는 공백 및 문장 부호로 분할하는 것만큼 간단하거나 언어 구조 및 형태학을 고려하는 알고리즘을 사용하는 것만큼 복잡할 수 있습니다.
OpenAI 토큰화 페이지는 토큰화를 자세히 설명하고 문장이 토큰으로 분할되는 방법을 보여 줄 계산기를 포함합니다.
일반적인 영어 텍스트에서 하나의 토큰은 약 4자입니다. 평균적으로 100개의 토큰은 약 75단어입니다.
개발자의 경우 다음 라이브러리는 프롬프트 및 완료에 대한 토큰 수를 예측하는 데 도움이 되며 컨텍스트 창 제한 및 비용을 관리하는 데 유용합니다.
- tiktoken 라이브러리(Python 및 JavaScript)
- Microsoft.ML.Tokenizers 라이브러리(.NET)
- Hugging Face Tokenizers 라이브러리(JavaScript, Python 및 Java)
토큰 사용량이 청구에 영향을 줍니다.
각 Azure OpenAI API에는 서로 다른 청구 방법이 있습니다. 채팅 완료 API를 사용하여 텍스트를 처리하고 생성하는 경우 프롬프트로 제출하는 토큰 수와 결과로 생성된 토큰 수(완료)에 따라 요금이 청구됩니다.
각 LLM 모델(예: GPT-4.1, GPT-4o 또는 GPT-4o mini)에는 일반적으로 토큰을 처리하고 생성하는 데 필요한 계산량을 반영하는 다른 가격이 있습니다. 여러 번 가격은 "토큰 1,000개당 가격" 또는 "100만 토큰당 가격"으로 표시됩니다.
이 가격 책정 모델은 사용자 상호 작용을 디자인하는 방법과 추가하는 전처리 및 후처리의 양에 상당한 영향을 미칩니다.
시스템 프롬프트 및 사용자 프롬프트
지금까지 이 문서에서는 사용자 프롬프트에 대해 설명했습니다. 사용자 프롬프트는 모델에 보내는 내용과 모델이 회신하는 내용입니다.
OpenAI는 시스템 프롬프트 (또는 사용자 지정 지침)도 추가했습니다. 시스템 프롬프트는 모든 채팅에 추가하는 규칙 집합입니다. 예를 들어 LLM에 "항상 haiku 형식으로 응답"하도록 지시할 수 있습니다. 그 후, 모든 대답은 하이쿠가 될 것입니다.
이 haiku 예제에서는 프롬프트를 변경하여 LLM의 답변을 변경하는 방법을 보여 줍니다.
사용자의 프롬프트를 변경하는 이유는 무엇인가요? 회사, 고객 또는 파트너를 위한 생성 AI 앱을 빌드하는 경우 모델이 응답할 수 있는 항목을 제한하는 규칙을 추가할 수 있습니다.
그러나 사용자 프롬프트를 변경하는 것은 텍스트 생성을 향상하는 한 가지 방법일 뿐입니다.
사용자의 텍스트 생성 환경을 개선하는 방법
텍스트 생성 결과를 개선하기 위해 개발자는 프롬프트를 단순히 개선하는 것으로 제한되며 도움이 될 수 있는 프롬프트 엔지니어링 기술이 많이 있습니다. 그러나 고유한 생성 AI 애플리케이션을 구축하는 경우, 사용자 텍스트 생성 경험을 개선할 수 있는 여러 가지 방법이 있으며, 이러한 모든 방법들을 구현해 보는 실험을 할 수 있습니다.
- 프로그래밍 방식으로 사용자 프롬프트를 수정합니다.
- 유추 파이프라인을 구현합니다.
- Retrieval-Augmented 세대(다른 기사에서 논의됨).
- 미세 조정(다른 문서에서 설명).
프로그래밍 방식으로 사용자 프롬프트 수정
사용자 대화에 시스템 프롬프트를 추가하려면 특별한 API를 사용하지 않습니다. 필요에 따라 프롬프트에 지침을 추가하기만 하면 됩니다.
하지만 몇 가지 기술을 사용하여 사용자 프롬프트를 개선할 수 있습니다.
- 컨텍스트 초기화: 도메인 내에서 대화의 컨텍스트를 명시적으로 설정하는 시스템 프롬프트를 작성합니다. 이 방법은 각 상호 작용의 시작 부분에 간단한 설명 또는 지침 집합을 제공하는 것을 포함합니다. 지침은 AI가 문제 도메인 내에 유지되도록 안내합니다.
- 예제 기반 지침: 초기 프롬프트에 도메인과 관련된 질문 및 답변 형식의 예제를 포함합니다. 이 접근 방식은 AI가 예상할 응답 종류를 이해하는 데 도움이 됩니다.
어떤 프롬프트 엔지니어링 기술이든 사용할 수 있습니다. 프로그래밍 방식으로 수행할 수 있는 경우 사용자를 대신하여 사용자 프롬프트를 개선할 수 있습니다.
이 접근 방식의 단점은 프롬프트가 길수록 LLM에 대한 각 호출 비용이 높아진다는 점입니다. 그럼에도 불구하고 이 방법은 이 문서에서 설명하는 가장 저렴한 방법일 수 있습니다.
유추 파이프라인 구현
사용자의 프롬프트를 개선한 후 다음 단계는 유추 파이프라인을 빌드하는 것입니다.
유추 파이프라인은 다음과 같은 프로세스입니다.
- 원시 입력(예: 텍스트 또는 이미지)을 정리합니다.
- 모델에 전송(전처리)
- 모델의 대답을 확인하여 모델의 요구 사항을 충족하는지 확인한 후 표시합니다(후처리).
전처리에는 키워드 확인, 관련성 점수 매기기 또는 도메인에 더 적합하도록 쿼리 변경이 포함될 수 있습니다. 예를 들어 사용자의 첫 번째 프롬프트를 확인합니다. 프롬프트가 의미가 있는지, 규칙을 따르는지, 올바른 아이디어를 기반으로 하는지, 아니면 편견을 피하기 위해 다시 작성해야 하는지 LLM에 문의합니다. LLM에서 문제를 발견하면 프롬프트를 다시 작성하여 더 나은 답변을 얻도록 요청할 수 있습니다.
후처리는 응답이 도메인에 맞고 표준을 충족하는지 확인하는 것을 의미할 수 있습니다. 규칙과 일치하지 않는 답변을 제거하거나 플래그를 지정할 수 있습니다. 예를 들어 LLM의 답변을 확인하여 품질 및 안전 요구 사항을 충족하는지 확인합니다. LLM에 답변을 검토하고 필요한 경우 변경하도록 요청할 수 있습니다. 좋은 결과를 얻을 때까지 이 프로세스를 반복합니다.
유추 파이프라인에서 LLM을 호출할 때마다 응답하는 데 더 오래 걸리고 비용이 더 많이 듭니다. 이러한 절차를 예산, 속도 및 시스템 작동 방식과 균형을 유지해야 합니다.
추론 파이프라인을 구축하기 위한 구체적인 단계에 대한 정보를 보려면 고급 검색-증강 생성 시스템을 참조하세요.
완료에 영향을 주는 기타 요인
프롬프트를 프로그래밍 방식으로 수정하는 것, 유추 파이프라인을 만드는 것, 그리고 기타 기술 외에도, 더 많은 세부 사항은 검색 보강 생성 및 미세 조정을 사용하여 대형 언어 모델을 보강하는 방법에 대해 논의됩니다. 또한 Azure OpenAI API를 호출할 때 매개 변수를 수정할 수 있습니다.
완료의 다양한 측면에 영향을 줄 수 있는 필수 및 선택적 매개 변수를 검토하려면 채팅 엔드포인트 설명서를 참조하세요. SDK를 사용하는 경우 사용하는 언어에 대한 SDK 설명서를 참조하세요. 매개 변수를 실험할 수 있는 곳은 Playground입니다.
Temperature: 모델이 생성하는 출력의 임의성을 제어합니다. 0이 되면 모델은 결정적이 되어 학습 데이터에서 가장 가능성이 큰 다음 토큰을 일관되게 선택합니다. 1의 온도에서 모델은 높은 확률 토큰을 선택하고 출력에 임의성을 도입하는 것 사이에서 균형을 이깁니다.Max Tokens: 응답의 최대 길이를 제어합니다. 더 높거나 낮은 제한을 설정하면 생성된 콘텐츠의 세부 정보 및 범위에 영향을 줄 수 있습니다.Top P(핵 샘플링):Temperature사용하여 응답의 임의성을 제어합니다.Top P각 토큰을 생성할 때 AI가 확률 질량(P)의 상위 백분율만 고려하도록 제한합니다. 값이 낮을수록 텍스트가 더 집중되고 예측 가능합니다. 값이 높을수록 다양성이 높아질 수 있습니다.Frequency Penalty: 모델이 동일한 줄 또는 구를 반복할 가능성을 줄입니다. 이 값을 늘리면 생성된 텍스트의 중복성을 방지할 수 있습니다.Presence Penalty: 모델이 완성 시 새로운 개념과 용어를 도입하도록 권장합니다.Presence Penalty보다 다양하고 창의적인 출력을 생성하는 데 유용합니다.Stop Sequences: 하나 이상의 시퀀스를 지정하여 API에 더 많은 토큰 생성을 중지하도록 지시할 수 있습니다.Store Sequences은 문장이나 단락의 끝에서 완성을 마치는 것과 같이 출력의 구조를 제어하는 데 유용합니다.Logit Bias: 지정된 토큰이 완료에 나타날 확률을 조정할 수 있습니다.Logit Bias특정 방향으로 완료를 안내하거나 특정 콘텐츠를 표시하지 않는 데 사용할 수 있습니다.
Microsoft Azure OpenAI 보호
LLM의 응답을 특정 주제 또는 도메인에 바인딩된 상태로 유지하는 것 외에도 사용자가 LLM에 대해 묻는 질문의 종류에 대해서도 우려할 수 있습니다. 생성되는 답변의 종류를 고려하는 것이 중요합니다.
먼저, Microsoft Azure OpenAI Services에 대한 API 호출은 API가 잠재적으로 불쾌감을 주는 콘텐츠를 자동으로 필터링하고 이를 여러 필터링 범주에서 사용자에게 다시 보고합니다.
콘텐츠 조정 API를 직접 사용하여 잠재적으로 유해한 콘텐츠에 대한 콘텐츠를 확인할 수 있습니다.
그런 다음 Azure AI Content Safety 를 사용하여 텍스트 조정, 이미지 조정, 탈옥 위험 검색 및 보호된 자료 검색을 도울 수 있습니다. 이 서비스는 포털 설정, 구성 및 보고 환경을 애플리케이션에 추가하여 유해한 콘텐츠를 식별할 수 있는 코드와 결합합니다.
AI 에이전트
AI 에이전트는 자체적으로 작동하는 생성 AI 앱을 빌드하는 새로운 방법입니다. LLM을 사용하여 텍스트를 읽고 쓰며 외부 시스템, API 및 데이터 원본에 연결할 수도 있습니다. AI 에이전트는 복잡한 작업을 관리하고, 실시간 데이터를 사용하여 선택을 하고, 사람들이 작업을 사용하는 방법을 알아볼 수 있습니다. AI 에이전트에 대한 자세한 내용은 빠른 시작: 새 에이전트 만들기를 참조하세요.
도구 호출
AI 에이전트는 외부 도구 및 API를 사용하여 정보를 얻거나, 조치를 취하거나, 다른 서비스와 연결할 수 있습니다. 이 기능을 사용하면 단순히 텍스트를 생성하고 더 복잡한 작업을 처리하는 것 이상의 작업을 수행할 수 있습니다.
예를 들어 AI 에이전트는 날씨 API에서 실시간 날씨 업데이트를 받거나 사용자가 요청하는 내용에 따라 데이터베이스에서 세부 정보를 가져올 수 있습니다. 도구 호출에 대한 자세한 내용은 Azure AI Foundry의 도구 호출을 참조하세요.
MCP(모델 컨텍스트 프로토콜)
MCP( 모델 컨텍스트 프로토콜 )를 사용하면 앱이 대규모 언어 모델에 기능과 컨텍스트를 제공할 수 있습니다. MCP의 주요 기능은 AI 에이전트가 작업을 완료하는 데 사용하는 도구를 정의하는 것입니다. MCP 서버는 로컬로 실행할 수 있지만 원격 MCP 서버는 클라우드 규모로 도구를 공유하는 데 중요합니다. 자세한 내용은 Azure에서 모델 컨텍스트 프로토콜을 사용하여 빌드 에이전트를 참조하세요.
애플리케이션 디자인에 대한 최종 고려 사항
토큰화, 가격 책정, 컨텍스트 창을 이해하고 프로그래밍 방식의 향상된 기능을 구현하여 사용자의 텍스트 생성 환경을 개선하는 것은 생성 AI 시스템을 디자인하는 방법에 영향을 줍니다.
다음은 애플리케이션 디자인 결정에 영향을 줄 수 있는 이 문서에서 고려해야 할 사항 및 기타 내용의 짧은 목록입니다.
- 비용 고려 사항에 대해 최신 AI 모델을 사용해야 하는 필요성을 평가합니다. 비용이 적게 드는 모델은 애플리케이션의 요구 사항에 충분할 수 있습니다. 예산 제약 조건과 성능의 균형을 조정합니다.
- 사용자 경험에 큰 영향을 주지 않으면서 비용을 관리하기 위해 컨텍스트 창 길이를 최적화하는 것을 고려하십시오. 대화의 불필요한 부분을 트리밍하면 품질 상호 작용을 유지하면서 처리 비용을 줄일 수 있습니다.
- 토큰화와 입력 및 출력의 세분성이 성능에 미치는 영향을 평가합니다. 선택한 LLM이 토큰화를 처리하는 방법을 이해하면 API 호출의 효율성을 최적화하여 비용을 절감하고 응답 시간을 개선하는 데 도움이 될 수 있습니다.
즉시 생성 AI 솔루션을 빌드하는 실험을 시작하려면 Python에서 사용자의 고유한 데이터 샘플을 사용해 채팅을 시작하는 방법을 살펴보는 것이 좋습니다.