Published · 10 min read

다재다능 AI 에이전트를 만드는 것

간단한 사용 사례를 해결하기 위해 사용자 정의 가능한 큰 언어 모델을 개발하기 위한 초보자 가이드

저자: 레이첼 마르티네스 ◎ 역할: 개발자 ◎ 태그: AI 에이전트


소개

우리의 기술 블로그에 오신 것을 환영합니다. 복잡한 개념을 모든 사람들에게 접근할 수 있도록 합니다. 오늘날, 우리는 흥미로운 프로젝트에 뛰어들고 있습니다. 다양한 작업에 적응할 수 있는 큰 언어 모델 (LLM) 에이전트를 개발합니다.

우리는 각 작업에 가장 적합한 LLM을 선택하는데 도움이 되는 강력한 검색, 증강 및 생성 (RAG) 인프라를 만들 것입니다. H2O와 HuggingFace 같은 회사들은 이미 비슷한 시스템을 출시하고 있습니다. 그리고 우리는 AI 기술을 그들의 애플리케이션에 통합하고자 하는 스타트업들의 관심을 받았습니다.

우리의 특정 사용 사례는 단일 입력 (하나의 샷) 또는 여러 펌프를 묶음으로써 LLM를 촉구할 수 있는 능력을 요구합니다. 이것은 다양한 시나리오에 맞게 사용자 정의 가능하고 사용자 친화적인 LLM 모듈을 만드는 것이 필요합니다.

이 여행을 시작하면서 각 단계를 간단하고 매력적으로 정리해 보세요.

현재 사용 사례

현재 사용 사례에서는 2단계 프로세스를 통해 사용자 레지뷰의 내용을 향상시킵니다.

  1. 입력: 사용자는 자기소개서의 프로페셔널 서미 및 경험 섹션들을 시스템에 입력하고 LLM에 보다 정교한 텍스트 버전을 생성하도록 요청합니다.
  2. ****리뷰: 사용자는 LLM 생성된 콘텐츠를 검토하고, 출력을 정비하고 개인화하기 위해 추가적인 충고를 또는 지침을 제공하여, 그들의 고유한 기술과 경험과 일치하도록 보장합니다.

이러한 접근 방식을 통해 사용자는 LLM의 힘을 활용하여 잠재적인 고용주에게 눈에 띄는 설득력 있는 레전지를 만들 수 있습니다.

목표

우리는 우리의 사용 사례를 지원하고 적어도 부분적으로 자기소개서 생성 프로세스를 자동화하는 완전히 사용자 정의 가능한 LLM 모듈을 구축하는 것을 목표로합니다.

시행

단계 1: LLM를 선택

귀하의 필요에 맞는 LLM를 선택할 때 두 가지 주요 범위를 고려해야 합니다. 오픈 소스 LLM와 독자적인 LLM. 우리는 두 그룹에서 인기 있는 선택지를 논의하고 오픈소스 LLM를 선택하는 것의 이점을 중심으로 논의할 것입니다.

오픈소스 LLM

예를 들어: 미스트랄 AI, Phi 3, LLaMa 3.

이점:

  • 커뮤니티 지원: 개발자 및 사용자들의 크고 활동적인 커뮤니티는 지침을 제공하고, 자원을 공유하고, 개선에 협력합니다.
  • 사용자 정의: 소스 코드 접근은 특정 사용 사례에 맞게 수정 및 적응을 허용합니다.
  • 투명성: 엄격한 윤리 또는 개인정보 보호 지침을 준수하는 애플리케이션에서 모델의 내부 기능을 이해하는 것이 중요합니다.

독자적 LLM

예를 들어: GPT-4.

****의 장점: 인상적 인 성능과 독특한 특징.

제한:

  • 사용자 정의 가능성의 부족: 모델의 현재 사용에 제한되어 있습니다.
  • 비용: 사용에 따른 수수료는 시간이 지남에 따라 증가할 수 있습니다.
  • 불투명한 자연: 그 근본적인 메커니즘을 이해하기 어렵기 때문에 투명성과 설명성을 우선시하는 사람들에게는 우려가 될 수 있습니다.

결론적으로, 오픈소스 및 독자적인 LLM 모두 장점과 단점을 가지고 있지만, Mistral AI, Phi 3 및 LLaMa 3와 같은 오픈소스 LLM는 광범위한 사용자에게 매우 유익한 접근성, 사용자 정의 및 투명성을 제공합니다.

2단계: 비용 과 특징 을 살펴보기

오픈소스 LLM는 일반적으로 비용 효율적이기 때문에 자신의 서버 또는 Azure 또는 AWS와 같은 제공업체에서 지불-당신이-가는 모델로 호스팅 될 수 있습니다. 다음은 다양한 LLM를 개최하는 비용과 특징의 요약입니다.

LLM세부 사항컨텍스트 길이는비용
믹스트랄 8x7BMoE LLM 미스트랄 A훈련: 8192개의 토큰$0.7/1M 토큰 (chea)
믹스트랄 8x22B믹스트랄의 후계자훈련: 32768 토큰2억 1천만 달러의 토큰 (가용)
LLaMa 3 70BMet의 비MoE 모델훈련: 2048 토큰$0.02/1K 토큰 (Azu
Phi 3 128K멀티모달 SLM 나훈련 및 전체: 3$0.002/1K 토큰 (Az
GPT-4 터보소유자 LLM by O16K 기본, 더 높습니다AWS에서 사용할 수 없습니다

단계 3: OpenRouter에 준하는 퍼블릭 API를 사용하여 테스트

최고의 LLM를 선택하고 테스트하는 것은 다양한 모델을 접근하고 평가하는 편리한 방법을 필요로 한다. 오픈 소스 API 표준인 OpenRouter는 다양한 AI 모델과 서비스 사이에 원활한 전환을 가능하게 한다. 우리는 파이어워크스 AI를 우리의 공급자로 선택했습니다.

  • 모델 다양성: Mistral AI, Phi 3 및 LLaMa 3와 같은 인기있는 오픈소스 LLM를 포함하여 다양한 AI 모델을 제공합니다.
  • 통합의 용도는: OpenRouter 표준을 준수하여 기존 인프라에 통합을 간소화합니다.
  • 확장성: 높은 요청량을 처리하고 원활하게 확장하도록 설계되었습니다.

다음은 동일한 하드웨어를 사용하여 모델 응답과 지연성 결과를 호출하는 샘플 함수입니다:

import json

def get_sanitized_json_response(user_input, guardrail):
    final = chain.invoke({"text": f"Sanitize {user_input}. Guardrail: {guardrail}"})
    final = chain.invoke({"text": final.content})
    return json.loads(final.content.replace("<json>", "").replace("</json>", "").replace("\n",""))
모델지연성언급
미스트랄 8x7B2.1초가장 가벼운 모델, PERF
믹스트랄 8x22B5.3초후속 모델, sim
LLaMa 3 70B2.6초괜찮은 반응이지만
Phi 3 128K1.5 분멀티모달 모델

매우 간단한 보호 선과 입력 장치가 사용되어 위와 같은 테스트를 했습니다.

guardrail = """Format details as bullets and use the XYZ method to format the relevant detail.
            For example:
            - I did X boosting Y percent resulting in Z.
"""

우리는 다음과 같은 해제 된 JSON 응답을 얻었습니다:

get_sanitized_json_response("""I served as Junior as a Software Engineer at TechCorp in Sydney in January 2011 and worked there until December 2018. During my tenure,
                            I led the team that developed advanced AI-driven financial analytics tools for processing hundreds of millions of records in a
                            distributed environment and created the initial version of the company's proprietary data pipeline. In my role, I was responsible for
                            designing solutions and implementing multiple APIs. In my last year managing a team focused on blockchain solutions.""", guardrail)

{'experience': [{'title': 'Software Engineer',
                'company': 'TechCorp',
                'location': 'Sydney',
                'start_date': '2011-01',
                'end_date': '2018-12',
                'highlights': ['- Engineered scalable database systems of a major project that improved client data processing speed by 40%.',
                              '- Spearheaded a team focused on AI-driven solutions.',
                              '- Developed AI-driven financial analytics tools processing 100M+ records in distributed environments.',
                              '- Created company\'s proprietary data pipeline.',
                              '- Managed team on blockchain solutions in final year.']}]}

결론적으로, 이러한 모든 모델들 사이에서 응답 품질이 비교적 비슷하기 때문에, 그것은 지연과 비용으로 떨어졌습니다. 실험은 3번 수행되었고 비슷한 결과를 얻었습니다. 그래서 우리는 미스트랄 AIs 미스트랄 8x7B를 선택했습니다.

4단계: 오케스트레이션 레이어를 만드는 것

다양한 애플리케이션을 통해 여러 대규모 언어 모델이나 하나의 모델을 관리하고 조정하는 것은 최적의 성능과 적응력에서 매우 중요합니다. 바닐라 PyTorch를 사용하여 처음부터 건설하는 대신 오케스트레이션 프레임워크를 사용하는 것이 더 실용적이고 효율적입니다. 여기 세 가지 옵션이 있습니다.

Langchain

****의 장점: 광범위한 통합, Python 및 JavaScript를 지원, 광범위한 커뮤니티 지원.

****의 단점: 추가적인 의존성, 잠재적인 학습 곡선을 도입합니다.

LlamaIndex

****의 장점: 메타가 지원하고, Langchain와 상호 운용성을 제공합니다.

****의 단점: 개발자 친화적 인 문법.

돌

****의 장점: 사용자 친화적인 문법, 유명한 기술 기업들의 지원.

****의 단점: 아직 성숙되고 있는 만큼 통합이 제한되어 있습니다.

오케스트레이션 프레임워크를 사용하면 개발이 단순화되고 확장성을 향상시키고 지원하는 커뮤니티에 액세스 할 수 있으며, 이를 우리의 프로젝트에 더 유리한 선택으로 만듭니다.

설계 및 데이터 흐름

다음 그림은 설계 다이어그램을 보여줍니다.

AI 기반 시스템 내의 데이터 흐름은 원활하고 효율적인 사용자 경험을 보장하는 필수적인 측면입니다. 설계 다이어그램은 프로세스의 시각적 표현을 제공하지만, 자세한 설명은 관련된 단계를 명확히 할 수 있습니다.

  1. 사용자 입력: 사용자가 자기소개서의 about 및 experience 섹션과 같은 자신의 세부 정보를 시스템에 입력하면 여행이 시작됩니다.
  2. 프롬프트 세대: 사용자 의 입력은 다음 처리되고 하나의 또는 여러 개의 프롬프트로 변환되며, 이는 텍스트의 더 세련되고 인상적인 버전을 찾기 위해 큰 언어 모델 (LLM) 을 검색하는 데 사용됩니다.
  3. LLM 통합 Langchain: 생성된 명령어는 Langchain로 전달되며, LLM 클라이언트와의 상호작용을 촉진하는 선택된 오케스트레이터 프레임워크입니다. Langchain는 코를 사용하여 데이터를 분석하고 검증하기 위해 클래스 형태로 Pydantic 스키마를 활용하여 필요한 형식에 충실하도록합니다.
  4. JSONResponse Generation: 데이터가 검증되면 최종적인 JSONResponse로 변환됩니다.
  5. 컨텐츠 추출 및 인덱싱: JSONResponse의 컨텐츠 부분은 kor를 사용하여 추출하고 텍스트의 수학적인 표현으로 이루어진 컴퓨팅 임베딩에 의해 인덱싱됩니다. 이러한 임베디션은 다음 검색을 통해 효율적인 검색 및 비교를 위해 Qdrant과 같은 벡터 데이터베이스에 저장됩니다.
  6. 컨텍스트 모듈에 대한 캐시: 전체 JSONResponse는 컨텍스트 모듈이 올바르게 작동하도록 캐시됩니다. 이것은 시스템이 후속 질의시 사용자의 입력과 LLM의 출력의 맥락을 유지할 수 있도록 보장합니다.
  7. 후속 질문: 사용자가 추가 입력 또는 생성 된 텍스트의 추가 정밀화를 요청할 때, 캐시 된 JSONResponse는 새로운 맥락에 따라 수정되고 업데이트 된 프롬프트에 연쇄됩니다. 이 수정된 프롬프트는 LLM 통합부터 콘텐츠 추출 및 인덱싱까지 모든 과정을 다시 거쳐 사용자에게 맞춤형과 정확한 응답을 제공합니다.

우리의 시스템 내의 데이터 흐름을 이해함으로써 우리는 각 단계의 중요성과 프로세스를 효율화하는 데 오케스트레이터 프레임워크의 역할을 인식할 수 있으며, 궁극적으로 효율적이고 사용자 친화적인 AI 기반 솔루션을 얻을 수 있습니다.

LCEL을 이용한 단속 구축 및 체인링

이 표본은 PromptTemplate의 예제입니다.

from langchain.core.output_parsers import PydanticOutputParser
prompt = PromptTemplate(
    template="Please extract the following information from the given text and format it as a JSON object according to the schema:\n\n{format_instructions}\n{query}\n",
    input_variables=["query"],
    partial_variables={"format_instructions": output_parser.get_format_instructions()},
)

chain = prompt | chat_model | output_parser

전형적인 템플릿은 input_variables 와 template이라는 두 가지 주요 주장으로 구성됩니다 (이 블로그의 범위에 해당하지 않은 더 많은 주장이 있습니다). 첫 번째 주장은 실행 시간에 prompt 템플릿에 주입되는 문자열 목록을 받아들인다. 이 변수는 일반적으로 Jinja2Template 또는 f 문자열과 비슷합니다. chat_model 는 우리가 사용하는 LLM이고, | (파이프) 운영자는 BASH | 운영자와 비슷하며 연쇄를 나타냅니다. 이것은 LCEL (LangChain 표현 언어) 스펙에 의해 제공되는 편리한 단편입니다. 이렇게 하면 하나의 명령어에서 다른 명령어에 대한 응답을 연쇄할 수 있습니다. 또한 함수 호출을 지원합니다. 즉, 일반적으로 출력을 정화하기 위해 람바 표현이나 일부 함수를 연쇄할 수 있습니다. 이것은 단순히 큰 함수 대신 체인을 작성함으로써 코드 복잡성을 줄입니다.

5단계: VectorDBs을 사용

벡터 데이터베이스 (VectorDBs) 는 LLM에서 생성되는 텍스트 임베디션과 같은 고차원 벡터를 저장하고 관리하고 효율적으로 검색합니다. 여기 인기 있는 옵션의 비교가 있습니다.

Qdrant

****의 장점: 높은 성능, 쉬운 통합, 활발한 커뮤니티.

****의 단점: 큰 단점도 없습니다.

밀버스

****의 장점: 여러 거리 측정, 데이터 시각화 도구.

****의 단점: 더 급격한 학습 곡선.

크로마

****의 장점: 사용하기 쉬운 Python API, 모듈형 디자인.

****의 단점: 비교적 새로운, 덜 광범위한 커뮤니티 지원.

PGVector

****의 장점: PostgreSQLs의 기능을 활용하고, SQL 기반의 쿼리를 이용한다.

****의 단점: 고차원 벡터 검색에서 성능이 떨어집니다.

FAISS

****의 장점: 고성능 검색, GPU 지원.

****의 단점: 다른 데이터베이스와 통합이 필요합니다.

Qdrant의 확장성, 통합의 용이성 및 적극적인 개발은 AI 기반 솔루션에 적합한 선택으로 만듭니다.

강력한 IR 솔루션으로 VectorDBs를 활용하는 방법

VectorDBs을 이용한 정보 검색 (IR) 솔루션을 만드는 것은 다음과 같습니다.

  1. 텍스트 전처리: 원본 데이터를 깨끗하게 처리하고 전처리합니다.
  2. 텍스트 임베딩 세대: LLM을 사용하여 사전 처리 된 텍스트를 고차원 벡터로 변환합니다.
  3. VectorDB: 효율적인 검색을 위해 지수 임베디션을 저장합니다.
  4. 쿼리 처리: 사전 처리 및 사용자 쿼리를 임베디드로 변환합니다.
  5. 유사성 검색: VectorDB에서 유사성 검색을 수행하여 관련 임베디션을 찾습니다.
  6. 순위 및 표시 결과: 검색된 임베디션을 순위화하고 다시 텍스트로 변환하여 표시합니다.

이 과정을 따라 VectorDBs를 활용하면 효율적이고 효과적인 IR 시스템을 만들 수 있습니다.

정밀한 채용을 시작할 준비가 되셨나요?

무료로 시작하고 팀 전체를 초대해 15분 만에 첫 번째 점수가 매겨진 후보자를 확인하세요.

ko