paint-brush
OpenWebUI에서 RAG와 회사 문서를 사용하여 고객 지원 챗봇을 구축해 보겠습니다.~에 의해@hostkey
1,648 판독값
1,648 판독값

OpenWebUI에서 RAG와 회사 문서를 사용하여 고객 지원 챗봇을 구축해 보겠습니다.

~에 의해 Hostkey.com8m2024/07/09
Read on Terminal Reader

너무 오래; 읽다

OpenWebUI는 광범위한 코딩 경험이 없어도 흥미롭고 유용한 챗봇을 구축할 수 있는 독특한 기회를 제공합니다. 이 기사에서는 사용자 질문에 답변하여 일선 팀을 지원하도록 설계된 기술 지원 챗봇을 만드는 과정을 공유하겠습니다. 다음은 해당 작업에 대한 단계별 요약입니다.
featured image - OpenWebUI에서 RAG와 회사 문서를 사용하여 고객 지원 챗봇을 구축해 보겠습니다.
Hostkey.com HackerNoon profile picture
0-item

OpenWebUI는 OpenAI, Ollama, Automatic1111, ComfyUI, Whisper API, 사용자 정의 모델 교육, ChromaDB가 포함된 Langchain 기반 RAG, 하이브리드 BM25/웹 검색 등 AI 도구 모음을 갖춘 포괄적인 미디어 플랫폼입니다.


이 모든 것이 한동안 사용 가능하고 문서화되었으며 Python 프로그래밍 지식으로 구현 가능했지만 OpenWebUI는 광범위한 코딩 경험 없이도 매력적이고 유용한 챗봇을 구축할 수 있는 독특한 기회를 제공합니다.


이 기사에서는 일선 팀을 지원하여 사용자 질문에 답변하고 궁극적으로 팀 자체의 일원이 되도록 설계된 기술 지원 챗봇을 만드는 여정을 공유하겠습니다.


즉시 배포 가능한 GPU 서버 또는 전문가급 NVIDIA Tesla A100/H100 80Gb 또는 A5000/A4000 카드를 갖춘 맞춤형 구성의 서버를 임대하세요. 게임용 RTX4090 카드가 장착된 GPU 서버도 사용할 수 있습니다.


출발점

MkDocs용 Material을 사용하여 작성된 사용자 문서가 있습니다. 그러면 Markdown 형식의 .md 파일이 포함된 디렉터리 구조가 생성됩니다. 또한 llama3-8b-instruct 모델이 로드된 OpenWebUI 및 Ollama 설정이 배포되어 있습니다.


프로젝트 목표:


  1. 맞춤형 챗봇 개발: 이 챗봇은 사용자와 상호 작용하고 문서를 기반으로 정보를 제공합니다.
  2. 문서를 LLM에 적합한 형식으로 변환: 마크다운 문서를 RAG(Retrieval Augmented Generation)를 위해 LLM에서 효율적으로 처리할 수 있는 형식으로 변환해야 합니다.
  3. 데이터 업데이트 및 추가 활성화: 시스템은 문서가 포함된 벡터 데이터베이스에 대한 지속적인 업데이트 및 추가를 허용해야 합니다.
  4. 질문 답변에 집중: 챗봇은 주로 질문 답변 시스템으로 작동해야 하며 IT와 관련되지 않은 대화에는 참여하지 않아야 합니다.
  5. 소스 링크 제공: 가능할 때마다 챗봇은 제공된 정보에 대한 원본 문서 소스로 다시 연결되어야 합니다.
  6. 질문 필터링 구현: 챗봇에 대한 질문 제한을 구성하는 기능이 필요합니다. 예를 들어, 지리적 위치를 기반으로 한 질문에 대답하지 못하도록 할 수 있습니다.

순진한 구현

우리의 초기 시도는 기존 문서를 원래 Markdown 형식으로 로드하고 수정 없이 llama3 모델을 사용하는 것이었습니다. 결과는 가볍게 말하면 실망스러웠습니다.


첫째: 마크다운 파일에는 이미지 태그, 각주, 코드 블록, 볼드체 및 이탤릭체 서식, 내부 및 외부 링크, 아이콘, 심지어 버튼의 " ** " 구성과 같은 다양한 요소가 포함되어 있습니다. 이 모든 추가 "노이즈"는 처리를 위해 문서를 덩어리로 나눌 때 문제를 일으킵니다.


둘째: OpenWebUI가 384차원 벡터 공간에서 문장과 단락을 표현하기 위해 기본적으로 사용하는 문장 변환기/all-MiniLM-L6-v2 모델(클러스터링 및 의미 검색과 같은 RAG 작업에 필수적)은 주로 영어로 훈련됩니다. . 우리는 우리 봇이 결국 다른 언어도 지원하기를 바랍니다.


셋째: llama3는 교육 모델이지만 사용자 질문에 답변하는 데 초점을 맞추기보다는 주제에서 벗어난 토론으로 전환될 수 있습니다. 70b 모델이 더 적합할 수 있지만 40GB의 비디오 메모리를 갖춘 GPU가 필요한 반면, llama3-8b는 8GB의 GPU에서 실행될 수 있습니다.

세 번째 문제는 사용자 지정 모델(OpenAI 용어의 에이전트)을 생성하여 잠재적으로 해결될 수 있지만 처음 두 가지 문제에는 더 중요한 해결 방법이 필요합니다. 지금까지 우리가 생각해낸 내용은 다음과 같습니다.

단계별: OpenWebUI에서 기술 지원 챗봇 설정

먼저 문서를 RAG(Retrieval Augmented Generation) 시스템에 로드하기에 적합한 형식으로 변환하겠습니다. 우리는 이 프로세스를 자동화하기 위해 ai_text_generator라는 강력한 bash 스크립트를 만들었습니다.


스크립트는 모든 문서 디렉토리를 순회하며 sed, awk 및 perl 내의 정규식을 사용하여 RAG에 필요하지 않은 Markdown 마크업을 제거하고 교체합니다. 마지막으로 각 문서 끝에 https://hostkey.com/documentation 에 호스팅된 원본 문서에 대한 링크를 추가합니다.



이 스크립트는 OpenWebUI의 RAG 시스템과 함께 사용할 문서를 꼼꼼하게 준비합니다. 다음은 해당 작업에 대한 단계별 요약입니다.


  • URL 생성: 각 문서 파일에 대한 전체 URL을 생성합니다.
  • 이미지 마크업 제거: 이미지와 관련된 모든 마크다운 마크업을 제거합니다.
  • 주석 삭제: 텍스트에서 모든 주석을 제거합니다. 버튼 형식 지정: Markdown의 ** 및 ** 구문을 [ ]로 변환하여 효과적으로 버튼 형식으로 지정합니다.
  • 제목 제거: 개요나 목차를 만드는 데 사용될 가능성이 있는 ">"로 시작하는 줄을 삭제합니다.
  • 아이콘 제거: 아이콘을 나타내는 Markdown 마크업이나 코드를 제거합니다.
  • 굵은 텍스트 서식: Markdown의 굵은 텍스트 서식을 제거합니다.
  • 링크 수정: 외부 링크를 유지하면서 내부 링크를 삭제합니다.
  • 이메일 링크 형식 지정: 링크를 이메일 주소로 다시 형식화합니다.
  • 공백 정규화: 첫 번째 문자까지 각 줄의 시작 부분에서 추가 공백을 제거합니다.
  • 줄 끝 변환: CRLF(Windows 줄 끝)를 UNIX 형식(LF)으로 변환합니다.
  • 빈 줄 감소: 1개를 초과하는 연속된 빈 줄을 제거합니다.
  • URL 추가: 생성된 URL을 처리된 각 파일의 끝에 추가합니다.


스크립트를 실행한 후 ai_data 디렉터리에는 OpenWebUI의 RAG 시스템에 로드할 준비가 된 파일 세트가 포함됩니다.



다음으로 문서 벡터 데이터베이스 및 Ollama LLM을 사용하기 위해 OpenWebUI에 새 모델을 추가해야 합니다. 이 모델은 영어뿐만 아니라 좀 더 캐주얼한 'you'(ты) 톤을 지원해야 합니다. 앞으로 터키어와 같은 다른 언어에 대한 지원을 추가할 계획입니다.


  1. 시작하려면 관리자 패널 - 설정 - 문서 로 이동합니다. Embedding Model 필드에서 문장 변환기/all-MiniLM-L12-v2를 선택합니다. 우리는 이 목록(https://www.sbert.net/docs/sentence_transformer/pretrained_models.html)의 모든 권장 모델을 테스트한 결과 이 모델이 가장 적합한 것으로 나타났습니다.

  2. Embedding Model 필드 옆에 있는 다운로드 아이콘을 클릭하여 다운로드하고 설치하겠습니다.

  3. 바로 RAG 매개변수를 설정하겠습니다.

    • 상위 K = 10: 이는 시스템이 응답을 생성할 때 가장 관련성이 높은 문서 10개를 고려함을 의미합니다.

    • 청크 크기 = 1024: 처리를 위해 문서가 1024개의 토큰 청크로 분할됩니다.

    • 청크 오버랩 = 100: 연속된 청크 사이에 100개의 토큰이 중복됩니다.



그런 다음 작업공간 - 문서 섹션으로 이동하여 문서를 업로드할 수 있습니다. 나중에 모델이나 API 요청에 더 쉽게 연결할 수 있도록 특정 컬렉션 태그(이 경우에는 hostkey_en)를 제공하는 것이 좋습니다.



다음으로 챗봇을 위한 사용자 정의 모델을 생성하겠습니다. 이를 위해 작업공간 - 모델 로 돌아가 더하기 아이콘을 클릭합니다.


챗봇에 이름을 지정하고 기본 모델(이 경우 llama3-latest)을 선택하겠습니다.


그런 다음 시스템 프롬프트를 정의하겠습니다. 이것이 챗봇에게 자신을 보고 행동하는 방법을 알려주는 것입니다. 여기에는 역할, 제한 사항 및 원하는 결과가 요약되어 있습니다.


기술 지원 챗봇을 위해 디자인한 시스템 프롬프트는 다음과 같습니다.


You are HOSTKEY an IT Support Assistant Bot, focused on providing users with IT support based on the content from knowledge base. Stay in character and maintain your focus on IT support, avoiding unrelated activities such as creative writing or engaging in non-IT discussions.


If you cannot find relevant information in the knowledge base or if the user asks non-related questions that are not part of the knowledge base, do not attempt to answer and inform the user that you are unable to assist and print text "Visit https://hostkey.com/documentation for more information" at the end.


Provide short step-by-step instructions and external links


Provide a link to relevant doc page about user question started with 'See more information here:'Add text "Visit https://hostkey.com/documentation for more information" at the end.


Example of answer: " User: How can I cancel my server?


Bot:


You can cancel your server at any time. To do this, you need to access the Invapi control panel and follow these steps:

- Go to the "Billing" tab in the specific server management menu.

- Click the [Cancel service] button.

- Describe the reason for the cancellation and select its type.

- Click the [Confirm termination] button.


Please note that for immediate cancellation, we will not refund the hours of actual server usage, including the time to provision the server itself, order software, and process the cancellation request (up to 12 hours). The unused balance will be returned to your credit balance. Withdrawal of funds from the credit balance will be made in accordance with our refund policy.


You can cancel the service cancellation request in the Billing tab using the [Revoke] button.

Additionally, if you need to cancel a service that includes an OS/software license or has a customized/non-standard configuration, please contact us via a ticketing system for manual refund processing.


See more information here: https://hostkey.com/documentation/billing/services_cancellation/ "


다음으로 필요한 문서 컬렉션을 연결해 보겠습니다. 지식 섹션에서 문서 선택 버튼을 클릭하고 태그를 기반으로 필요한 컬렉션을 선택합니다.


즉시 배포 가능한 GPU 서버 또는 전문가급 NVIDIA Tesla A100/H100 80Gb 또는 A5000/A4000 카드를 갖춘 맞춤형 구성의 서버를 임대하세요. 게임용 RTX4090 카드가 장착된 GPU 서버도 사용할 수 있습니다.



또한 Advanced Params 탭 아래에 숨겨진 몇 가지 추가 매개변수를 구성해야 합니다. 표시를 클릭하면 이러한 설정이 표시됩니다. 온도를 0.3으로 설정하고 컨텍스트 길이를 4089로 설정하겠습니다.



마지막으로 저장 및 업데이트를 클릭하여 맞춤형 기술 지원 챗봇 모델을 만듭니다.


그리고 거기에 있습니다! 우리의 챗봇은 작동하고 사용자 요청을 처리할 준비가 되어 있습니다. 정중하고 인내심이 강하며 연중무휴 24시간 이용 가능합니다.

OpenWebUI에서 RAG 작업을 위한 팁

다음은 명심해야 할 몇 가지 중요한 팁입니다.

  1. RAG에서 많은 수의 문서로 작업하는 경우 GPU 지원(branch open-webui:cuda)이 포함된 OpenWebUI를 설치하는 것이 좋습니다.
  2. 임베딩 모델(전환, 로드 등)을 수정하려면 문서를 벡터 데이터베이스로 다시 색인화해야 합니다. RAG 매개변수를 변경하는 데에는 이것이 필요하지 않습니다.
  3. 문서를 추가하거나 제거할 때 항상 사용자 정의 모델로 이동하여 해당 문서 컬렉션을 삭제하고 다시 추가하십시오. 그렇지 않으면 검색이 올바르게 작동하지 않거나 효율성이 크게 떨어질 수 있습니다. 봇이 잘못된 답변을 제공하지만 필요한 정보가 포함된 문서가 하단 목록에 나타나면 이것이 문제일 가능성이 높습니다.
  4. OpenWebUI는 RAG 생성을 위한 다양한 형식(pdf, csv, rst, xml, md, epub, doc, docx, xls, xlsx, ppt, ppt, txt)을 인식하지만 최적의 성능을 위해 문서를 일반 텍스트로 업로드하는 것이 가장 좋습니다.
  5. 하이브리드 검색은 결과를 향상시킬 수 있지만 리소스 집약적이며 강력한 GPU에서도 응답 시간을 크게 늘릴 수 있습니다(20-30-40초 이상). 이는 솔루션을 개발하는 개발자에게 알려진 문제입니다.



이제 챗봇을 테스트했으므로 다음 단계는 이를 회사의 기존 채팅 시스템에 통합하는 것입니다. OpenWebUI는 API를 제공하며 Ollama의 프록시로 작동하여 고유한 기능을 추가할 수 있습니다. 그러나 문서가 여전히 부족하여 통합이 다소 어렵습니다.


코드와 커밋 기록을 검토하여 API 요청을 구성하는 방법에 대한 통찰력을 얻었지만 아직 예상대로 작동하지 않습니다. 사용자 정의 모델을 호출했지만 RAG 기능은 없습니다.

우리는 RAG, 웹 검색, 자세한 예제 및 설명을 포함하여 향후 릴리스에서 개발자가 약속한 기능을 간절히 기다리고 있습니다.


테스트 과정에서 문서의 일부 불일치와 중복성도 드러났습니다. 이는 챗봇의 성능을 향상시키고 문서의 전반적인 명확성과 정확성을 향상시킬 수 있는 기회를 제공합니다.


즉시 배포 가능한 GPU 서버 또는 전문가급 NVIDIA Tesla A100/H100 80Gb 또는 A5000/A4000 카드를 갖춘 맞춤형 구성의 서버를 임대하세요. 게임용 RTX4090 카드가 장착된 GPU 서버도 사용할 수 있습니다.