メインコンテンツまでスキップ
バージョン: 21 R3 BETA

OpenAIChatHelper

チャットヘルパーを使用すると、メモリ内にメッセージのリストを保管しておくことができ、連続したプロンプトを行うことができます。

プロパティ

プロパティ名デフォルト値説明
chatOpenAIChatAPI-Open AI との通信で使用されるチャットAPI インスタンス。
systemPromptOpenAIMessage-チャットアシスタントのレスポンスをガイドするためのシステムプロンプトメッセージ。
numberOfMessagesInteger15チャット履歴に保持するメッセージの最大数。
parametersOpenAIChatCompletionsParameters-OpenAI チャット補完リクエスト用のパラメーター。
messagesOpenAIMessage のコレクション[]そのチャットセッション内でやりとりされたメッセージのコレクション。
ツールOpenAITool のコレクション[]関数呼び出し用に登録されたOpenAI ツールの一覧。
autoHandleToolCallsBooleantrue登録されたツールを使用してツール呼び出しを自動的に管理するかどうかをあらわすブール値。
lastErrorsCollection-チャット操作中に発生した最後のエラーを格納したコレクション。

コンストラクター

新しい OpenAIChatHelper インスタンスを作成するためには、OpenAI クライアントのチャットAPIcreate() メソッドを使用するのが最適です:

var $chatHelper:=$client.chat.create("You are a helpful assistant.")

このメソッドは指定されたシステムプロンプトで新しいチャットヘルパーを作成し、デフォルトの引数で初期化します。 このシステムプロンプトが会話の間全体の、アシスタントの役割と振る舞いを定義します。

関数

prompt()

prompt(prompt : Variant) : OpenAIChatCompletionsResult

引数説明
promptText or OpenAIMessageThe text prompt to send to OpenAI chat, or an OpenAIMessage object for more complex messages (e.g., with images or files).
戻り値OpenAIChatCompletionsResultチャットから返されたチャット補完結果。

ユーザープロンプトをチャットに送信し、対応する補完の結果を返します。 You can pass either a simple text string or an OpenAIMessage object for more advanced scenarios like including images or files.

使用例

// Simple text prompt
var $result:=$chatHelper.prompt("Hello, how can I help you today?")
$result:=$chatHelper.prompt("Why 42?")

// Using OpenAIMessage for advanced scenarios (e.g., with images)
var $message:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "What's in this image?"})
$message.addImageURL("https://example.com/photo.jpg"; "high")
$result:=$chatHelper.prompt($message)

// Using OpenAIMessage with files
var $fileMessage:=cs.AIKit.OpenAIMessage.new({role: "user"; content: "Analyze this document"})
$fileMessage.addFileId($uploadedFile.id)
$result:=$chatHelper.prompt($fileMessage)

reset()

reset()

全てのメッセージを消去し、全てのツールの登録を解除することで、チャットコンテキストをリセットします。 これにより、システムのプロンプトとパラメータをそのままにしながら、効果的に新しい会話を始めることができます。

リセットの例

$chatHelper.prompt("Hello!")
$chatHelper.reset() // 以前のメッセージとツールを全て消去

registerTool()

registerTool(tool : Object; handler : Variant)

引数説明
toolObjectツール定義オブジェクト(あるいはOpenAITool インスタンス)
handlerObjectThe function to handle tool calls (4D.Function or Object), optional if defined inside tool as handler property

自動ツール呼び出し関数のために、ツールとそのハンドラ関数を登録します。

handler 引数には以下のものを渡すことができます:

  • 4D.Function: 直接ハンドラ関数
  • An Object: An object containing a formula property matching the tool function name

ハンドラー関数はOpenAI ツール呼び出しから渡された引数を格納しているオブジェクトを受け取ります。 オブジェクトは、ツールのスキーマで定義されたパラメーター名とキーが一致するキーと、AI モデルから提供された実際の引数である値との、キーと値のペアを格納しています。

Register Tool Examples

// Example 1: 直接ハンドラを使用したシンプルな登録
var $tool:={type: "function"; function: {name: "get_weather"; description: "Get current weather"; parameters: {type: "object"; properties: {location: {type: "string"; description: "City name"}}}}}
var $handler:=Formula(return "Sunny, 25°C in "+$1.location)

$chatHelper.registerTool($tool; $handler)

// Example 2: プロパティを持つtool オブジェクトを使用(この場合第2に引数は不要です)
var $tool:={name: "calculate"; description: "Perform calculations"; handler: Formula(return String(Num($1.expression)))}
$chatHelper.registerTool($tool)

// Example 3: オブジェクト記法を使用する
$chatHelper.registerTool({tool: $tool; handler: $handler})

// Example 4: ツール名と合致するフォーミュラを持ったオブジェクトとしてのハンドラ
var $tool:={name: "getTime"; description: "Get current time"}
var $handlerObj:=cs.MyTimeTool.new() // getTime 関数を持つクラス
$chatHelper.registerTool($tool; $handlerObj)

registerTools()

registerTools(toolsWithHandlers : Variant)

引数説明
toolsWithHandlersVariantツールとのそのハンドラを格納したオブジェクトまたはコレクション

複数のツールを一度に登録します。 引数には以下のものを渡すことができます:

  • コレクション: (ハンドラが埋め込んである、あるいは分離してある)ツールオブジェクトのコレクション
  • オブジェクト: 関数名がツール定義にマッピングされているキーとするオブジェクト
  • tools 属性を持つオブジェクト: tools コレクションと、ツール名に合致するフォーミュラプロパティを格納しているオブジェクト

Register Multiple Tools Examples

例 1: ツール内のハンドルを使用したコレクションフォーマット
var $weatherTool:={name: "getWeather"; description: "Get current weather"; handler: Formula(return "Sunny, 25°C in "+$1.location)}
var $calculatorTool:={name: "calculate"; description: "Perform calculations"; handler: Formula(return String(Num($1.expression)))}

$chatHelper.registerTools([$weatherTool; $calculatorTool])
例 2: 別個のツールとハンドラを使用したオブジェクトフォーマット
var $toolsWithSeparateHandlers:={}
$toolsWithSeparateHandlers.getWeather:={tool: $weatherToolDefinition; handler: $weatherHandler}
$toolsWithSeparateHandlers.calculate:={tool: $calculatorToolDefinition; handler: $calculatorHandler}

$chatHelper.registerTools($toolsWithSeparateHandlers)
例 3: tools コレクション属性とformula プロパティを持ったオブジェクト

MyTools クラス:


Class constructor
this.tools:=[{name: "getWeather"; description: "Get current weather"}; \
{name: "getTime"; description: "Get current time"}] // ツール定義のコレクション

Function getWeather($parameters: Object)
return "Sunny, 25°C"

Function getTime($parameters: Object)
return String(Current time)
$chatHelper.registerTools(cs.MyTools.new())
例 4: ツールをプロパティにもつシンプルなオブジェクトフォーマット
var $tools:={}
$tools.getWeather:=$weatherTool // handler プロパティを持つTool
$tools.calculate:=$calculatorTool // handler プロパティを持つTool

$chatHelper.registerTools($tools)

unregisterTool()

unregisterTool(functionName : Text)

引数説明
functionNameText登録を解除したいツールの関数名

特定のツールをその関数名で指定して登録解除します。 これによってツールは登録されたツールのコレクションから削除され、ハンドラも消去され、引数からも削除されます。

ツールを登録解除する例

$chatHelper.registerTool($weatherTool; $weatherHandler)
$chatHelper.unregisterTool("get_weather") // weather ツールを削除

unregisterTools()

unregisterTools()

全てのツールを一度に登録解除します。 これはすべてのツールハンドラを消去し、tools コレクションをからにし、そして引数からも全てのツールを削除します。

全てのツールを登録解除する例

$chatHelper.registerTools($multipleTools)
$chatHelper.unregisterTools() // 全てのツールを削除