안녕하세요, 좋은 질문 감사합니다. 강의는 LangChain 1.x 버전 출시 전에 촬영되어 예전 함수들을 많이 사용하고 있는데요, 함수 이름이 변경되었으나 내부 구현 자체에는 대단히 큰 변화는 없어서, 강의에서 활용하는 버전을 활용하신다면 완강에는 문제 없을거라고 판단됩니다. 강의를 통해서 제가 전달드리고자 했던 내용은 RAG를 구성하는 방법이고 활용되는 LangChain 함수들은 부수적인 도구이기 때문에 크게 문제가 될 것 같지는 않습니다.
안녕하세요, 좋은 질문 감사합니다. TL;DR은 저는 파인튜닝은 필요 없다고 생각합니다. 말씀하신 것처럼 파인튜닝 자체도 비용이고, 유지보수 비용도 부담이고, 인프라 관리도 부담이고, 여러모로 관리 포인트가 증가해서 저는 RAG를 구현하고 상용 LLM을 쓰는 것이 합리적이라고 생각합니다. 하지만 팀에서 파인튜닝을 해서 운영하는 것을 기조로 잡고 한다면, 요즘 오픈소스 모델도 성능이 괜찮아서 쓸만합니다. 한국어 모델들은 최근에 테스트를 해보진 않았는데, kimi나 qwen계열 모델들은 정말 훌륭합니다. 이론상 파인튜닝을 해야하는 경우는 프롬프트로 원하는 행동을 "만들어낼 수는 있는데" 5% 확률로 실패하고, 그 5%가 용납 안 되는 경우입니다. 에이전트는 궤적이 곱해지기 때문에 스텝당 95%가 10스텝이면 최종적으로 60%로 무너집니다. 프롬프트는 천장을 정하고, 파인튜닝은 바닥을 끌어올립니다. 에이전트 실무에서 파인튜닝을 하는 가장 흔한 실질적 이유가 이겁니다. 다만 저는 few shot 프롬프팅을 활용하면 대부분의 use case에서 RAG구축으로도 충분하지 않나 생각합니다.
안녕하세요, pull_prompt() 가 동작하지 않는다면, 홈페이지에서 제공되는 프롬프트를 확인하시고 아래와 같이 작성하셔도 됩니다 홈페이지를 확인하면, system prompt와 user prompt의 조합인 것을 확인할 수 있습니다 .이와 같은 경우 아래와 같은 형식으로 변환할 수 있습니다 from langchain_core.prompts import ChatPromptTemplate rag_prompt = ChatPromptTemplate.from_messages([ ('system', '''You are a teacher grading a quiz. You will be given a QUESTION and a set of FACTS provided by the student. Here is the grade criteria to follow: (1) You goal is to identify FACTS that are completely unrelated to the QUESTION (2) If the facts contain ANY keywords or semantic meaning related to the question, consider them relevant (3) It is OK if the facts have SOME information that is unrelated to the question (2) is met Score: A score of 1 means that the FACT contain ANY keywords or semantic meaning related to the QUESTION and are therefore relevant. This is the highest (best) score. A score of 0 means that the FACTS are completely unrelated to the QUESTION. This is the lowest possible score you can give. Explain your reasoning in a step-by-step manner to ensure your reasoning and conclusion are correct. Avoid simply stating the correct answer at the outset.'''), ('human', ''' Retrieved documents: {{input.documents}} User question: {{input.question}}''') ])
네네 맞습니다 context에 답변에 필요한 문서가 포함되어있지 않아서인데요, 현재 강의의 구성에서는 chunk_size , chunk_overlap , separators 를 변경해보면서 retriever.invoke()에서 원하는 chunk가 잘 반환되는지 확인해보셔야 합니다
안녕하세요, 공식문서를 다시 보니 Annotated[list[AnyMessage], add_messages] 가 맞네요. 소스코드를 수정하고 강의 설명에 업데이트 해두었습니다. 감사합니다 https://reference.langchain.com/python/langgraph/graph/message/MessagesState
안녕하세요! 좋은 질문 감사합니다. 답변을 드려보자면 별도의 함수를 선언하지 않는다면 lambda를 쓰는게 가장 파이썬스러운게 아닌가 생각합니다. 다만 코드가 오히려 지저분해지지 않을까 싶네요. 공식문서에도 함수를 쓰는 걸로 업데이트가 된 걸 보면, 별도의 함수를 선언하는 것이 가장 적합한 것 같습니다 https://docs.langchain.com/langsmith/evaluate-llm-application#reference-code 저라면 답변의 정확도를 기본적으로 평가하고 대신 평가 데이터셋을 사람의 답변에 따라 여러가지로 구현해서 다양한 시나리오를 평가하는 식으로 구현할 것 같습니다(만약 사람의 답변이 중요하다면) 그리고 human-in-the-loop를 제대로 실행 하는지 (trajectory)를 추가로 평가할 것 같아요 제가 강의 슬라이드를 공유하지 않았군요, 덕분에 강의자료를 수정했습니다 감사합니다. 아마존 링크: https://docs.aws.amazon.com/machine-learning/latest/dg/evaluating_models.html 세일즈포스 논문링크: https://arxiv.org/abs/1806.08730 좋은 피드백 감사합니다!