メインコンテンツまでスキップ

AIエージェントの構築方法

Squid の SDK を使用すると、一連の機能を利用して AI エージェントをカスタマイズできます。永続的なインストラクションやコンテキストを追加したり、チャットセッションを管理したり、AI のロジックをカスタマイズしたりして、特定のユースケースに合わせたカスタム AI エージェントを作成できます。

動作の仕組み

内部では、エージェントは Large Language Model (LLM) を使用してユーザーの質問に対する回答を生成します。ユーザーが質問をすると、永続的なインストラクションと最も関連性の高いコンテキストがプロンプトの一部として LLM に渡され、ユーザーに文脈に沿った回答が提供されます。

Squid は、AI エージェントに使用する LLM を選択できるようにしており、ユースケースに最適なものを見つけることができます。現在、以下の LLM プロバイダーが利用可能です:

現在サポートされていない特定のモデルが必要ですか? ご要望についてはreach out to usまでお問い合わせください!

エージェントの構築

エージェントは、AI ワークフローのための独自の個性やセットアップを表します。各エージェントは、固有のインストラクションと能力によって区別される異なるペルソナやユースケースのようなものです。この設計により、特定のエージェントに応じたカスタマイズされた回答を AI から得ることが可能になります。

注意

以下の例は Squid の SDK を使用してエージェントを作成する方法を示しています。Squid プラットフォームおよび SDK を用いた開発に不慣れな場合は、フルスタック開発についてのread our documentationをご覧ください。

エージェントの登録・更新

プログラムから AI エージェントを作成または更新するには、作成または更新すべきエージェントIDを指定して upsert() メソッドを使用します:

Backend code
await squid
.ai()
.agent('banking-copilot')
.upsert({
options: {
model: 'gpt-4o',
},
isPublic: true,
});

エージェントを挿入する際は、エージェントが使用するモデルを示す model フィールドを含む options オブジェクトを渡します。

isPublic パラメータは、特定のエージェントのチャット機能が security rules を設定せずにアクセス可能かどうかを決定します。

エージェントの削除

既存のエージェントを削除するには、delete() メソッドを使用します:

Backend code
await squid.ai().agent('banking-copilot').delete();

指定されたエージェントIDに対するエージェントが存在しない場合、この関数はエラーを返します。

インストラクション

インストラクションは、エージェントがプロンプトにどのように応答し、質問に答えるかのルールを定めます。簡潔かつ明瞭であり、エージェントの目的を説明する必要があります。インストラクションはテキストブロックとして提供されます。

インストラクションの追加

AI エージェントのインストラクションを追加または編集するには、updateInstructions() メソッドを使用し、インストラクションデータを文字列として渡します。

Backend code
const instruction =
'You are a helpful copilot that assists customer support staff by providing answers to their questions about banking and finance products.';
await squid.ai().agent('banking-copilot').updateInstructions(instruction);

コンテキスト

コンテキストは、エージェントが質問に答える際に参照する知識を指定し、Agent Studio の Knowledge Base 機能と同等のものです。コンテキストを追加することで、基礎となる AI モデルに含まれていない特定のトピックに関する適切な回答をエージェントが提供できるようになります。

以下は簡単なコード例ですが、追加するコンテキストははるかに複雑なものにすることもできます。コンテキストの良い例としては、コードドキュメンテーション、製品マニュアル、業務運用情報 (例:store hours) およびユーザー固有のデータなどがあります。コンテキストの種類を組み合わせることで、堅牢な知識ベースを AI エージェントに構築でき、ユーザーが必要とするあらゆる情報を提供できるようにします。

コンテキストの登録・更新

エージェントのコンテキストを追加または更新するには、コンテキストとそのタイプを渡して upsertContext() メソッドを使用します。

upsertContext() メソッドはコンテキスト ID を受け入れます。コンテキスト ID を指定することで、後で変更を加えたいときにコンテキストにより簡単にアクセスできるようになります。

const data = `Platinum Mastercard® Fair Credit, No annual fee. Flexible due dates...`;

await squid.ai().agent('banking-copilot').upsertContext({
type: 'text',
title: 'Credit Card Info',
text: data,
contextId: 'credit-cards',
});

あるいは、upsertContexts() を使用して、コンテキストの配列を一括でアップサートできます。

const creditCard1 = `Platinum Mastercard® Fair Credit, No annual fee. Flexible due dates...`;
const creditCard2 = `Gold Mastercard®, $50 annual fee. Due dates once a month...`;

await squid
.ai()
.agent('banking-copilot')
.upsertContexts([
{
type: 'text',
title: 'Credit Card 1 Info',
text: creditCard1,
contextId: 'credit-cards1',
},
{
type: 'text',
title: 'Credit Card 2 Info',
text: creditCard2,
contextId: 'credit-cards2',
},
]);

コンテキストの種類

サポートされているコンテキストの種類は 2 つです:text および file

テキストコンテキストは、コンテキストを含む文字列で作成されます:

const data = `Platinum Mastercard® Fair Credit, No annual fee. Flexible due dates...`;

await squid.ai().agent('banking-copilot').upsertContext({
type: 'text',
title: 'Credit Card Info',
text: data,
contextId: 'credit-cards',
});

ファイルコンテキストは、upsertContext() メソッドの第2引数として File オブジェクトを提供することにより作成されます。その後、ファイルは Squid にアップロードされ、ファイルの内容からコンテキストが作成されます。

const file = {
blob: contextBlob,
fileName: 'CreditCardList.pdf',
};

await squid.ai().agent('banking-copilot').upsertContext(
{
type: 'file',
contextId: 'credit-cards',
},
file
);
注意

あなたのコンテキストは任意の長さにすることができますが、LLM プロンプトには文字数制限があるため、実際にはユーザーの問い合わせに対して、コンテキストの一部のみが含まれる場合があります。プロンプトを構築する際、Squid は提供されたコンテキストの中からユーザーの質問に最も関連性の高い部分を選択します。

コンテキストの取得

すべてのコンテキストのリストを取得するには、listContexts() メソッドを使用します。このメソッドは、contextId を含むエージェントコンテキストオブジェクトの配列を返します:

await squid.ai().agent('banking-copilot').listContexts();

特定のコンテキスト項目を取得するには、コンテキスト ID を渡して getContext() メソッドを使用します:

await squid.ai().agent('banking-copilot').getContext('credit-cards');

コンテキストの削除

コンテキストエントリを削除するには、deleteContext() メソッドを使用します:

await squid.ai().agent('banking-copilot').deleteContext('credit-cards');

指定されたコンテキストIDに対してエントリがまだ作成されていない場合、このメソッドはエラーを返します。

コンテキストメタデータ

AI エージェントのコンテキストを追加または更新する際に、オプションでコンテキストメタデータを提供できます。メタデータは、キーが文字列、数値、または真偽値の型を持つオブジェクトです。メタデータを追加することで、エージェントとのインタラクション時に使用できるコンテキストに関する追加情報を提供できます。以下の例は、PDFをコンテキストとして追加し、2つのキー/バリューのペアをメタデータとして提供する方法を示しています:

const data = {
blob: contextBlob,
fileName: 'CreditCardList.pdf',
};

await squid
.ai()
.agent('banking-copilot')
.context()
.upsertContext(
{
contextId: 'credit-cards',
type: 'file',
metadata: { company: 'Bank of America', year: 2023 },
},
file
);

その後、メタデータは AI エージェントとのチャット時に使用でき、filtering context with metadata sectionに示されている通りです。

エージェントとのやりとり

エージェントが作成されると、質問をしたりプロンプトを送信したりする準備が整います。希望する AI エージェントで ask() メソッドを使用してください。

const response = await squid
.ai()
.agent('banking-copilot')
.ask('Which credit card is best for students?');

ask メソッドのオプション

プロンプトに加えて、ask 関数はオプションの options パラメータを受け入れることができます。このパラメータには、AI エージェントを構成するためのさまざまなプロパティが含まれています。利用可能なオプションとそのデフォルト値の完全なリストについては、API reference documentationを参照してください。

await squid
.ai()
.agent('banking-copilot')
.ask('Which credit card is best for students?', {
chatId: 'my-chat',
maxTokens: 4096,
disableHistory: true,
/* ... */
});

メタデータを使用したコンテキストのフィルタリング

コンテキストにメタデータを追加した場合、contextMetadataFilter チャットオプションを使用して、AI エージェントに特定のコンテキストのみを参照させるように指示できます。フィルタ条件を満たすコンテキストのみが、クライアントのプロンプトに対する回答に使用されます。

以下の例では、メタデータの "company" の値が "Bank of America" に等しいコンテキストのみをフィルタリングしています:

await squid
.ai()
.agent('banking-copilot')
.ask('Which Bank of America credit card is best for students?', {
contextMetadataFilter: { company: { $eq: 'Bank of America' } }, // filter context using metadata
/* ... */
});

サポートされているメタデータフィルターは次の通りです:

フィルター説明サポートされているタイプ
$eq指定された値と等しいメタデータ値を持つベクターにマッチnumber, string, boolean
$ne指定された値と等しくないメタデータ値を持つベクターにマッチnumber, string, boolean
$gt指定された値より大きいメタデータ値を持つベクターにマッチnumber
$gte指定された値以上のメタデータ値を持つベクターにマッチnumber
$lt指定された値より小さいメタデータ値を持つベクターにマッチnumber
$lte指定された値以下のメタデータ値を持つベクターにマッチnumber
$in指定された配列内にあるメタデータ値を持つベクターにマッチstring, number
$nin指定された配列に含まれないメタデータ値を持つベクターにマッチstring, number
$exists指定されたメタデータフィールドが存在するベクターにマッチboolean

AI 関数

Squid AI Agents は、特定のユースケースに対応し、一貫性のある回答を生成するために AI functions を使用できます。AI 関数を使用するには、options パラメータの functions 属性に AI 関数名の配列を渡します:

const response = await squid
.ai()
.agent('banking-copilot')
.ask('What is my current credit limit?', {
functions: ['AI_FUNCTION_NAME_1', 'AI_FUNCTION_NAME_2'],
});

AI 関数の詳細については、view the documentation をご覧ください。AI 関数を使用したサンプルアプリケーションを確認するには、check out this AI agent tutorial をご参照ください。

エージェントのセキュリティ

データのセキュリティは、Squid Client SDK を使用してエージェントを作成し、チャット機能を有効にする際に非常に重要です。AI エージェントおよびそれらを用いたチャットには機密情報が含まれる可能性があるため、不正な使用や変更を防ぐためにアクセスと更新を制限することが必須です。

AI エージェントのセキュリティについては、Securing AI agents のドキュメントをご確認ください。