paint-brush
RAG + LLM 지원서를 효과적으로 평가하는 방법~에 의해@vndee
1,521 판독값
1,521 판독값

RAG + LLM 지원서를 효과적으로 평가하는 방법

~에 의해 Duy Huynh17m2023/12/27
Read on Terminal Reader

너무 오래; 읽다

오늘날의 일부 애플리케이션이 어떻게 마술처럼 스마트해 보이는지 궁금한 적이 있습니까? 그 마법의 큰 부분은 RAG와 LLM이라는 것에서 비롯됩니다.
featured image - RAG + LLM 지원서를 효과적으로 평가하는 방법
Duy Huynh HackerNoon profile picture
0-item
1-item

안녕하세요! 오늘날의 일부 애플리케이션이 어떻게 마술처럼 스마트해 보이는지 궁금한 적이 있습니까? 그 마법의 큰 부분은 RAG와 LLM이라는 것에서 비롯됩니다. RAG(Retrieval-Augmented Generation)를 AI 세계의 똑똑한 책벌레라고 생각해보세요. 수많은 정보를 파헤쳐 귀하의 질문에 필요한 것을 정확하게 찾아냅니다. 그런 다음 유명한 GPT 시리즈와 같은 LLM(대형 언어 모델)이 인상적인 텍스트 생성 기능을 기반으로 원활한 답변을 생성합니다. 이 두 가지를 함께 사용하면 스마트할 뿐만 아니라 매우 관련성이 높고 상황을 인식하는 AI를 갖게 됩니다. 마치 초고속 연구 조교와 재치 있는 대화가를 결합한 것과 같습니다. 이 콤보는 특정 정보를 빠르게 찾는 데 도움이 되는 것부터 놀랍도록 실제적인 채팅을 하는 것까지 모든 것에 환상적입니다.


하지만 여기에 문제가 있습니다. 우리의 AI가 단지 화려한 전문 용어를 뱉어내는 것이 아니라 실제로 도움이 되는지 어떻게 알 수 있습니까? 이것이 평가가 들어오는 곳입니다. 그것은 단지 있으면 좋은 것이 아니라 매우 중요합니다. 우리는 AI가 정확할 뿐만 아니라 관련성이 있고 유용하며 이상한 방향으로 나아가지 않도록 해야 합니다. 결국, 스마트 어시스턴트가 귀하에게 필요한 것이 무엇인지 이해하지 못하거나 기본에 맞지 않는 답변을 제공한다면 무슨 소용이 있을까요?


RAG + LLM 지원서를 평가하는 것은 현실 확인과 같습니다. 이는 기술적으로 인상적일 뿐만 아니라 진정으로 도움이 되는 AI를 만드는 데 실제로 궤도에 오르고 있는지 알려줍니다. 따라서 이 게시물에서 우리는 이를 수행하는 방법에 대해 자세히 알아보겠습니다. 즉, AI가 이론만큼 실제로도 훌륭하도록 보장하는 것입니다!

개발 단계

개발 단계에서는 일반적인 기계 학습 모델 평가 파이프라인을 따라 생각하는 것이 중요합니다. 표준 AI/ML 설정에서는 일반적으로 개발, 교육 및 테스트 세트와 같은 여러 데이터 세트를 사용하고 정량적 지표를 사용하여 모델의 효율성을 측정합니다. 그러나 LLM(대형 언어 모델)을 평가하는 데에는 고유한 과제가 있습니다. 기존의 정량적 측정 기준은 LLM의 결과 품질을 포착하는 데 어려움을 겪습니다. 이러한 모델은 다양하고 창의적인 언어를 생성하는 데 탁월하기 때문입니다. 따라서 효과적인 평가를 위한 포괄적인 레이블 집합을 갖는 것이 어렵습니다.


학계에서 연구자들은 MMLU와 같은 벤치마크 및 점수를 사용하여 LLM 순위를 매길 수 있으며 인간 전문가를 참여시켜 LLM 결과의 품질을 평가할 수 있습니다. 그러나 이러한 방법은 개발 속도가 빠르고 실제 적용 시 즉각적인 결과가 요구되는 프로덕션 환경으로 원활하게 전환되지 않습니다. 이는 LLM 성과에만 국한되지 않습니다. 실제 요구 사항은 데이터 검색, 신속한 구성 및 LLM의 기여를 포함하는 전체 프로세스를 고려합니다. 새로운 시스템이 반복될 때마다 또는 문서나 도메인이 변경될 때마다 사람이 선별한 벤치마크를 만드는 것은 비현실적입니다. 또한 업계의 빠른 개발 속도로 인해 배포 전에 인간 테스터가 각 업데이트를 평가할 때까지 오랜 시간을 기다릴 여유가 없습니다. 따라서 신속하고 결과 중심적인 생산 환경에 맞춰 학계에서 작동하는 평가 전략을 조정하는 것은 상당한 과제를 제시합니다.


그래서 이런 경우에 속한다면 마스터 LLM에서 제공하는 의사 점수 같은 것을 생각해 볼 수도 있을 것입니다. 이 점수는 자동화된 평가 지표와 인간 판단의 정제된 본질의 조합을 반영할 수 있습니다. 이러한 하이브리드 접근 방식은 인간 평가자의 미묘한 이해와 기계 평가의 확장 가능하고 체계적인 분석 사이의 격차를 해소하는 것을 목표로 합니다.

RAG + LLM 체인


예를 들어, 팀이 특정 도메인 및 데이터에 대해 훈련된 사내 LLM을 개발하는 경우 프로세스에는 일반적으로 개발자, 신속한 엔지니어 및 데이터 과학자의 공동 노력이 필요합니다. 각 구성원은 다음과 같이 중요한 역할을 합니다.

  • 개발자 는 건축가입니다. 그들은 RAG + LLM 체인이 원활하게 통합되고 다양한 시나리오를 쉽게 탐색할 수 있도록 애플리케이션의 프레임워크를 구성합니다.

  • 프롬프트 엔지니어는 창의적인 사람입니다. 그들은 실제 사용자 상호 작용을 에뮬레이션하는 시나리오와 프롬프트를 고안합니다. 그들은 "만약의 상황"을 숙고하고 시스템이 광범위한 주제와 질문을 처리하도록 추진합니다.

  • 데이터 과학자 는 전략가입니다. 그들은 응답을 분석하고, 데이터를 조사하고, 통계 전문 지식을 활용하여 AI의 성능이 목표를 충족하는지 평가합니다.


여기서 피드백 루프는 필수적입니다. AI가 프롬프트에 응답하면 팀은 모든 결과를 면밀히 조사합니다. AI가 질문을 이해했나요? 응답이 정확하고 관련성이 있었나요? 언어가 좀 더 부드러워질 수 있을까요? 그런 다음 이 피드백은 개선을 위해 시스템으로 다시 순환됩니다.


이를 한 단계 더 발전시키려면 자체 개발한 LLM을 평가하기 위한 벤치마크로 OpenAI의 GPT-4와 같은 마스터 LLM을 사용하는 것을 상상해보세요. 견고함과 다용도로 유명한 GPT 시리즈의 성능을 동등하거나 능가하는 것이 목표입니다. 진행 방법은 다음과 같습니다.

  • 관련 데이터세트 생성: 도메인의 미묘한 차이를 반영하는 데이터세트를 만드는 것부터 시작하세요. 이 데이터 세트는 전문가가 선별하거나 GPT-4의 도움으로 합성하여 시간을 절약하고 최적의 표준과 일치하도록 할 수 있습니다.

  • 성공을 위한 지표 정의: 마스터 LLM의 강점을 활용하여 지표 정의를 지원하세요. 마스터 LLM이 더 복잡한 작업을 처리할 수 있다는 점을 고려하면 목표에 가장 적합한 측정항목을 자유롭게 선택할 수 있습니다. 커뮤니티 표준에서는 Langchainragas 와 같은 다른 라이브러리의 일부 작업을 보고 싶을 수도 있습니다. 충실도, 맥락 기억, 맥락 정확성, 답변 유사성 등과 같은 몇 가지 지표가 있습니다.

  • 평가 파이프라인 자동화: 빠른 개발 주기에 보조를 맞추려면 자동화된 파이프라인을 구축하십시오. 이를 통해 각 업데이트 또는 변경 후 미리 정의된 측정항목을 기준으로 애플리케이션 성능을 일관되게 평가합니다. 프로세스를 자동화하면 평가가 철저할 뿐만 아니라 효율적으로 반복되어 신속한 최적화 및 개선이 가능해집니다.


예를 들어 다음 데모에서는 OpenAI의 GPT-4를 사용하여 간단한 문서 검색 대화 작업에서 다양한 오픈 소스 LLM을 자동으로 평가하는 방법을 보여 드리겠습니다.


먼저 OpenAI GPT-4를 활용하여 아래와 같이 문서에서 파생된 합성 데이터세트를 생성합니다.

 import os import json import pandas as pd from dataclasses import dataclass from langchain.chat_models import ChatOpenAI from langchain.chains import LLMChain from langchain.prompts import PromptTemplate from langchain.document_loaders import PyPDFLoader from langchain.text_splitter import CharacterTextSplitter from langchain.output_parsers import JsonOutputToolsParser, PydanticOutputParser from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate QA_DATASET_GENERATION_PROMPT = PromptTemplate.from_template( "You are an expert on generate question-and-answer dataset based on a given context. You are given a context. " "Your task is to generate a question and answer based on the context. The generated question should be able to" " to answer by leverage the given context. And the generated question-and-answer pair must be grammatically " "and semantically correct. Your response must be in a json format with 2 keys: question, answer. For example," "\n\n" "Context: France, in Western Europe, encompasses medieval cities, alpine villages and Mediterranean beaches. Paris, its capital, is famed for its fashion houses, classical art museums including the Louvre and monuments like the Eiffel Tower." "\n\n" "Response: {{" "\n" " \"question\": \"Where is France and what is it's capital?\"," "\n" " \"answer\": \"France is in Western Europe and it's capital is Paris.\"" "\n" "}}" "\n\n" "Context: The University of California, Berkeley is a public land-grant research university in Berkeley, California. Established in 1868 as the state's first land-grant university, it was the first campus of the University of California system and a founding member of the Association of American Universities." "\n\n" "Response: {{" "\n" " \"question\": \"When was the University of California, Berkeley established?\"," "\n" " \"answer\": \"The University of California, Berkeley was established in 1868.\"" "\n" "}}" "\n\n" "Now your task is to generate a question-and-answer dataset based on the following context:" "\n\n" "Context: {context}" "\n\n" "Response: ", ) OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") if OPENAI_API_KEY is None: raise ValueError("OPENAI_API_KEY is not set") llm = ChatOpenAI( model="gpt-4-1106-preview", api_key=OPENAI_API_KEY, temperature=0.7, response_format={ "type": "json_object" }, ) chain = LLMChain( prompt=QA_DATASET_GENERATION_PROMPT, llm=llm ) file_loader = PyPDFLoader("./data/cidr_lakehouse.pdf") text_splitter = CharacterTextSplitter(chunk_size=1000) chunks = text_splitter.split_documents(file_loader.load()) questions, answers = [], [] for chunk in chunks: for _ in range(2): response = chain.invoke({ "context": chunk }) obj = json.loads(response["text"]) questions.append(obj["question"]) answers.append(obj["answer"]) df = pd.DataFrame({ "question": questions, "answer": answers }) df.to_csv("./data/cidr_lakehouse_qa.csv", index=False)


위에서 언급한 코드를 실행한 후 결과로 CSV 파일을 얻습니다. 이 파일에는 다음과 같이 우리가 입력한 문서와 관련된 질문과 답변 쌍이 포함되어 있습니다.

"Lakehouse: 데이터 웨어하우징과 고급 분석을 통합하는 차세대 개방형 플랫폼" 논문의 QA 코퍼스를 종합했습니다.


그런 다음 Langchain을 사용하여 간단한 DocumentRetrievalQA 체인을 구성하고 Ollama를 통해 로컬로 작동하는 여러 오픈 소스 LLM으로 대체합니다. 여기에 대한 이전 튜토리얼을 찾을 수 있습니다.

 from tqdm import tqdm from langchain.chains import RetrievalQA from langchain.chat_models import ChatOllama from langchain.vectorstores import FAISS from langchain.embeddings import HuggingFaceEmbeddings vector_store = FAISS.from_documents(chunks, HuggingFaceEmbeddings()) retriever = vector_store.as_retriever() def test_local_retrieval_qa(model: str): chain = RetrievalQA.from_llm( llm=ChatOllama(model=model), retriever=retriever, ) predictions = [] for it, row in tqdm(df.iterrows(), total=len(df)): resp = chain.invoke({ "query": row["question"] }) predictions.append(resp["result"]) df[f"{model}_result"] = predictions test_local_retrieval_qa("mistral") test_local_retrieval_qa("llama2") test_local_retrieval_qa("zephyr") test_local_retrieval_qa("orca-mini") test_local_retrieval_qa("phi") df.to_csv("./data/cidr_lakehouse_qa_retrieval_prediction.csv", index=False)


요약하면 위의 코드는 간단한 문서 검색 체인을 설정합니다. 우리는 Mistral, Llama2, Zephyr, Orca-mini 및 Phi와 같은 여러 모델을 사용하여 이 체인을 실행합니다. 결과적으로 기존 DataFrame에 5개의 추가 열을 추가하여 각 LLM 모델의 예측 결과를 저장합니다.

QA 예측 결과.


이제 예측 결과를 평가하기 위해 OpenAI의 GPT-4를 사용하여 마스터 체인을 정의해 보겠습니다. 이 설정에서는 기존 AI/ML 문제에서 흔히 볼 수 있는 대략적인 F1 점수와 유사한 정확성 점수를 계산합니다. 이를 달성하기 위해 다음과 같이 정의된 참양성(TP), 거짓양성(FP), 거짓음성(FN)과 같은 병렬 개념을 적용합니다.


  • TP: 답변과 실제 진실 모두에 존재하는 진술입니다.
  • FP: 답변에는 있지만 실제 진실에서는 발견되지 않은 진술입니다.
  • FN: 관련 진술은 실제 사실에서 발견되었지만 답변에서는 생략되었습니다.


이러한 정의를 통해 아래 공식을 사용하여 정밀도, 재현율 및 F1 점수를 계산할 수 있습니다.

수식을 사용한 F1 점수


 import os import numpy as np import pandas as pd from tqdm import tqdm from langchain.chains import LLMChain from langchain.chat_models import ChatOpenAI from langchain.prompts import PromptTemplate OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") if OPENAI_API_KEY is None: raise ValueError("OPENAI_API_KEY is not set") CORRECTNESS_PROMPT = PromptTemplate.from_template( """ Extract following from given question and ground truth. Your response must be in a json format with 3 keys and does not need to be in any specific order: - statements that are present in both the answer and the ground truth - statements present in the answer but not found in the ground truth - relevant statements found in the ground truth but omitted in the answer Please be concise and do not include any unnecessary information. You should classify the statements as claims, facts, or opinions with semantic matching, no need exact word-by-word matching. Question:What powers the sun and what is its primary function? Answer: The sun is powered by nuclear fission, similar to nuclear reactors on Earth, and its primary function is to provide light to the solar system. Ground truth: The sun is actually powered by nuclear fusion, not fission. In its core, hydrogen atoms fuse to form helium, releasing a tremendous amount of energy. This energy is what lights up the sun and provides heat and light, essential for life on Earth. The sun's light also plays a critical role in Earth's climate system and helps to drive the weather and ocean currents. Extracted statements: [ {{ "statements that are present in both the answer and the ground truth": ["The sun's primary function is to provide light"], "statements present in the answer but not found in the ground truth": ["The sun is powered by nuclear fission", "similar to nuclear reactors on Earth"], "relevant statements found in the ground truth but omitted in the answer": ["The sun is powered by nuclear fusion, not fission", "In its core, hydrogen atoms fuse to form helium, releasing a tremendous amount of energy", "This energy provides heat and light, essential for life on Earth", "The sun's light plays a critical role in Earth's climate system", "The sun helps to drive the weather and ocean currents"] }} ] Question: What is the boiling point of water? Answer: The boiling point of water is 100 degrees Celsius at sea level. Ground truth: The boiling point of water is 100 degrees Celsius (212 degrees Fahrenheit) at sea level, but it can change with altitude. Extracted statements: [ {{ "statements that are present in both the answer and the ground truth": ["The boiling point of water is 100 degrees Celsius at sea level"], "statements present in the answer but not found in the ground truth": [], "relevant statements found in the ground truth but omitted in the answer": ["The boiling point can change with altitude", "The boiling point of water is 212 degrees Fahrenheit at sea level"] }} ] Question: {question} Answer: {answer} Ground truth: {ground_truth} Extracted statements:""", ) judy_llm = ChatOpenAI( model="gpt-4-1106-preview", api_key=OPENAI_API_KEY, temperature=0.0, response_format={ "type": "json_object" }, ) judy_chain = LLMChain( prompt=CORRECTNESS_PROMPT, llm=judy_llm ) def evaluate_correctness(column_name: str): chain = LLMChain( prompt=CORRECTNESS_PROMPT, llm=ChatOpenAI( model="gpt-4-1106-preview", api_key=OPENAI_API_KEY, temperature=0.0, response_format={ "type": "json_object" }, ) ) key_map = { "TP": "statements that are present in both the answer and the ground truth", "FP": "statements present in the answer but not found in the ground truth", "FN": "relevant statements found in the ground truth but omitted in the answer", # noqa: E501 } TP, FP, FN = [], [], [] for it, row in tqdm(df.iterrows(), total=len(df)): resp = chain.invoke({ "question": row["question"], "answer": row[column_name], "ground_truth": row["answer"] }) obj = json.loads(resp["text"]) TP.append(len(obj[key_map["TP"]])) FP.append(len(obj[key_map["FP"]])) FN.append(len(obj[key_map["FN"]])) # convert to numpy array TP = np.array(TP) FP = np.array(FP) FN = np.array(FN) df[f"{column_name}_recall"] = TP / (TP + FN) df[f"{column_name}_precision"] = TP / (TP + FP) df[f"{column_name}_correctness"] = 2 * df[f"{column_name}_recall"] * df[f"{column_name}_precision"] / (df[f"{column_name}_recall"] + df[f"{column_name}_precision"]) evaluate_correctness("mistral_result") evaluate_correctness("llama2_result") evaluate_correctness("zephyr_result") evaluate_correctness("orca-mini_result") evaluate_correctness("phi_result") print("|====Model====|=== Recall ===|== Precision ==|== Correctness ==|") print(f"|mistral | {df['mistral_result_recall'].mean():.4f} | {df['mistral_result_precision'].mean():.4f} | {df['mistral_result_correctness'].mean():.4f} |") print(f"|llama2 | {df['llama2_result_recall'].mean():.4f} | {df['llama2_result_precision'].mean():.4f} | {df['llama2_result_correctness'].mean():.4f} |") print(f"|zephyr | {df['zephyr_result_recall'].mean():.4f} | {df['zephyr_result_precision'].mean():.4f} | {df['zephyr_result_correctness'].mean():.4f} |") print(f"|orca-mini | {df['orca-mini_result_recall'].mean():.4f} | {df['orca-mini_result_precision'].mean():.4f} | {df['orca-mini_result_correctness'].mean():.4f} |") print(f"|phi | {df['phi_result_recall'].mean():.4f} | {df['phi_result_precision'].mean():.4f} | {df['phi_result_correctness'].mean():.4f} |") print("|==============================================================|") df.to_csv("./data/cidr_lakehouse_qa_retrieval_prediction_correctness.csv", index=False) 


결과


자, 이제 여러 모델에 대한 간단한 벤치마크가 생겼습니다. 이는 각 모델이 문서 검색 작업을 처리하는 방법에 대한 예비 지표로 간주될 수 있습니다. 이 수치는 스냅샷을 제공하지만 이야기의 시작일 뿐입니다. 이는 특정 코퍼스에서 정확하고 관련성 있는 정보를 검색하는 데 어떤 모델이 더 나은지 이해하기 위한 기준선 역할을 합니다. 여기에서 소스 코드를 찾을 수 있습니다.

Human-In-Loop 피드백

Human-In-Loop 피드백을 통해 AI를 튜닝할 때 인간 테스터와 마스터 LLM 간의 시너지 효과는 매우 중요합니다. 이 관계는 단순히 피드백을 수집하는 것이 아니라 인간의 입력에 적응하고 학습하는 반응형 AI 시스템을 만드는 것입니다.

대화형 프로세스

  • 테스터의 입력: 테스터는 RAG + LLM 체인에 참여하여 인간의 관점에서 출력을 평가합니다. AI 응답의 관련성, 정확성 및 자연성과 같은 측면에 대한 피드백을 제공합니다.
  • 마스터 LLM에 대한 피드백: 여기가 바로 마법이 일어나는 곳입니다. 인간 테스터의 피드백은 마스터 LLM에 직접 전달됩니다. 표준 모델과 달리 Master LLM은 이 피드백을 이해하고 해석하여 후속 출력을 개선하도록 설계되었습니다.
  • 마스터 LLM에 의한 프롬프트 조정: 이 피드백을 바탕으로 마스터 LLM은 개발 LLM에 대한 프롬프트를 조정합니다. 이 과정은 멘토가 학생을 가르치는 것과 유사합니다. 마스터 LLM은 발달 LLM이 프롬프트를 해석하고 반응하는 방식을 신중하게 수정하여 보다 효과적이고 상황에 맞는 응답 메커니즘을 보장합니다.

마스터 LLM의 이중 역할

마스터 LLM은 자체 개발된 LLM의 벤치마크 역할과 피드백 루프의 적극적인 참여자 역할을 모두 수행합니다. 피드백을 평가하고 프롬프트 또는 모델 매개변수를 조정하며 본질적으로 인간 상호 작용을 통해 '학습'합니다.

실시간 적응의 이점

이 과정은 혁신적입니다. 이를 통해 AI는 실시간으로 적응할 수 있어 인간의 언어와 사고 과정의 복잡성을 더욱 민첩하게 맞추고 조정할 수 있습니다. 이러한 실시간 적응은 AI의 학습 곡선이 가파르고 연속적임을 보장합니다.

개선의 순환

이러한 상호 작용, 피드백 및 적응 주기를 통해 우리의 AI는 단순한 도구 이상의 역할을 합니다. 이는 인간 테스터와의 각 상호 작용을 통해 개선할 수 있는 학습 개체가 됩니다. 이 인간 참여형(Human-In-The-Loop) 모델은 우리의 AI가 정체되지 않고 진화하여 더욱 효율적이고 직관적인 보조자가 되도록 보장합니다.


요약하자면, Human-In-Loop 피드백은 단지 인간의 통찰력을 수집하는 것이 아니라 사용자에게 더 나은 서비스를 제공하기 위해 동작을 미세 조정할 수 있는 역동적이고 적응 가능한 AI를 만드는 것입니다. 이러한 반복 프로세스를 통해 당사의 RAG + LLM 애플리케이션은 최첨단 상태를 유지하여 답변뿐만 아니라 사용자 요구 사항에 대한 진정한 이해를 반영하는 상황에 맞는 미묘한 응답을 제공합니다.


간단한 데모의 경우 이 비디오 에서 ClearML이 이 개념을 사용하여 Promptimizer를 향상시키는 방법을 볼 수 있습니다.

운영 단계

작전 단계 로 전환하는 것은 드레스 리허설에서 오프닝 나이트로 이동하는 것과 같습니다. 여기서 RAG + LLM 애플리케이션은 더 이상 가상의 실체가 아닙니다. 그들은 실제 사용자의 일상적인 작업 흐름에 적극적으로 참여합니다. 이 단계는 개발 단계에서 수행되는 모든 준비와 미세 조정에 대한 리트머스 테스트입니다.


이 단계에서는 우리 팀(운영, 제품, 분석가)이 애플리케이션을 배포하고 관리하기 위해 협력하여 우리가 구축한 모든 것이 제대로 작동할 뿐만 아니라 실제 환경에서도 번창하도록 보장합니다. 통제된 방식으로 애플리케이션의 효율성을 측정하기 위해 A/B 테스트 전략 구현을 고려할 수 있는 곳이 바로 여기입니다.


  • A/B 테스트 프레임워크: 우리는 사용자 기반을 두 개의 세그먼트로 나눕니다. 즉, 기존 버전의 애플리케이션(버전 1)을 계속 사용하는 제어 세그먼트와 버전 2(실제로는 버전 2)의 새로운 기능을 시험해 보는 테스트 세그먼트입니다. 동시에 여러 A/B 테스트를 실행할 수도 있습니다. 이를 통해 사용자 경험, 기능 수용성 및 전반적인 성능에 대한 비교 데이터를 수집할 수 있습니다.

  • 운영 롤아웃: 운영 팀은 두 버전의 원활한 롤아웃을 담당하여 인프라가 강력하고 사용자를 위한 모든 버전 전환이 원활하게 이루어지도록 보장합니다.

  • 제품 진화: 제품 팀은 사용자 피드백의 흐름을 파악하여 제품을 반복하기 위해 노력합니다. 이 팀은 새로운 기능이 사용자 요구와 전반적인 제품 비전에 부합하는지 확인합니다.

  • 분석 통찰력: 분석가 팀은 A/B 테스트에서 수집된 데이터를 엄격하게 조사합니다. 이들의 통찰력은 새 버전이 이전 버전보다 성능이 뛰어난지, 더 폭넓은 릴리스에 대비할 수 있는지 판단하는 데 매우 중요합니다.

  • 성과 지표: 핵심성과지표(KPI)를 모니터링하여 각 버전의 성공 여부를 측정합니다. 여기에는 사용자 참여 지표, 만족도 점수, 애플리케이션 출력의 정확성이 포함됩니다.


운영 단계는 애플리케이션을 개선할 뿐만 아니라 사용자 참여와 만족도를 향상시키는 지속적인 피드백 루프를 통해 역동적으로 진행됩니다. 모니터링, 분석, 반복, 그리고 무엇보다도 실시간 데이터를 통한 학습이 특징인 단계입니다.


이 단계를 탐색하면서 우리의 목표는 개발 단계에서 설정한 높은 표준을 유지할 뿐만 아니라 이를 초과하여 RAG + LLM 응용 프로그램이 혁신과 유용성의 최전선에 있도록 하는 것입니다.

결론

요약하자면, RAG(검색 증강 생성)와 LLM(대형 언어 모델)의 통합은 심층 데이터 검색과 정교한 텍스트 생성을 혼합하여 AI의 상당한 발전을 의미합니다. 그러나 적절하고 효과적인 평가 방법과 반복적인 개발 전략이 필요합니다. 개발 단계에서는 AI 평가를 맞춤화하고 인간 참여 피드백을 통해 AI 평가를 강화하여 이러한 시스템이 공감하고 실제 시나리오에 적응할 수 있도록 하는 데 중점을 둡니다. 이 접근 방식은 AI가 단순한 도구에서 협업 파트너로의 진화를 강조합니다. 운영 단계에서는 A/B 테스트 및 지속적인 피드백 루프와 같은 전략을 사용하여 실제 시나리오에서 이러한 애플리케이션을 테스트하여 사용자 상호 작용을 기반으로 효율성과 지속적인 발전을 보장합니다.