inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

RAG를 활용한 LLM Application 개발 (feat. LangChain)

3.2.1 OpenAIEmbeddings 대신 UpstageEmbeddings를 활용하는 방법

답변에 Source 추가하기

해결된 질문

194

foqlzm12345

작성한 질문수 3

0

안녕하세요 강사님

답변에 마지막에 참고한 문서의 source를 남겨 신뢰도를 올리려 합니다.
prompt를 다음과 같이 추가했습니다
1. 모든 답변에는 직접적으로 참조한 자료의 목록을 추가해야 합니다. 최종 답변에 관련이 없는 자료는 제외합니다. 2. 답을 모를 경우 답을 지어내지 말고 [정확한 답을 찾을 수 없지만, 다음 링크를 확인해 보시기 바랍니다] 라고 말한 뒤 자료 링크를 목록으로 추가합니다.

문제는 출처를 남길 때 AI가 참고한 자료를 남길 때도 있지만 AI가 존재하지 않는 source를 문서내의 링크나 내용과 조합해서 만들어내는 일종의 hallucination이 발생하는 것 입니다 ( 정확한 원인은 모르겠습니다 )

 

따라서 prompt 말고 직접 data에서 pick(answer)를 하지 않고 content속 metadata : souce를 꺼내고자 하는데 강의에서의 stream으로 응답주기 전에 answer 하단 부에 [출처 : 1. aaa, 2. bbb] 하기 위해서는 chain을 수정해야 할 까요?

 

지금으로서는

ai_response = final_chain.pick("answer").stream(
    {
        "question": user_message
    },
    config={
        "configurable": {"session_id": "abc123"}
    }
)
ai_resource = final_chain.pick("context").invoke(
    {
        "question": user_message
    },
    config={
        "configurable": {"session_id": "abc123"}
    }
)

이렇게 두번 호출해서 resource는 반복문을 통해서 떠내는 방식으로 구현해보았는데 절대 올바른 방법은 아닌 것 같아서요..

vector-database llm langchain rag openai-api

답변 2

0

제이쓴

너무너무 좋은 고민입니다! 질문에 대한 답변은 4.4강에 있습니다 계속 화이팅하세요~

0

foqlzm12345

추가로 resource 를 st.write 하면 이후 질문시 음영처리 되면서 사용자 질문 section으로 넘어 가는데 어떤부분에서 일어나는 현상인지 궁금합니다. streamlit을 처음 사용해봐서 알 수가 없네요..

# source 데이터 꺼내기 위한 함수
def write_sources(documents):
    sources = set()  # 중복을 제거하기 위해 set 사용
    st.write("\n*이 정보는 다음의 자료를 기반으로 제공되었습니다.*")

    unique_sources = []

    for doc in documents:
        source = doc.metadata.get("source")
        if source not in sources:
            sources.add(source)
            unique_sources.append(f"\n- {source}")

    return unique_sources

with st.spinner("답변을 생성하는 중입니다"):
    ai_response, ai_resource = get_ai_response(user_question)
    with st.chat_message("ai"):
        ai_message = st.write_stream(ai_response)
        st.session_state.message_list.append({"role": "ai", "content": ai_message})
        # st.write(f"AI resource: {ai_resource}") # stream 문제는 아닌 것으로 추정
        st.write_stream(write_sources(ai_resource)) # 해당 부분이 넘어감
image.png

0

제이쓴

추측하기로는 ai_resource.invoke() 의 리턴값이라서 iterable이 아니라서 에러가 나는게 아닌가 싶네요.

 

.stream() 으로 가져온 답변은 st.write_stream() 을 하고, .invoke() 로 가져온 답변은 st.write() 를 해야합니다

소득세법 docx 파일 공유 요청건

0

65

1

EXAONE 모델 불러오기 안되는 문제

0

89

2

[5.1 강의] LLM Evaluator에 Upstage를 사용하는 방법 + 변경된 Langsmith Docs를 참고하여 구현하는 방법 공유

0

104

2

강의 9에 QA관련된 import가 되지 않네요

0

111

2

🚨 python3.14 를 쓰고 계시면 chroma 에서 ConfigError 가 발생합니다.

1

200

1

강의와 책 관련 질문

0

87

1

문서 전처리 고민

0

111

1

RAG 배포 질문드립니다

0

95

1

강의 내용과는 별개로 궁금한 점이 있습니다

0

89

2

폐쇄망 챗봇 모델

0

94

1

AI agent 쿠폰

0

95

2

저는 왜 그대로 했는데 답변이 틀리게 나오는지 모르겠네요

0

102

2

langchain howto/sequence는 지금 doc 공식 사이트 어디서 확인할 수 있나요?

1

95

1

new_question에 대한 답 출력

0

74

2

랭체인 라이브러리

0

148

2

[LangGraph를 활용한 AI Agent 개발] 쿠폰 유효기간

0

106

1

postgresql의 pgvector 벡터는 어떤가요?

0

345

2

doc관련

0

128

2

load_dotenv() 실행 False

0

96

1

RAG 답변 개선을 위한 정답지 활용 구조 검토 요청

0

119

2

3.2 from langchain.chains ~ 에서 모듈을 찾지 못할 때.

1

406

2

강의 완료 오류

0

89

1

hub.pull 이슈

0

131

2

[3.3 강의] Upstage를 사용한 RAG 구현 성공기 공유

1

150

1