이 가이드에서는 에이전트를 구축하는 방법, 실행하는 방법, 사용 사례에 더 잘 작동하도록 사용자 지정하는 방법을 배웁니다.
에이전트 구축하기 #
최소 에이전트를 초기화하려면 최소한 이 두 가지 인수가 필요합니다:
모델
에이전트를 구동하기 위한 텍스트 생성 모델 - 에이전트는 단순한 LLM과는 달리 LLM을 엔진으로 사용하는 시스템입니다. 이러한 옵션 중 하나를 사용할 수 있습니다:- 트랜스포머 모델 는 미리 초기화된
트랜스포머
파이프라인을 사용하여 로컬 머신에서 추론을 실행합니다.트랜스포머
. - HfApiModel 활용
huggingface_hub.InferenceClient
내부를 들여다보세요. - LiteLLMModel 를 통해 100개 이상의 다양한 모델을 호출할 수 있습니다. LiteLLM!
- 트랜스포머 모델 는 미리 초기화된
도구
의 목록도구
상담원이 작업을 해결하는 데 사용할 수 있습니다. 빈 목록일 수도 있습니다. 기본 도구 상자를 추가할 수도 있습니다.도구
목록의 선택적 인수를 정의하여add_base_tools=true
.
이 두 가지 인수가 있으면 도구
그리고 모델
를 클릭한 후 에이전트를 생성하고 실행할 수 있습니다. 다음 중 하나를 통해 원하는 LLM을 사용할 수 있습니다. 허깅 페이스 API, 트랜스포머, ollama또는 LiteLLM.
허깅 페이스 API
로컬 변압기 모델
OpenAI 또는 인공 지능 API
Ollama
허깅 페이스 API는 토큰 없이 무료로 사용할 수 있지만 속도 제한이 있습니다.
PRO 계정으로 게이트형 모델에 액세스하거나 요금 한도를 높이려면 환경 변수를 설정해야 합니다. HF_TOKEN
또는 통과 토큰
변수를 초기화할 때 HfApiModel
.
복사됨
smolagent에서 CodeAgent, HfApiModel을 가져옵니다. model_id = "meta-llama/Llama-3.3-70B-Instruct" model = HfApiModel(model_id=model_id, token="") 에이전트 = 코드에이전트(도구=[], 모델=모델, add_base_tools=True) agent.run( "피보나치 수열의 118번째 숫자를 알려주시겠습니까?", )
코드 에이전트 및 도구 호출 에이전트 #
그리고 코드 에이전트 기본 에이전트입니다. 각 단계에서 파이썬 코드 스니펫을 작성하고 실행합니다.
기본적으로 실행은 로컬 환경에서 이루어집니다. 호출할 수 있는 함수는 제공한 도구(특히 Hugging Face의 도구만 있는 경우)와 다음과 같이 미리 정의된 안전한 함수 집합뿐이므로 안전해야 합니다. 인쇄
또는 수학
모듈을 사용하므로 실행할 수 있는 항목이 이미 제한되어 있습니다.
파이썬 인터프리터는 기본적으로 허용 목록 이외의 가져오기를 허용하지 않으므로 가장 명백한 공격은 모두 문제가 되지 않습니다. 인수의 문자열 목록으로 승인된 모듈을 전달하여 추가 가져오기를 승인할 수 있습니다. 추가_승인된_수입
초기화 시 코드 에이전트:
복사됨
model = HfApiModel() agent = CodeAgent(tools=[], model=model, additional_authorized_imports=['requests', 'bs4']) agent.run("URL 'https://huggingface.co/blog'의 페이지 제목을 알려주시겠습니까?")
LLM은 임의의 코드를 생성하여 실행할 수 있으므로 안전하지 않은 임포트를 추가하지 마세요!
불법적인 작업을 수행하려는 코드가 있거나 에이전트가 생성한 코드에 일반적인 Python 오류가 있는 경우 실행이 중지됩니다.
다음을 사용할 수도 있습니다. E2B 코드 실행기 를 사용하여 로컬 파이썬 인터프리터 대신 설정을 E2B_API_KEY
환경 변수 를 전달한 다음 use_e2b_executor=true
상담원 초기화 시
코드 실행에 대해 자세히 알아보기 이 튜토리얼에서.
또한 널리 사용되는 동작을 JSON과 유사한 블롭으로 작성하는 방법도 지원합니다. 도구 호출 에이전트와 매우 유사한 방식으로 작동합니다. 코드 에이전트물론 추가_승인된_수입
코드를 실행하지 않기 때문입니다:
복사됨
smolagent에서 도구 호출 에이전트를 가져옵니다. agent = 도구 호출 에이전트(도구=[], 모델=모델) agent.run("URL 'https://huggingface.co/blog'의 페이지 제목을 알려주시겠습니까?")
상담원 실행 검사하기 #
다음은 실행 후 어떤 일이 발생했는지 검사하는 데 유용한 몇 가지 속성입니다:
에이전트 로그
는 에이전트의 세분화된 로그를 저장합니다. 에이전트가 실행되는 모든 단계에서 모든 것이 딕셔너리에 저장된 다음 다음에 추가됩니다.에이전트 로그
.- 실행 중
에이전트.쓰기_내부_메모리_로부터_로그()
는 LLM이 볼 수 있도록 상담원 로그의 내부 메모리를 채팅 메시지 목록으로 만듭니다. 이 방법은 로그의 각 단계를 살펴보고 관심 있는 것만 메시지로 저장합니다. 예를 들어 시스템 프롬프트와 작업을 별도의 메시지로 저장한 다음 각 단계마다 LLM 출력을 메시지로, 툴 호출 출력을 다른 메시지로 저장합니다. 어떤 일이 일어났는지 더 높은 수준의 보기를 원할 때 이 방법을 사용하지만 모든 로그가 이 방법으로 기록되는 것은 아닙니다.
도구 #
도구는 에이전트가 사용하는 원자 함수입니다. LLM에서 사용하려면 API를 구성하는 몇 가지 속성이 필요하며, 이 속성은 이 도구를 호출하는 방법을 LLM에 설명하는 데 사용됩니다:
- 이름
- 설명
- 입력 유형 및 설명
- 출력 유형
예를 들어 다음을 확인할 수 있습니다. 파이썬 인터프리터 도구이름, 설명, 입력 설명, 출력 유형, 그리고 앞으로
메서드를 사용하여 작업을 수행합니다.
상담원이 초기화되면 도구 속성을 사용하여 상담원의 시스템 프롬프트에 구워지는 도구 설명을 생성합니다. 이를 통해 상담원은 어떤 도구를 사용할 수 있는지, 그리고 그 이유를 알 수 있습니다.
기본 도구 상자 #
트랜스포머에는 상담원에게 권한을 부여하기 위한 기본 도구 상자가 제공되며, 초기화 시 인수를 사용하여 상담원에게 추가할 수 있습니다. add_base_tools = True
:
- 덕덕고 웹 검색*: DuckDuckGo 브라우저를 사용하여 웹 검색을 수행합니다.
- Python 코드 인터프리터는 안전한 환경에서 LLM으로 생성된 Python 코드를 실행합니다. 이 도구는 다음에만 추가됩니다. 도구 호출 에이전트 로 초기화하면
add_base_tools=true
코드 기반 에이전트는 이미 기본적으로 Python 코드를 실행할 수 있기 때문입니다. - 트랜스크립터오디오를 텍스트로 변환하는 Whisper-Turbo 기반의 음성-텍스트 파이프라인입니다.
인수를 사용하여 도구를 호출하여 수동으로 사용할 수 있습니다.
복사됨
smolagent에서 DuckDuckGoSearchTool을 가져옵니다. search_tool = DuckDuckGoSearchTool() print(search_tool("현재 러시아의 대통령은 누구인가요?"))
새 도구 만들기 #
허깅 페이스의 기본 도구에서 다루지 않는 사용 사례에 대해 자신만의 도구를 만들 수 있습니다. 예를 들어 허브에서 특정 작업에 대해 가장 많이 다운로드된 모델을 반환하는 도구를 만들어 보겠습니다.
아래 코드부터 시작하겠습니다.
복사됨
huggingface_hub에서 list_models 가져오기 task = "text-classification" most_downloaded_model = next(iter(list_models(filter=task, sort="downloads", direction=-1))) print(most_downloaded_model.id)
이 코드를 함수로 래핑하고 도구
데코레이터로 정의할 수 있습니다: 이 도구를 빌드하는 유일한 방법은 아닙니다. 도구를 사용하면 무거운 클래스 속성을 초기화할 수 있는 등 더 많은 유연성을 얻을 수 있습니다.
두 옵션 모두에 대해 어떻게 작동하는지 살펴보겠습니다:
도구로 함수 꾸미기
서브클래스 도구
복사됨
smolagent 가져오기 도구에서 @tool def model_download_tool(task: str) -> str: """ 이 함수는 허깅 페이스 허브에서 주어진 작업의 가장 많이 다운로드된 모델을 반환하는 도구입니다. 체크포인트의 이름을 반환합니다. Args: 작업: 다운로드 횟수를 가져올 작업입니다. """ most_downloaded_model = next(iter(list_models(filter=task, sort="downloads", direction=-1))) most_downloaded_model.id 반환
기능이 필요합니다:
- 명확한 이름. 이름은 이 도구가 에이전트의 두뇌 역할을 하는 데 도움이 되는 기능을 충분히 설명할 수 있어야 합니다. 이 도구는 작업에 대해 가장 많은 다운로드를 기록한 모델을 반환하므로 다음과 같이 이름을 지정해 보겠습니다.
모델_다운로드_도구
. - 입력과 출력 모두에 대한 입력 힌트
- 설명에는 각 인수가 설명되는 'Args:' 부분이 포함됩니다(이번에는 유형 표시가 없으면 유형 힌트에서 가져옴). 도구 이름과 마찬가지로 이 설명은 에이전트를 구동하는 LLM에 대한 사용 설명서이므로 무시하지 마세요. 이러한 모든 요소는 초기화 시 에이전트의 시스템 프롬프트에 자동으로 구워지므로 가능한 한 명확하게 작성하도록 노력하세요!
이 정의 형식은 다음에서 사용되는 도구 스키마와 동일합니다. 적용_채팅_템플릿
유일한 차이점은 도구
데코레이터: 도구 사용 API에 대해 자세히 알아보기 여기.
그런 다음 상담원을 직접 초기화할 수 있습니다:
복사됨
smolagent에서 CodeAgent, HfApiModel을 가져옵니다. agent = CodeAgent(tools=[model_download_tool], model=HfApiModel()) agent.run( "허깅 페이스 허브의 '텍스트-비디오' 작업에서 가장 많이 다운로드된 모델의 이름을 알려주실 수 있나요?" )
다음과 같은 로그가 표시됩니다:
복사됨
╭──────────────────────────────────────── 새 실행 ───────────────────────────────────────── │ │ │ '텍스트-비디오' │에서 가장 많은 다운로드 수를 기록한 모델의 이름을 알려주세요. 허깅 페이스 허브의 │ 작업은 무엇인가요? │ │ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0 단계 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ╭─ 이 코드를 실행합니다: ───────────────────────────────────────────────────────────────────╮ 1 model_name = model_download_tool(task="text-to-video") │ 1 2 print(model_name) │ ╰──────────────────────────────────────────────────────────────────────────────────────────╯ 실행 로그: ByteDance/AnimateDiff-Lightning Out: None [0단계: 지속 시간 0.27초| 입력 토큰: 2,069 | 출력 토큰: 60] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1단계 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ╭─ 이 코드를 실행합니다: ───────────────────────────────────────────────────────────────────╮ 1 final_answer("ByteDance/AnimateDiff-Lightning") │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────╯ Out - 최종 답안: ByteDance/AnimateDiff-Lightning [1단계: 지속 시간 0.10초| 입력 토큰: 4,288 | 출력 토큰: 148] Out[20]: 'ByteDance/AnimateDiff-Lightning'
도구에 대해 자세히 알아보기 전용 튜토리얼.
멀티 에이전트 #
Microsoft의 프레임워크를 통해 멀티 에이전트 시스템이 도입되었습니다. Autogen.
이러한 유형의 프레임워크에서는 한 명의 에이전트가 아니라 여러 명의 에이전트가 함께 작업을 해결합니다. 경험적으로 대부분의 벤치마크에서 더 나은 성능을 제공합니다. 이렇게 성능이 더 나은 이유는 개념적으로 간단합니다. 많은 작업의 경우 모든 작업을 수행하는 시스템을 사용하는 것보다 하위 작업을 전문으로 하는 유닛을 사용하는 것이 좋습니다. 여기서 별도의 도구 세트와 메모리를 가진 에이전트를 사용하면 효율적인 전문화를 달성할 수 있습니다. 예를 들어, 웹 검색 에이전트가 방문한 웹페이지의 모든 콘텐츠를 코드 생성 에이전트의 메모리에 채우는 이유는 무엇일까요? 분리하는 것이 좋습니다.
다음을 사용하여 계층적 멀티 에이전트 시스템을 쉽게 구축할 수 있습니다. smolagents
.
이렇게 하려면 에이전트를 다음과 같이 캡슐화합니다. 관리 에이전트 객체입니다. 이 객체에는 인수가 필요합니다. 에이전트
, 이름
및 설명
를 클릭하면 관리 에이전트의 시스템 프롬프트에 이 관리 에이전트를 호출하는 방법을 알려주는 메시지가 포함되며, 이는 툴에 대해서도 마찬가지입니다.
다음은 특정 웹 검색 에이전트를 관리하는 에이전트를 만드는 예제입니다. 덕덕kGoSearchTool:
복사됨
smolagent에서 코드에이전트, HfApi모델, 덕덕고서치툴, 매니지드에이전트를 가져옵니다. model = HfApiModel() web_agent = CodeAgent(tools=[DuckDuckGoSearchTool()], model=model) managed_web_agent = ManagedAgent( 에이전트=웹에이전트, name="web_search", description="웹 검색을 실행합니다. 쿼리를 인수로 전달하세요.") ) 관리자_에이전트 = 코드에이전트( tools=[], model=모델, managed_agents=[managed_web_agent]) ) manager_agent.run("허깅페이스의 CEO는 누구인가요?")
효율적인 멀티 에이전트 구현에 대한 자세한 예는 다음을 참조하세요. 멀티 에이전트 시스템을 GAIA 리더보드 상위권으로 끌어올린 방법.
멋진 Gradio 인터페이스에서 상담원과 대화하고 생각을 시각화하세요. #
다음을 사용할 수 있습니다. GradioUI
를 사용하여 상담원에게 대화형으로 작업을 제출하고 그 생각과 실행 과정을 관찰할 수 있는 예는 다음과 같습니다:
복사됨
smolagent에서 가져 오기 ( load_tool, CodeAgent, HfApiModel, GradioUI ) # 허브에서 가져오기 도구 이미지 생성 도구 = 로드 도구("m-ric/text-to-image") model = HfApiModel(model_id) # 이미지 생성 툴로 에이전트 초기화하기 에이전트 = CodeAgent(tools=[image_generation_tool], model=model) GradioUI(agent).launch()
내부적으로는 사용자가 새 답변을 입력하면 다음과 같이 상담원이 시작됩니다. agent.run(user_request, reset=False)
. . reset=False
플래그는 이 새 작업을 시작하기 전에 상담원의 메모리가 플러시되지 않아 대화를 계속할 수 있음을 의미합니다.
다음을 사용할 수도 있습니다. reset=False
인수를 사용하여 다른 에이전트 애플리케이션에서 대화를 계속할 수 있습니다.
다음 단계 #
보다 자세한 사용법은 튜토리얼을 참조하세요: