묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨RAG를 활용한 LLM Application 개발 (feat. LangChain)
환경 셋팅 관련 질문있습니다.
안녕하세요! 우선 저는 현재 윈도우 사용중이고요, 그런 의미에서 꾸역꾸역 3강을 거의 끝나가는 시점입니다~처음엔 쥬피터로 했는데, 커널이 계속 죽는 이슈로.. 코랩 엔터프라이즈로 돌리는 중입니다. 쥬피터를 활용해서 가상환경으로 하고 싶었는데 실패해서 결국 base에서 구동했어요ㅠㅠ 커널 죽는것도 이거 때문인가 싶기도하고.. 가상환경이 필수인건가요? 잘 돌아가면 일단 한숨 돌려도 되는거죠..? + vscode랑 쥬피터 연동하면 선생님처럼 .env파일을 쉽게 만들 수 있는건가요? 아님 pyenv한정 가능한 건가요? 저도 vscode로 쥬피터 연동까진 됐는데 .env파일 생성에서 막혀서 그냥 웹에서 돌리고 있었습니다 그마저 커널 이슈로 gcp로 돌렸지만.. ++ Open-AI 대신 gemini를 사용하는건 어떻게 생각하시나요? 본 강의에는 부적합한가요? 구글 크래딧이 있어서 이걸 활용하고 싶은데 꽤 장벽에 부딪히는거(가령 tiktoken이 안된다든지 ) 같은데 이게 제가 잘 몰라서 그런건지 보통 그런건지 모르겠네요. +++ 원래 정말 환경 얘기만 여쭤보려고했는데 적다보니 그동안 몰랐던거를 다 여쭤보게 됐네요.. 강의 잘 듣고 있습니다! 감사합니다~
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
langcharin.chains 관하여
강사님이 만들어 놓은 requirement.txt 가 아닌 새로운 환경에 구축할경우 버전업이 되며 deprecate된 것인지 일부가 작동하지 않습니다. 작동하지 않는 것들은 아래와 같습니다.최신버전에선 어떻게 수정해야 써야하나요.from langchain.chains import create_history_aware_retriever, create_retrieval_chain from langchain.chains.combine_documents import create_stuff_documents_chain
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
3.5 Retrieval 효율 개선을 위한 데이터 전처리 - 동일한 결과가 안나옴
안녕하세요, 강의 수강 중 아무리 실행해도 결과가 영상과 동일하게 나오지 않아서 질문드립니다. 실습에 사용중인 tax.docx 파일에서 제55조의 그림으로 되어 있는 테이블을 마크다운으로 변환한 tax_with_markdown.docx로 실습 진행하고 있습니다 .강의에서 올려주신 마크다운 변환된 파일과 코드로 실행했는데, retriever.invoke(query) 결과에서 제55조가 나오지 않아서 result 값이 제대로 나오지 않습니다. 파인콘 인덱스를 삭제하고 새로 만들어도 결과는 동일하게 나옵니다. 원인이 무엇인지 알 수 있을까요? from langchain_community.document_loaders import Docx2txtLoader from langchain_text_splitters import RecursiveCharacterTextSplitter text_splitter = RecursiveCharacterTextSplitter( chunk_size = 1500, # 문서를 쪼갤 때, 하나의 chunk가 가질 수 있는 토큰 수 chunk_overlap = 200 # 문서를 쪼갤 떄, 중복을 허용하는 토큰 수 ) loader = Docx2txtLoader("tax_with_markdown.docx") document_list = loader.load_and_split(text_splitter=text_splitter) document_list[52] # 마크다운 부분 잘 나오는 거 확인 from dotenv import load_dotenv from langchain_openai import OpenAIEmbeddings load_dotenv() # API Key 필요 (환경 변수) embedding = OpenAIEmbeddings(model='text-embedding-3-large') import os import time from pinecone import Pinecone from langchain_pinecone import PineconeVectorStore index_name = 'tax-index-markdown' pinecone_api_key = os.environ.get("PINECONE_API_KEY") pc = Pinecone(api_key=pinecone_api_key) database = PineconeVectorStore.from_documents(document_list, index_name=index_name, embedding=embedding) query = '연봉 5천만원인 직장인의 소득세는 얼마인가요?' from langchain_openai import ChatOpenAI llm = ChatOpenAI(model='gpt-4o') from langchain import hub prompt = hub.pull("rlm/rag-prompt") from langchain.chains import RetrievalQA retriever = database.as_retriever() qa_chain = RetrievalQA.from_chain_type( llm, retriever = retriever, chain_type_kwargs = {"prompt":prompt} ) # llm 모델과 벡터데이터베이스와 프롬프트 템플릿 준다. retriever.invoke(query)
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
패키지 버전이 궁금합니다.
python, openai, langchain, chroma 등 강사님이 강의에서 사용하신 패키지 버전이 궁금합니다.
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
chromadb 오류 질문있습니다.
vscode에서 계속 같은 오류로 진행이 안돼서 구글 코랩에서 실행했더니 실행이 됩니다. 그러면 vs code에서 실행이 되게 할려면 어떤 조치를 취해야하는지 궁금합니다.
-
해결됨RAG를 활용한 LLM Application 개발 (feat. LangChain)
Ollama로 사용가능한 한글 임베딩, LLM 모델 추천
안녕하세요. 좋은 강의 감사합니다.강의를 참고하여 standalone PC(GPU 4090)에서Ollama, Langchain으로 RAG를 구성하고 테스트하고 있는데요.혹시 한글 인식이 성능이 좋은 Ollama 임베딩, LLM 모델 추천해주실 수 있을까요? 4090급 GPU를 사용하다 보니 모델 선택 범위가 제한적이네요.즐거운 하루 되세요.
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
chromadb 오류
ModuleNotFoundError: No module named 'chromadb'ImportError: Could not import chromadb python package. Please install it with pip install chromadb.chromadb 패키지를 설치하였는데 같은 오류가 계속 뜨고 있습니다. 버전 문제 일까요?가상환경 python:3.12.2, chromadb: 0.4.15, langchain: 0.3.4답변해주시면 정말 감사하겠습니다!
-
해결됨누구나 쉽게 시작하는 웹개발 기초 (Basic Web Development Course)
강의 자료
안녕하세요 좋은 강의 감사합니다.혹시 강의 시 사용된 강의 자료를 받아 볼 수 있을까요?정중히 요청 드려봅니다.감사합니다.
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
학습 내용을 복습하려고 git을 클론할 때
학습자료의 git을 클론했을 때 requirements.txt 파일에서 호환성 오류가 나는 것 같습니다.서로 호환되게 계속 바꿔봐도 pip check에서 오류를 내네요어떻게 수정하면 좋을까요? ㅜㅜ
-
미해결모두를 위한 대규모 언어 모델 LLM Part 3 - 구글 제미나이(Google Gemini) API, OpenAI API와 젬마(Gemma)로 AI 어플리케이션 만들기
PPT 강의자료 요청
안녕하세요. PPT 강의자료는 누락되어있는데, 별도 요청드립니다. 감사합니다.
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
scan된 pdf가 1대1분할 형식+메타데이터도 섞여있는데 전처리를 어떻게 해야할까요?
스캔된 pdf가 1대1분할형식과 메타데이터가 섞여있습니다. pdf 한 페이지에 이러한 형태로 데이터가 저장되어있으면 어떻게 전처리를 해야될지 도움주시면 감사하겠습니다
-
미해결남박사의 파이썬으로 봇 만들기 with ChatGPT
개봉 날짜 및 평점 가져오는 코드 추가
강의에서 제공된 코드는 영화 개봉 날짜, 평점을 가져오지 못하고 있는데 아래 코드 사용하시면 됩니다.그리고 태그가 단일 요소일 경우 contents 속성을 사용하기 보다는 string 속성을 사용하면 리스트가 아닌 문자형으로 바로 출력할 수 있습니다.for dt, dd in zip(c_dt, c_dd): if dd.select_one('c-star'): rating = dd.select_one('c-star').next_element.strip() c_data[dt.string] = rating elif dd.select_one('span'): days = dd.select_one('span').string c_data[dt.string] = days else: c_data[dt.string] = dd.string
-
미해결남박사의 파이썬으로 봇 만들기 with ChatGPT
can't open/read file: check file path/integrity 오류 발생 시 해결 방법
cv2.imread() 함수를 통해 이미지를 읽어 들일 때, 한글을 읽어오지 못해 오류가 발생하는 경우가 있습니다. 아래의 코드로 해결하시면 됩니다.참고로, 아래 코드 사용 시 cvtColor() 함수를 사용해서 색상을 변경하지 않아도 됩니다.import numpy as np img_path = "이미지 파일 경로" img_file= np.fromfile(img_path, np.uint8) cv_decode = cv2.imdecode(img_file, cv2.IMREAD_COLOR) qr_reader = pyzbar.decode(cv_decode) print(qr_reader)
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
except openai.error.RateLimitError 문의
안녕하세요. 강의 잘듣고 있는 학생입니다. 이번에 프로토콜 문서를 아래와 같이 동작시키고 있습니다.chunk_size = 10000 for i in range(0, len(document_list), chunk_size): chunk_documents = document_list[i:i + chunk_size] print(i) database = call_with_backoff( Chroma.from_documents, documents=chunk_documents, collection_name="chroma-5g", persist_directory="./chroma", embedding=embedding ) 그런데 꼭 아래 에러가 발생됩니다. --------------------------------------------------------------------------- RateLimitError Traceback (most recent call last) Cell In[1], line 13 12 try: ---> 13 return function(*args, **kwargs) 14 except openai.error.RateLimitError as e: File c:\anaconda3\envs\llm\lib\site-packages\langchain_chroma\vectorstores.py:1128, in Chroma.from_documents(cls, documents, embedding, ids, collection_name, persist_directory, client_settings, client, collection_metadata, **kwargs) 1127 metadatas = [doc.metadata for doc in documents] -> 1128 return cls.from_texts( 1129 texts=texts, 1130 embedding=embedding, 1131 metadatas=metadatas, 1132 ids=ids, 1133 collection_name=collection_name, 1134 persist_directory=persist_directory, 1135 client_settings=client_settings, 1136 client=client, 1137 collection_metadata=collection_metadata, 1138 **kwargs, 1139 ) File c:\anaconda3\envs\llm\lib\site-packages\langchain_chroma\vectorstores.py:1089, in Chroma.from_texts(cls, texts, embedding, metadatas, ids, collection_name, persist_directory, client_settings, client, collection_metadata, **kwargs) 1088 else: -> 1089 chroma_collection.add_texts(texts=texts, metadatas=metadatas, ids=ids) ... ---> 14 except openai.error.RateLimitError as e: 15 print(f"Rate limit exceeded: {e}. Retrying in 15 seconds...") 16 time.sleep(15)chunk_size 로 나누어서 입력하면 될줄알았더니만 계속 에러가 발생해서 진도가 안나가네요. ㅜㅜ 참고로 len(document_list)는 747076이네요. 해결할 방법이 있을까요?
-
해결됨RAG를 활용한 LLM Application 개발 (feat. LangChain)
LangSmith를 활용한 LLM Evaluation에서 metadata 만드는법
chatgpt로 질문지 만드셨는데, metadata는 어떻게 만드셨나요?좋은 강의 감사합니다.
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
안녕하세요.
from langchain_chroma import Chroma # 데이터를 처음 저장할 때 database = Chroma.from_documents(documents=document_list, embedding=embedding)다음 코드를 실행시키면, File c:\Dev\inflearn-llm-application\lib\site-packages\langchain_chroma\vectorstores.py:1089, in Chroma.from_texts(cls, texts, embedding, metadatas, ids, collection_name, persist_directory, client_settings, client, collection_metadata, **kwargs) 1083 chroma_collection.add_texts(...--> 571 raise ValueError( 572 f"Batch size {len(batch[0])} exceeds maximum batch size {limits['max_batch_size']}" 573 ) ValueError: Batch size 218 exceeds maximum batch size 166다음과 같은 error가 발생합니다.이후 다음과 같이 batch size를 줄여서 실행시키면from langchain_chroma import Chroma # 배치 크기 설정 batch_size = 166 # 문서 리스트를 배치 크기만큼 나누어 처리 for i in range(0, len(document_list), batch_size): batch_documents = document_list[i:i + batch_size] database = Chroma.from_documents(documents=batch_documents, embedding=embedding) 다음과 같은 오류와 함께 커널이 종료됩니다ㅠ해결책이 있을까요?
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
The onnxruntime python package is not installed. Please install it with `pip install onnxruntime`
강사님 영상 보면서 따라하고 있는데 자꾸 아래와 같은 오류가 떠서 문의드립니다.[스스로 해본 조치]폴더를 아예 새로 만들어서 처음부터 다시 만들기 -> 실패pip install onnxruntime 명령어로 설치 -> 실패VScode 여러번 껐다가 재부팅[환경]현재 PC에 깔린 python 버전 : Python 3.11.6가상 환경 설치 시 사용한 명령어 : python -m venv ./env 아래는 현재 코드이고 pip install 명령어는 강의 그대로 따라 했습니다.database = Chroma.from_documents(documents=document_list, embedding=embedding) -> 해당 부분 실행 시 오류가 발생합니다. from langchain_community.document_loaders import Docx2txtLoader from langchain_text_splitters import RecursiveCharacterTextSplitter text_splitter = RecursiveCharacterTextSplitter( chunk_size=1500, chunk_overlap=200 ) loader = Docx2txtLoader("./tax.docx") document_list = loader.load_and_split(text_splitter=text_splitter) ================ 다른 셀 ================ from dotenv import load_dotenv from langchain_openai import OpenAIEmbeddings load_dotenv() embedding = OpenAIEmbeddings(model="text-embedding-3-large") ================ 다른 셀 ================ from langchain_chroma import Chroma database = Chroma.from_documents(documents=document_list, embedding=embedding)
-
해결됨[Python 초보] Flutter로 만드는 ChatGPT 음성번역앱
음성인식 번역
음성인식으로 영어 인식은 잘 되는데 한국어 인식을 잘 못합니다한국어로 이야기를 해도 영어로 인식이 되는 문제가 있습니다
-
해결됨[Python 초보] Flutter로 만드는 ChatGPT 음성번역앱
음성인식 하는 마이크 시간이 짧은거 같아요
안녕하세요!섹션 7 Flutter음성대화 마지막 부분인 최종 테스트를 진행하고 있습니다음성인식이 가능은 합니다하지만 인식하는 시간이 짧아 긴 문장은 인식 못하는거 같습니다!!더 긴 문장을 말하고 싶은데 제가 말하는 음성인식 시간을 더 길게 할 수 있는 방법이 있을까요?? 제 코드 입니다오류나는 문제는 없습니다!!import 'package:dash_chat_2/dash_chat_2.dart'; import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; // 통신을 할수있는 패키지 import 'dart:convert'; //파싱을 위한 import 'package:speech_to_text/speech_to_text.dart'; //stt 패키지 import 'package:speech_to_text/speech_recognition_result.dart'; //음성을 인식하는 import 'package:flutter_tts/flutter_tts.dart'; // class BasicScreen extends StatefulWidget { @override _BasicState createState() => _BasicState(); } class _BasicState extends State<BasicScreen> { bool isListening = false; // 기본 false SpeechToText _speechToText = SpeechToText();//SpeechToText 인스턴스(?) 생성 bool _speechEnabled = false; //음성인식이 가능한지 아닌지 상태 오류가 나면 인식이 나기 떄문에 사용 안함 isListening로 어느정도 대체 가능 String _lastWords = ''; //인식한 문장이 저장될 lastWords FlutterTts flutterTts = FlutterTts();//TTS 인스턴스(?) 생성 @override void initState() { //음성인식부분을 초기화 하는 코드 super.initState(); _initSpeech(); flutterTts.setLanguage("ko-KR");//인스턴스 언어 flutterTts.setSpeechRate(1.0);// 읽어주는 속도 } ChatUser user1 = ChatUser( id: '1', //우리 firstName: 'me', lastName: 'me', ); ChatUser user2 = ChatUser( id: '2', //chatgpt firstName: 'chatGPT', lastName: 'openAI', profileImage: "assets/img/gpt_icon.png" ); late List<ChatMessage> messages = <ChatMessage>[ //List<ChatMessage> = 채팅 메세지를 리스트 형태로 보관하는 ChatMessage( text: '반갑습니다. 어서오세요. 무엇을 도와드릴까요?', //보여지는 텍스트 user: user2, //누가 얘기하는지 user 설정 createdAt: DateTime.now(), //현재 대화가 발생한 날짜,시간 ), ]; @override Widget build(BuildContext context) { // 화면에 메세지를 보여주는 부분 return Scaffold( //Scaffold라는 형식으로 앱 구성을 묶어준것 appBar: AppBar( //AppBar는 타이틀 부분 title: const Text('Basic example'), ), body: DashChat( // DashChat패키지를 이용한 고유 클래스 / DashChat 정의를 해줌 currentUser: user1, //currentUser = 채팅을 입력하는 사람은 누구 onSend: (ChatMessage m) { setState(() {// setState = 현재 화면의 상황을 업데이트 해준다라고 이해하며 됨 messages.insert(0, m); //messages.insert = 메세지 전송 현재 사용자가 입력한 텍스트를 대화창으로 보내는 역할 ,리스트가 추가되는 거죠 }); Future<String> data = sendMessageToServer(m.text); //입력한 메세지를 받아서 서버에 전송을 해주고 data.then((value){ //결과값을 비동기(?) 형태로 받아와서 user2(chatgpt)가 발화(이야기)하고 통신 결과값을 출력하는 setState(() { messages.insert(0, ChatMessage( text: value, user: user2, createdAt: DateTime.now() )); }); }); }, messages: messages, inputOptions: InputOptions( leading: [ IconButton( icon: Icon(Icons.mic, color: isListening? Colors.red: Colors.black), //음성을 듣고있는 상태면 버튼누름 빨강 / 아니면 기본 검정 onPressed: (){ //아이콘이 눌러진다면 setState(() { //상태를 바꿔줘 isListening = !isListening; // 리스닝이 아닌 상태에 검정이 리스닝 상태인 빨강으로 바뀌는 처리 if (isListening == true){// 음성입력 대기 상태가 되면 print('음성인식 시작'); //폴스였다 트루가 되면 _startListening(); }else{ print('음성인식 끝'); // 트루였다가 풀스 _stopListening(); } }); }, ) ] ), ), ); } //통신을 할 수 있는 코드 = postman에서 테스트를 하면서 코드를 얻은것임,약갼의 수정을 해준것뿐 //json의 어떤 부분을 가져와야하는지 전체를 뿌릴순 없으니 추출하는 부분만 추가한것임 Future<String> sendMessageToServer(String messages) async{ var headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer sk-UGIfeFKyAXIhwIXdM3uf96g176CRFnw5AnHJ2acSpyT3BlbkFJmhIKdmcjh56e01G0Axc5xF9scspNoz_MsXuZPUGW8A', }; var request = http.Request('POST', Uri.parse('https://api.openai.com/v1/chat/completions')); request.body = json.encode({ "model": "gpt-4o-mini", "messages": [ { "role": "user", "content": messages, } ] }); request.headers.addAll(headers); http.StreamedResponse response = await request.send(); if (response.statusCode == 200) { String responseString = await response.stream.bytesToString();//json 문자열들이 string 변수에 저장이 된다 Map<String, dynamic> jsonResponse = json.decode(responseString);//responseString을 json 구조에 맞게 변환을 시킨게 jsonResponse가 된다 -> json 구조대로 입맞에 맞게 값을을 골라올수있음 String result = jsonResponse['choices'] != null? jsonResponse['choices'][0]['message']['content']: "No result found"; print(responseString); // 전체 내용 출력, 터미널 화면에서만 출력이 됨 실제 앱에서 출력되지 않음 그래서 return "ERROR"; 을 가지고있어야함 //message = 결과값 부분만 추출 , result라는 String에 저장 // 'choices' 조건문 return result; //함수를 호출한곳에서 사용을 할 수 있다 //print(await response.stream.bytesToString()); //await response.stream.bytesToString() = 실제 결과값 } else { print(response.reasonPhrase); return "ERROR"; // 오류가 날 경우 화면에서도 오류가 난걸 확인할 수 있게 해줌 } } /// This has to happen only once per app void _initSpeech() async { //초기화 하는 함수 , 마이크 같은 디바이스를 사용하기 떄문에 필요 print("음성인식 기능을 시작합니다."); _speechEnabled = await _speechToText.initialize(); //setState(() {}); } /// Each time to start a speech recognition session void _startListening() async { // start를 하게 되면 _onSpeechResult 부분을 동작을 시킴 print("음성인식을 시작합니다."); await _speechToText.listen(onResult: _onSpeechResult); //setState(() {}); } /// Manually stop the active speech recognition session /// Note that there are also timeouts that each platform enforces /// and the SpeechToText plugin supports setting timeouts on the /// listen method. void _stopListening() async { // 음성 인식 중지 print("음성인식을 종료합니다."); await _speechToText.stop(); //setState(() {}); } /// This is the callback that the SpeechToText plugin calls when /// the platform returns recognized words. void _onSpeechResult(SpeechRecognitionResult result) { _lastWords = ""; //초기화 시킴 , 입력을 받을떄마다 새롭게 리셋해야하기 떄문에 추가 if(result.finalResult){ //최종인식 _lastWords = result.recognizedWords; //result에 recognizedWords를 _lastWords에 넣어줘 print("최종 인식된 문장: $_lastWords"); //flutter 에서는 변수를 텍스트 안에 넣어줄때 $를 넣고 일반 텍스트문자영하고 변수가 가티 출력됨 / 최종 인식된 음성을 텍스트로 바꿔서 _lastWords 넣어줘 setState(() { //messages 리스트에 인식한 내용을 추가해줘. messages.insert(0, ChatMessage( text: _lastWords, user: user1, createdAt: DateTime.now() )); }); Future<String> data = sendMessageToServer(_lastWords); //입력한 메세지를 받아서 서버에 전송을 해주고 data.then((value){ //결과값을 비동기(?) 형태로 받아와서 user2(chatgpt)가 발화(이야기)하고 통신 결과값을 출력하는 setState(() { messages.insert(0, ChatMessage( text: value, user: user2, createdAt: DateTime.now() )); }); flutterTts.speak(value); // value를 바로 읽어줌 }); } } }
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
Pinecone 설정오류
해당 코드를 입력하려고 하면 아래와 같이 에러가뜨면서 안됩니다.UnauthorizedException: (401) Reason: Unauthorized HTTP response headers: HTTPHeaderDict({'x-pinecone-api-version': '2024-07', 'X-Cloud-Trace-Context': 'd7645f84f8507a4f73471e43f8baec5a', 'Date': 'Wed, 02 Oct 2024 08:45:53 GMT', 'Content-Type': 'text/html', 'Server': 'Google Frontend', 'Content-Length': '15', 'Via': '1.1 google', 'Alt-Svc': 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000'}) HTTP response body: Invalid API Key