inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

LangGraph를 활용한 AI Agent 개발 (feat. MCP)

Hub에서 다운 받은 프롬프트에 이미지 추가하기

해결된 질문

184

이성규

작성한 질문수 4

0

안녕하세요.

 

저는 이번에 pdf를 입력하고 그것을 기반으로하는 멀티모달 graph를 streamlit을 통해 구현했습니다.

 

근데 제가 이번에 Langchain 관련 코드를 몰라서 완성 된 것과는 별개로 너무 투박하게 코드가 작성된 것 같아서 질문드립니다.

 

질문 요약 :

hub.pull("rlm/rag-prompt")한 프롬포트 str로 뽑기 or

이미지 추가해서 메세지만드는 방법

 

 

 

GPT 모델은

message_content = []
message_content.append({"type": "text", "text": prompt})
message_content.append(
                {"type": "image_url", "image_url": {"url": f"data:{image_type};base64,{image_data}"}}
            )
message = HumanMessage(content=message_content)

# 응답받기
client = ChatOpenAI(model='gpt-4o')
response = client.invoke([message])

response.content ## str임!

해당 모양대로 메세지를 만들고 invoke하면 이미지포함 메세지가 되는 것을 알았습니다.

이를 통해 이미지에 보이는것은 ~~문서에있니? 이런식으로 구현하고자 했습니다.

 

generate 함수(노드) 에서 이미지와 텍스트를 같이 메세지로 전달하고 싶은데 조금 어려움을 겪었습니다. generate 함수 코드입니다.

해당 함수는 sate['context']의 내용을 프롬포트에 넣고 이를 이미지와 함께 보내고자합니다.

# 허브에서 RAG 프롬프트를 가져옵니다
generate_prompt = hub.pull("rlm/rag-prompt")

# 지정된 매개변수로 언어 모델을 초기화합니다
generate_llm2 = ChatOpenAI(model='gpt-4o')

def generate(state: AgentState) -> AgentState:
    """
    주어진 state를 기반으로 RAG 체인을 사용하여 응답을 생성합니다.

    Args:
        state (AgentState): 사용자의 질문과 문맥을 포함한 에이전트의 현재 state.

    Returns:
        AgentState: 생성된 응답을 포함하는 state를 반환합니다.
    """
    
    context = state['context']
    query = state['query_message']
    
    make_massage = []
    massage = generate_prompt.invoke({'question': query, 'context': context})
    messages = massage.to_messages()
    # print(massage)
    # print("--------------------------------")
    # print(messages)
    # print("--------------------------------")
    # print(messages[0])
    # print("--------------------------------")
    # print(messages[0].content)
    # print("--------------------------------")
    make_massage.append({"type": "text", "text": messages[0].content})


    if state['query_img'] != "":
        make_massage.append({"type": "image_url", 'image_url': {"url": state['query_img']}})
    

    final_massage = HumanMessage(content=make_massage)
    response = generate_llm2.invoke([final_massage])

    
    answer = { "type" : "RAGtext", "message" : response.content}
    
    print(f"call : generate")
    
    return {'answer': answer}

 

처음에는 prompt에서 str을 추출하려고 했는데 조금 어려웠습니다;

from langchain_openai import ChatOpenAI
from langchain import hub

# 허브에서 RAG 프롬프트를 가져옵니다
generate_prompt = hub.pull("rlm/rag-prompt")

print(generate_prompt.messages[0])

print(generate_prompt.messages[0].content) # 'HumanMessagePromptTemplate' object has no attribute 'content' 오류

print(generate_prompt.messages[0].invoke({"context" : "test", "question" : "test22" })) # 오류;; 

 

그렇기에 일단 invoke 를하고 완성된 text를 찾아 넣어주었습니다.

 

 

make_massage.append({"type": "text", "text": messages[0].content})

이런식으로 텍스트를 추출해서 다시 메세지를 구성하는게아니라.

이미지 url을 알고있으니 추가로 더 넣어주는 뭔가 그런 세련된 방법이 없었을까요?

 

분명 HumanMessagePromptTemplate 클래스나 그런것들다루는거라 기초 문법인거 같은데 조금 많이 헤매서 더 좋은 코드가 있을까 싶어 이렇게 질문을 드립니다.

 

프롬프트엔지니어링 llm ai-agent langgraph

답변 1

1

제이쓴

안녕하세요 성규님! 답변을 드려보자면,


hub.pull에서 가져오는 프롬프트는 허브 사이트에 표시가 되어있습니다. 다른분께서 질문으로 올려주셔서 설명한적이 있는데요, 요약하자면 허브에 작성되어있는 내용을 기반으로 ChatPromptTemplate으로 작성하시면 됩니다.

랭체인에서 이미지를 프롬프트에 넣는 방법은 공식문서에 설명되어있습니다. 다만 rag-prompt의 context에 이미지를 넣을 수 없기 때문에, 허브에 있는 텍스트만 그대로 가져와서 이미지를 메세지로 넣어주는 편이 더 깔끔해보입니다. 추가로 궁금하신 부분이 있으시면 말씀해주세요~

1

이성규

기본적인 질문 인데 항상 친절히 자세하게 잘 알려주셔서 감사합니다!

max token을 제한하는게 왜 성능을 개선하게 되는걸까요?

0

35

2

pyzerox 유니코드 에러

0

75

2

영상 메타데이터 생성 관련 LLM 활용 질문

0

67

1

종합부동산세 부분 tool 사용 질문 드립니다.

0

74

2

uv sync 파이썬 버전문제 onnxruntime

-1

103

2

MCP를 활용해서 간단한 에이전트를 만들어보세요

0

96

1

PDF 형식

0

64

1

5.3 langchain-mcp-adpater를 활용한 MCP 도구 사용 tool_list 지연 사유

0

91

2

3.6 human_in_the_loop 3rd case

0

81

1

summary 를. 시스템메세지에 추가하는 부분에 관하여

0

70

3

병렬 처리 중 retrieve 관련 궁금한 사항

0

76

1

query 에 대한 answer 결과값이 나오지 않습니다.

0

94

2

사람과 관련된 표현이 없는데 rewrite 로 이동하지 않는경우

0

75

1

retriever 관련 질문

0

65

1

인터룹 관련 질문

0

49

2

2.4 Self-RAG 결과가 달라요!

0

77

2

md vs txt 차이..

0

134

2

OpenAI API 호출 때문에 발생하는 Error code: 429 문제

0

112

2

단순 도구 사용과 도구를 가진 에이전트를 사용하는 것의 차이가 궁금합니다.

0

88

1

LangChain과 LangGraph v1

0

136

1

2.4 강의 관련 질문(답변을 검증하는 self rag)

0

73

2

후속강의 문의

0

73

2

3.6 강의 관련 질문(interrupt 관련)

0

50

1

그래프 구현 조언 부탁드립니다!

0

76

2