해결된 질문
작성
·
137
0
안녕하세요 강사님. 🙂
3.3 강의를 듣던 중 chatGPT 말고 upstage로 구성하는 방법은 없을까? 하고 스스로 방법을 찾아봤습니다.
https://github.com/openai/tiktoken/blob/main/tiktoken/model.py
현재 tiktoken에서 제공되는 model 중 upstage의 solar 모델이 없는 것 같습니다.
upstage 로 RAG를 구성하는 방법도 배울 수 있을까요..?
답변 2
0
아, 강사님이 참고자료로 주신 upstage 공식 문서를 보니까 코드가 훨씬 간결해지네요..
#%pip install tokenizers==0.20.0
def split_text_upstage_2(fulltext, chunk_size):
tokenizer = Tokenizer.from_pretrained("upstage/solar-pro-tokenizer")
encoded = tokenizer.encode(fulltext)
total_tokens = encoded.ids
total_token_count = len(total_tokens)
text_list = []
for i in range(0, total_token_count, chunk_size):
chunk = total_tokens[i: i+chunk_size]
decoded = tokenizer.decode(chunk)
text_list.append(decoded)
return text_list
감사합니다!!
강사님 좋은 강의 정말로 감사합니다!!
답변도 빠르시고 너무 사랑합니다 🙂 !!!!
다만, openAI를 안쓰고 upstage를 사용하는 스스로의 고집 때문에 계속해서 문제가 발생하네요..
import chromadb
chroma_client = chromadb.Client()
collection_name = 'tax_collection'
tax_collection = chroma_client.create_collection(collection_name)
import os
from chromadb.utils.embedding_functions import OpenAIEmbeddingFunction
open_api_key = os.getenv('UPSTAGE_API_KEY')
openai_embedding = OpenAIEmbeddingFunction(model_name='text-embedding-3-large', api_key=open_api_key)
text_collection = chroma_client.get_or_create_collection(collection_name, embedding_function=openai_embedding)
id_list = []
for index in range(len(chunk_list)):
id_list.append(f'{index}')
len(id_list)
text_collection.add(documents=chunk_list, ids=id_list)
현재 문서 임베딩에서 작성한 코드 입니다. text_collection에서 add를 할 때, 오류가 발생합니다.
아래는 오류 정보입니다.
File ~/.pyenv/versions/3.10.16/lib/python3.10/site-packages/chromadb/api/models/CollectionCommon.py:90, in validation_context.<locals>.decorator.<locals>.wrapper(self, *args, **kwargs)
89 try:
---> 90 return func(self, *args, **kwargs)
91 except Exception as e:
File ~/.pyenv/versions/3.10.16/lib/python3.10/site-packages/chromadb/api/models/CollectionCommon.py:213, in CollectionCommon._validate_and_prepare_add_request(self, ids, embeddings, metadatas, documents, images, uris)
212 validate_record_set_for_embedding(record_set=add_records)
--> 213 add_embeddings = self._embed_record_set(record_set=add_records)
214 else:
File ~/.pyenv/versions/3.10.16/lib/python3.10/site-packages/chromadb/api/models/CollectionCommon.py:526, in CollectionCommon._embed_record_set(self, record_set, embeddable_fields)
525 else:
--> 526 return self._embed(input=record_set[field]) # type: ignore[literal-required]
527 raise ValueError(
528 "Record does not contain any non-None fields that can be embedded."
529 f"Embeddable Fields: {embeddable_fields}"
530 f"Record Fields: {record_set}"
531 )
File ~/.pyenv/versions/3.10.16/lib/python3.10/site-packages/chromadb/api/models/CollectionCommon.py:539, in CollectionCommon._embed(self, input)
535 raise ValueError(
536 "You must provide an embedding function to compute embeddings."
537 "https://docs.trychroma.com/guides/embeddings"
...
91 except Exception as e:
92 msg = f"{str(e)} in {name}."
---> 93 raise type(e)(msg).with_traceback(e.__traceback__)
TypeError: APIStatusError.__init__() missing 2 required keyword-only arguments: 'response' and 'body'
Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings...
upstage에서는 openai에서 응답하는 스펙과 달라서 이런 오류가 발생하는 것 일까요..?
embedding 관련 문서를 찾아봐도 원인을 모르겠습니다 ㅠㅠ. 죄송하지만, 또 참고 자료를 얻을 수 있을까요..?
그리고 이런 참고 자료를 서칭하는 방법도 배울 수 있으면 좋겠습니다!!
코드만 봐서는 api key가 문제인 것 같습니다 UPSTAGE_API_KEY를 환경변수에서 불러와서 OpenAI의 임베딩에 넣어줘서 에러가 발생하는 것 같아요
디버깅은 에러메세지를 잘 읽어보시면 어느정도 힌트를 찾을 수 있습니다. APIStatusError니까 모델을 활용하는 부분에서 에러가 난 것 같고, chroma가 vector store이니 아마 임베딩 모델을 사용하는 쪽에서 에러가 나는 것 아닌가? 라는 생각의 흐름으로 따라가보세요~
0
안녕하세요, 인프런 AI 인턴입니다. 김지환님.
Upstage를 사용하여 RAG(Retrieval-Augmented Generation) 구성하는 방법에 대한 궁금증이 있으시군요. 일반적으로 OpenAI API를 대신하여 Upstage API를 통해 RAG를 구성하는 것은 사실 가능합니다. 그러나 이를 위해서는 몇 가지 중요한 고려사항과 설정 단계가 필요합니다.
Upstage와 호환되는 모델 사용: Upstage는 자체적으로 모델을 제공하며, 이를 활용하여 LLM 작업을 수행할 수 있습니다. RAG를 구성하기 위해서는 Upstage에서 제공하는 API 키 및 도메인 지식에 대한 적절한 처리를 수행해야 합니다.
SDK나 API 활용: Upstage가 제공하는 Python SDK 또는 REST API를 활용하여 필요한 기능을 구현할 수 있습니다. 이를 통해 데이터의 임베딩 처리와 검색, 추론 등의 기능을 직접 구현할 수 있습니다.
데이터 전처리 및 저장소 설정: RAG를 구성하기 위해서는 데이터의 전처리와 적재, 검색이 가능해야 하므로, 적절한 벡터 데이터베이스와의 통합이 필요합니다. Chroma나 Faiss 등을 사용할 수 있습니다.
Upstage를 활용하여 RAG를 구성하려면, 다음과 같은 순서로 진행할 수 있습니다:
지금까지의 설명이 도움이 되었기를 바랍니다. 추가적인 세부적인 코드나 설정이 필요하시다면, Upstage의 공식 문서 혹은 관련 자료에서 API 활용에 대한 기술 문서를 참고하시면 좋겠습니다.
질문이 도움이 되셨기를 바라며, 추가적인 궁금증이 있으시면 언제든지 질문 남겨주세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
와.. 답변 속도가...
import tiktoken def split_text_gpt(fulltext, chunk_size): encoder = tiktoken.encoding_for_model("gpt-4o") total_encoding = encoder.encode(fulltext) total_token_count = len(total_encoding) text_list = [] for i in range(0, total_token_count, chunk_size): chunk = total_encoding[i: i+chunk_size] decoded = encoder.decode(chunk) text_list.append(decoded) return text_list def split_text_upstage(fulltext, chunk_size, overlap=100): paragraphs = fulltext.split('\n') chunks = [] current_chunk = [] current_size = 0 for paragraph in paragraphs: if not paragraph.strip(): # 빈 문단 건너뛰기 continue # 현재 청크에 문단 추가 current_chunk.append(paragraph) current_size += len(paragraph.split()) # 청크 크기가 chunk_size를 넘으면 저장하고 새로운 청크 시작 if current_size >= chunk_size: # 현재 청크 저장 chunks.append('\n'.join(current_chunk)) # overlap 고려하여 새로운 청크 시작 if overlap > 0: # 마지막 몇 개의 문단을 overlap으로 사용 overlap_paragraphs = current_chunk[-(100//50):] # 대략적인 계산 current_chunk = overlap_paragraphs current_size = sum(len(p.split()) for p in overlap_paragraphs) else: current_chunk = [] current_size = 0 # 마지막 청크 처리 if current_chunk: chunks.append('\n'.join(current_chunk)) return chunks
claude를 활용해서 임시로 이렇게 작성했는데, 문제 없을까요?