GMI Cloud로 AI 에이전트 시리즈를 구축하는 방법 2부
Aliquet morbi justo auctor cursus auctor aliquam. Neque elit blandit et quis tortor vel ut lectus morbi. Amet mus nunc rhoncus sit sagittis pellentesque eleifend lobortis commodo vestibulum hendrerit proin varius lorem ultrices quam velit sed consequat duis. Lectus condimentum maecenas adipiscing massa neque erat porttitor in adipiscing aliquam auctor aliquam eu phasellus egestas lectus hendrerit sit malesuada tincidunt quisque volutpat aliquet vitae lorem odio feugiat lectus sem purus.
Viverra mi ut nulla eu mattis in purus. Habitant donec mauris id consectetur. Tempus consequat ornare dui tortor feugiat cursus. Pellentesque massa molestie phasellus enim lobortis pellentesque sit ullamcorper purus. Elementum ante nunc quam pulvinar. Volutpat nibh dolor amet vitae feugiat varius augue justo elit. Vitae amet curabitur in sagittis arcu montes tortor. In enim pulvinar pharetra sagittis fermentum. Ultricies non eu faucibus praesent tristique dolor tellus bibendum. Cursus bibendum nunc enim.
Mattis quisque amet pharetra nisl congue nulla orci. Nibh commodo maecenas adipiscing adipiscing. Blandit ut odio urna arcu quam eleifend donec neque. Augue nisl arcu malesuada interdum risus lectus sed. Pulvinar aliquam morbi arcu commodo. Accumsan elementum elit vitae pellentesque sit. Nibh elementum morbi feugiat amet aliquet. Ultrices duis lobortis mauris nibh pellentesque mattis est maecenas. Tellus pellentesque vivamus massa purus arcu sagittis. Viverra consectetur praesent luctus faucibus phasellus integer fermentum mattis donec.
Commodo velit viverra neque aliquet tincidunt feugiat. Amet proin cras pharetra mauris leo. In vitae mattis sit fermentum. Maecenas nullam egestas lorem tincidunt eleifend est felis tincidunt. Etiam dictum consectetur blandit tortor vitae. Eget integer tortor in mattis velit ante purus ante.
“Lacus donec arcu amet diam vestibulum nunc nulla malesuada velit curabitur mauris tempus nunc curabitur dignig pharetra metus consequat.”
Commodo velit viverra neque aliquet tincidunt feugiat. Amet proin cras pharetra mauris leo. In vitae mattis sit fermentum. Maecenas nullam egestas lorem tincidunt eleifend est felis tincidunt. Etiam dictum consectetur blandit tortor vitae. Eget integer tortor in mattis velit ante purus ante.
에서 파트 1, 비전, 사용 사례 및 성공 기준을 정의하여 AI 에이전트의 토대를 마련했습니다.이제 그 비전을 실현할 차례입니다.이번 2호에서는 사용자가 관련성, 비용 및 잠재적 ROI를 기반으로 어떤 업계 컨벤션에 참석할 가치가 있는지 결정하는 데 도움이 되는 MVP (Minimum Viable Product) AI 에이전트를 구축하는 단계별 프로세스를 살펴보겠습니다.
빌드를 바로 시작해 보겠습니다.
기능을 구축하기 전에 개발을 위한 탄탄한 기반이 필요합니다.여기에는 올바른 도구 선택, 환경 구성, 빠른 반복이 가능한 워크플로우 설정이 포함됩니다.
자, 디자인은 어떨까요?입력부터 예상 출력까지의 전체 워크플로는 다음과 같습니다.
어떤 이유에서든 변경하기로 결정한 경우를 대비하여 각 단계를 개별 모듈로 나눕니다.프레임워크는 유연성을 제공하고 콘텐츠 검색이나 투자 수익률 (ROI) 점수와 같은 시스템의 여러 부분이 시스템의 나머지 부분을 망가뜨리지 않고 독립적으로 발전할 수 있도록 합니다.
아니면 그렇게 되길 바랍니다!
여기서는 OpenAI API 호환성을 갖춘 GMI 호스팅 LLM 엔드포인트를 사용하겠지만, 구성이 비슷한 모든 엔드포인트에서 이 작업을 수행할 수 있습니다.이 경우에는 설정 → “모델 제공자” 추가 → OpenAI API 호환 추가로 이동하면 됩니다.
로 이동 https://cloud.dify.ai/apps로그인했는지 확인하고 프로젝트 생성을 시작할 수 있습니다.여기서는 Chatflow를 사용하겠습니다.
이제 흐름이 생겼습니다. 이제 각 개별 모듈을 조립합니다.먼저 입력으로 처리될 대상을 살펴보겠습니다. 아시다시피 가비지 인 = 쓰레기 아웃!
AI 에이전트는 팀을 보낼 가치가 있는 업계 이벤트를 파악해야 합니다. 따라서 기본 LLM에서 처리할 준비가 된 형식으로 해당 정보를 검색, 추출 및 집계할 수 있는 방법을 AI 에이전트에 제공해야 합니다.
이제 빌드할 시간입니다.
입력 매개 변수 추가:
API를 통한 검색
검색 결과 위에 이터레이터를 추가하여 소스 컨텍스트를 이해하겠습니다.검색 엔진이 관련성을 기준으로 정렬된 많은 결과를 제공하므로 이 단계는 중요합니다.이벤트 웹사이트와 애그리게이터는 상위 검색 결과인 경우가 많으며, 반복자의 역할은 이러한 이벤트에 대한 세부 정보를 추출하는 것입니다.
여기서부터 파이어크롤이 스크래핑을 할 수 있습니다.
GMI LLM 추가
사용자 프롬프트:
**Instructions:**
You are provided with Markdown content containing information about one or more events. Your task is to extract the event details and return them in a list of JSON objects. Each JSON object should represent a single event and conform to the following schema:
```json
{
"title": "string",
"start_date": "string",
"location": "string",
"topic/focus": "string",
"audience": "string",
"summary": "string"
}
```
Important Considerations:
Strict Adherence to Schema: Ensure that the output is a valid JSON array containing JSON objects that strictly adhere to the provided schema. Do not include any extra text or explanations outside the JSON array.
Handle Missing Information: If the Markdown content does not provide information for a particular field in the JSON schema, set the value of that field to "N/A".
Multiple Events: If the Markdown describes multiple events, return a JSON array containing one JSON object for each event.
Markdown Variations: Be prepared to handle variations in how event information might be presented in the Markdown. Look for keywords like "Date:", "Time:", "Location:", "Topic:", "Audience:", "Summary:", etc., but also be able to infer information from surrounding text.
Data Extraction: Extract the most relevant information for each field. For example, for the "time" field, extract the start date of the event in format of YYYY-MM-DD. For the "summary" field, provide a concise summary of the event.
JSON Output Only: The only output you should provide is the JSON array. Do not include any introductory or concluding remarks.
Markdown Content:
<Scrape text>
이제 LLM 출력을 JSON 형식으로 파싱해야 합니다. 이를 통해 JSON (구조화된 형식) 으로 변환하면 다운스트림 단계에서 결과를 쉽고 정확하게 처리할 수 있습니다.
사용한 코드는 다음과 같습니다.
import json
import re
def main(arg1: str) -> dict:
json_blocks = re.findall(r'(\[\s*\{.*?\}\s*\])', arg1, re.DOTALL)
all_events: List[dict] = []
for block in json_blocks:
try:
parsed_str = block.encode('utf-8').decode('unicode_escape')
parsed_json = json.loads(parsed_str)
# If the parsed JSON is a list, extend the result
if isinstance(parsed_json, list):
all_events.extend(parsed_json)
# If it's a single object, append it
elif isinstance(parsed_json, dict):
all_events.append(parsed_json)
except json.JSONDecodeError:
continue
return {
"events": all_events
}
다음은 무엇일까요?이제 입력 데이터가 생겼지만 AI 에이전트가 처리를 시작하기 전에 데이터를 정리하고 정렬해야 합니다.이제 다양한 검색 결과에서 구조화된 이벤트를 집계하고, 중복을 제거하고, 날짜별로 정렬할 차례입니다.
사용한 코드는 다음과 같습니다.
import json
from datetime import datetime
def main(arg1: list) -> dict:
unique_events = {event["title"]: event for event in arg1}.values()
def sort_key(event):
try:
return datetime.strptime(event["start_date"], "%Y-%m-%d")
except ValueError:
return datetime.max # Assign max date to push invalid dates to the end
sorted_events = sorted(unique_events, key=sort_key)
sorted_events = sorted_events
return {
"events": sorted_events,
}
이것이 바로 데이터 입력 단계입니다!지금까지 워크플로 패턴을 만들었습니다.
이제 상담원에게 이 데이터에서 우리가 원하는 작업을 검색하도록 안내할 차례입니다.
이제 간단한 패턴 (웹 쿼리 작성 → 웹 검색 → LLM으로 출력 구문 분석) 을 구축했습니다. 이 패턴을 활용하여 ROI를 결정할 때 두 가지 주요 요소를 검색할 수 있습니다. 티켓 가격 및 호텔 가격
참고: 보다 정확하고 고급 검색 (예: 할인된 가격 적용 시세) 을 위해 이 단계를 확장하여 해당 용도에 맞게 특별히 설계된 별도의 상담원에게 문의할 수 있습니다..
이제 결과를 집계하고 출력합니다.
검증 없이는 MVP가 완전하지 않습니다.에이전트가 가치를 전달했는지 확인하기 위해 여러 차례의 테스트를 진행했습니다.
다음을 확인했습니다.
초기 피드백을 수집하기 위해 내부 이해관계자와 MVP를 공유했습니다.이를 바탕으로 우리는:
우리는 또한:
마지막 단계는 광범위한 테스트를 위해 MVP를 사용 가능한 상태로 만드는 것이었습니다.
두 가지 배포 전략을 테스트했습니다.
코어 작업을 통해 향후 반복 작업에서는 다음을 수행할 수 있습니다.
앞으로 출시될 잠재적 기능에는 다음이 포함됩니다.
이 AI 에이전트는 바쁜 전문가들이 참석할 가치가 있는 이벤트를 결정하도록 돕는 간단한 아이디어에서 시작되었습니다.체계적인 개발, 반복적인 테스트, 적절한 도구를 통해 간결하고 유연한 MVP를 통해 그 아이디어를 실현했습니다.
3부에서는 이 MVP를 프로덕션에 바로 사용할 수 있는 시스템으로 발전시키고, 성능을 최적화하고, 비즈니스 의사 결정 워크플로우에 더 깊이 통합하는 방법을 살펴보겠습니다.
그때까지는 빠르게 구축하고, 호기심을 잃지 말고, 어려운 작업은 AI에 맡기세요.
그건 그렇고, 우리 거 봤어? AI 기반 음성 번역기 가이드 구축?오픈 소스 도구만 사용합니다!
제한 없이 AI를 구축하세요!
GMI Cloud를 사용해 보고 AI 요구 사항에 적합한지 직접 확인해 보세요.
에서 시작
GPU 시간당 4.39달러
최저
GPU-시간당 2.50달러