Azure OpenAI NLP(자연어 처리) 및 완성 기능의 통합은 사용자 생산성을 향상시킬 수 있는 상당한 잠재력을 제공합니다. AI 도우미는 적절한 프롬프트와 규칙을 활용하여 전자 메일 메시지, SMS 메시지 등과 같은 다양한 형태의 통신을 효율적으로 생성할 수 있습니다. 이 기능을 사용하면 사용자 효율성이 향상되고 워크플로가 간소화됩니다.
이 기능은 자체적으로 매우 강력하지만 사용자가 회사의 사용자 지정 데이터를 기반으로 완료를 생성해야 하는 경우가 있을 수 있습니다. 예를 들어 설치 문제가 있는 고객을 지원할 때 사용자가 탐색하기 어려울 수 있는 제품 설명서 컬렉션이 있을 수 있습니다. 또는 사용자가 필요한 답변을 읽고 가져오는 것이 어려울 수 있는 의료 혜택과 관련된 포괄적인 FAQ(질문과 대답) 집합을 유지할 수 있습니다. 이러한 경우와 다른 많은 경우에 Azure OpenAI 서비스를 사용하면 사용자 고유의 데이터를 활용하여 완성을 생성하여 사용자 질문에 보다 맞춤화되고 상황에 맞는 정확한 응답을 보장할 수 있습니다.
다음은 Azure OpenAI 설명서에서 "사용자 고유의 데이터 가져오기" 기능이 작동하는 방식에 대한 간략한 개요입니다.
비고
데이터에 대한 Azure OpenAI의 주요 기능 중 하나는 모델의 출력을 향상시키는 방식으로 데이터를 검색하고 활용하는 기능입니다. Azure Open AI의 On Your Data는 Azure AI Search와 더불어 지정된 데이터 원본에서 검색할 데이터를 사용자 입력 및 제공된 대화 기록에 기반하여 결정합니다. 그런 다음 이 데이터는 확대되어 OpenAI 모델에 대한 프롬프트로 다시 제출되며, 검색된 정보는 원래 프롬프트에 추가됩니다. 검색된 데이터가 프롬프트에 추가되더라도 결과 입력은 다른 프롬프트와 마찬가지로 모델에 의해 계속 처리됩니다. 데이터가 검색되고 프롬프트가 모델에 제출되면 모델은 이 정보를 사용하여 완료를 제공합니다.
이 연습에서 다음을 수행합니다.
- Azure AI Foundry 포털을 사용하여 사용자 지정 데이터 원본을 만듭니다.
- Azure AI Foundry 포털을 사용하여 포함 모델을 배포합니다.
- 사용자 지정 문서를 업로드합니다.
- 채팅 플레이그라운드에서 채팅 세션을 시작하여 사용자 고유의 데이터를 기반으로 완료를 생성하는 실험을 시작합니다.
- Azure AI Search 및 Azure OpenAI를 사용하여 사용자 고유의 데이터를 기반으로 완료를 생성하는 코드를 살펴봅니다.
포함 모델을 배포하고 Azure AI Foundry에 사용자 지정 데이터 원본을 추가하여 시작해 보겠습니다.
Azure AI Foundry에 사용자 지정 데이터 원본 추가
Azure OpenAI Studio로 이동하여 Azure OpenAI 리소스에 액세스할 수 있는 자격 증명으로 로그인합니다.
탐색 메뉴에서 배포 를 선택합니다.
도구 모음에서 모델 배포 선택 -->기본 모델 배포 를 선택합니다.
모델 목록에서 text-embedding-ada-002 모델을 선택하고 확인을 선택합니다.
다음 옵션을 선택합니다.
- 배포 이름: text-embedding-ada-002
- 모델 버전: 기본값
- 배포 유형: 표준
- 분당 토큰 속도 제한(천) 값을 120K로 설정합니다.
- 콘텐츠 필터: DefaultV2
- 동적 견적 사용: 사용
배포 버튼을 선택합니다.
모델을 만든 후 탐색 메뉴에서 홈 을 선택하여 시작 화면으로 이동합니다.
시작 화면에서 사용자 고유의 데이터 가져오기 타일을 찾아 지금 사용해 보세요.
데이터 추가와 데이터원본 추가를 선택합니다.
데이터 원본 선택 드롭다운에서 파일 업로드를 선택합니다.
Azure Blob Storage 리소스 선택 드롭다운에서 새 Azure Blob Storage 리소스 만들기를 선택합니다.
구독 드롭다운에서 Azure 구독 을 선택합니다.
Azure Blob Storage 리소스 선택 드롭다운에서 새 Azure Blob Storage 리소스 만들기를 선택합니다.
이렇게 하면 다음 작업을 수행할 수 있는 Azure Portal로 이동합니다.
- byodstorage[Your Last Name]과 같은 스토리지 계정의 고유한 이름을 입력합니다.
- 위치와 가까운 지역을 선택합니다.
- 검토를 선택한 다음 만들기를 선택합니다.
Blob Storage 리소스가 만들어지면 Azure AI Foundry 대화 상자로 돌아가서 Azure Blob Storage 리소스 선택 드롭다운에서 새로 만든 Blob Storage 리소스를 선택합니다 . 목록에 표시되지 않으면 드롭다운 옆에 있는 새로 고침 아이콘을 선택합니다.
스토리지 계정에 액세스하려면 CORS(원본 간 리소스 공유)를 설정해야 합니다. Azure AI Foundry 대화 상자에서 CORS 켜기를 선택합니다.
Azure AI Search 리소스 선택 드롭다운에서 새 Azure AI Search 리소스 만들기를 선택합니다.
그러면 Azure Portal로 돌아가서 다음 작업을 수행할 수 있습니다.
- BYodsearch-[Your Last Name]과 같은 AI Search 리소스의 고유한 이름을 입력합니다.
- 위치와 가까운 지역을 선택합니다.
- 가격 책정 계층 섹션에서 가격 책정 계층 변경을 선택하고 기본 및 선택을 선택합니다. 무료 계층은 지원되지 않으므로 이 자습서의 끝부분에 AI Search 리소스를 정리합니다.
- 검토를 선택한 다음 만들기를 선택합니다.
AI Search 리소스가 만들어지면 리소스 개요 페이지로 이동하여 URL 값을 로컬 파일에 복사합니다.
탐색 메뉴에서 설정 -->키를 선택합니다.
API 액세스 제어 페이지에서 둘 다를 선택하여 관리 ID를 사용하거나 키를 사용하여 서비스에 액세스할 수 있도록 합니다. 메시지가 표시되면 예를 선택합니다.
비고
역할 할당을 추가하는 데 최대 10분이 걸릴 수 있으므로 이 연습에서는 API 키를 사용하지만 약간의 추가 작업을 통해 시스템 할당 관리 ID가 서비스에 보다 안전하게 액세스할 수 있도록 할 수 있습니다.
왼쪽 탐색 메뉴에서 키를 선택하고 기본 관리 키 값을 로컬 파일에 복사합니다. 연습의 뒷부분에서 URL 및 키 값이 필요합니다.
탐색 메뉴에서 설정 -->의미 체계 순위 매기기를 선택하고 무료 가 선택되어 있는지 확인합니다.
비고
특정 지역에서 의미 체계 순위를 사용할 수 있는지 확인하려면 Azure 웹 사이트의 지역별 사용 가능한 제품을 확인 하여 해당 지역이 나열되어 있는지 확인합니다.
Azure AI Foundry 데이터 추가 대화 상자로 돌아가 서 Azure AI Search 리소스 선택 드롭다운에서 새로 만든 검색 리소스를 선택합니다. 목록에 표시되지 않으면 드롭다운 옆에 있는 새로 고침 아이콘을 선택합니다.
인덱스 이름 값 입력에 대한 byod-search-index 값을 입력합니다.
이 검색 리소스에 벡터 검색 추가 확인란을 선택합니다.
포함 모델 선택 드롭다운에서 이전에 만든 text-embedding-ada-002 모델을 선택합니다.
파일 업로드 대화 상자에서 파일 찾아보기를 선택합니다.
프로젝트의 고객 문서 폴더(프로젝트의 루트에 있음)로 이동하고 다음 파일을 선택합니다.
- Clock A102 설치 Instructions.docx
- 회사 FAQs.docx
비고
이 기능은 현재 로컬 인덱스 만들기를 위해 .txt, .md, .html, .pdf, .docx 및 .pptx 파일 형식을 지원합니다.
파일 업로드를 선택합니다. 파일은 이전에 만든 Blob Storage 리소스 의 fileupload-byod-search-index 컨테이너에 업로드됩니다.
다음을 선택하여 데이터 관리 대화 상자로 이동합니다.
검색 유형 드롭다운에서 하이브리드 + 의미 체계를 선택합니다.
비고
이 옵션은 키워드 및 벡터 검색을 지원합니다. 결과가 반환되면 사용자의 검색 관련성을 향상시키는 딥 러닝 모델을 사용하여 결과 집합에 보조 순위 프로세스가 적용됩니다. 의미 체계 검색에 대한 자세한 내용은 Azure AI Search 설명서에서 의미 체계 검색 을 참조하세요.
크기 선택 값이 1024로 설정되어 있는지 확인합니다.
다음을 선택합니다.
Azure 리소스 인증 유형에 대해 API 키를 선택합니다. Azure AI Search 인증 설명서에서 올바른 인증 유형을 선택하는 방법에 대해 자세히 알아봅니다.
다음을 선택합니다.
세부 정보를 검토하고 저장을 선택하고 닫습니다.
이제 사용자 지정 데이터가 업로드되었으므로 데이터가 인덱싱되고 채팅 플레이그라운드에서 사용할 수 있습니다. 이 프로세스에는 몇 분 정도가 소요됩니다. 완료되면 다음 섹션으로 계속 진행합니다.
채팅 플레이그라운드에서 사용자 지정 데이터 원본 사용
Azure OpenAI Studio에서 페이지의 채팅 세션 섹션을 찾아 다음 사용자 쿼리를 입력합니다.
What safety rules are required to install a clock?
사용자 쿼리를 제출한 후 다음과 유사한 결과가 표시됩니다.
채팅 응답에서 참조 1 개 섹션을 확장하고 Clock A102 설치 Instructions.docx 파일이 나열되어 있으며 이 파일을 선택하여 문서를 볼 수 있습니다.
다음 사용자 메시지를 입력합니다.
What should I do to mount the clock on the wall?
다음과 유사한 결과가 표시됩니다.
이제 회사 FAQ 문서를 실험해 보겠습니다. 사용자 쿼리 필드에 다음 텍스트를 입력합니다.
What is the company's policy on vacation time?
해당 요청에 대한 정보를 찾을 수 없습니다.
사용자 쿼리 필드에 다음 텍스트를 입력합니다.
How should I handle refund requests?
다음과 유사한 결과가 표시됩니다.
채팅 응답에서 참조 1 개 섹션을 확장하고 회사 FAQs.docx 파일이 나열되고 문서를 보려면 선택할 수 있습니다.
채팅 플레이그라운드의 도구 모음에서 코드 보기를 선택합니다.
다른 언어 간에 전환하고, 엔드포인트를 보고, 엔드포인트의 키에 액세스할 수 있습니다. 샘플 코드 대화 상자 창을 닫습니다.
채팅 메시지 위에 원시 JSON 표시 토글을 켭니다. 채팅 세션은 다음과 유사한 메시지로 시작됩니다.
{ "role": "system", "content": "You are an AI assistant that helps people find information." }
이제 사용자 지정 데이터 원본을 만들고 채팅 실습에서 실험했으므로 프로젝트의 애플리케이션에서 어떻게 사용할 수 있는지 살펴보겠습니다.
애플리케이션에서 사용자 고유의 데이터 가져오기 기능 사용
VS Code에서 프로젝트로 돌아가 서 .env 파일을 엽니다. AI Services 엔드포인트, 키 및 인덱스 이름으로 다음 값을 업데이트합니다. 이 연습의 앞부분에서 엔드포인트와 키를 로컬 파일에 복사했습니다.
AZURE_AI_SEARCH_ENDPOINT=<AI_SERVICES_ENDPOINT_VALUE> AZURE_AI_SEARCH_KEY=<AI_SERVICES_KEY_VALUE> AZURE_AI_SEARCH_INDEX=byod-search-index
이전 연습에서는 데이터베이스, API 및 애플리케이션을 시작했습니다. 또한 파일을 업데이트했습니다
.env
. 이러한 단계를 완료하지 않은 경우 계속하기 전에 이전 연습의 끝에 있는 지침을 따릅니다.애플리케이션이 브라우저에 로드되면 애플리케이션의 오른쪽 위에 있는 채팅 도움말 아이콘을 선택합니다.
채팅 대화 상자에 다음 텍스트가 표시됩니다.
How should I handle a company refund request?
도움말 가져오기 단추를 선택합니다. 이전에 Azure OpenAI Studio에서 업로드한 회사 FAQs.docx 문서에서 반환된 결과가 표시됩니다. 문서를 읽으려는 경우 프로젝트의 루트에 있는 고객 문서 폴더에서 찾을 수 있습니다.
텍스트를 다음으로 변경하고 도움말 가져오기 단추를 선택합니다.
What safety rules are required to install a clock?
Azure OpenAI Studio에서 이전에 업로드한 Clock A102 설치 Instructions.docx 문서에서 반환된 결과가 표시됩니다. 이 문서는 프로젝트의 루트에 있는 고객 문서 폴더에서도 사용할 수 있습니다.
코드 탐색
팁 (조언)
Visual Studio Code를 사용하는 경우 다음을 선택하여 파일을 직접 열 수 있습니다.
- Windows/Linux: Ctrl+P
- Mac: Cmd + P
그런 다음 열려는 파일의 이름을 입력합니다.
Visual Studio Code에서 프로젝트 소스 코드로 돌아갑니다.
서버/apiRoutes.ts 파일을 열고 경로를 찾습니다
completeBYOD
. 이 API는 채팅 도움말 대화 상자에서 도움말 가져오기 단추를 선택할 때 호출됩니다. 요청 본문에서 사용자 프롬프트를 검색하고completeBYOD()
파일의 함수에 전달합니다. 그런 다음 결과가 클라이언트에 반환됩니다.router.post('/completeBYOD', async (req, res) => { const { prompt } = req.body; if (!prompt) { return res.status(400).json({ status: false, error: 'The prompt parameter must be provided.' }); } let result; try { // Call OpenAI to get custom "bring your own data" completion result = await completeBYOD(prompt); } catch (e: unknown) { console.error('Error parsing JSON:', e); } res.json(result); });
서버/openAI.ts 파일을 열고 함수를 찾습니다
completeBYOD()
.async function completeBYOD(userPrompt: string): Promise<string> { const systemPrompt = 'You are an AI assistant that helps people find information in documents.'; return await callOpenAI(systemPrompt, userPrompt, 0, true); }
이 함수에는 다음과 같은 기능이 있습니다.
- 매개 변수에는
userPrompt
사용자가 채팅 도움말 대화 상자에 입력한 정보가 포함됩니다. - 변수는
systemPrompt
사람들이 정보를 찾는 데 도움이 되도록 설계된 AI 도우미가 사용되도록 정의합니다. -
callOpenAI()
는 Azure OpenAI API를 호출하고 결과를 반환하는 데 사용됩니다. 다음 매개 변수뿐만 아니라 값과systemPrompt
값을 전달합니다userPrompt
.-
temperature
- 응답에 포함할 창의성의 양입니다. 이 경우 사용자는 일관된(덜 창의적인) 답변이 필요하므로 값은 0으로 설정됩니다. -
useBYOD
- Azure OpenAI와 함께 AI Search를 사용할지 여부를 나타내는 부울 값입니다. 이 경우 AI Search 기능이 사용되도록 설정true
됩니다.
-
- 매개 변수에는
함수는
callOpenAI()
호출할 OpenAI 함수를 결정하는 데 사용되는 매개 변수를 허용useBYOD
합니다. 이 경우 함수가useBYOD
호출되도록true
설정합니다getAzureOpenAIBYODCompletion()
.function callOpenAI(systemPrompt: string, userPrompt: string, temperature = 0, useBYOD = false) { const isAzureOpenAI = OPENAI_API_KEY && OPENAI_ENDPOINT && OPENAI_MODEL; if (isAzureOpenAI) { if (useBYOD) { return getAzureOpenAIBYODCompletion(systemPrompt, userPrompt, temperature); } return getAzureOpenAICompletion(systemPrompt, userPrompt, temperature); } return getOpenAICompletion(systemPrompt, userPrompt, temperature); }
getAzureOpenAIBYODCompletion()
서버/openAI.ts 함수를 찾습니다. 앞에서 검사한 함수와 매우 유사getAzureOpenAICompletion()
하지만 Azure OpenAI에서 사용할 수 있는 "데이터의 Azure OpenAI" 시나리오에 고유한 몇 가지 주요 차이점을 강조 표시하는 별도의 함수로 표시됩니다.async function getAzureOpenAIBYODCompletion(systemPrompt: string, userPrompt: string, temperature: number): Promise<string> { const dataSources = [ { type: 'azure_search', parameters: { authentication: { type: 'api_key', key: AZURE_AI_SEARCH_KEY }, endpoint: AZURE_AI_SEARCH_ENDPOINT, index_name: AZURE_AI_SEARCH_INDEX } } ]; const completion = await createAzureOpenAICompletion(systemPrompt, userPrompt, temperature, dataSources) as AzureOpenAIYourDataResponse; console.log('Azure OpenAI Add Your Own Data Output: \n', completion.choices[0]?.message); for (let citation of completion.choices[0]?.message?.context?.citations ?? []) { console.log('Citation Path:', citation.filepath); } return completion.choices[0]?.message?.content?.trim() ?? ''; }
함수에서 다음 기능을 확인합니다
getAzureOpenAIBYODCompletion()
.-
dataSources
이 연습의key
endpoint
앞부분에서 파일에 추가index_name
된 값과.env
AI Search 리소스를 포함하는 속성이 만들어집니다. - 함수는
createAzureOpenAICompletion()
,systemPrompt
및userPrompt
temperature
값을 사용하여dataSources
호출됩니다. 이 함수는 Azure OpenAI API를 호출하고 결과를 반환하는 데 사용됩니다. - 응답이 반환되면 문서 인용이 콘솔에 기록됩니다. 그러면 완료 메시지 콘텐츠가 호출자에게 반환됩니다.
-
다음 연습으로 넘어가기 전에 고려해야 할 몇 가지 마지막 사항은 다음과 같습니다.
- 샘플 애플리케이션은 Azure AI Search에서 단일 인덱스 사용 Azure OpenAI에서 여러 인덱스 및 데이터 원본을 사용할 수 있습니다.
dataSources
필요에 따라 여러 데이터 원본을getAzureOpenAIBYODCompletion()
포함하도록 함수의 속성을 업데이트할 수 있습니다. - 보안은 이러한 유형의 시나리오를 사용하여 신중하게 평가해야 합니다. 사용자는 액세스할 수 없는 문서에서 질문을 하고 결과를 얻을 수 없습니다.
- 샘플 애플리케이션은 Azure AI Search에서 단일 인덱스 사용 Azure OpenAI에서 여러 인덱스 및 데이터 원본을 사용할 수 있습니다.
Azure OpenAI, 프롬프트, 완료 및 사용자 고유의 데이터를 사용하는 방법에 대해 알아보았으므로 이제 다음 연습으로 이동하여 통신 기능을 사용하여 애플리케이션을 개선하는 방법을 알아보겠습니다. Azure OpenAI에 대해 자세히 알아보려면 Azure OpenAI 서비스 교육 콘텐츠 시작을 확인하세요. Azure OpenAI에서 사용자 고유의 데이터를 사용하는 방법에 대한 추가 정보는 데이터 설명서의 Azure OpenAI에서 찾을 수 있습니다.