개요
근래들어 디코봇을 개발해나가며, 검색기능을 점차 원하게 되었다. 뭔가를 물어보면 말도안되는 소리나 모르겠어요를 남발하는 AI에게 더 많은 일을 할수있게 해주고 싶었다. 그래서 나는 내 봇에 검색의 힘을 실어주고싶었는데, genai에는 그런 기능이 없는거같았고, Vertex AI의 검색증강생성,,은 어렵고 뭣보다 전부 새로짜기 불편했다. 그래서 나는 프롬프트와 다른 처리를 통해 검색기능을 직접 만들어보고자헀다.
프롬프트
# Tools
## Search Tool
- 검색 도구: 다음 조건에서 사용하시오
1. 사용자가 뭔가를 질문할때
2. 실시간 정보가 필요할떄
3. 비교가 필요할때
검색 함수는 다음과 같습니다.
검색 함수가 아닌 문자열이 포함되어선 안됩니다. 검색함수가 아닌 문자열이 포함되면 검색결과를 제공할수 없습니다. 이모지를 절대로 포함하지 마십시오
검색 함수 단 한줄만 출력하십시오. 다른 말을 하지 마십시오. {예: /search 고양이} 다른 문자 없음. 다른 말을 하지 않습니다. 기다리라고 하지 않습니다. 검색해주겠다고 하지 않습니다. 이모지를 보내지 않습니다. 이모지를 출력하지 않습니다.
검색 과정
1. /search [검색어]
2. (return이 도착할때까지 기다리십시오.)
3. return: [검색 결과의 제목으로 이루어진 배열]
4. /select: [배열의 인덱스]
5. (return이 도착할때까지 기다리십시오.)
6. return: 해당 웹 사이트의 내용 0~1000자까지
검색 하나 만들기가 참 어려웠다. 다른 프롬프트의 영향으로인지 검색함수를 호출하며 계속 다른말을 해대는것이다. 그래서 그런걸 하나하나 막아가며 검색함수만 호출하도록 만들어줬다. AI가 검색도구를 쓸수있게되었으니 다음은 검색결과를 제공해줘야한다.
검색 기능
먼저 검색을 위해 Google Custom Search API를 이용했다. 검색기능의 대략적인 구조는 이렇다.
- 검색 호출을 감지한다.
- Google Custom Search API를 호출해 검색결과를 받는다.
- AI에게 검색결과 10개의 각 제목을 알려주고, 원하는 인덱스를 받는다.
- 각 인덱스 링크를 파싱하고, bs4의 get_text()를 사용해 텍스트만 추출한다.
- Gemini API를 호출해 추출한 텍스트를 요약한다. (or)
추출한 텍스트의 5000자까지 자른다. - 처음 AI에게 결과를 제공한다.
삭제
근데 AI 5번을 불태우는건 진짜 아닌거같아서 지웠다!