인프런 커뮤니티 질문&답변
new_question에 대한 답 출력
해결된 질문
작성
·
28
0
new_question 이 ''연봉 5천만원인 거주자의 소득세는 얼마인가요?'' 이라는 질문만 내놓고, 답은 내놓지 않습니다
%pip install python-dotenv langchain langchain-upstage langchain-community langchain-text-splitters langchain-pinecone docx2txtfrom 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_upstage import UpstageEmbeddings
# 환경변수를 불러옴
load_dotenv()
# OpenAI에서 제공하는 Embedding Model을 활용해서 `chunk`를 vector화
embedding = UpstageEmbeddings(model="embedding-query")from langchain_pinecone import PineconeVectorStore
# 데이터를 처음 저장할 때
index_name = 'tax-upstage-index'
database = PineconeVectorStore.from_documents(document_list, embeddin
g, index_name=index_name)query = '연봉 5천만원인 직장인의 소득세는 얼마인가요?'
# `k` 값을 조절해서 얼마나 많은 데이터를 불러올지 결정
retrieved_docs = database.similarity_search(query, k=3)retrieved_docsfrom langchain_upstage import ChatUpstage
llm = ChatUpstage()from langchain_core.prompts import PromptTemplate
prompt_with_template = '아래 질문에 답변해주세요:\n\n {query}'
prompt_template = PromptTemplate(template=prompt_with_template, input_variables={"query"})from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
dictionary = ["사람을 나타내는 표현 -> 거주자"]
prompt = ChatPromptTemplate.from_template(f"""
사용자의 질문을 보고, 우리의 사전을 참고해서 사용자의 질문을 변경해주세요.
만약 변경할 필요가 없다고 판단된다면, 사용자의 질문을 변경하지 않아도 됩니다.
그런 경우에는 질문만 리턴해주세요
사전: {dictionary}
질문: {{question}}
""")
dictionary_chain = prompt | llm | StrOutputParser()
tax_chain = {"query": dictionary_chain} | prompt_templatenew_question = dictionary_chain.invoke({"question": query})new_questionRetrievalQA 가 사라져서 PromptTemplate 랑 Pinecorn으로 어떻게든 대체하려고 했는데 엉망이 된거 같습니다. ㅠㅠ
어떻게 하면 답까지 내놓게 할 수 있을까요?
답변 2
0
new_question은 dictionary_chain을 활용해서 사용자의 질문을 검색이 조금 더 잘되게 수정하는 용도입니다. 코드를 조금 더 따라가보시면 답변을 얻으실 수 있을거에요!
0
안녕하세요, 인프런 AI 인턴입니다. 다화 (만점)님께서 질문하신 내용에 대해 검토해보겠습니다.
주어진 코드에서 dictionary_chain.invoke와 new_question을 사용하는 부분에서 제대로 된 결과가 생성되지 않는 문제를 겪고 계신 것 같습니다. 이 문제는 프롬프트 템플릿과 체인의 구성에서 발생할 수 있습니다. 여러분이 사용하려는 처리 과정 일부가 빠져있거나, 툴체인의 적절한 연결이 되지 않았기 때문일 수 있습니다.
문제 해결 가이드
문제 요약
dictionary_chain이 사용자의 질문을 받고 의도한 대로 변환하지 못함.
- 최종
new_question변수에 적절한 답변을 생성하지 못함.
해결 방안
Dictionary Chain 작동 확인: 현재 설정의 프롬프트와 체인을 점검하여, 변환하고자 하는 질문이 제대로 변환 및 전달되는지 확인해야 합니다.
Prompt and Chain 수정
- Prompt Template:
prompt_with_template과prompt_template이 잘못 연결된 것 같습니다.ChatPromptTemplate을 통해 정의된 부분이 일관되게 작동하도록 해주세요.
- Prompt Template:
from langchain_core.prompts import PromptTemplate
from langchain.chains import RetrievalQA
# QA 체인을 통해 질문을 처리합니다.
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=database.as_retriever(),
chain_type_kwargs={"prompt": prompt_with_template}
)
데이터베이스 및 벡터 스토어 활용:
- Pinecone 등 벡터 데이터베이스의 설정이 올바른지 검토해야 합니다. 적절하게 데이터가 저장되고 검색되는지 확인하세요.
- Pinecone 등 벡터 데이터베이스의 설정이 올바른지 검토해야 합니다. 적절하게 데이터가 저장되고 검색되는지 확인하세요.
LLM 및 Embedding 확인:
- 사용하고 있는
UpstageEmbeddings와ChatUpstage의 설정이 올바르게 연결되어 있는지 확인하십시오.
- 사용하고 있는
최종 실행 과정:
qa_chain으로query를 처리하여 적절한 응답을 생성하고 있는지 최종 결과를 수동적으로 확인 후 디버깅 하세요.
추가 링크 및 학습 자료
- 관련 질문과 답변 자료를 통해 더 많은 정보를 얻을 수 있습니다. 다양한 실습 사례를 통해 자신의 코드에 적용할 수 있는 힌트를 얻으실 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





