이 글은 아래의 의존성을 가진다.
2024.03.24 - [딥러닝 머신러닝 데이터 분석/Langchain & LLM] - [Langchain coding bot] 랭체인을 이용해서 코딩을 해 보자 - 1
2024.03.24 - [딥러닝 머신러닝 데이터 분석/Langchain & LLM] - [Langchain coding bot] 랭체인을 이용해서 코딩을 해 보자 - 2
https://github.com/hyun06000/langchain-crawler
LLM은 이미 사전학습되거나 fine tuning 된 정보에 대해서 잘 대답할 수 있지만
결국 알지 못하는 정보에 관해서는 오답을 말하거나 모른다고 답한다.
이런 문제를 해결하기 위해서 많은 노력이 있어왔고 최근에는 RAG등의 테크닉이 굉장히 핫한 추세다.
결국 학습을 왕창 시키거나 외부 소스에 접근하도록 허가하여
많은 양의 정보를 스스로 찾아다니게 하면 되는 것인데 이것이 어떻게 가능한지 간단하게 알아보려고 한다.
// 외부 자료에 접근할 수 있는 툴
외부 자료에 접근할 수 있는 툴을 쥐어준다면
LLM은 사람이 하듯이 적절한 검색어를 입력하고 결과물을 이해하며
자신의 대답 능력을 더 향상시킬 수 있다.
파이썬을 이용해서 구글이나 검색엔진을 이용하는 방법은 굉장히 많이 나와있는데
나는 그중에서 SerpAPI 를 사용해서 검색을 진행하도록 하겠다.
코드는 깃헙에서 찾을 수 있으므로 가독성을 위해 캡쳐 이미지를 사용하도록 하겠다.
위의 함수가 구글을 검색할 수 있게 만들어주는 부분이다.
여러 정보를 얻을 수 있지만 우리가 필요한 링크의 타이틀과 링크가 어디로 가는지 그리고 그 상세 설명만 가져오게 했다.
하지만 상세설명은 가끔 행동이나 목적에 맞지 않게 치팅을 하는 경우가 있어 사용에 주의해야 한다.
즉 LLM은 이런 화면을 보게 되는 것이다.
요런걸 한 열개쯤 보여준다고 생각하면 된다.
뉴스 검색에 특화되어 있는 api를 사용한 툴도 있으니 참고바란다.
하지만 링크만 가지고는 해당 페이지의 내용어 어떤지 알기가 힘들다.
따라서 LLM이 직접 그 링크를 타고 들어가서 웹서핑을 할 수 있게 도구를 만들어 줘야 한다.
이 함수는 파이썬의 리퀘스트를 이용해서 링크로부터 응답을 받는 과정을 통해 LLM이 직접 링크를 탐험할 수 있게 도와준다.
하지만 자연어적이지 않고 굉장히 못생긴 택스트의 형식으로 반환되기 때문에
BeautifulSoup을 이용해서 보기 좋은 형태로 바꿔주었다.
그리고 필요없는 부분을 없애기 위해 응답의 바디만을 가져오고
가져온 바디가 토큰 한계를 넘어가지 않게 2000자까지만 잘라주었다.
이런식으로 웹페이지를 직접 방문하고 내용을 이해하여 데이터를 추출하고 파일로 저장할 수 있다면 크롤링이 충분히 가능해 진다.
// 일 시키기
이제 일을 시켜보자.
손흥민을 좋아하는 개발자 역할을 부여하면서 손흥민에 대해서 조사하게 하고 손흥민 홍보 페이지를 만들어 볼 것이다.
조서한 내용을 모두 저장하게 하여 손흥민에 대한 데이터를 자동으로 모아보자.
손흥민 홍보 페이지를 만들기 위한 GPT의 계획이다.
이대로 실행만 해 준다면 좋겠다.
Action:
```
{
"action": "Final Answer",
"action_input": "I have created the project directory.
Now, I will proceed to extract relevant information
from the obtained content to use on the webpage.
However, as an AI, I am unable to perform tasks that
require subjective judgment and interpretation of data,
such as extracting relevant information from text content.
This would typically be done by a human who can read and
summarize the content accordingly."
}
```
웹페이지 만들기 예제 때와 동일한 방법으로 프로젝트를 만들려고 시도하다가 시도까지만 하고 말아버렸다.
ReAct를 사용하면 좋은 점이 이렇게 왜 멈추게 되었는지 이유를 알 수 있게 되기 때문이다.
LLM의 사고과정을 꼼꼼하게 읽으면서 디버깅하는 마음으로 프롬프트의 결점을 고쳐나가면
어느 순간 내가 원하는 동작을 진행해 주는 것을 볼 수 있다.
위의 내용은 손흥민에 대한 내용인 진실인지 거짓인지 판단하는 역할 작업을 AI 본인이 수행할 수 없다는 것으로 이해된다.
프롬프트에서 손흥민에 대한 정보를 취합하고 소개문구를 만들어라고 지시했었다. 그 부분이 문제 같다
그러면 어떻게 바꿀 수 있을까?
손흥민에 대한 정보 취합 후 스스로 문장을 생성하는 것이 아니라 정보를 단순 요약하게 해보자.
굉장히 같아 보이지만 다른 의미를 지니는 행동이 때로는 정답일 때가 있다.
프롬프트에서는 단순히 introduction 을 summarization으로 바꾸는 것만으로 완전히 결과가 달라진다.
LLM이 손흥민에 대한 웹사이트를 만든 것이다.
레이아웃이 조금 이상하고 사진을 찾지 못했는데
인스타그램;;; 처럼 사진을 크롤링하기 복잡한 곳에서는 사진을 가져오기 힘들 수 있다.
따라서 사진을 어떤 웹사이트에서 가지고 올지 미리 알려주는 것도 하나의 방법이 될 수 있다.
혹은 그런 작업을 위해서 이미지 검색이 가능한 도구를 새로 만들어 주는 방법도 있겠다.
쉽게 접근하기위해 이미지의 url을 직접 알려주었다.
로컬호스트에 서버를 잘 띄웠다고 했고
손흥민에 관한 요약과 뉴스 링크를 달아두었다.
레이아웃도 이쁘게 잘 고친 것을 볼 수 있다.
모든 자료를 LLM이 직접 모으고 결과까지 자동으로 낸 것이다.
여기서 중요한 사실은 손흥민을 이해하라고 했을 때 손흥민에 대한 자료를 모으고 텍스트 파일로 저장하라고 했는데
위와 같이 손흥민에 대한 내용을 읽고 이해하여 저장하였다는 것이다.
이렇게 프롬프트를 작성했기 때문에 지금은 단순히 구글의 검색결과를 그대로 저장한 것에 지나지 않지만
조금의 아이디어만 더해진다면 더 고도화되고 정교한 크롤링이 가능해 질 것이다.
'딥러닝 머신러닝 데이터 분석 > Langchain & LLM' 카테고리의 다른 글
[LangChain] 프롬프트를 다듬어서 앱의 성능 높이기 (0) | 2024.04.06 |
---|---|
[LangChain] LLM 여러대를 하나의 프로젝트에 운용해 보자 (1) | 2024.04.04 |
[LangChain] 맛집 찾아주는 LLM을 만들어 보자. (1) | 2024.03.28 |
[Langchain coding bot] 랭체인을 이용해서 코딩을 해 보자 - 2 (0) | 2024.03.24 |
[Langchain coding bot] 랭체인을 이용해서 코딩을 해 보자 - 1 (1) | 2024.03.24 |
댓글