2가지 질문이 있는데요. 과정 중에는 dify 내에서의 앱 실행 만을 해봤는데 다른 도메인의 웹 페이지 내에 만든 dify앱을 embed 하는 것도 가능할까요? 예를 들어 26강의 투자분석 보고서 같은 앱을 만들어서 웹 페이지 내에서 사용자에게 입력을 받고 결과를 화면에 배치해서 보여주는 것이요. 2. 제가 구축한 RAG나 TAG 데이터베이스를 노출시키지 않고도 똑같은 dify앱을 만들어주는 것도 가능한지도 궁금합니다. 제가 만약 어떤 분야에서 꼭 필요한 dify 앱을 만들었다면 제가 앱을 만들기 위해 구축해놓은 지식들은 외부에 노출을 하지 않고 앱만 배포를 해서 사용하게 한다던지 하는게 가능한지요
안녕하세요. 밑바닥부터 만들면서 배우는 LLM 수강생입니다. 두 번이나 코드 해설 강의 쿠폰을 발행해주셨는데 직장인인데다가 최근에 바빠서 제대로 확인하지 못했습니다. 마침 등록되어 있는 메일도 자주 이용하는 메일이 아니다보니 제때 확인하지 못했네요. 여러모로 실례지만 혹시 추가로 쿠폰을 발행받을 수 있는 방법이 없을까요? 번거롭게 해서 죄송합니다.
안녕하세요. 본 완독 챌린지에서 제공하는 코드 해설 강의 쿠폰을 받지 못해, 지금이라도 이걸 받을 수 있는 방법이 있을지 문의드립니다. 새 소식에 있는 공지들을 보면 1차 때나 2차 때나 쿠폰이 일괄 발송되었다고 적혀있는데, 메일 수신함 전체를 확인해봐도 아무 것도 온 게 없습니다.(아마 발송 내역을 확인해보시면 될 듯 합니다) 챌린지 신청 기간 당시 챌린지 소개에는 추가 강의 제공 형태(쿠폰으로 제공 후 직접 등록 필요 + 기간 만료형), 강의 제공 시기(추후 제공) 등의 내용이 고지되지 않아 추석 기간 때 놓쳤다가, 공지사항을 나중에 보고서 재발급을 기다리고 있었는데 주중에 다시 진행되었을 줄 몰랐네요... 주간에는 업무로 인해 인프런 사이트에 매번 들어와서 직접 확인하기가 어려워서요. 혹시 이를 받을 수 있는 다른 방법이 있다면 알려주시면 고맙겠습니다. p.s) 책은 내용이 좋아서 재미있게 보고 있습니다.
안녕하세요. 강의에서 나오는 BitsAndBytesConfig 를 통한 양자화 예시에서 CUDA 가 필수로 요구되어 macbook에서 진행할 수 있는 방안을 찾다가 mlx_lm 을 통해서 MPS(mac의 gpu)를 활용하여 양자화가 가능하단 사실을 알게되어 공유드리고자 합니다. 아마 맥북 사용자도 꽤 많을 것으로 예상됩니다. langchain에서 MLXPipeline 을 제공하지만 이를 사용했을 때 현재 invoke시 호출되는 _call 메서드 내부에서 generate_step 이 mlx_lm에서 제공은 하지만 MLXPipeline 에서 제대로 불러올 수 없어 RunnableLambda 를 통해서 에러를 우회해봤습니다.(Q? 강사님은 혹시 해결 방법을 알고 계실까요? 공홈 코드가 다 안 되네요 ㅜㅜ 오류 코드는 맨 아래 첨부하겠습니다. ) 먼저 양자화 진행하는 방식입니다. cli를 통한 command 또는 python-api 를 활용하는 방법 두 가지가 있습니다. 자세한건 링크 첨부하겠습니다. 양자화 개념에 대해서 자세히 나오니 참고하면 좋으실 듯 합니다. 링크: [quantization with xlm_lm]( https://developer.apple.com/kr/videos/play/wwdc2025/298/?time=187 ) mlx_lm을 통한 양자화 먼저 양자화한 model을 local path에 저장합니다. 그 전에 apple의 gpu를 확인할 수 있는 코드 부분은 처음 부분에서 확인하실 수 있습니다. 사실 python코드를 싸는 것보다 command로 양자화 진행하는게 편한 것 같습니다. 전 projection layer와 embedding layer는 다른 layer보다 높은 bit로 해주는게 좋다고 하여 python으로 진행했습니다. dequantize on-the-fly(게산 추론) 시 더 좋다고 합니다. # mac에서 mps를 사용한 예제 import torch from mlx_lm.convert import convert print("MPS available on this device =>", torch.backends.mps.is_available()) # projection layer & embedding layer는 6bit, 양자화 가능한 layer는 4bit, 양자화 불가능은 False return def mixed_quantization(layer_path, layer): if "lm_head" in layer_path or 'embed_tokens' in layer_path: return {"bits": 6, "group_size": 64} elif hasattr(layer, "to_quantized"): return {"bits": 4, "group_size": 64} else: return False # quantization 진행 convert( hf_path="microsoft/Phi-3-mini-4k-instruct", mlx_path="./models/microsoft-Phi-3-mini-4k-instruct-mixed-4-6-bit", dtype="float16", quantize=True, q_bits=4, q_group_size=64, quant_predicate=mixed_quantization ) $) mlx_lm.convert --hf-path "mistralai/Mistral-7B-Instruct-v0.3" \ --mlx-path "./mistral-7b-v0.3-4bit" \ --dtype float16 \ --quantize --q-bits 4 --q-group-size 64 --upload-repo "my-name/mistral-7b-v0.3-4bit" Langchain과 연계하기 from functools import wraps from langchain_core.runnables import RunnableLambda from langchain_core.output_parsers import StrOutputParser from mlx_lm import generate, load quantized_model_path = "./models/microsoft-Phi-3-mini-4k-instruct-mixed-4-6-bit" model, tokenizer = load(quantized_model_path) def runnable_wrapper(func): """RunnableLambda wrapper function""" @wraps(func) def wrapper(*args, **kwargs): return RunnableLambda(func) return wrapper @runnable_wrapper def create_chat_prompt(question): messages = [ { "role": "system", "content": """ You are an expert in information retrieval and summarization. Your job is to read the provided text and produce a precise, faithful, and concise summary. Prioritize the author’s main claim, key evidence, and conclusions. Use plain English and avoid filler. Do not invent facts that aren’t present in the input. """ }, { "role": "user", "content": f""" Question: {question} """ } ] prompt_without_tokenized = tokenizer.apply_chat_template(messages, add_generation_prompt=True, tokenize=False) prompt_with_tokenized = tokenizer.apply_chat_template(messages, add_generation_prompt=True) print("생성된 prompt👇\n", prompt_without_tokenized) return prompt_with_tokenized @runnable_wrapper def run_llm_with_mlx(prompt): return generate(model=model, tokenizer=tokenizer, prompt=prompt) @runnable_wrapper def output_parser(answer): return answer.replace("<|end|>", "") chain = create_chat_prompt() | run_llm_with_mlx() | output_parser() 오류 코드 llm.invoke 에서 에러가 발생하며 TypeError: generate_step() got an unexpected keyword argument 'formatter' 라는 에러가 발생합니다. from langchain_community.llms.mlx_pipeline import MLXPipeline from mlx_lm import load model_path = "./models/microsoft-Phi-3-mini-4k-instruct-mixed-4-6-bit" model, tokenizer = load(model_path) llm = MLXPipeline( model=model, tokenizer=tokenizer ) llm.invoke("what's my name?")
정보처리기사 실기를 선생님과 함께 하고, 시험 합격에 이어서 이제 본격적으로 취업을 위한 저만의 프로젝트를 만들어 보겠다는 생각이 들었습니다. 마침 Cusor AI의 첫 개강 때 할인 이벤트가 있어서 저만의 첫 프로젝트를 시작하기 전에 이번 기회에 다시 한번 더 선생님과 함께 나아가고자 현재 선생님의 새로운 강의를 수강하고 있습니다. 그리고 어제 새벽에 처음 시작해서 정신을 차려 보니 지금 벌써 4강을 진입하는 상황이 되어버렸습니다.. 결론은 또 엄청난 강의를 만들어 주신 것 같습니다....! 이제 정말 질문인데요. 프론트 엔드의 영역이라 생각하고 지금 재미있게 공부 중에 있습니다만 백엔드나 전체적으로 다뤄서 풀스택 관련 강의 제작도 목표가 있으실지 해서 질문 남겨드립니다. 현재 독학으로 Spring을 공부 중에 있습니다만, 선생님의 자바 백엔드 수업도 있다면 재미있게 제가 원하는 개발을 이어나갈 수 있을 것 같아 조심스럽게 이 자리에 질문을 남겨드립니다. 아무쪼록 이번에도 놀랍고 대단한 몰입력을 유도하는 강의를 만들어 주셔서 정말 감사합니다. 정보처리기사 합격에 이어서 이번에는 선생님 강의를 듣고 취업 성공까지 힘내 보겠습니다!ㅎ (ps 시험 때문에 듣던 선생님의 ppt 자료가 이제는 시험이 아니라 재밌는 창작 같은 공부에 쓰이니까 모든 게 감회가 새롭네요ㅋㅋㅋ)
안녕하세요 강사님, 공지를 늦게 확인하고 쿠폰을 확인하지 못해 문의 남깁니다. 이전 문의 글들을 보니 가입한 이메일로 지난주 및 이번주에 쿠폰이 지급될 것이라 안내 해 주셨더라구요. 하지만 저 같은 경우 지난주에도 메일이 오지 않았고 현재도 수신된 메일이 없기에 확인할 수 있는 방법이 있을지 문의 드립니다. 감사합니다!
강병진 강사님 안녕하세요 우선 저와 같은시기쯤? 울산에 있으셨다고 하니 반갑습니다. 저는 병진강사님과 인연이 많은것 같습니다. 강사님 전 회사? 정유회사 바로 옆에 제련회사에서 딥러닝 이미지 처리 프로젝트를 개발하고 있었습니다. 병진강사님 덕분에 생성형 AI도 따로 학습을 하고 있고 개별적인 프로젝트도 하고 있습니다. 감사합니다. 질문.1 RAG를 구성하고 문서를 벡터DB에 지속하여 업데이트를 위해서 PDF 텍스트·이미지 분석 → RAG용 JSON/JSONL 생성 → Pinecone 적재가능하도록 PyQt GUI 프로그램 만들었는데 여기서 추가적으로 생성되는 문서를 지속적으로 업데이트를 해야할 경우 25년 10월 초에 새로나온 Open AI에 에이전트 툴을 이용해서 일정 시간에 자동으로 Pinecone에 업데으트 해주는 에이전트를 만들어서 자동화를 하려고 하는데 이런 전략을 구성할 경우 문제가 될 부분이 있을까요? 질문.2 모델을 만들고 회사가 가지고 있는 특허 문서 파일을 RAG로 구성을 완료한 후 외부 사이트 >> 각 국가의 특허청에 파일을 검색해서 유사도를 분석하거나 하려고 할 때 전략은 어떻게 가져가면 좋을지? 입니다.
안녕하세요. 교재 63페이지에 “다음으로 조금 더 흥미로운 텍스트 구절을 만들기 위해 데이터셋에 있는 처음 50개 토큰을 삭제합니다.”라는 문장이 있습니다. 이때 ‘흥미로운’이라는 표현이 어떤 의미를 가지는지, 그리고 텍스트를 더 흥미롭게 만들기 위해 앞의 50개 토큰을 삭제하는 이유가 무엇인지 궁금합니다. 또한 다른 LLM 모델에서도 이와 같은 전처리 과정을 수행하는지, 만약 수행한다면 그 이유가 궁금합니다. 감사합니다.
주피터 노트북에서 %pip install langchain-openai python-dotenv 이 코드를 실행 하면 아래 에러가 자꾸 뜹니다. 커널을 시작하지 못했습니다. 커널 'venv (3.11.9) (Python 3.11.9)'을(를) 시작하지 못했습니다. 자세한 내용은 Jupyter 로그을 참조하세요. listen EFAULT: bad address in system call argument 192.168.30.146:9001 참고로 저는 윈도우 유저고 가상환경은 venv를 사용하고 있습니다.
안녕하십니까 강사님! 덕분에 강의 너무나도 잘 들었습니다. 수강하게 된 계기가 파이썬 기반 백엔드 신입으로 취업 준비를 할 때 어떻게 하면 자바보다 차별화해서 준비할 수 있을까? 라는 생각으로 시작했습니다. 강의를 수강하고 나니 확실히 RAG기술은 강하다고 느꼈습니다. 하지만 저번에 답변을 해주셨을 때 프롬포트 엔지니어링만으로는 취업을 준비하기 불안정하다 라는 의견에 굉장히 동의합니다! 혹시 실례가 안된다면 질문을 드리고 싶습니다! 만약에 답변이 조금 어려우시면 답변 안해주셔도 됩니다! - 파이썬 기반 백엔드 신입으로 취업 준비를 할 때 현재 저는 was와 db구현해보기 + rag기술 다루어보기 정도의 기술 스택을 가지고 있는데 강사님이 보시기에는 어떠한지 궁금합니다. 올바른 방향으로 준비를 하고 있는지 아니면 시장에서 원하는 방향이 아닌건지 궁금합니다! 현재는 학부 3학년으로써 조언을 해주신다면 정말 감사하겠습니다. 질문 읽어주셔서 감사합니다!
안녕하세요. 해당 챕터에서 강의 내용과 실행 결과 간 매치가 잘 안되는 듯 느껴져 문의드립니다. from langchain_core.messages import HumanMessage for chunk in graph.stream({'messages': [HumanMessage('3에다 5를 더하고 거기에 8을 곱하면?')]}, stream_mode='values'): chunk['messages'][-1].pretty_print() 강의 화면에서 위와 같은 query 에 대해 노드 단위로 출력한 결과를 보면, 첫 번째 Ai Message 는 Tool Calls 로 add 과 multiply 두 툴에 대한 요청을 함께 생성하고 다음 Tool Message 로 multiply 의 결과 64 를 반환, 두 번째 Ai Message 는 Tool Calls 로 multiply 만 생성하고 다음 Tool Message 로 결과 64를 반환하고 있습니다. 근데 강의에서는 첫 번째 Ai Message 에 대해 "먼저 덧셈을 실시합니다. 그러니까 multiply(?) 라는 툴이 64를 주고, 근데 task 가 두 개니까 task 에서 도구 호출을 또 하는 겁니다. 그런 다음에 64라는 답이 나오고..." 라고 녹화되어 있는데... 이게 무슨 얘기인지 잘 와닿지가 않네요.. 녹화 당시의 실행 결과와 상관없이 add 한 번 호출 후 multiply 한 번 호출에 대한 설명인 걸까요? 아니면 병렬 도구 호출에 대한 설명인 걸까요? 감사합니다.
안녕하세요 너무 유익한 강의 잘 듣고 있습니다 :) 강의를 듣다보니 RAG와 파인튜닝은 LLM의 할루시네이션을 줄이고 특정 도메인에 대한 지식을 주입하면서 더 적절한 답변을 낼 수 있다는 측면에서 닮아 보인다는 느낌을 받았습니다. 물론 두 방법의 차이나 적용 사례는 구글링하면서 쉽게 찾을 수 있지만 만약 강사님이 특정 도메인에 특화된 LLM을 개발하신다면 어떤 기준과 절차로 RAG와 파인튜닝을 선택하고 활용하시는지 강사님의 개인적인 생각이 궁금합니다 :)