도구 호출
AI 어시스턴트가 날씨를 확인하거나 실시간 데이터를 조회할 수 있기를 바라셨나요? Prism의 도구 호출 기능을 통해 이제 가능합니다! 이 강력한 기능을 통해 AI가 외부 서비스 및 데이터 소스와 상호 작용할 수 있어, 그 어느 때보다 다재다능하고 유용해졌습니다.
도구란 무엇인가요?
Prism에서 도구는 AI가 특정 작업을 수행하는 데 사용할 수 있는 특별한 객체입니다. AI의 스위스 아미 나이프라고 생각하세요 - 각 도구는 날씨 확인이나 데이터베이스 검색과 같은 특정 기능을 가지고 있습니다.
Prism의 도구를 구성하는 요소는 다음과 같습니다:
- 이름: 도구의 고유 식별자
- 설명: 도구가 하는 일에 대한 간단한 설명
- 매개변수: 도구가 작업을 수행하는 데 필요한 정보
- 함수: 도구가 호출될 때 실행되는 실제 코드
도구 만들기
실제로 어떻게 작동하는지 보기 위해 간단한 날씨 도구를 만들어 보겠습니다:
<?php
$weatherTool = Tool::as('weather')
->for('현재 날씨 상태 가져오기')
->withParameter('city', '날씨를 확인할 도시')
->using(function (string $city) {
// 실제 시나리오에서는 여기서 날씨 API를 호출할 것입니다
return "{$city}의 날씨는 맑고 22°C입니다.";
});
Prism 요청에서 도구 사용하기
이제 날씨 도구를 만들었으니, Prism 요청에서 사용해 보겠습니다:
<?php
$prism = Prism::text()
->using('anthropic', 'claude-3-sonnet')
->withPrompt("오늘 파리의 날씨는 어떤가요? 코트를 가져가야 할까요?")
->withTools([$weatherTool])
->withMaxSteps(3); // 도구 사용 및 응답 생성을 위해 최대 3회 반복 허용
$response = $prism();
이 예시에서 AI는 질문에 답하기 전에 날씨 도구를 사용하여 파리에 대한 정보를 얻을 수 있습니다.
다단계 호출
때로는 AI가 여러 도구를 사용하거나 도구를 사용한 후 그 결과를 처리해야 할 수 있습니다. 이럴 때 다단계 호출이 유용합니다. withMaxSteps(3)
을 설정함으로써, AI가 최대 3번의 개별 호출을 할 수 있도록 허용합니다. 이는 다음과 같은 과정을 포함할 수 있습니다:
- 파리의 날씨 도구 호출
- 날씨 정보 처리
- 코트를 가져가야 할지에 대한 최종 응답 생성
응답 처리하기
도구를 사용한 요청을 한 후, 결과를 검사할 수 있습니다:
echo $response->text; // AI의 최종 답변
foreach ($response->steps as $step) {
if (!empty($step->toolCalls)) {
foreach ($step->toolCalls as $toolCall) {
echo "사용된 도구: " . $toolCall->name . "\n";
echo "인수: " . json_encode($toolCall->arguments()) . "\n";
}
}
echo "단계 결과: " . $step->text . "\n\n";
}
이를 통해 최종 답변뿐만 아니라 AI가 어떤 도구를 사용했고 왜 사용했는지를 포함하여 결론에 도달한 과정을 볼 수 있습니다. 여전히 모든 텍스트 결과 출력에 접근할 수 있습니다.
복잡한 도구 정의하기
때로는 도구가 더 복잡해서 Closure를 사용하는 것이 적절하지 않을 수 있습니다. 이 경우 도구를 호출 가능한 클래스로 정의할 수 있습니다.
다음은 SerpAPI를 사용한 간단한 검색 도구의 예시입니다.
php
<?php
declare(strict_types=1);
namespace App\Tools;
use EchoLabs\Prism\Tool;
use Illuminate\Support\Facades\Http;
class SearchTool extends Tool
{
public function __construct()
{
$this
->as('search')
->for('현재 이벤트를 검색해야 할 때 유용함')
->withParameter('query', '자세한 검색 쿼리. 한 번에 한 주제를 검색하는 것이 가장 좋음.', 'string')
->using($this);
}
public function __invoke(string $query): string
{
$response = Http::get('https://serpapi.com/search', [
'engine' => 'google',
'q' => $query,
'google_domain' => 'google.com',
'gl' => 'us',
'hl' => 'en',
'api_key' => env('SERPAPI_API_KEY'),
]);
$results = collect($response->json('organic_results'));
$results->map(function ($result) {
return [
'title' => $result['title'],
'link' => $result['link'],
'snippet' => $result['snippet'],
];
})->take(4);
return view('prompts.search-tool-results', [
'results' => $results,
])->render();
}
}
blade
<links>
@foreach ($results as $result)
<link>
<title>{{ $result['title'] }}</title>
<url>{{ $result['link'] }}</url>
<snippet>{{ $result['snippet'] }}</snippet>
</link>
@endforeach
</links>
항상 응답 끝에 출처를 인용하세요
<example-sources>
출처:
- [제목](url)
- [제목](url)
</example-sources>
그런 다음 Prism에 도구를 등록하기만 하면 됩니다.
php
<?php
$prism = Prism::text()
->using('anthropic', 'claude-3-sonnet')
->withPrompt("오늘 파리의 날씨는 어떤가요?")
->withTools([new SearchTool])
->withMaxSteps(3);
echo $prism()->text;
도구 사용을 위한 모범 사례
- 간단하게 유지하세요: 잘 정의된 소수의 도구로 시작하세요.
- 설명을 자세히 작성하세요: 도구와 매개변수에 대해 명확한 설명을 제공하세요.
- 오류를 우아하게 처리하세요: 도구 함수가 예상치 못한 입력을 처리할 수 있도록 하세요.
- 사용량을 모니터링하세요: 도구가 얼마나 자주, 왜 호출되는지 주시하세요.
Prism에서 도구 호출을 활용함으로써, AI에게 실제 세계의 데이터에 접근하고 작업을 수행할 수 있는 능력을 부여하여, Laravel 애플리케이션에서 진정으로 강력한 어시스턴트로 만들 수 있습니다!
'프로그래밍 > Web' 카테고리의 다른 글
Laravel Prism 사용하기(번역) - 5 - (0) | 2024.10.15 |
---|---|
Laravel Prism 사용하기(번역) - 4 - (0) | 2024.10.15 |
Laravel Prism 사용하기(번역) - 2 - (1) | 2024.10.15 |
Laravel Prism 사용하기(번역) - 1 - (2) | 2024.10.14 |
Laravel Wave 테마 만들기 (0) | 2024.07.09 |
댓글