3.6 human_in_the_loop 3rd case
강의를 들으면서 문득 든 궁금증인데, ai메세지가 도구를 잘못 선택했을 때(3번케이스)를 구현할 때, 왜 tool message를 수정하셨나요? tool 노드 호출전에 interrupt 해서 ai_message의 tool_calls에서 툴네임을 변경해도 되지 않을까해서요
case2번 : 도구는 잘 선택했을 때 쿼리가 잘못된 경우에서는 ai_message의 쿼리를 변경했듯이 3번의 케이스에선 ai_message의 툴네임을 변경해도 되지 않을까 의문이 들었습니다.
Answer 1
0
안녕하세요! 좋은 질문 감사합니다.
TL;DR
핵심부터 말씀드리면, case 3(update_tool)은 "도구 자체를 바꾸는 것"이 아니라 "도구 호출을 건너뛰고, 사람이 직접 도구 결과를 제공하는 것"입니다.
코드를 다시 보시면:
if review_action == 'update_tool':
updated_tool_message = {
'tool_call_id': tool_call['id'],
'name': tool_call['name'],
'role': 'tool',
'content': review_data # 사람이 직접 제공하는 "결과값"
}
return Command(goto='agent', update={'messages': [updated_tool_message]})여기서 두 가지를 확인할 수 있는데요
goto='agent'tools노드가 아니라 바로agent로 갑니다.즉, 실제로 도구를 실행하지 않습니다.
role: 'tool'인 메시지를 직접 만들어서 삽입을 하게 되는데, 마치 도구가 실행된 것처럼 LLM에게 결과를 전달하는 가짜 ToolMessage입니다.
이 패턴의 의도는 이렇습니다: AI가 잘못된 도구를 선택했을 때, 사람이 "이 도구 말고 웹에서 검색해줘"라고 자연어로 피드백을 주면, 그 피드백 자체가 ToolMessage의 content로 들어가서 agent가 다시 판단할 수 있게 되는 것입니다.
실제 예시에서도 확인할 수 있습니다:
Command(resume={"action": "update_tool", "data": "arxiv말고 web에서 검색해주세요"})여기서 arxiv말고 web에서 검색해주세요 라는 문자열이 ToolMessage의 content가 되어 agent에게 전달되고, agent는 이를 보고 다음에 duckduckgo_search를 호출하게 됩니다.
그러면 질문하신 것처럼 ai_message의 tool_calls에서 tool name을 직접 바꾸면 안 되는 것인지 의문이 들 수 있는데요,
기술적으로 가능은 하지만, 실용적으로 문제가 있습니다:
tool_name을 바꾸면 args도 함께 바꿔야 합니다. 각 도구마다 파라미터 스키마가 다르기 때문입니다. 강의에서 진행한 케이스의 경우arxiv도구와duckduckgo_search도구의 인자 형식이 동일한데요(모두query를 사용함), 만약 스키마가 다른 경우에는 에러가 발생합니다.사람이 도구 이름과 정확한 인자까지 알아서 지정해야 하므로 human-in-the-loop의 편의성이 크게 떨어집니다.
반면 case 3 방식은 사람이 자연어로 피드백만 주면, agent(LLM)가 알아서 적절한 도구와 인자를 다시 선택하므로 훨씬 유연합니다.
마크다운을 텍스트 파일로 변환하기
0
10
1
max token을 제한하는게 왜 성능을 개선하게 되는걸까요?
0
41
2
pyzerox 유니코드 에러
0
75
2
영상 메타데이터 생성 관련 LLM 활용 질문
0
72
1
종합부동산세 부분 tool 사용 질문 드립니다.
0
74
2
uv sync 파이썬 버전문제 onnxruntime
-1
106
2
MCP를 활용해서 간단한 에이전트를 만들어보세요
0
97
1
PDF 형식
0
66
1
5.3 langchain-mcp-adpater를 활용한 MCP 도구 사용 tool_list 지연 사유
0
91
2
summary 를. 시스템메세지에 추가하는 부분에 관하여
0
70
3
병렬 처리 중 retrieve 관련 궁금한 사항
0
76
1
query 에 대한 answer 결과값이 나오지 않습니다.
0
95
2
사람과 관련된 표현이 없는데 rewrite 로 이동하지 않는경우
0
77
1
retriever 관련 질문
0
65
1
인터룹 관련 질문
0
49
2
2.4 Self-RAG 결과가 달라요!
0
78
2
md vs txt 차이..
0
140
2
OpenAI API 호출 때문에 발생하는 Error code: 429 문제
0
115
2
단순 도구 사용과 도구를 가진 에이전트를 사용하는 것의 차이가 궁금합니다.
0
88
1
LangChain과 LangGraph v1
0
137
1
2.4 강의 관련 질문(답변을 검증하는 self rag)
0
75
2
후속강의 문의
0
74
2
3.6 강의 관련 질문(interrupt 관련)
0
51
1
그래프 구현 조언 부탁드립니다!
0
77
2

