채팅 기록을 기반으로 페르소나를 설계하기

간단한 질문입니다. 우리의 사용 사례에 대해 어떤 구조가 더 “나을”까요?

우리는 Slack 채널에서 내보낸 채팅 기록 로그를 여러 개 보유하고 있으며, 여기에는 상당한 노하우, 언급된 문제와 해결책 등이 포함되어 있습니다. 당연히 이러한 채팅에는 AI 봇이 이를 사용할 때 주제/게시물에 그대로 덤프하는 것이 비경제적이 될 수 있는 쓸모없는 “불필요한 정보”가 많이 포함되어 있습니다.

파일은 약 10개이며, 각 파일의 크기는 대략 1~2MB입니다. AI 페르소나 사용 측면에서, 약 30명의 사용자가 하루에 약 10개의 채팅을 수행할 것입니다(여기서 토큰 볼륨을 추정하기는 어렵습니다).

이 시점에서 저는 이러한 채팅 로그를 활용하면서도 어느 정도 경제성을 유지하는 데 합리적인 80/20 접근법이 무엇인지 궁금합니다. 두 가지 옵션으로 좁혀졌습니다:

  1. 로그를 Discourse 주제/게시판에 복사하여 붙여넣기: 빠르고 간단하지만, 커스텀 개발은 필요하지 않으며, API 비용이 많이 발생할 수 있습니다.
  2. 채팅 로그를 사전 처리하여 적절한 형식 또는 구조로 변환한 후 페르소나에 업로드하기.
  3. 또는 일종의 하이브리드 방식: 각 AI 봇 요청 시 출력을 평가하고 txt 파일로 저장한 후 페르소나에 업로드하기.

여러분은 어떤 옵션을 권장하시나요? 아니면 완전히 다른 방법이 있을까요?

다음과 같은 접근 방식을 권장합니다:

  1. Sonnet 4 thinking과 같이 큰 컨텍스트/출력을 지원하는 LLM을 사용하여 “Creative” 페르소나로 10개 파일을 처리하세요. 이 처리의 목표는 정보를 “정리”하여 RAG를 준비하는 것입니다.
  2. 내장 업로드 기능을 사용하여 처리된 10개 파일을 페르소나에 업로드하여 RAG가 콘텐츠를 검색할 수 있도록 하세요.

여기에는 방대한 양의 데이터가 있으므로 시스템 프롬프트에 모든 것을 넣는 것은 권장하지 않습니다. 가이드라인으로 시스템 프롬프트는 너무 길면 안 되며, 비용이 많이 듭니다. 10k 토큰은 처리 가능하지만, 현재 최첨단 LLM에서는 100k 토큰은 처리하기 어렵습니다. 모든 상호작용에 과도한 비용이 발생하고 LLM이 더 혼란스러워질 수 있습니다.

진행 상황을 알려주세요!

채팅 로그를 축소/정리하는 데 사용하신 프롬프트를 공유해 주세요.

감사합니다, 도움이 되네요!

정리하자면, 업로드된 모든 파일이 시스템 프롬프트에 주입됩니까? 아니면 먼저 구성된 ai_embeddings_model을 통해 처리된 후에 주입되는 건가요?

특히 아래 부분에 대해 10k 토큰 제한 권장 사항이 조금 혼란스럽습니다:

Discourse AI Persona, upload support 에 있는 파일들은 업로드 크기 제한만 있으면 되며, 매우 큰 용량도 가능합니다. 이 파일들은 임베딩(Embedding)을 통해 처리되며, 설정에 따라 프롬프트에 청크(chunks)가 주입됩니다.

제가 언급했던 것은 이 시스템 프롬프트에 모든 정보를 하나의 프롬프트로 강제 삽입하려는 것이었습니다:

여기서는 제한이 있습니다…

아, 이제 이해가 됐네요. 감사합니다!

그러니까 다음 단계로, 다양한 임베딩 모델을 가지고 몇 가지 테스트를 해보고, 시스템 프롬프트에 주입되는 토큰 크기가 어느 정도인지 확인해야 한다는 말씀이죠?

그리고 청크로 된 txt 파일을 만들 때, 합리적인 10k 내외의 제한을 지키도록 해야 하는 거 맞나요?

임베딩 모델은 양이 아닌 품질을 제어합니다.

데이터를 모두 하나의 파일로 묶어 넣어도 됩니다. 백그라운드에서 이를 청크(chunk)로 나누고, 가장 관련성 높은 청크를 검색하여 프롬프트에 추가해 드립니다.

여기서 실험을 하는 것은 결과 개선과 관련이 있으며, 일부 데이터 정리는 다른 정리 방식보다 더 효과적일 수 있습니다. 어떤 임베딩 모델이 더 관련성 높은 조각을 찾는 데 더 능숙한지도 달라집니다.

sam님, 정말 감사합니다 :heart:

혹시 더 도움이 될 만한 자료가 있다면 여기에 공유해 주세요. 진전이 있으면 메타에서 제 경험을 공유해 보겠습니다. :slight_smile:

@sam 메타데이터 구분자에 버전이나 모델 번호를 추가하는 방법에 대해 어떻게 제안하시나요?

원래 예시:

[[metadata about cats]]
a long story about cats
[[metadata about dogs]]
a long story about dogs

이제 버전 번호나 특정 모델 번호를 추가하고 싶다면, 사람이 직접 입력할 때 사용하는 것과 동일한 형식이나 구조를 사용하면 될까요?

예:

[[metadata about cats v1.0]]
a long story about cats
[[metadata about dogs]]
a long story about dogs
[[metadata about cats xxl v2.1]]
a long story about cats
[[metadata about dogs v 1.1beta]]
a long story about dogs

또한, 메타데이터에 버전 번호가 없는 경우(예: metadata about dogs) 해당 청크는 어떤 '개 버전’이든 상관없이 모든 개 관련 요청의 응답에 사용되나요?

네, 그렇게 하시면 됩니다!