여기서는 고급 도구 사용법을 살펴보겠습니다.
상담원 구축이 처음인 경우에는 먼저 상담원 소개 및 smolagent 가이드 투어.
도구란 무엇이며 어떻게 만들 수 있나요? #
도구는 대부분 에이전트 시스템에서 LLM이 사용할 수 있는 기능입니다.
하지만 이를 사용하려면 이름, 도구 설명, 입력 유형 및 설명, 출력 유형 등의 API를 LLM에 제공해야 합니다.
따라서 단순한 함수일 수 없습니다. 클래스여야 합니다.
따라서 이 도구의 핵심은 함수를 메타데이터로 감싸는 클래스로, LLM이 함수를 사용하는 방법을 이해하는 데 도움이 됩니다.
모습은 다음과 같습니다:
복사됨
smolagent 가져오기 도구에서 HFModelDownloadsTool(Tool) 클래스를 만듭니다: name = "model_download_counter" description = """ 허깅 페이스 허브에서 주어진 작업의 가장 많이 다운로드된 모델을 반환하는 도구입니다. 체크포인트의 이름을 반환합니다.""" inputs = { "task": { "type": "문자열", "설명": "작업 카테고리(예: 텍스트 분류, 깊이 추정 등)", } } output_type = "문자열" def forward(self, task: str): huggingface_hub에서 list_models import model = next(iter(list_models(filter=task, sort="downloads", direction=-1))) 반환 model.id model_downloads_tool = HFModelDownloadsTool()
사용자 지정 도구 하위 클래스 도구 를 사용하여 유용한 메서드를 상속할 수 있습니다. 자식 클래스도 정의합니다:
- 속성
이름
를 입력하면 도구 자체의 이름에 해당합니다. 이름은 일반적으로 도구의 기능을 설명합니다. 이 코드는 작업에 대해 가장 많이 다운로드된 모델을 반환하므로 다음과 같이 이름을 지정해 보겠습니다.모델_다운로드_카운터
. - 속성
설명
은 상담원의 시스템 프롬프트를 채우는 데 사용됩니다. - An
입력
어트리뷰트, 즉 키가 있는 사전입니다."type"
그리고"설명"
. 여기에는 파이썬 인터프리터가 입력에 대해 현명한 선택을 하는 데 도움이 되는 정보가 포함되어 있습니다. - An
출력 유형
속성을 사용하여 출력 유형을 지정할 수 있습니다. 두 가지 유형 모두입력
그리고출력 유형
는 피단틱 형식이 둘 중 하나가 될 수 있습니다:~authorized_types()
. - A
앞으로
메서드에 실행할 추론 코드가 포함되어 있습니다.
에이전트에서 사용해야 하는 것은 이것뿐입니다!
도구를 구축하는 다른 방법이 있습니다. 도구의 가이드 투어를 사용하여 도구를 구현했습니다. @tool
데코레이터. The tool() 데코레이터를 사용하는 것이 간단한 도구를 정의하는 데 권장되지만, 때로는 더 명확하게 하기 위해 클래스에서 여러 메서드를 사용하거나 추가 클래스 속성을 사용하는 등 이보다 더 많은 것이 필요할 수 있습니다.
이 경우 도구를 서브클래싱하여 빌드할 수 있습니다. 도구 위에 설명된 대로
허브에 도구 공유 #
사용자 지정 도구를 허브에 공유할 수 있습니다. push_to_hub() 를 클릭합니다. 허브에 리포지토리를 만들고 읽기 권한이 있는 토큰을 사용하고 있는지 확인하세요.
복사됨
model_downloads_tool.push_to_hub("{your_username}/hf-model-downloads", token="")
Hub로 푸시가 작동하려면 도구가 몇 가지 규칙을 준수해야 합니다:
- 모든 메서드는 인자에서 제공되는 변수를 사용하는 등 독립적입니다.
- 위의 요점에 따라 모든 임포트는 도구의 기능 내에서 직접 정의해야 합니다.를 호출하려고 할 때 오류가 발생합니다. 저장() 또는 push_to_hub() 사용자 지정 도구로
- 하위 클래스를 생성하는 경우
__init__
메서드에 다른 인수를 전달할 수 없습니다.self
. 이는 특정 도구 인스턴스의 초기화 중에 설정된 인수를 추적하기 어렵기 때문에 허브에 제대로 공유할 수 없기 때문입니다. 어쨌든 특정 클래스를 만드는 아이디어는 하드코딩해야 하는 모든 것에 대해 이미 클래스 속성을 설정할 수 있다는 것입니다(your_variable=(...)
바로 아래에 있는YourTool(Tool) 클래스를 생성합니다:
줄). 물론 여전히 코드의 어느 곳에서나 다음을 할당하여 클래스 속성을 만들 수 있습니다.self.your_변수
.
도구가 Hub로 푸시되면 시각화할 수 있습니다. 여기 는 모델_다운로드_도구
제가 밀었던 것 중 하나입니다. 멋진 그라데이션 인터페이스가 있습니다.
도구 파일을 자세히 살펴보면 모든 도구의 로직이 다음 아래에 있음을 알 수 있습니다. tool.py. 여기에서 다른 사람이 공유한 도구를 검사할 수 있습니다.
그런 다음 다음과 같이 도구를 로드할 수 있습니다. load_tool() 를 사용하여 만들거나 from_hub() 에 전달하고 도구
매개 변수를 전달해야 합니다. 도구를 실행한다는 것은 사용자 지정 코드를 실행한다는 의미이므로 리포지토리를 신뢰할 수 있는지 확인해야 하므로 trust_remote_code=true
을 클릭해 허브에서 도구를 로드합니다.
복사됨
smolagent에서 load_tool, CodeAgent를 가져옵니다. model_download_tool = load_tool( "{유저_사용자명}/hf-model-downloads", trust_remote_code=True )
스페이스를 도구로 가져오기 #
허브에서 스페이스를 도구로 직접 가져올 수 있습니다. Tool.from_space() 메서드!
허브에 있는 스페이스의 ID, 이름, 그리고 상담원이 이 도구의 기능을 이해하는 데 도움이 되는 설명만 제공하면 됩니다. 내부적으로 이 도구는 그라디오 클라이언트
라이브러리를 호출합니다.
예를 들어 FLUX.1-dev 스페이스에서 이미지를 생성하는 데 사용합니다.
복사됨
image_generation_tool = Tool.from_space( "black-forest-labs/FLUX.1-schnell", name="image_generator", 설명="프롬프트에서 이미지 생성" ) image_generation_tool("햇볕이 잘 드는 해변")
이렇게 이미지가 완성되었습니다! 🏖️

그런 다음 다른 도구와 마찬가지로 이 도구를 사용할 수 있습니다. 예를 들어 다음과 같은 프롬프트를 개선해 보겠습니다. 우주복을 입은 토끼
를 클릭하고 이미지를 생성합니다.
복사됨
smolagent에서 CodeAgent, HfApiModel을 가져옵니다. model = HfApiModel("Qwen/Qwen2.5-Coder-32B-Instruct") agent = CodeAgent(tools=[image_generation_tool], model=model) agent.run( "이 프롬프트를 개선한 다음 이미지를 생성하세요.", prompt='우주복을 입은 토끼' )
복사됨
=== 상담원 생각: 개선된_프롬프트는 "달 표면의 밝은 주황색 노을 아래, 배경에 지구가 보이는 밝은 파란색 우주복을 입은 토끼"가 될 수 있습니다. 프롬프트를 개선했으니 이제 이미지 생성기 툴을 사용하여 이 프롬프트를 기반으로 이미지를 생성할 수 있습니다. >>> 에이전트가 아래 코드를 실행합니다: image = image_generator(prompt="달 표면의 밝은 주황색 석양 아래, 배경에 지구가 보이는 밝은 파란색 우주복을 입은 토끼") final_answer(image)

얼마나 멋진가요? 🤩
LangChain 도구 사용 #
저희는 Langchain을 좋아하며 매우 매력적인 도구 모음을 보유하고 있다고 생각합니다. LangChain에서 도구를 가져오려면 from_langchain()
메서드를 사용합니다.
다음은 LangChain 웹 검색 도구를 사용하여 인트로의 검색 결과를 다시 생성하는 방법입니다. 이 도구에는 다음이 필요합니다. pip 설치 랭체인 구글 검색 결과 -q
를 클릭해야 제대로 작동합니다.
복사됨
langchain.agents에서 load_tools 가져오기 search_tool = Tool.from_langchain(load_tools(["serpapi"])[0]) agent = CodeAgent(tools=[search_tool], model=model) agent.run("주의만 있으면 됩니다에서 제안한 아키텍처의 인코더와 비교하여 BERT 기본 인코더에 얼마나 많은 블록(레이어로도 표시됨)이 더 있나요?")
상담원의 툴박스 관리 #
속성에서 도구를 추가하거나 교체하여 상담원의 도구 상자를 관리할 수 있습니다. agent.tools
표준 사전이기 때문입니다.
추가해 보겠습니다. 모델_다운로드_도구
를 기본 툴박스만으로 초기화된 기존 상담원에게 추가할 수 있습니다.
복사됨
smolagent에서 HfApiModel을 가져옵니다. model = HfApiModel("Qwen/Qwen2.5-Coder-32B-Instruct") agent = CodeAgent(tools=[], model=model, add_base_tools=True) 에이전트.도구[모델_다운로드_도구.이름] = 모델_다운로드_도구
이제 새로운 도구를 활용할 수 있습니다:
복사됨
agent.run( "포옹하는 얼굴 허브의 '텍스트-비디오 변환' 작업에서 가장 많이 다운로드된 모델의 이름을 알려주되 글자를 반대로 바꿔줄 수 있나요?") )
에이전트에 너무 많은 도구를 추가하지 않도록 주의하세요. 이렇게 하면 약한 LLM 엔진에 무리가 갈 수 있습니다.
도구 모음 사용 #
사용하려는 컬렉션의 슬러그와 함께 ToolCollection 개체를 사용하여 도구 컬렉션을 활용할 수 있습니다. 그런 다음 이를 목록으로 전달하여 에이전트를 초기화하고 사용을 시작하세요!
복사됨
smolagent에서 도구 컬렉션, 코드 에이전트를 가져옵니다. image_tool_collection = ToolCollection( collection_slug="huggingface-tools/diffusion-tools-6630bb19a942c2306a2cdb6f", token="" ) agent = CodeAgent(tools=[*image_tool_collection.tools], model=model, add_base_tools=True) agent.run("강과 호수의 그림을 그려주세요.")
시작 속도를 높이기 위해 상담원이 호출한 경우에만 도구가 로드됩니다.