LLM 애플리케이션: 상담원 대화에 대한 반영(도구 호출 포함)
ChatGPT와 Kimi와 같은 Q&A 제품은 Kimi의 LLM 대화, 링크 대화, 파일 대화, 네트워킹 대화 도구와 같은 에이전트 대화(사용자와 상호작용하기 위해 다양한 도구를 호출하는 기능)를 사용하고 있습니다. 예를 들어, 채팅GPT, 웬신 이인, 쉰페이 스타파이어는 웬성 다이어그램, 코드 작성기, 수학 계산기 등의 도구로 확장되었습니다.


ChatGPT4용 상담원 대화
현재 에이전트 대화 기능을 달성하기 위한 주요 프레임워크는 2022년 프린스턴 대학과 구글이 제안한 ReAct(ReAct [1]는 사고와 행동을 혼합하는 큐워드 접근 방식입니다. 그 역사적 진화 과정은 아래와 같습니다:

위 차트에 있는 3가지 방법은 다음과 같습니다:
이유 전용:다단계 사고에 연쇄 사고를 사용하고, 프롬프트에 질문을 입력하기 전에 "단계별로 생각하자"라는 프롬프트를 추가하여 다단계 사고를 안내하고 직접 답을 제공하지 않지만 단점은 분명합니다: 이유 닫힌 문만하지 말라고 생각하고, 생각하기 전에 세상을 이해하기 위해 외부 세계를 보러 나가지 않을 것이므로 환각을 일으키고 왕조의 변화는 알지 못합니다;
행위 전용:한 번의 행동으로 관찰을 얻는다단점: 생각 없이 바로 실행하다 보면, 마지막에 내가 원하는 것과 같은 답이 나오지 않을 수 있습니다;
ReAct:생각과 행동의 조화, 즉 행동하기 전에 생각하고, 행동의 결과를 되돌아보고, 다음에 무엇을 해야 할지 생각한 다음 행동하고, 그 과정을 반복해서 반복하여 최종적인 답이 나온다는 것을 알고 있습니다.
확장: 2023년에도 자기반성(Reflexion)의 프레임 워크에 대해 아래 그림과 같이 반성에 참여했으며 여기서는 자세히 설명하지 않습니다. 또한 관심있는 친구들은 "에이전트 연구 - 19 가지 유형의 에이전트 프레임 워크 비교"의 큰 타오바오 기술 공개 번호를 볼 수 있으며, 논문을 보내기 위해이 작품은 실제로 더 많이 플레이할수록 더 많은 꽃을 피울 수 있습니다.

ReAct 백서에 언급된 사례를 보면 위의 논리와 장단점을 더 잘 설명할 수 있습니다:

ReAct의 프롬프트는 다음과 같습니다:
"""
상담원 프롬프트의 입력 변수에 대한 설명입니다:
- 도구: 도구 집합에 대한 설명, "{tool.name}: {tool.description}" 형식입니다.
- tool_names: 도구 이름 목록
- 기록: 사용자와 상담원 간의 대화 기록입니다(상담원 채팅 중간에 여러 차례의 ReAct는 대화 기록에 포함되지 않습니다).
- 입력: 사용자 질문
- 에이전트_스크래치패드: 중간 작업 및 관찰 프로세스.
의 형식은 "\n관찰: {관찰}\n생각: {행동}"으로 지정됩니다.
그런 다음 에이전트_스크래치패드(상담원의 생각 기록)를 전달합니다.
"""
에이전트_프롬프트 = """
다음 질문에 최선을 다해 답하세요. 정답을 맞히면 일부 도구를 적절히 사용할 수 있습니다. 다음 도구에 액세스할 수 있습니다.{도구}
다음 형식을 사용합니다.
질문: 답변해야 하는 입력 질문1
생각: 항상 해야 할 일과 사용할 도구에 대해 생각해야 합니다.
작업: 수행할 작업은 {tool_names} 중 하나이어야 합니다.
액션 입력: 액션에 대한 입력
관찰: 행동의 결과
... (이 생각/행동/행동 입력/관찰은 0회 이상 반복할 수 있습니다.)
이제 최종 답을 알았습니다.
최종 답안: 원래 입력 질문에 대한 최종 답안입니다.
시작!역사: {역사}
질문: {입력}
생각: {에이전트_스크래치패드}""""
ReAct 애플리케이션 순서도는 아래와 같습니다:

인터넷에 좋은 예가 있어 여기서는 설명 목적으로 참조합니다[2]:
그렇다고 가정해 보겠습니다:
사용자 질문"현재 시장에서 장미의 평균 가격은 얼마인가요? 여기에 151 TP3T를 더해서 판매한다면 가격은 어떻게 책정해야 할까요?"
도구:: {'bing web search': Bing Search를 사용하여 웹에서 오픈 소스 정보를 검색하는 도구, 'llm-math': 빅 모델과 Python으로 수학을 수행하는 도구}.
그런 다음 첫 번째 대화에 대한 입력은 다음과 같습니다:
다음 질문에 최선을 다해 답하세요. 정답을 맞히면 일부 도구를 적절히 사용할 수 있습니다. 다음 도구에 액세스할 수 있습니다.
bing-web-search: 웹에서 오픈 소스 정보를 검색하기 위한 Bing 검색 도구
llm-math: 빅 모델과 Python으로 수학을 하기 위한 도구
다음 형식을 사용합니다.
질문: 답변해야 하는 입력 질문1
생각: 항상 해야 할 일과 사용할 도구에 대해 생각해야 합니다.
액션: 수행할 액션으로, [빙-웹-검색, llm-math] 중 하나이어야 합니다. 액션 입력: 액션에 대한 입력입니다.
관찰: 행동의 결과
... (이 생각/행동/행동 입력/관찰은 0회 이상 반복할 수 있습니다.)
이제 최종 답을 알았습니다.
최종 답안: 원래 입력 질문에 대한 최종 답안입니다.
시작!
역사.
질문: 현재 시장에서 장미의 평균 가격은 얼마인가요? 15%의 마크업으로 장미를 판매한다면 가격은 어떻게 책정해야 하나요?
생각.
출력을 가져와 구문 분석하여 생각, 행동 및 행동 입력을 얻습니다:
생각: 필요한 정보를 빠르게 찾을 수 있도록 검색 도구를 사용하여 답을 찾아야겠습니다.
동작: bing-웹 검색
작업 입력: 장미의 평균 가격
빙 웹 검색 도구를 호출하여 "장미의 평균 가격"을 입력하고 "웹에 따르면, 미국의 장미 한 다발은 80.16달러입니다."라는 반환 콘텐츠를 가져옵니다. 그런 다음 위의 콘텐츠를 정리하여 웹사이트에 입력합니다. 그런 다음 위의 콘텐츠를 ReAct의 프롬프트 단어 템플릿에 넣고 두 번째 대화 입력을 시작하세요:
다음 질문에 최선을 다해 답하세요. 정답을 맞히면 일부 도구를 적절히 사용할 수 있습니다. 다음 도구에 액세스할 수 있습니다.
bing-web-search: 웹에서 오픈 소스 정보를 검색하기 위한 Bing 검색 도구
llm-math: 빅 모델과 Python으로 수학을 하기 위한 도구
다음 형식을 사용합니다.
질문: 답변해야 하는 입력 질문1
생각: 항상 해야 할 일과 사용할 도구에 대해 생각해야 합니다.
액션: 수행할 액션으로, [빙-웹-검색, llm-math] 중 하나이어야 합니다. 액션 입력: 액션에 대한 입력입니다.
관찰: 행동의 결과
... (이 생각/행동/행동 입력/관찰은 0회 이상 반복할 수 있습니다.)
이제 최종 답을 알았습니다.
최종 답안: 원래 입력 질문에 대한 최종 답안입니다.
시작!
역사.
질문: 현재 시장에서 장미의 평균 가격은 얼마인가요? 15%의 마크업으로 장미를 판매한다면 가격은 어떻게 책정해야 하나요?
생각: 필요한 정보를 빠르게 찾을 수 있도록 검색 도구를 사용하여 답을 찾아야겠습니다.
동작: bing-웹 검색
작업 입력: 장미의 평균 가격
관찰: 온라인 정보에 따르면 미국의 장미 꽃다발 한 송이는 80.16달러에 판매되고 있습니다.
생각.
출력을 가져와 구문 분석하여 생각, 행동 및 행동 입력을 얻습니다:
생각: 그 위에 15% 마크업이 얼마인지 계산해봐야겠습니다.
작업: llm-math
액션 입력: 80.16*1.15
llm-math 도구를 호출하고 "80.16*1.15"를 입력한 다음 반환 콘텐츠 관찰: "92.184"를 가져옵니다. 그런 다음 위의 내용을 ReAct 프롬프트 단어 템플릿에 넣고 세 번째 대화 입력을 엽니다:
다음 질문에 최선을 다해 답하세요. 정답을 맞히면 일부 도구를 적절히 사용할 수 있습니다. 다음 도구에 액세스할 수 있습니다.
bing-web-search: 웹에서 오픈 소스 정보를 검색하기 위한 Bing 검색 도구
llm-math: 빅 모델과 Python으로 수학을 하기 위한 도구
다음 형식을 사용합니다.
질문: 답변해야 하는 입력 질문1
생각: 항상 해야 할 일과 사용할 도구에 대해 생각해야 합니다.
액션: 수행할 액션으로, [빙-웹-검색, llm-math] 중 하나이어야 합니다. 액션 입력: 액션에 대한 입력입니다.
관찰: 행동의 결과
... (이 생각/행동/행동 입력/관찰은 0회 이상 반복할 수 있습니다.)
이제 최종 답을 알았습니다.
최종 답안: 원래 입력 질문에 대한 최종 답안입니다.
시작!
역사.
질문: 현재 시장에서 장미의 평균 가격은 얼마인가요? 15%의 마크업으로 장미를 판매한다면 가격은 어떻게 책정해야 하나요?
생각: 필요한 정보를 빠르게 찾을 수 있도록 검색 도구를 사용하여 답을 찾아야겠습니다.
동작: bing-웹 검색
작업 입력: 장미의 평균 가격
관찰: 온라인 정보에 따르면 미국의 장미 꽃다발 한 송이는 80.16달러에 판매되고 있습니다.
생각: 여기에 15달러를 추가하면 가격이 얼마인지 계산하기 위해 데이터가 필요합니다.
작업: llm-math
액션 입력: 80.16*1.15
관찰: 92.184
생각.
출력을 가져와 구문 분석하여 생각, 행동 및 행동 입력을 얻습니다:
생각: 최종 답은 알고 있습니다.
최종 답변: 15%를 추가하여 판매하려는 경우 가격은 $92.184로 책정해야 합니다.
Langchain은 ReAct 호출[3]을 구현했으며, 이를 위해서는 ReAct Agent, AgentExecutor 및 도구를 생성해야 합니다. ReAct Agent를 통해 앞서 언급한 것을 실현하고, 다양한 도구에 연결하고, 사용자의 요구와 LLM의 생각에 따라 다른 도구를 호출하여 Q&A의 성능을 향상시킬 수 있습니다. 리액트 기반 에이전트 채팅을 직접 다시 작성할 경우 존재하지 않는 도구를 선택하거나 도구를 호출하지 못하거나 도구 호출이 데드 루프에 갇히는 등 일부 경계 조건에 특히 주의를 기울여야 하는데, 이는 궁극적으로 상호작용의 효과에 영향을 미치기 때문입니다. 개인적으로 리액트 상담원 채팅의 효과를 연습하면서 몇 가지 인사이트를 얻었습니다:
- 상담원 대화 기능 정렬을 완료한 LLM을 선택하고, 가급적이면 ReAct 프롬프트를 LLM에 적용할 수 있습니다;
- 좋은 도구 소개를 명확하게 설명하면 도구 간 설명의 모호함을 줄이고 잘못된 도구를 사용하는 것을 방지할 수 있습니다;
- 여러 차례의 생각-행동-관찰을 반복하면 입력 문맥이 너무 많아지고, 많은 LLM이 긴 문맥의 입력을 제대로 이해하지 못하게 되므로 주의하세요.
- 생각-행동-관찰의 한 라운드 만있는 경우 일련의 프로세스가 중단되면 LLM 2 회와 도구 호출 1 회를 거쳐야하며 응답 시간에 영향을 미치며이 ReAct의 프로세스를 단순화하려면 도구에서 직접 의도 인식 + 도구 호출을 사용하여 최종 결과를 직접 출력 할 수 있으며 요약 답변을하기 위해 LLM에 피드백 할 필요가 없으며 단점은 그렇게 완벽하지 않다는 것입니다.
LangChain은 [4]에서 찾을 수 있는 다양한 스타터 키트를 제공합니다.
앞쪽을 보면 액션과 액션 입력은 도구의 이름과 도구의 입력인데, 임시 업로드 파일과 대화를 하고 싶다면 그냥 도구를 직접 추가하면 되나요? 사실 그렇게 좋지는 않은데, 액션 입력은 LLM의 쿼리 파싱을 기반으로 한 도구의 입력이고, "임시 업로드 파일에 대한 대화" 기능은 파일 위치나 파일 내용이 필요하기 때문에 사실 아래 그림에 따라 "임시 업로드 파일에 대한 대화"를 "액션 입력" 기능에만 넣을 수 있기 때문이죠. 따라서 아래 그림과 같이 "임시 업로드된 파일에 대한 대화" 기능을 "임시 업로드된 파일에 대한 대화" 기능과 분리할 수 있습니다.

구체적인 프론트엔드 및 백엔드 협력 프로세스는 다음과 같습니다:
1. 사용자가 파일을 업로드하면 프런트엔드는 먼저 임시 지식창고를 만든 다음 해당 지식창고에 파일을 업로드하면서 파일의 대화 라운드 수를 0으로 초기화하고 해당 임시 지식창고의 변수 이름을 기록합니다;
2, 각 후속 대화 라운드마다 지식창고 이름이 위의 플로우 이동에 따라 상담원 채팅으로 전달되며, 각 대화 라운드가 끝난 후 문서 아래의 대화 라운드 수로 업데이트됩니다;
3, 문서 대화 라운드 수가 문서 보존 라운드 수보다 많거나 사용자가 수동으로 컨텍스트를 지우면 프런트 엔드에서 임시 지식창고를 삭제하고 임시 지식창고의 변수 이름을 지웁니다.
참고 문헌
[1] ReAct언어 모델에서 추론과 연기의 시너지 효과, 공식 프레젠테이션: https://react-lm.github.io/[2] LangChain 드라이런 (1): 에이전트실행자는 정확히 어떻게 모델과 도구를 구동하여 작업을 완료하나요? - 황 지아의 글 - 知乎https://zhuanlan.zhihu.com/p/661244337[3] 리액트, 랭체인 문서: https://python.langchain.com/docs/modules/agents/agent_types/react/[4] 에이전트 툴킷, 랭체인 문서: https://python.langchain.com/docs/integrations/toolkits/[5] "LLM+검색 다시 쓰기" 한눈에 보는 논문 10편 - 검색과 밀기에 집착하는 사람들의 에세이 - 지식: https://zhuanlan.zhihu.com/p/672357196[6] 멀티쿼리 리트리버, 랭체인 문서: https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever/[7] 가상도큐먼트임베더, 랭체인 문서: https://github.com/langchain-ai/langchain/blob/master/cookbook/hypothetical_document_ embeddings.ipynb[8] 빅 모델 애플리케이션 개발, 꼭 알아야 할 RAG 고급 팁 - Rainfly의 기사 - 지식: https://zhuanlan.zhihu.com/p/680232507© 저작권 정책
기사 저작권 AI 공유 서클 모두 무단 복제하지 마세요.
관련 문서
댓글 없음...