강의 46 듣고 질문드립니다. 여러 노드가 병렬로 수행 되면서 동일한 ToolSearchState를 접근해서 데이터를 수정하게 되면 thread-safety 문제가 발생할 텐데 이런 부분에 대한 설명이 명시적이지 않아서 어떻게 처리 되는 건지 궁금합니다. Langchain에서 State 클래스는 이미 thread-safety를 보장하는 것인가요? 아니면 강의 예제에는 없었지만 실 구현시에는 사용자가 직접 thread-safety에 대한 고려를 해서 코딩해야 하는 건가요?
안녕하세요. Self RAG 에이전트 구현하기 강좌에 대한 질문이 있습니다. 중간 중간에 결과 평가하는 것 중 검색된 문서와 질문에 대한 관련성을 평가하는 부분이 있는데요, 검색 자체를 embedding된 vector에서 similarity search를 하여 뽑아 낸 것들이고, 이 방식 자체가 질문과 유사한 문서를 뽑아 내는 기술인데 굳이 LLM으로 하여 다시 평가를 하게 하는 이유는 뭘까요? 벡터 embedding 과 유사도 검색에 대한 기술이 LLM에 맏기는 것 보다 유사도 검색에 있어 더 정확해야 하는 것이 아닌가 하는 생각이 들어서요. LLM이 하는 유사도 평가가 더 정확하다면 굳이 벡터 embedding 같은 기술을 쓸 필요가 있을까 싶어서 질문 드립니다.
패키지 설치: poetry add python-dotenv langchain langchain_openai gradio 위를 입력하는데, 아래 처럼 같은 에러가 수십번 납니다 PS D:\mypersonal\myprojects\LANGCHAIN\qa-bot> poetry add python-dotenv langchain langchain-openai gradio Using version ^1.1.1 for python-dotenv Using version ^0.3.26 for langchain Using version ^0.3.27 for langchain-openai Using version ^5.35.0 for gradio Updating dependencies Resolving dependencies... (1.1s) The current project's supported Python range (>=3.10) is not compatible with some of the required packages Python requirement: - langchain-text-splitters requires Python <4.0,>=3.9, so it will not be installable for Python >=4.0 Because no versions of langchain match >0.3.26,<0.4.0 and langchain (0.3.26) depends on langchain-text-splitters (>=0.3.8,<1.0.0), langchain (>=0.3.26,<0.4.0) requires langchain-text-splitters (>=0.3.8,<1.0.0). Because langchain-text-splitters (0.3.8) requires Python <4.0,>=3.9 and no versions of langchain-text-splitters match >0.3.8,<1.0.0, langchain-text-splitters is forbidden. Thus, langchain is forbidden. So, because qa-bot depends on langchain (^0.3.26), version solving failed. * Check your dependencies Python requirement: The Python requirement can be specified via the python or markers properties For langchain-text-splitters, a possible solution would be to set the python property to ">=3.10,<4.0"
모두를 위한 대규모 언어 모델 LLM Part 5 - LangGraph로 나만의 AI 에이전트 만들기
안녕하세요, 강의 감사히 잘 보고 있습니다. Plan-and-Execute 강의 코드 보다가 궁금한 점이 있는데요, 다른 agent 구성에서는 동기 방식으로 def를 정의했었는데, 여기에서는 async와 await, .ainvoke의 비동기 방식으로 agent를 정의하는 것 같아 왜 여기서는 비동기 방식으로 정의하는지 여쭤봅니다. plan -> execute -> replan 자체도 순차적으로 실행되는 것 같은데(RAG와 같이), 비동기 방식이 어떤 이유로 필요한 것인지 질문드립니다. 감사합니다.
모두를 위한 대규모 언어 모델 LLM Part 5 - LangGraph로 나만의 AI 에이전트 만들기
안녕하세요, 강의 잘 듣고 있습니다. 강의자료 관련하여 Structured outputs 관련 자료는 '강의 슬라이드 다운로드'를 통한 다운로드에도 포함되어 있지 않고 강의 화면에서 아래로 스크롤을 내려서도 확인할 수 없는데, 어디서 받을 수 있는지 답변주시면 감사드리겠습니다.
안녕하세요. 강의들 듣다가 질문이 생겨서 문의 드립니다. 첫번째, 툴이 너무 많은경우 어떤 식으로 처리해야 하나요? 즉, 사용할수 있는 툴이 천개 정도 된다면 LLM 호출시 마다 모든 툴에 대한 description 등을 같이 보내서 알맞은 툴을 선택하라고 할 수 없을 것 같은데 좋은 방법이 있을 까요? 두번째, 툴들 중 비슷한 역할을 하거나 중복되는 툴이 있을 때는 어떻게 처리해야 하나요? 사용자 정의 툴들을 등록하다 보면 기존에 있었던 것과 동일하지만 이름만 다르거나 아예 중복되는 툴들이 생길 수 있는데 이럴때 처리 방법이 궁금합니다.
여러 벡터 데이터베이스가 나왔는데 혹시 Elasticsearch 를 docker로 설치하고 사용하는 경우도 있는지 궁금합니다. Elasticsearch 도 벡터 데이터베이스를 지원한다는 글을 읽은바가 있고, 검색엔진 분야에서는 Open 소스로 많이 활동되다는 점에서 활용성이 좋아보여서 질문 드립니다.
graphRAG - Neo4J로 구현하는 지식 그래프 기반 RAG 시스템 (feat. LangChain)
vscode에서 uv로 가상환경 생성후 .env 파일에서 # Neo4J 설정 - AuraDB NEO4J_URI=neo4j+s://{id}.databases.neo4j.io NEO4J_USERNAME=neo4j NEO4J_PASSWORD={PASSWORD} NEO4J_DATABASE=neo4j 해당 방식 적용 후, AuraDB 연동을 해도 적용이 안되고 아래와 같이 에러가 뜹니다. ValueError: Could not connect to Neo4j database. Please ensure that the url is correct 해결책 문의 드립니다. P.S colab에서는 올려주신 KG_P1_01_neo4j_Introduction.ipynb 실행하니 동작하네요. 왜 저의 로컬에서는 이런 현상이 일어나는 걸까요?
안녕하세요, gemini를 이용해서 챗봇 생성중에 있습니다. 그런데 하기와 같이 챗봇을 llm과 연동하는 중에 에러가 계속 발생합니다. gpt한테 계속 물어가면서 에러잡고있는데 계속 동일한 에러만 나오네요. ㅠ 어떻게 개선할 수 있을까요? 조언부탁드립니다. 감사합니다. 코드) import streamlit as st from langchain import hub from dotenv import load_dotenv from langchain_google_genai import GoogleGenerativeAIEmbeddings from langchain_pinecone import PineconeVectorStore from langchain_google_genai import ChatGoogleGenerativeAI from langchain.chains import RetrievalQA from langchain.prompts import ChatPromptTemplate st.set_page_config(page_title="영향분석 챗봇", page_icon="★") st.title("영향분석 챗봇") st.caption("System 변경 영향 분석") load_dotenv() # 세션 상태에 메시지 리스트가 없으면 초기화 if 'message_list' not in st.session_state: st.session_state.message_list = [] # 이전 메시지 출력 for message in st.session_state.message_list: with st.chat_message(message["role"]): st.write(message["content"]) def get_ai_message(user_message): try: # 입력 메시지 확인 if not isinstance(user_message, str) or not user_message.strip(): return "질문이 비어 있습니다. 유효한 질문을 입력해 주세요." print(f"user_message: {user_message}") # user_message의 내용 출력 print(f"user_message length: {len(user_message)}") # 문자열 길이 출력 print(f"user_message type: {type(user_message)}") # 타입 출력 # Google Generative AI Embeddings 모델 초기화 embedding = GoogleGenerativeAIEmbeddings(model='models/gemini-embedding-exp-03-07') index_name = 'uml-index' database = PineconeVectorStore.from_existing_index(index_name=index_name, embedding=embedding) llm = ChatGoogleGenerativeAI(model="gemini-2.0-flash") prompt_template = hub.pull("rlm/rag-prompt") retriever = database.as_retriever(search_kwargs={'k': 4}) # RetrievalQA 인스턴스 생성 qa_chain = RetrievalQA.from_chain_type(llm, retriever=retriever, chain_type_kwargs={"prompt": prompt_template}) dictionary = ["External Entity -> actor"] prompt = ChatPromptTemplate.from_template(f""" 사용자의 질문을 보고, 우리의 사전을 참고해서 사용자의 질문을 변경해주세요. 만약 변경할 필요가 없다고 판단된다면, 사용자의 질문을 변경하지 않아도 됩니다. 그런 경우에는 질문만 리턴해주세요. 사전 : {dictionary} 질문 : {{question}} """) dictionary_chain = prompt | llm uml_chain = {"query": dictionary_chain} | qa_chain ai_message = uml_chain.invoke({"question": user_message}) return ai_message except Exception as e: print(f"오류 발생: {repr(e)}") # 오류 메시지 출력 print(f"입력된 user_message: {user_message}") # 오류 발생 시 입력된 메시지 출력 return f"오류가 발생했습니다: {repr(e)}" # 사용자 입력 처리 if user_question := st.chat_input(placeholder="CR 내용을 첨부해주세요"): with st.chat_message("user"): st.write(f"사용자 질문: {user_question}") st.session_state.message_list.append({"role": "user", "content": user_question}) ai_message = get_ai_message(user_question) with st.chat_message("AI"): st.write(ai_message) st.session_state.message_list.append({"role": "AI", "content": ai_message}) 에러) user_message: 시스템에 연결된 External Entity를 알려주세요 user_message length: 31 user_message type: <class 'str'> 오류 발생: GoogleGenerativeAIError('Error embedding content: bad argument type for built-in operation') 입력된 user_message: 시스템에 연결된 External Entity를 알려주세요
13번째 동영상 들으면서 따라하는 중이고 OpenAI API 사용 중인데, 아래 코드만 돌리면, PineconeApiException HTTP response body: {"code":11,"message":"Error, message length too large: found 15431073 bytes, the limit is: 4194304 bytes","details":[]} 이러한 에러가 뜹니다. 이를 해결하기 위해서, chunk_size = 10, chunk_overlap=0 으로 줄였는데도 계속 에러가 떠요. 어떻게 하면 해결할 수 있나요? database = PineconeVectorStore.from_documents( document_list, embedding, index_name=index_name )
안녕하세요 현재 유료 결제나 외부로 API를 연동하는 것이 사내 보안 규정 상 어려운 상황입니다. 강의에 나온 대로 langchain-core 라이브러리를 활용하는 경우 core 내부에 langsmith를 쓰는 import 가 있어 langsmith를 반드시 사용 해야하는 상황입니다. langsmith가 유료로 변경되면 API 키가 필요한 상황이라 현재 사내에서는 사용이 어려울 것 같습니다. 이런 경우 langsmith를 사용하지 않고 유사하게 기능을 구현하는 방법이 있는지 궁금합니다.