ステップバイステップガイド:ONLYOFFICEのAIエージェントにカスタムAI機能を追加する方法
ONLYOFFICEの新しいスマートAIエージェントにより、今日の急速に進化するデジタル世界の要求に応える最先端ツールを提供します。オープンソースプロジェクトとして、ユーザー主導のイノベーションを歓迎します。本記事ではAIエージェントにカスタム関数を追加する方法をご紹介し、文書作業をより速く、簡単に、便利にします。

AI関数とは何か、何のためにあるのか?
AI関数はAIエージェントの機能を構築するコア要素です。基本的にはAIエージェントに以下を指示します:
- AIモデルにどのリクエストを送信するか。
 - 文書に対してどの操作を実行するか。
 
AI関数を使用することで、AIが文書コンテンツとどのようにやり取りするかを拡張し、制御できます。
AI関数の使い方
- 任意のモデルをAIプラグインに追加します。
 - AIエージェントダイアログボックスをCTRL + Bで開きます。
 - プロンプトを入力してEnterを押します。
 
例: commentText関数
commentText関数を使用すると、AI生成コメントを文書に直接追加できます。仕組みは以下の通りです:
- コメントを残したい単語を選択します。
 - AIエージェントダイアログボックス(CTRL + B)を開きます。
 - 指示を入力します。例: “Explain this text.”
 - Enterを押します。
 

AIエージェントはcommentText関数を実行し、関連するコメントを文書に挿入します:

なぜAIエージェントにカスタム関数を追加するのか?
カスタムAI関数を追加することで、スマートAIエージェントの機能を拡張し、自分のニーズに正確に合わせられます。文書、スプレッドシート、プレゼンテーションのいずれで作業していても、エージェントの多用途性と最新AIモデルの力を組み合わせることで、アイデアを現実に変え、ワークフローにシームレスに統合できます。
カスタムAI関数追加の一般的な流れ
カスタム関数を追加するプロセスは主に2つのフェーズから成ります:
- 関数登録 – AI関数とそのメタデータをエージェント環境に登録します。
 - 関数実行 – 中核ロジックを実装します。AIモデルへのリクエスト送信とOffice APIを用いた文書操作が含まれます。
 
それでは、これらのフェーズを詳しく見ていきましょう。
関数登録
新しい関数を追加するためにRegisteredFunctionオブジェクトを実装します。これによりメタデータとロジックを追加できます。以下はドキュメントエディタ用にcommentText関数を追加する例です:
let func = new RegisteredFunction();
        func.name = "commentText";
        func.params = [
            "type (string): whether to add as a 'comment' or as a 'footnote'    default is 'comment')"
        ];
        func.examples = [
            "If you need to explain selected text as a comment, respond with:\n" +
            "[functionCalling (commentText)]: {\"prompt\" : \"Explain this text\", \"type\": \"comment\"}",
            "If you need to add a footnote to selected text, respond with:\n" +
            "[functionCalling (commentText)]: {\"prompt\" : \"Add a footnote to this text\", \"type\": \"footnote\"}",
            "If you need to comment selected text, respond with:\n" +
            "[functionCalling (commentText)]: {\"prompt\" : \"Comment this text\"}",
            "If you need to explain selected text as a footnote, respond with:\n" +
            "[functionCalling (commentText)]: {\"prompt\" : \"Explain this text\", \"type\": \"footnote\"}"
     ]
ここで:
- func.name: AIがこの関数を呼び出すときに使用する名前(例: “commentText”)。
 - func.params: AIから期待されるパラメータのリスト。例えば:
 
– prompt (string): コメントの説明や指示。
– type (string): “comment” または “footnote” — 何を挿入するかを指定。
- func.examples: AIが正しい呼び出しを行うためのサンプル。
 - func.description: この関数が何に使われるのかをAIに説明。
 
これらのパラメータはAIによって利用されます。RegisteredFunction()オブジェクトはhelperFunc.jsファイル内で定義されています。
関数実行ロジック
関数を登録した後、AIがこの関数を呼び出したときに実際に実行されるロジックを実装します。
- Asc.Editor.callCommand()を使って選択されたテキストを取得。
 
func.call = async function(params) {
            let type = params.type;
            let isFootnote = "footnote" === type;
// エディタのコンテキスト内でコードを実行(office-js API使用)
            let text = await Asc.Editor.callCommand(function(){
                let doc = Api.GetDocument();
// 現在選択されているテキスト範囲を取得
                let range = doc.GetRangeBySelect();
                let text = range ? range.GetText() : "";
                if (!text)
                {
                    text = doc.GetCurrentWord();
// 現在の単語を選択しコメント可能に
                    doc.SelectCurrentWord();
                }
                return text;
            });
- params.promptと選択テキストを組み合わせてAIに送るプロンプトを構築。
 
let argPromt = params.prompt + ":\n" + text;
- AI.Request.createを初期化し、AIモデルへのリクエスト送信を可能に。
 
let requestEngine = AI.Request.create(AI.ActionType.Chat);
            if (!requestEngine)
                return;
- chatRequest()を使ってリクエストを送信し、コールバックで結果を受け取る。
 
そして結果をAddFootnote()やAddComment()を使って文書に挿入します。
—
commentText関数の完全実装
以下はコメント付きの完全な実装です:
(function(){
// commentText関数を定義 — 選択テキストに対してAI応答をコメントや脚注として挿入可能にする
    WORD_FUNCTIONS.commentText = function()
    {
        let func = new RegisteredFunction();
        func.name = "commentText";
        func.params = [
            "type (string): whether to add as a 'comment' or as a 'footnote' (default is 'comment')"
        ];
        func.examples = [
            "If you need to explain selected text as a comment, respond with:\n" +
            "[functionCalling (commentText)]: {\"prompt\" : \"Explain this text\", \"type\": \"comment\"}",
            "If you need to add a footnote to selected text, respond with:\n" +
            "[functionCalling (commentText)]: {\"prompt\" : \"Add a footnote to this text\", \"type\": \"footnote\"}",
            "If you need to comment selected text, respond with:\n" +
            "[functionCalling (commentText)]: {\"prompt\" : \"Comment this text\"}",
            "If you need to explain selected text as a footnote, respond with:\n" +
            "[functionCalling (commentText)]: {\"prompt\" : \"Explain this text\", \"type\": \"footnote\"}"
        ];
        
// 関数呼び出し時に実際に実行されるロジック
        func.call = async function(params) {
            let type = params.type;
            let isFootnote = "footnote" === type;
            let text = await Asc.Editor.callCommand(function(){
                let doc = Api.GetDocument();
                let range = doc.GetRangeBySelect();
                let text = range ? range.GetText() : "";
                if (!text)
                {
                    text = doc.GetCurrentWord();
                    doc.SelectCurrentWord();
                }
                return text;
            });
            let argPromt = params.prompt + ":\n" + text;
            let requestEngine = AI.Request.create(AI.ActionType.Chat);
            if (!requestEngine)
                return;
            ...
        };
        return func;
    }
})
—
まとめ
私たちは常に最新技術に対応し、スマートAIエージェントが現代のデジタルニーズに合わせて進化し続けることを目指しています。独自のカスタム関数を作成することで、その機能を自分仕様に拡張できます。ぜひ創造力を活かしてみてください。
質問、提案、フィードバックがあれば、ぜひご連絡ください。私たちは常に協力し、皆さんのビジョン実現を支援します。探究の旅が実り多いものになることを願っています!
ONLYOFFICEの無料アカウントを登録する
オンラインでドキュメント、スプレッドシート、スライド、フォーム、PDFファイルの閲覧、編集、共同作業


