DEV/AI

Open WebUI RAG 예시: 시스템 담당자 안내 챗봇

오리야호 2024. 9. 26. 19:10
반응형

LLM을 어떻게 쉽게 활용할 수 있을까 궁금했던 것들을 실험하고 있습니다.

 

이 주제는 그 중 하나인데요. 파인 튜닝을 수행하지 않고 RAG + 시스템 프롬프트 + 파라미터 튜닝을 통해 이 정도 답변을 하더라 사례 정도로 봐주시면 되겠습니다.

 

주제는 시스템 담당자를 안내 해주는 챗봇 만들기 입니다.

 

아래와 같은 질문에 파인튜닝 없이 RAG로 답변을 제대로 해줄까?

  • 담당자 목록 알려줘.
  • → 문서에서 읽은 담당자 목록을 잘 표현해주는지 확인
  • 구매 요청 중 오류가 발생했는데 담당자가 누구야?
  • → 의미 분석을 통해 모듈을 잘 찾는지 확인
  • 생산 공정에서 품질 불량이 발생했어. 어떻게 처리 해야 해?
  • → 2가지 모듈에 대한 언급 하더라도 답변을 잘 할지 확인
  • 전표를 잘못 작성하고 상신했는데 취소 전 승인이 되어 버렸어.
  • → 돌려서 말한 질문에도 답변을 잘 할까?
  • HR 담당자 연락처 알려줘.
  • → 명확한 담당자 요청에 잘 답변할지 확인
  • PP 담당자 누구야?
  • → 명확한 담당자 요청에 잘 답변할지 확인
  • ERP 프로젝트 관련 모듈 연락처 알고 싶어.
  • → 애매한 질문에 잘 답변할지 확인
  • 출력물 관리 시스템 담당자 누구야?
  • → 제공하지 않은 시스템을 모른다고 답변할지 확인

 

RAG 자료 준비

 

RAG에 대한 간략한 소개는 이전 글에서 확인해주세요.

 

아래 표는 각 SAP 모듈의 설명, 주요 기능, 접속 메뉴, 담당자, 키워드를 LLM을 이용해 임의로 생성한 데이터 입니다.

 

실제 내용과 차이가 있을 수 있습니다.

제공한 자료에서 정확한 답변을 하는지를 보는 사례이므로 실제 데이터를 준비할 땐 상황에 맞게 수정이 필요할 듯 합니다.

 

모듈 설명 주요 기능 접속 메뉴 담당자 키워드
FI (Financial Accounting) 재무회계 모듈. 기업의 재무 거래를 기록하고 관리 총계정원장, 외상매입금, 외상매출금, 자산관리 SAP Easy Access > Accounting > Financial Accounting 김재무 (finance@company.com, 02-1234-5678) 재무회계, 총계정원장, 외상매입금, 외상매출금, 자산관리, 재무제표
CO (Controlling) 관리회계 담당 모듈. 내부 재무 관리와 의사결정 지원 원가 중심점 회계, 원가 요소 회계, 이익 중심점 회계, 제품원가 계산 SAP Easy Access > Accounting > Controlling 박관리 (controlling@company.com, 02-2345-6789) 관리회계, 원가 중심점, 원가 요소, 이익 중심점, 제품원가 계산, 수익성 분석
MM (Materials Management) 자재 관리 모듈. 구매에서 재고 관리까지 전 과정 관리 구매 요청, 견적 요청, 구매 발주, 입고, 재고 관리, 송장 검증 SAP Easy Access > Logistics > Materials Management 이자재 (materials@company.com, 02-3456-7890) 자재 관리, 구매, 재고 관리, 공급망 관리, 입고, 송장 검증
SD (Sales and Distribution) 영업과 유통 관리 모듈. 고객 주문부터 배송까지 지원 견적, 주문 관리, 가격 책정, 배송, 청구, 신용 관리 SAP Easy Access > Logistics > Sales and Distribution 최영업 (sales@company.com, 02-4567-8901) 영업, 유통, 주문 관리, 가격 책정, 배송, 청구, 고객 관계 관리
PP (Production Planning) 생산 계획 및 관리 모듈. 제조 기업의 생산 활동 최적화 생산 계획, 능력 계획, 자재 소요량 계획(MRP), 생산 오더 관리, 품질 관리 SAP Easy Access > Logistics > Production > Production Planning 정생산 (production@company.com, 02-5678-9012) 생산 계획, 능력 계획, MRP, 생산 오더, 품질 관리, 제조
HR (Human Resources) 인적 자원 관리 모듈 직원 정보 관리, 급여 관리, 근태 관리, 성과 관리, 교육 훈련 SAP Easy Access > Human Resources 한인사 (hr@company.com, 02-6789-0123) 인적 자원, 급여 관리, 근태 관리, 성과 관리, 교육 훈련, 직원 정보
PM (Plant Maintenance) 설비 유지보수 관리 모듈 설비 정보 관리, 예방 정비, 고장 수리, 정비 계획 및 일정 관리 SAP Easy Access > Logistics > Plant Maintenance 유정비 (maintenance@company.com, 02-7890-1234) 설비 유지보수, 예방 정비, 고장 수리, 정비 계획, 설비 관리, 가동률
QM (Quality Management) 품질 관리 담당 모듈 품질 계획, 검사, 품질 관리, 품질 인증 SAP Easy Access > Logistics > Quality Management 강품질 (quality@company.com, 02-8901-2345) 품질 관리, 품질 계획, 검사, 품질 인증, 품질 보증, 불량 관리
WM (Warehouse Management) 창고 관리 모듈 재고 관리, 입출고 관리, 재고 이동, 피킹, 패킹 SAP Easy Access > Logistics > Logistics Execution > Warehouse Management 임창고 (warehouse@company.com, 02-9012-3456) 창고 관리, 재고 관리, 입출고, 피킹, 패킹, 물류 센터
PS (Project Systems) 프로젝트 관리 모듈 프로젝트 계획, 예산 관리, 리소스 관리, 진행 상황 모니터링, 원가 관리 SAP Easy Access > Project System 서프로젝트 (project@company.com, 02-0123-4567) 프로젝트 관리, 예산 관리, 리소스 관리, 원가 관리, 일정 관리, WBS
IM (Investment Management) 투자 관리 모듈 투자 계획, 예산 책정, 자금 조달, 투자 모니터링, 수익성 분석 SAP Easy Access > Accounting > Investment Management 조투자 (investment@company.com, 02-1234-5678) 투자 관리, 자본 예산, 투자 계획, 수익성 분석, 자금 조달, 투자 포트폴리오
TM (Treasury Management) 자금 관리 모듈 현금 관리, 유동성 계획, 위험 관리, 채무 및 투자 관리, 금융 거래 SAP Easy Access > Treasury and Risk Management 나자금 (treasury@company.com, 02-2345-6789) 자금 관리, 현금 관리, 유동성 계획, 위험 관리, 금융 거래, 채무 관리
PLM (Product Lifecycle Management) 제품 수명 주기 관리 모듈 제품 개발, 설계 관리, 변경 관리, 문서 관리, 협업 도구 SAP Easy Access > Product Lifecycle Management 송제품 (plm@company.com, 02-3456-7890) 제품 수명 주기, 제품 개발, 설계 관리, 변경 관리, 문서 관리, 협업
EWM (Extended Warehouse Management) 고급 창고 관리 모듈 (WM 모듈의 확장 버전) 복잡한 물류 프로세스, 크로스 도킹, 웨이브 피킹, 작업 최적화 SAP Easy Access > Extended Warehouse Management 한물류 (ewm@company.com, 02-4567-8901) 고급 창고 관리, 크로스 도킹, 웨이브 피킹, 작업 최적화, 물류 센터, 재고 가시성

 

 

 


 

문서 업로드 하기

 

마크 다운 형식으로 작성한 아래 내용을 업로드 해줍니다. 데이터 형식은 구조화된 자료가 좋습니다.

 

임의로 생성된 아래 자료로 테스트를 진행합니다.

 

## FI (Financial Accounting)
- 설명: 재무회계 모듈. 기업의 재무 거래를 기록하고 관리
- 주요 기능: 총계정원장, 외상매입금, 외상매출금, 자산관리
- 접속 메뉴: SAP Easy Access > Accounting > Financial Accounting
- 담당자: 김재무 (finance@company.com, 02-1234-5678)
- 키워드: 재무회계, 총계정원장, 외상매입금, 외상매출금, 자산관리, 재무제표

## CO (Controlling)
- 설명: 관리회계 담당 모듈. 내부 재무 관리와 의사결정 지원
- 주요 기능: 원가 중심점 회계, 원가 요소 회계, 이익 중심점 회계, 제품원가 계산
- 접속 메뉴: SAP Easy Access > Accounting > Controlling
- 담당자: 박관리 (controlling@company.com, 02-2345-6789)
- 키워드: 관리회계, 원가 중심점, 원가 요소, 이익 중심점, 제품원가 계산, 수익성 분석

## MM (Materials Management)
- 설명: 자재 관리 모듈. 구매에서 재고 관리까지 전 과정 관리
- 주요 기능: 구매 요청, 견적 요청, 구매 발주, 입고, 재고 관리, 송장 검증
- 접속 메뉴: SAP Easy Access > Logistics > Materials Management
- 담당자: 이자재 (materials@company.com, 02-3456-7890)
- 키워드: 자재 관리, 구매, 재고 관리, 공급망 관리, 입고, 송장 검증

## SD (Sales and Distribution)
- 설명: 영업과 유통 관리 모듈. 고객 주문부터 배송까지 지원
- 주요 기능: 견적, 주문 관리, 가격 책정, 배송, 청구, 신용 관리
- 접속 메뉴: SAP Easy Access > Logistics > Sales and Distribution
- 담당자: 최영업 (sales@company.com, 02-4567-8901)
- 키워드: 영업, 유통, 주문 관리, 가격 책정, 배송, 청구, 고객 관계 관리

## PP (Production Planning)
- 설명: 생산 계획 및 관리 모듈. 제조 기업의 생산 활동 최적화
- 주요 기능: 생산 계획, 능력 계획, 자재 소요량 계획(MRP), 생산 오더 관리, 품질 관리
- 접속 메뉴: SAP Easy Access > Logistics > Production > Production Planning
- 담당자: 정생산 (production@company.com, 02-5678-9012)
- 키워드: 생산 계획, 능력 계획, MRP, 생산 오더, 품질 관리, 제조

## HR (Human Resources)
- 설명: 인적 자원 관리 모듈
- 주요 기능: 직원 정보 관리, 급여 관리, 근태 관리, 성과 관리, 교육 훈련
- 접속 메뉴: SAP Easy Access > Human Resources
- 담당자: 한인사 (hr@company.com, 02-6789-0123)
- 키워드: 인적 자원, 급여 관리, 근태 관리, 성과 관리, 교육 훈련, 직원 정보

## PM (Plant Maintenance)
- 설명: 설비 유지보수 관리 모듈
- 주요 기능: 설비 정보 관리, 예방 정비, 고장 수리, 정비 계획 및 일정 관리
- 접속 메뉴: SAP Easy Access > Logistics > Plant Maintenance
- 담당자: 유정비 (maintenance@company.com, 02-7890-1234)
- 키워드: 설비 유지보수, 예방 정비, 고장 수리, 정비 계획, 설비 관리, 가동률

## QM (Quality Management)
- 설명: 품질 관리 담당 모듈
- 주요 기능: 품질 계획, 검사, 품질 관리, 품질 인증
- 접속 메뉴: SAP Easy Access > Logistics > Quality Management
- 담당자: 강품질 (quality@company.com, 02-8901-2345)
- 키워드: 품질 관리, 품질 계획, 검사, 품질 인증, 품질 보증, 불량 관리

## WM (Warehouse Management)
- 설명: 창고 관리 모듈
- 주요 기능: 재고 관리, 입출고 관리, 재고 이동, 피킹, 패킹
- 접속 메뉴: SAP Easy Access > Logistics > Logistics Execution > Warehouse Management
- 담당자: 임창고 (warehouse@company.com, 02-9012-3456)
- 키워드: 창고 관리, 재고 관리, 입출고, 피킹, 패킹, 물류 센터

## PS (Project Systems)
- 설명: 프로젝트 관리 모듈
- 주요 기능: 프로젝트 계획, 예산 관리, 리소스 관리, 진행 상황 모니터링, 원가 관리
- 접속 메뉴: SAP Easy Access > Project System
- 담당자: 서프로젝트 (project@company.com, 02-0123-4567)
- 키워드: 프로젝트 관리, 예산 관리, 리소스 관리, 원가 관리, 일정 관리, WBS

## IM (Investment Management)
- 설명: 투자 관리 모듈
- 주요 기능: 투자 계획, 예산 책정, 자금 조달, 투자 모니터링, 수익성 분석
- 접속 메뉴: SAP Easy Access > Accounting > Investment Management
- 담당자: 조투자 (investment@company.com, 02-1234-5678)
- 키워드: 투자 관리, 자본 예산, 투자 계획, 수익성 분석, 자금 조달, 투자 포트폴리오

## TM (Treasury Management)
- 설명: 자금 관리 모듈
- 주요 기능: 현금 관리, 유동성 계획, 위험 관리, 채무 및 투자 관리, 금융 거래
- 접속 메뉴: SAP Easy Access > Treasury and Risk Management
- 담당자: 나자금 (treasury@company.com, 02-2345-6789)
- 키워드: 자금 관리, 현금 관리, 유동성 계획, 위험 관리, 금융 거래, 채무 관리

## PLM (Product Lifecycle Management)
- 설명: 제품 수명 주기 관리 모듈
- 주요 기능: 제품 개발, 설계 관리, 변경 관리, 문서 관리, 협업 도구
- 접속 메뉴: SAP Easy Access > Product Lifecycle Management
- 담당자: 송제품 (plm@company.com, 02-3456-7890)
- 키워드: 제품 수명 주기, 제품 개발, 설계 관리, 변경 관리, 문서 관리, 협업

## EWM (Extended Warehouse Management)
- 설명: 고급 창고 관리 모듈 (WM 모듈의 확장 버전)
- 주요 기능: 복잡한 물류 프로세스, 크로스 도킹, 웨이브 피킹, 작업 최적화
- 접속 메뉴: SAP Easy Access > Extended Warehouse Management
- 담당자: 한물류 (ewm@company.com, 02-4567-8901)
- 키워드: 고급 창고 관리, 크로스 도킹, 웨이브 피킹, 작업 최적화, 물류 센터, 재고 가시성

 

문서를 업로드 해줍니다.

 

 

1. Native RAG : 1차 모델 생성 및 추론 결과 비교

 

모델 생성

 

아래 3가지 모델로 테스트를 수행해봤습니다.

  • 로컬 ollama 활용. llama3.1 8b
  • Groq API 활용. llama3.1 8b
  • OpenAI API 활용. gpt-4o

 

모델간 체급차이가 나지만.. llama 3.1 8b로도 성능이 잘 나올지 궁금했어요.

 

시스템 프롬프트 작성

당신은 SAP 모듈에 대한 전문 지식을 가진 AI 어시스턴트입니다. 사용자의 질문에 답변할 때 다음 지침을 엄격히 따르세요:

1. 모든 답변은 반드시 한국어로 작성하세요.
2. 오직 제공된 컨텍스트의 SAP 모듈 정보만을 사용하여 답변하세요.
3. 제공된 컨텍스트에 없는 내용에 대해서는 "죄송합니다. 해당 정보는 제공된 자료에 없습니다."라고 답변하세요.
4. 추측이나 개인적인 의견을 절대 추가하지 마세요.
5. 답변은 가능한 한 간결하고 명확하게 작성하세요.

일반적인 질문에 대한 응답 형식:
질문에 대한 답변은 반드시 다음 형식을 정확히 따라야 합니다. 각 항목은 번호와 제목을 포함해야 하며, 내용은 대괄호 [] 없이 직접 작성하세요:

1. SAP 모듈 이름:
   컨텍스트에 나온 모듈 이름과 약어

2. 설명:
   컨텍스트의 '설명' 항목 내용을 그대로 인용

3. 주요 기능:
   컨텍스트의 '주요 기능' 항목 내용을 그대로 나열

4. 접속 메뉴:
   컨텍스트의 '접속 메뉴' 항목 내용

5. 담당자 정보:
   컨텍스트의 '담당자' 항목 내용을 그대로 표시

6. 키워드:
   컨텍스트의 '키워드' 항목 내용을 그대로 나열

주의사항:
- 모든 6개 항목을 반드시 포함하세요. 컨텍스트에 정보가 없는 항목은 "정보 없음"이라고 표시하세요.
- 각 항목은 반드시 번호와 제목을 포함해야 합니다.
- 내용은 컨텍스트에서 직접 복사하여 붙여넣으세요. 대괄호 []는 사용하지 마세요.
- 질문과 관련 없는 다른 모듈의 정보는 포함하지 마세요.
- 항상 제공된 컨텍스트의 정보 범위 내에서만 답변하세요.

예시 답변 형식:
1. SAP 모듈 이름: FI (Financial Accounting)
2. 설명: 재무회계 모듈. 기업의 재무 거래를 기록하고 관리
3. 주요 기능: 총계정원장, 외상매입금, 외상매출금, 자산관리
4. 접속 메뉴: SAP Easy Access > Accounting > Financial Accounting
5. 담당자 정보: 김재무 (finance@company.com, 02-1234-5678)
6. 키워드: 재무회계, 총계정원장, 외상매입금, 외상매출금, 자산관리, 재무제표

특별 질문에 대한 응답 형식:

"담당자 목록을 제공해줘." 또는 이와 유사한 요청에 대해서는 다음 형식으로 간략하게 답변하세요:

- [모듈 이름]: [담당자 정보]

예시:
- FI (Financial Accounting): 김재무 (finance@company.com, 02-1234-5678)
- MM (Materials Management): 이자재 (material@company.com, 02-2345-6789)

주의사항:
- 컨텍스트에 제공된 모든 모듈의 담당자 정보를 나열하세요.
- 담당자 정보가 없는 모듈은 생략하세요.
- 모듈 이름과 담당자 정보만 제공하고, 다른 정보는 포함하지 마세요.

이 지침을 철저히 따르며, 항상 정확하고 유용한 정보만을 제공하도록 노력하세요. 제공된 컨텍스트의 정보를 넘어서는 내용은 추측하지 마세요.

 

모델 파라미터 설정 및 지식 기반 설정

  • 기본 모델 선택
  • 위에 작성한 시스템 프롬프트 입력
  • temperature 0 설정
  • Top P 0 설정
  • 지식 기반 에서 RAG로 사용할 문서 선택

 

 

 

시스템 파라미터에 대한 설명은 다음을 참고하세요.

  1. 시드 (Seed): 모델이 텍스트를 생성할 때 초기 상태를 결정하는 값입니다. 시드를 고정하면 동일한 입력에 대해 일관된 출력을 얻을 수 있습니다.
  2. 중지 시퀀스 (Stop Sequence): 텍스트 생성이 중단될 특정 문자열 또는 시퀀스를 설정합니다. 모델이 이 시퀀스를 생성하면 출력을 멈춥니다.
  3. 온도 (Temperature): 텍스트 생성 시 출력의 다양성을 조절하는 파라미터입니다. 값이 낮을수록 모델은 더 예측 가능한 출력을 생성하고, 값이 높을수록 더 다양한 출력을 생성합니다. 0에 가까운 값은 결정론적 출력을, 높은 값은 더 창의적인 출력을 유도합니다.
  4. Mirostat, Mirostat Eta, Mirostat Tau: Mirostat는 적응형 샘플링 방법입니다.
    • Mirostat Eta: 목표된 엔트로피를 유지하기 위해 조정되는 비율을 나타냅니다.
    • Mirostat Tau: 엔트로피를 유지하기 위한 조정 범위입니다. 일반적으로 이 파라미터들은 모델의 출력을 동적으로 조정하여 더욱 일관된 결과를 생성하는 데 사용됩니다.
  5. Top K: 생성되는 다음 단어의 후보군 중 상위 K개의 단어만을 선택하여 그중에서 샘플링합니다. K 값이 낮을수록 모델의 출력이 더 제어되고 예측 가능해집니다.
  6. Top P: 누적 확률이 P 이하가 될 때까지 단어 후보를 선택하여 그중에서 샘플링합니다. 이것은 Top K와 유사하지만 더 유연하게 작동하며, 확률 분포의 꼬리에 있는 덜 가능성 있는 단어를 무시합니다.
  7. Min P: Top P와 유사하지만, 최소 확률을 설정하여 그 이하의 확률을 가지는 단어를 제거합니다.
  8. 프리퀀시 페널티: 생성된 텍스트 내에서 특정 단어나 토큰이 얼마나 자주 등장하는지를 기준으로 페널티를 부과하는 설정입니다. 이 파라미터는 반복되는 단어나 구문을 줄이기 위해 사용됩니다. 예를 들어, 동일한 단어가 너무 자주 나타나는 경우, 해당 단어가 다시 선택될 확률을 낮추는 방식으로 작동합니다.
  9. 마지막 N 반복 (Repetition Penalty N Last): 마지막 N개의 토큰에 대해 반복을 억제하는 페널티입니다. N은 반복을 감지할 토큰의 수를 나타냅니다.
  10. Tfs Z: 특정 토큰의 빈도에 따라 샘플링에서 제거하는 방식입니다. 정확한 의미는 사용된 구현에 따라 다를 수 있습니다.
  11. 내용 길이 (Content Length): 모델이 생성할 텍스트의 최대 길이를 설정합니다.
  12. 배치 크기 (num_batch): 한 번에 처리할 샘플의 수를 설정합니다. 이는 주로 GPU의 메모리 사용량과 연관이 있습니다.
  13. 컨텍스트 새로 고침 시 유지할 토큰 수 (num_keep): 컨텍스트를 새로 고침할 때 유지할 토큰의 수를 설정합니다. 이것은 대화형 모델에서 이전 대화 내용을 유지하기 위해 사용됩니다.
  14. 최대 토큰 (num_predict): 생성될 최대 토큰 수를 설정합니다. 이는 모델이 생성할 텍스트의 최대 길이를 제어합니다.
  15. use_mmap (올라마): 메모리 매핑 기능을 사용할지를 설정합니다. 메모리 매핑은 대규모 모델의 메모리 사용을 효율적으로 관리하기 위한 기법입니다.
  16. use_mlock (올라마): 메모리 잠금을 사용하여 메모리에서 모델 데이터를 교체하지 않도록 합니다. 이는 성능을 높이기 위해 사용될 수 있습니다.
  17. num_thread (올라마): 모델이 사용할 스레드의 수를 설정합니다. 더 많은 스레드를 사용하면 병렬 처리가 가능해져 성능이 향상될 수 있습니다.
  18. num_gpu (Ollama): 모델이 사용할 GPU의 수를 설정합니다. 여러 GPU를 사용하면 모델의 처리 속도를 높일 수 있습니다.

추론 결과 확인

  • 담당자 안내 봇(local_llama) : llama 3.1 8b
  • 담당자 안내 봇(groq_llama) : llama 3.1 8b API
  • 담당자 안내 봇(chatgpt) : chatgpt 4o

 

 

 

 

 

 

없는 담당자 테스트 할 경우 환각현상이 나타나기도 합니다.

 

 

 

 

temperature, Top P 설정만으로는 추론 결과가 좋지 않습니다.

 

세팅한 모델의 시스템 프롬프트나 파라미터 설정에 따라 추론의 성능이 많이 달라집니다.

 

2. Advanced RAG : 2차 모델 생성 및 추론 결과 비교

 

Advanced RAG 기법 중 일부를 적용 해봤습니다.

 

모델 생성

이번엔 클로드도 추가 해봤습니다.

  • 로컬 ollama 활용. llama3.1 8b
  • Groq API 활용. llama3.1 8b
  • OpenAI API 활용. gpt-4o
  • Anthropic API 활용. Claude 3.5 Sonnet

 

Rerank 모델 활용한 하이브리드 검색 추가

 

하이브리드 검색을 사용하도록 설정을 변경하였습니다.

주의할 점은 임베딩 모델을 변경할 경우 문서 색인을 새로 수행해줘야 합니다.

 

 

 

 

시스템 프롬프트도 변경해주었습니다.

당신은 SAP 모듈에 대한 전문 지식을 가진 AI 어시스턴트입니다. 사용자의 질문에 답변할 때 다음 지침을 엄격히 따르세요:

1. 모든 답변은 반드시 한국어로 작성하세요.
2. 오직 제공된 컨텍스트의 SAP 모듈 정보만을 사용하여 답변하세요.
3. 제공된 컨텍스트에 없는 내용에 대해서는 "죄송합니다. 해당 정보는 제공된 자료에 없습니다."라고 답변하세요.
4. 추측이나 개인적인 의견을 절대 추가하지 마세요.
5. 답변은 가능한 한 간결하고 명확하게 작성하세요.

일반적인 질문에 대한 응답 형식:
질문에 대한 답변은 반드시 다음 형식을 정확히 따라야 합니다. 각 항목은 번호와 제목을 포함해야 하며, 내용은 대괄호 [] 없이 직접 작성하세요:

```답변 양식
1. SAP 모듈 이름:
   컨텍스트에 나온 모듈 이름과 약어

2. 설명:
   컨텍스트의 '설명' 항목 내용을 그대로 인용

3. 주요 기능:
   컨텍스트의 '주요 기능' 항목 내용을 그대로 나열

4. 접속 메뉴:
   컨텍스트의 '접속 메뉴' 항목 내용

5. 담당자 정보:
   컨텍스트의 '담당자' 항목 내용을 그대로 표시

6. 키워드:
   컨텍스트의 '키워드' 항목 내용을 그대로 나열
```

주의사항:
- 모든 6개 항목을 반드시 포함하세요. 컨텍스트에 정보가 없는 항목은 "정보 없음"이라고 표시하세요.
- 각 항목은 반드시 번호와 제목을 포함해야 합니다.
- 내용은 컨텍스트에서 직접 복사하여 붙여넣으세요. 대괄호 []는 사용하지 마세요.
- 질문과 관련 없는 다른 모듈의 정보는 포함하지 마세요.
- 항상 제공된 컨텍스트의 정보 범위 내에서만 답변하세요.

예시 답변 형식:
```답변 예시 유형1
1. SAP 모듈 이름: FI (Financial Accounting)
2. 설명: 재무회계 모듈. 기업의 재무 거래를 기록하고 관리
3. 주요 기능: 총계정원장, 외상매입금, 외상매출금, 자산관리
4. 접속 메뉴: SAP Easy Access > Accounting > Financial Accounting
5. 담당자 정보: 김재무 (finance@company.com, 02-1234-5678)
6. 키워드: 재무회계, 총계정원장, 외상매입금, 외상매출금, 자산관리, 재무제표
```

특별 질문에 대한 응답 형식:

"담당자 목록 전체를 제공해줘." 와 같이 여러 담당자 목록을 요청할 땐 다음 형식으로 간략하게 답변하세요:

- [모듈 이름]: [담당자 정보]

예시 답변 형식:
```답변 예시 유형2
- FI (Financial Accounting): 김재무 (finance@company.com, 02-1234-5678)
- MM (Materials Management): 이자재 (material@company.com, 02-2345-6789)
```

주의사항:
- 컨텍스트에 제공된 모든 모듈의 담당자 정보를 나열하세요.
- 담당자 정보가 없는 모듈은 생략하세요.
- 모듈 이름과 담당자 정보만 제공하고, 다른 정보는 포함하지 마세요.

관련 모듈 안내:
정확한 모듈을 찾지 못했지만 사용자의 문의와 관련된 모듈이 있는 경우, 다음과 같은 형식으로 답변하세요:

```답변 예시 유형3
죄송합니다. 귀하의 질문에 정확히 일치하는 SAP 모듈을 찾지 못했습니다. 그러나 다음의 관련 모듈들이 귀하의 문의와 관련이 있을 수 있습니다:

1. [관련 모듈 이름 1]: [간단한 설명]
2. [관련 모듈 이름 2]: [간단한 설명]
3. [관련 모듈 이름 3]: [간단한 설명]

이 중 어느 모듈에 대해 더 자세한 정보를 원하시나요?
```

주의사항:
- 최대 3개의 관련 모듈만 나열하세요.
- 각 모듈에 대해 간단한 설명만 제공하고, 상세 정보는 포함하지 마세요.
- 사용자가 특정 모듈에 대해 더 자세한 정보를 요청할 경우, 해당 모듈에 대한 상세 정보를 '답변 예시 유형1'의 형식으로 제공하세요.

이 지침을 철저히 따르며, 항상 정확하고 유용한 정보만을 제공하도록 노력하세요. 제공된 컨텍스트의 정보를 넘어서는 내용은 추측하지 마세요.

 

추론 결과 확인

 

하이브리드 검색으로 변경하면서 초반에 답변까지 시간이 조금 더 걸리네요.

 

 

 

 

없는 시스템을 질문했을 때 ChatGPT는 정확하게 답변하네요. 그런데 클로드 답변을 보니 프롬프트를 수정해 주는게 좋을 것 같네요.

 

클로드의 경우는 잘 대답하고 관련 높을 것 같은 모듈도 안내하고 있네요. 물론 잘못 안내하긴 했지만 핵신 내용은 포함하고 있어서 합격점을 주었습니다.

 

 

 

 

3. 더 큰 모델로 변경 : 3차 모델 생성 및 추론 결과 비교

 

모델 생성

 

이번엔 llama3.1 70b모델로 변경해봤습니다.

  • 로컬 ollama 활용. llama3.1 70b
  • Groq API 활용. llama3.1 70b
  • OpenAI API 활용. gpt-4o
  • Anthropic API 활용. Claude 3.5 Sonnet

 

추론 결과 확인

 

 

 

 

8b 보다 조금 더 나은 모습들이 보이는 듯 합니다.

시스템 프롬프트를 좀 더 손 대보면 조금은 더 개선이 될 여지가 보입니다.

하지만 환각현상이 여전히 발생하기 때문에 구조적으로 추가적인 방법이 필요해 보입니다.


별첨1. RAG 템플릿 수정

 

RAG 템플릿을 수정한는 걸로도 품질을 높일 수 있다고 합니다.

 

How I’ve Optimized Document Interactions with Open WebUI and RAG: A Comprehensive Guide

 

How I’ve Optimized Document Interactions with Open WebUI and RAG: A Comprehensive Guide

In this article, I’ll share how I’ve enhanced my experience using my own private version of ChatGPT to ask about documents. If you don’t…

medium.com

 

기본값으로 아래처럼된 프롬프트를

Use the following context as your learned knowledge, inside <context></context> XML tags.
<context>
    [context]
</context>

When answer to user:
- If you don't know, just say that you don't know.
- If you don't know when you are not sure, ask for clarification.
Avoid mentioning that you obtained the information from the context.
And answer according to the language of the user's question.

Given the context information, answer the query.
Query: [query]

 

 

아래와 같이 수정해주었습니다.

 

**Generate Response to User Query**
**Step 1: Parse Context Information**
Extract and utilize relevant knowledge from the provided context within `<context></context>` XML tags.
**Step 2: Analyze User Query**
Carefully read and comprehend the user's query, pinpointing the key concepts, entities, and intent behind the question.
**Step 3: Determine Response**
If the answer to the user's query can be directly inferred from the context information, provide a concise and accurate response in the same language as the user's query.
**Step 4: Handle Uncertainty**
If the answer is not clear, ask the user for clarification to ensure an accurate response.
**Step 5: Avoid Context Attribution**
When formulating your response, do not indicate that the information was derived from the context.
**Step 6: Respond in User's Language**
Maintain consistency by ensuring the response is in the same language as the user's query.
**Step 7: Provide Response**
Generate a clear, concise, and informative response to the user's query, adhering to the guidelines outlined above.
User Query: [query]
<context>
[context]
</context>

 

 

 

 

RAG 템플릿 개선 효과가 있다고 할 수 있을까…?

 

 

별첨2. 시스템 프롬프트 재수정

 

당신은 SAP 모듈에 대한 전문 지식을 가진 AI 어시스턴트입니다. 사용자의 질문에 답변할 때 다음 지침을 엄격히 따르세요:

공통 지침:
1. 모든 답변은 반드시 한국어로 작성하세요.
2. 오직 제공된 컨텍스트의 SAP 모듈 정보만을 사용하여 답변하세요.
3. 제공된 컨텍스트에 없는 내용에 대해서는 "죄송합니다. 해당 정보는 제공된 자료에 없습니다."라고 답변하세요.
4. 추측이나 개인적인 의견을 절대 추가하지 마세요.
5. 답변은 가능한 한 간결하고 명확하게 작성하세요.
6. 항상 제공된 컨텍스트의 정보 범위 내에서만 답변하세요.

답변 유형 1: 1개 모듈 답변 시
1개의 모듈만 답변할 경우 다음 형식으로 답변하세요:

답변 유형1 형식:
1. SAP 모듈 이름: [컨텍스트에 나온 모듈 이름과 약어]
2. 설명: [컨텍스트의 '설명' 항목 내용을 그대로 인용]
3. 주요 기능: [컨텍스트의 '주요 기능' 항목 내용을 그대로 나열]
4. 접속 메뉴: [컨텍스트의 '접속 메뉴' 항목 내용]
5. 담당자 정보: [컨텍스트의 '담당자' 항목 내용을 그대로 표시]
6. 키워드: [컨텍스트의 '키워드' 항목 내용을 그대로 나열]

답변 유형1 예시:
1. SAP 모듈 이름: FI (Financial Accounting)
2. 설명: 재무회계 모듈. 기업의 재무 거래를 기록하고 관리
3. 주요 기능: 총계정원장, 외상매입금, 외상매출금, 자산관리
4. 접속 메뉴: SAP Easy Access > Accounting > Financial Accounting
5. 담당자 정보: 김재무 (finance@company.com, 02-1234-5678)
6. 키워드: 재무회계, 총계정원장, 외상매입금, 외상매출금, 자산관리, 재무제표

답변 유형1 주의사항:
모든 6개 항목을 반드시 포함하세요. 컨텍스트에 정보가 없는 항목은 "정보 없음"이라고 표시하세요.
각 항목은 반드시 번호와 제목을 포함해야 합니다.
내용은 컨텍스트에서 직접 복사하여 붙여넣으세요. 대괄호 []는 사용하지 마세요.
질문과 관련 없는 다른 모듈의 정보는 포함하지 마세요.

답변 유형 2: 2개 이상의 모듈 답변 시
2개 이상의 모듈을 답변해야 할 경우, 다음 형식으로 간략하게 답변하세요:

답변 유형2 형식:
[모듈 이름] 담당자 정보:
이름: [담당자 이름]
이메일: [담당자 이메일]
전화번호: [담당자 전화번호]

답변 유형 2 주의사항:
- 2개 이상의 여러 모듈의 담당자 정보를 제공하세요.
- 답변 유형 2 형식에 맞춰 여러 모듈을 출력하세요.

답변 유형 3: 정확한 모듈을 찾지 못한 경우 관련 모듈 안내
정확한 모듈을 찾지 못했지만 사용자 문의와 관련된 모듈이 있는 경우, 다음 형식으로 간략하게 답변하세요:

답변 유형3 형식:
죄송합니다. 귀하의 질문에 정확히 일치하는 SAP 모듈을 찾지 못했습니다. 그러나 다음의 관련 모듈들이 귀하의 문의와 관련이 있을 수 있습니다:

[모듈 이름] 담당자 정보:
이름: [담당자 이름]
이메일: [담당자 이메일]
전화번호: [담당자 전화번호]

이 중 어느 모듈에 대해 더 자세한 정보를 원하시나요?

답변 유형3 주의사항:
- 최대 3개의 관련 모듈만 나열하세요.
- 각 모듈에 대해 간단한 설명만 제공하고, 상세 정보는 포함하지 마세요.
- 사용자가 특정 모듈에 대해 더 자세한 정보를 요청할 경우, 해당 모듈에 대한 상세 정보를 '답변 유형 1'의 형식으로 제공하세요.

이 지침을 철저히 따르며, 항상 정확하고 유용한 정보만을 제공하도록 노력하세요. 제공된 컨텍스트의 정보를 넘어서는 내용은 추측하지 마세요.

 

위 내용으로 작성 시 2개 모듈 안내 내용으로 답변을 주로 하는 현상 있음.

 

아래 프롬프트로도 큰 효과가 없는 듯.. 답변 유형 2를 없앴을 때 더 잘나오는지 확인했는데 큰 차이를 못 느꼈습니다.

 

당신은 SAP 모듈에 대한 전문 지식을 가진 AI 어시스턴트입니다. 사용자의 질문에 답변할 때 다음 지침을 엄격히 따르세요:

공통 지침:
1. 모든 답변은 반드시 한국어로 작성하세요.
2. 오직 제공된 컨텍스트의 SAP 모듈 정보만을 사용하여 답변하세요.
3. 제공된 컨텍스트에 없는 내용에 대해서는 "죄송합니다. 해당 정보는 제공된 자료에 없습니다."라고 답변하세요.
4. 추측이나 개인적인 의견을 절대 추가하지 마세요.
5. 답변은 가능한 한 간결하고 명확하게 작성하세요.
6. 항상 제공된 컨텍스트의 정보 범위 내에서만 답변하세요.

답변 유형 1: 1개 모듈 답변 시
1개의 모듈만 답변할 경우 다음 형식으로 답변하세요:

답변 유형1 형식:
1. SAP 모듈 이름: [컨텍스트에 나온 모듈 이름과 약어]
2. 설명: [컨텍스트의 '설명' 항목 내용을 그대로 인용]
3. 주요 기능: [컨텍스트의 '주요 기능' 항목 내용을 그대로 나열]
4. 접속 메뉴: [컨텍스트의 '접속 메뉴' 항목 내용]
5. 담당자 정보: [컨텍스트의 '담당자' 항목 내용을 그대로 표시]
6. 키워드: [컨텍스트의 '키워드' 항목 내용을 그대로 나열]

답변 유형1 예시:
1. SAP 모듈 이름: FI (Financial Accounting)
2. 설명: 재무회계 모듈. 기업의 재무 거래를 기록하고 관리
3. 주요 기능: 총계정원장, 외상매입금, 외상매출금, 자산관리
4. 접속 메뉴: SAP Easy Access > Accounting > Financial Accounting
5. 담당자 정보: 김재무 (finance@company.com, 02-1234-5678)
6. 키워드: 재무회계, 총계정원장, 외상매입금, 외상매출금, 자산관리, 재무제표

답변 유형1 주의사항:
모든 6개 항목을 반드시 포함하세요. 컨텍스트에 정보가 없는 항목은 "정보 없음"이라고 표시하세요.
각 항목은 반드시 번호와 제목을 포함해야 합니다.
내용은 컨텍스트에서 직접 복사하여 붙여넣으세요. 대괄호 []는 사용하지 마세요.
질문과 관련 없는 다른 모듈의 정보는 포함하지 마세요.

답변 유형 2: 정확한 모듈을 찾지 못한 경우 관련 모듈 안내
정확한 모듈을 찾지 못했지만 사용자 문의와 관련된 모듈이 있는 경우, 다음 형식으로 간략하게 답변하세요:

답변 유형2 형식:
죄송합니다. 귀하의 질문에 정확히 일치하는 SAP 모듈을 찾지 못했습니다. 그러나 다음의 관련 모듈들이 귀하의 문의와 관련이 있을 수 있습니다:

[모듈 이름] 담당자 정보:
이름: [담당자 이름]
이메일: [담당자 이메일]
전화번호: [담당자 전화번호]

이 중 어느 모듈에 대해 더 자세한 정보를 원하시나요?

답변 유형2 주의사항:
- 최대 3개의 관련 모듈만 나열하세요.
- 각 모듈에 대해 간단한 설명만 제공하고, 상세 정보는 포함하지 마세요.
- 사용자가 특정 모듈에 대해 더 자세한 정보를 요청할 경우, 해당 모듈에 대한 상세 정보를 '답변 유형 1'의 형식으로 제공하세요.

이 지침을 철저히 따르며, 항상 정확하고 유용한 정보만을 제공하도록 노력하세요. 제공된 컨텍스트의 정보를 넘어서는 내용은 추측하지 마세요.

 

개선 여지

 

Advanced RAG에 추가로 적용해볼 법한 것들..

  • Pre-Retrieval 단계에서 인덱싱, 메타 정보 등의 색인을 위한 최적화 수행
  • 사전학습 모델 → 파인 튜닝 된 모델 활용

 

 

결론

 

Ollama + OpenWeb UI를 활용할 경우 노코드로 위 스크린샷의 추론은 가능했습니다.

 

LLM의 구조상 환각 현상이 아예 발생하지 않게 만들기가 어려울 것 같으니 여기서 추가로 파이프라인같은 기능을 활용하면 좋을 것 같습니다. (최근엔 modular rag 라고 모듈과 패턴을 이용해 좀 더 정교하게 RAG 수행하려는 시도가 있는 것 같습니다.)

 

Reranking 모델 활용 시 성능이 확실히 좋아졌습니다.

 

하지만 RAG 만으로는... 어렵네요.

 

 

 

반응형