#openai

질문 6
해시태그 없이 키워드만 일치하는 질문은 개수에 포함되지 않아요.

6달 전 · 문종호 님의 새로운 답변

RAG 를 짜는 중에 도무지 어떤 부분이 문제인지 모르겠습니다.

# JSON 파일에서 FAQ 데이터를 로드하는 함수 def load_faq_data_from_json(file_path): with open(file_path, 'r', encoding='utf-8') as f: faq_data = json.load(f) return faq_data # FAQ 데이터 로드 json_file_path = '' faq_data = load_faq_data_from_json(json_file_path) # ChromaDB 클라이언트 및 Embedding 설정 chroma_client = chromadb.Client() # ChromaDB 클라이언트 생성 # 고유한 컬렉션 이름 생성 collection_name = "faq_data_" + datetime.datetime.now().strftime("%Y%m%d_%H%M%S") collection = chroma_client.create_collection(collection_name) # LangChain의 Text Splitter 설정 text_splitter = RecursiveCharacterTextSplitter( chunk_size=512, chunk_overlap=50 ) # OpenAI 임베딩 설정 openai_api_key = '' embedding_function = OpenAIEmbeddings( model="text-embedding-ada-002", openai_api_key=openai_api_key ) # 텍스트 스플리팅 및 임베딩 생성 함수 def split_and_embed_text(text): splitted_texts = text_splitter.split_text(text) print(f"Splitted texts: {splitted_texts}") try: # OpenAIEmbeddings는 embed_documents를 사용합니다. embeddings = embedding_function.embed_documents(splitted_texts) except Exception as e: print(f"임베딩 생성 중 오류 발생: {e}") return None # 임베딩이 제대로 생성되었는지 확인합니다. if embeddings is None or len(embeddings) == 0: print("임베딩 생성 실패") return None # 임베딩을 numpy 배열로 변환 embeddings = np.array(embeddings) print(f"Embeddings shape: {embeddings.shape}") # 임베딩 벡터의 차원을 확인하고 처리합니다. if embeddings.ndim == 1 and embeddings.shape[0] == 1536: # 임베딩이 1차원 배열이고 길이가 1536인 경우 final_embedding = embeddings elif embeddings.ndim == 2 and embeddings.shape[1] == 1536: # 임베딩이 2차원 배열이고 두 번째 차원이 1536인 경우 final_embedding = np.mean(embeddings, axis=0) else: print("임베딩 벡터의 차원이 예상과 다릅니다.") return None print(f"Final embedding shape: {final_embedding.shape}") return final_embedding # FAQ 데이터를 Vector DB에 저장 def store_faq_data_in_vector_db(faq_data, collection): for faq in faq_data: # 'question'과 'answer'가 있는지 확인하고, 'answer'가 None이 아닌지 확인 if 'question' not in faq or 'answer' not in faq or faq['answer'] is None: print(f"누락된 'question' 또는 'answer'로 인해 항목을 건너뜁니다: {faq}") continue # 다음 항목으로 넘어감 # 텍스트 스플리팅 및 임베딩 생성 question_embedding = split_and_embed_text(faq['question']) if question_embedding is None: print(f"Embedding generation failed for question: {faq['question']}") continue # 임베딩이 없으면 다음 질문으로 넘어감 print(f"Generated embedding for question '{faq['question']}': {question_embedding}") # 각 질문에 고유한 ID 생성 faq_id = str(uuid.uuid4()) # 메타데이터에서 None 값을 제거 metadata = {k: v for k, v in {"answer": faq['answer']}.items() if v is not None} # Vector DB에 저장 collection.add( documents=[faq['question']], metadatas=[metadata], ids=[faq_id], embeddings=[question_embedding] ) # 추가 후 임베딩 확인 (저장된 후 곧바로 확인) stored_results = collection.get(ids=[faq_id], include=["embeddings"]) if stored_results['embeddings'] is not None and len(stored_results['embeddings']) > 0: print(f"Embedding for question '{faq['question']}' successfully stored.") else: print(f"Failed to store embedding for question '{faq['question']}'") # FAQ 데이터를 JSON에서 로드하고 저장 store_faq_data_in_vector_db(faq_data, collection) 이렇게 데이터를 저장하고 # 환경 변수에서 API 키 로드 openai_api_key = os.getenv("OPENAI_API_KEY") if not openai_api_key: raise ValueError("OpenAI API 키가 설정되지 않았습니다. 환경 변수 OPENAI_API_KEY를 설정하세요.") # OpenAI 임베딩 설정 embedding_function = OpenAIEmbeddings( model="text-embedding-ada-002", openai_api_key=openai_api_key ) # LangChain의 Text Splitter 설정 (일관성 유지) text_splitter = RecursiveCharacterTextSplitter( chunk_size=512, chunk_overlap=50 ) # ChromaDB 클라이언트 및 컬렉션 설정 chroma_client = chromadb.Client() collection_name = "faq_data_collection" try: # 이미 존재하는 컬렉션인지 확인하고, 있으면 가져옴 collection = chroma_client.get_collection(name=collection_name) except chromadb.errors.CollectionNotFoundError: # 컬렉션이 존재하지 않을 경우에만 생성 collection = chroma_client.create_collection(name=collection_name) # Vector DB에서 유사 질문 검색 (ChromaDB) def find_similar_question_in_vector_db(new_question_embedding, collection, k=5): results = collection.query(query_embeddings=[new_question_embedding], n_results=k, include=['documents', 'metadatas', 'embeddings']) best_similarity = 0 best_question = None best_answer = None # 검색 결과에서 각 질문의 유사도와 답변을 처리합니다. if 'documents' in results and 'metadatas' in results: documents = results['documents'][0] metadatas = results['metadatas'][0] embeddings = results['embeddings'][0] for i in range(len(documents)): stored_embedding = embeddings[i] metadata = metadatas[i] if stored_embedding is not None: # 코사인 유사도를 통해 유사도를 계산합니다. similarity = cosine_similarity([new_question_embedding], [stored_embedding])[0][0] print(f"유사도: {similarity} for {documents[i]}") # 유사도가 가장 높은 결과를 선택하며, 임계값 이상일 경우에만 선택 if similarity > best_similarity and similarity >= SIMILARITY_THRESHOLD: best_similarity = similarity best_question = documents[i] if isinstance(metadata, list): metadata = metadata[0] best_answer = metadata.get('answer') if isinstance(metadata, dict) else None return best_question, best_answer # Fine-tuned GPT를 사용해 새로운 답변 생성 def gpt_generate_response_from_finetuned_gpt(question, style="의사 A 말투"): prompt = f"다음은 환자의 질문입니다: \"{question}\". 아래 말투를 사용하여 질문에 대해 성실하고 정확한 답변을 작성해주세요.\n\ 말투: {style}" response = client.chat.completions.create( model="", # Fine-tuned된 GPT 모델 ID messages=[ {"role": "system", "content": "You are a helpful medical assistant."}, {"role": "user", "content": prompt}, ], max_tokens=300, temperature=0.7, # 답변의 다양성을 조절합니다. ) return response.choices[0].message.content.strip() # 새로운 질문 처리 및 최종 응답 생성 def generate_final_response(new_question, collection): # 텍스트 스플리팅 및 임베딩 생성 splitted_texts = text_splitter.split_text(new_question) new_question_embedding = np.mean(embedding_function.embed_documents(splitted_texts), axis=0) # ChromaDB에서 유사 질문 검색 similar_question, answer = find_similar_question_in_vector_db(new_question_embedding, collection) if similar_question and answer: final_response = f"질문: {new_question}\n유사 질문: {similar_question}\n기본 답변: {answer}" else: generated_answer = gpt_generate_response_from_finetuned_gpt(new_question) final_response = f"질문: {new_question}\nGPT로 생성된 답변: {generated_answer}\n(이 답변은 벡터데이터에서 유사한 답변을 찾을 수 없어 GPT에 의해 생성되었습니다.)" return final_response # 사용자로부터 새로운 질문 입력 받기 new_question = input("새로운 질문을 입력하세요: ") # 최종 응답 생성 response = generate_final_response(new_question, collection) print(response) 로 데이터베이스에서 유사한 질문-답변 쌍을 끌어오려는데 정확히 같은 질문을 넣어도 (이러면 유사도가 1인데) 저장되어있는 답변이 끌어와지질 않네요...

개발자

#llm#rag

답변 1

댓글 0

조회 95

9달 전 · aigoia 님의 답변 업데이트

개인의 성격과 협업 경험의 기회

안녕하세요 저는 백엔드 개발자를 지망하고 있는 대학교 2학년 학생입니다. 올해 군전역 후 2학기 복학 예정입니다. 현재는 스프링과 JPA를 공부하고 있고, 개인프로젝트를 마친 상황입니다. 제목을 보시면 아시겠지만, 저는 매우 내향적인 성격을 가지고 있습니다. 따라서 사람들과 대화하는 것과 다가가는 것이 어렵습니다. 항상 성장하고 싶어하고, 발전하고 싶어하는 의지가 있어서 공부는 꾸준히 해왔습니다. 하지만 항상 독서실에서 혼자 독학을 하면서 해왔기에 개발자로서 중요한 부분인 커뮤니케이션 능력을 키울 수가 없었습니다. 따라서 다양한 외부 동아리와 홀라 등의 커뮤니티를 통해 스터디와 동아리를 신청했지만, 모두 떨어졌습니다. 처음에는 실력이 문제라고 생각하여 더욱 공부에 매진했던것 같습니다. 따라서 이번 개인프로젝트를 마치게 되었습니다. 개인프로젝트를 통해 간단한 쇼핑몰 사이트를 만들었습니다. 기본적인 기능과 OpenAI API를 이용한 간단한 추천 서비스 정도의 기능을 개발했습니다. 알고리즘은 solved ac 기준 골드 2입니다. 이제는 개인적으로 협업을 할 수 있는 실력이 되었다고 생각합니다. 하지만 지금까지의 탈락의 경험으로 확신이 서지 않습니다. 지금까지 해왔던 것 처럼 계속 지원하는게 맞을까요? 아니면 대학교 2학년으로 어리니까, 아직은 협업의 단계는 아니기에 CS나 자바 기초처럼 기본적인 실력을 향상시키는데 집중하는 게 맞을까요? 내향적인 성격과 1학년 당시 코로나 상황으로 인해 대학교에서는 한번도 활동을 해본적이 없습니다. 당연하게도 아는 사람이나 친구도 없는 상황입니다. 이번 학기에 복학을 해서 친구와 같이 협업을 해보는 노력을 해야 할까요? 내향적인 성격에 벌써부터 긴장이 되는 거 같습니다.

개발자

#성격

#협업

#내향적

답변 2

댓글 2

조회 78

일 년 전 · 익명 님의 질문 업데이트

ML과 AI에 대한 질문

지금까지 기획 및 UX에 대한 공부만 하다 최근 개발도 같이 공부하면서 질문사항이 생겼습니다. 1. 3-4년 전까지만 해도 머신러닝, 딥러닝에 대한 관심이 높아서 텐서플로우를 활용한 모델 생성등에 대한 프로젝트가 많았었는데 최근에는 ML을 통한 모델 생성보다는 구글, 메타, OpenAI등에서 만든 LLM이나 모델등을 이용해서 서비스나 회사에 맞게 튜닝하여 사용하는 추세인 것 같은데 혹시 맞을까요? 2. 온디바이스에서 텐서플로우의 모델을 사용한 개발 프로젝트 등이 현재 상황에서 포폴로서의 가치가 있을까요?

개발자

#머신러닝

#모델

답변 0

댓글 0

조회 55

일 년 전 · 익명 님의 질문

Dataset 수집하는 것에 대한 고민[GPT model에 넣을 dataset 수집]

OpenAI API를 이용하여 기사의 키워드를 예측하는 생성형 AI를 만들고자 합니다. GPT 모델에 넣을 데이터셋도 GPT로 이용해서 만들면 과적합과 같은 문제가 클까요? 제가 만들 데이터셋은 기사 내용 content(700개이상)와 이에 대한 keyword를 csv파일로 만들고자 하였습니다. 데이터셋을 만드는 과정이 처음이라 어떻게 해야할지 감이 잘 안잡히는데 도와주세요..!! 1. 사람이 keyword와 content를 작성하여 한땀한땀 데이터셋을 작성해야 한다 2. GPT가 알아서 content의 keyword를 예측하도록 하여 데이터셋을 만든다. (이 과정에서 과적합 같은 문제가 우려 됨) 3. 아예 어떠한 전처리 없이 기사(articles) 파일을 GPT 모델에 넣고 예측하라고 하기

개발자

#dataset

#gpt

#openai

#keywords-extraction

답변 0

댓글 0

조회 25

2년 전 · 디큐 님의 새로운 답변

openAI api 와 플러그인 차이

openAI api 와 플러그인 차이 설명 부탁드려요

개발자

#openai

#chatgpt

#plugin

답변 1

댓글 0

조회 145

2년 전 · 익명 님의 질문

애저 함수 앱 배포시 에러

Deployment Log file does not exist in /tmp/oryx-build.log 에러가 뜨고 배포에 실패합니다 로컬 테스트시 결과값잘나오는데 배포만 수행하면 에러가납니다 <requirements.txt> azure-functions openai Pillow regex transformers==4.33.0 nltk==3.8.1 torch==2.0.0

개발자

#azure

#pytorch

#openai

#배포

#클라우드

답변 0

댓글 0

조회 28

일 년 전 · 익명 님의 질문 업데이트

신입개발자 취업에 관해 질문있습니다!

제가 대학교에서 사물인터넷이랑 가상현실 관련해서 공부를 조금 하다가 4학년때 웹쪽으로 진로를 틀어서 python,django,html,css등등을 공부하고 관련해서 취업하려합니다! aws와 sql은 지금 강의 듣고있고 지원서 넣을때쯤에는 마칠생각입니다. 학점은4.08이고 부족한 실력으로혼자서 고양이 커뮤니티 사이트랑 OpenAI API랑 파파고API로(줄거리를 영어로 번역해서 이미지생성) 등장인물이랑 줄거리 로그인 후 쓰면 소설이랑 관련이미지 만들어서 게시판에 업로드 되는 사이트 만들었는데 1. 이걸로 취업이 어떨지 잘 모르겠지만 연봉은 3400정도 이상을 바라면 과한 욕심일까요? 2.웬만하면 자격요건은 거의 다 갖추고 지원하고 싶은데 우대사항은 어느정도로 갖춰야하나요? 3.제가 프로젝트를 할때 설계를 깊게 생각하지 않고 '일단 만들고싶어!'라는 생각으로 만들어서 구조도 같은게 별로 없는데 포트폴리오를 만들면 점수가 많이 깎일까요? 글 읽어주셔서 정말 감사합니다!!

개발자

#신입개발자

#django

답변 1

댓글 0

조회 378

2년 전 · 익명 님의 질문

Azure OpenAI API를 사용해서 slack API와 연계한 슬랙봇에서 응답메시지 출력 전 로딩 메시지 출력후 응답메시지를 출력할 수 있는 팁을 부탁드립니다

회사 내부 프로젝트로 Azure OpenAI API를 사용해서 slack API와 연계한 슬랙봇을 구현했습니다. OpenAI API 응답시간의 지연으로 다음과 같은 메시지 출력 후, 응답 메시지가 출력되는데, ‘문제가 발생했습니다. 다시 시도해주세요!‘ 메시지 없이 로딩 메시지 출력후 응답이 가능할까요?

개발자

#openai

#slack

#error

#chatgpt

답변 0

댓글 0

추천해요 1

보충이 필요해요 1

조회 102

2년 전 · 커리어리 AI 봇 님의 새로운 답변

감정분석 성능 향상 방법

안녕하세요. 질문이 있어 이렇게 글을 적어봅니다! 질문 먼저 드리겠습니다. “다빈치로 비지도 학습으로 감정분석을 할 때 성능 향상을 위한 조언을 얻을 수 있을까요? 또한 결과로 얻은 라벨들을 직접 확인하고 수정하는 작업은 필수인지 데이터가 많은 경우는 어떻게하는지 궁금합니다. ” 이어서 상황 설명을 드리겠습니다! openai에서 api 사용해서 뉴스기사의 감정분석을 진행하고 이를 토대로 fine-tuning을 진행하고자 합니다! 감정분석에 사용하는 모델은 다빈치입니다. 비지도 학습이라 다른 모델은 성능이 좋지 않아 다빈치를 선택했습니다.

개발자

#gpt

#감정분석

답변 1

댓글 0

조회 171