Claude 3 APIがFunction calling (Tools)に対応したので試してみる
Claude 3 APIが、OpenAIのFunction callingにあたる機能をToolという名前でパブリックベータとして公開しました。
早速試してみます。
公式ドキュメントによれば、
httpのrequest headerに
anthropic-beta: tools-2024-04-04
を追加し、request bodyにtoolsとしてスキーマの情報を送れば良いようです。
Node版sdkも対応していて、サンプルも追加されています。
このサンプルを参考に動かしてみました。
当初、何度かテストをしても
error: {
type: 'error',
error: { type: 'overloaded_error', message: 'Overloaded' }
}
と高負荷な状態のエラーが返ってきました。
モデルをclaude-3-sonnet-20240229
に変更したところ、あっさりと動きました。公開直後なので、しばらくこの状態が続くかもしれませんので、同様のエラーに遭遇した場合には、モデルを変更して試すことをおすすめします。
また、通常と異なるのはmessage apiを呼ぶときに、anthropic.messages.create
を anthropic.beta.tools.messages.create
とベータ用のAPIにする必要があります。
npmが0.20.1より以前のものだとcrete関数の引数にtoolsという項目が定義されていないので形エラーになります。かならず最新のバージョンのものを使うようにしましょう。
import Anthropic from '@anthropic-ai/sdk';
const anthropic = new Anthropic({
apiKey: process.env['ANTHROPIC_API_KEY'], // This is the default and can be omitted
});
async function main() {
const message = await anthropic.beta.tools.messages.create(
{
max_tokens: 1024,
// model: 'claude-3-opus-20240229',
model: 'claude-3-sonnet-20240229',
tools: [
{
"name": "get_weather",
"description": "Get the current weather in a given location",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
}
},
"required": ["location"]
}
}
],
"messages": [
{
"role": "user",
"content": "What is the weather like in San Francisco?"
}
]
},
);
console.log(message.content);
}
main();
open aiでparametersで送っているデータは、input_schemaという名前(key)に変更する必要があります。
以下が結果です。
[
{
type: 'text',
text: "Okay, let's get the current weather for San Francisco using the provided tool:"
},
{
type: 'tool_use',
id: 'toolu_019cy4213qsNVZsFWJEeve6P',
name: 'get_weather',
input: { location: 'San Francisco, CA' }
}
]
若干項目の差はありますが、OpenAIのFunction Callingの実装をそのまま変更して使えそうです。
tool_useのidと、textの内容は、この結果を次の会話でllmになげる場合に必要です。このあたりの流れはOpenAIのAPIとは異なっています。
人工知能を活用したアプリケーションやサービスを活用し、内発的動機付けで行動するエンジニア、起業家、社会起業家をサポートするコミュニティーです。 singularitysociety.org
Discussion