AI を使ったフォーラム投稿のタグ付けと分類

サム、ありがとうございます。

一部の人にとっては、他の人よりも簡単です。私は後者のカテゴリーに属しています :joy:

これをいじっていますが、うまくいきません。ツール経験がないので、ツールを他の方法で使用することを考えるために、これを機能させることを楽しみにしています。

ブログのコードをAPIキーで使用してみましたが、うまくいきませんでした。AIはハードコードされたURLを使用するように提案したので、試しましたが成功しませんでした。

APIキーは呼び出されず、エラーが発生したログも作成されていません。

これは、トピック作成時に自動的にカテゴリ分けするために使用されます。

「イエスの初期の年と奇跡からの洞察」というトピックを、イエスの生涯と教えに関連しているため、新約聖書のカテゴリーに分類します。
トピックを移動しています…

これが私が試したことです。

/**

  • Tool API クイックリファレンス
  • エントリー関数
  • invoke(parameters): メイン関数。パラメーター(Object)を受け取ります。JSONシリアライズ可能な値を返す必要があります。
  • 例:
  • function invoke(parameters) { return “result”; }
  • details(): オプション。ツールを説明する文字列を返します。
  • 例:
  • function details() { return “Tool description.”; }
  • 提供されるオブジェクト
    1. http
  • http.get(url, options?): HTTP GETリクエストを実行します。
  • パラメーター:
  •  url (string): リクエストURL。
    
  •  options (Object, optional):
    
  •    headers (Object): リクエストヘッダー。
    
  • 返り値:
  •  { status: number, body: string }
    
  • http.post(url, options?): HTTP POSTリクエストを実行します。
  • パラメーター:
  •  url (string): リクエストURL。
    
  •  options (Object, optional):
    
  •    headers (Object): リクエストヘッダー。
    
  •    body (string): リクエストボディ。
    
  • 返り値:
  •  { status: number, body: string }
    
  • (利用可能: http.put, http.patch, http.delete)
  • 注意: 1回の実行につき最大20件のHTTPリクエスト。
    1. llm
  • llm.truncate(text, length): テキストを指定されたトークン長に切り詰めます。
  • パラメーター:
  •  text (string): 切り詰めるテキスト。
    
  •  length (number): 最大トークン数。
    
  • 返り値:
  •  切り詰められた文字列。
    
    1. index
  • index.search(query, options?): インデックス化されたドキュメントを検索します。
  • パラメーター:
  •  query (string): 検索クエリ。
    
  •  options (Object, optional):
    
  •    filenames (Array): 特定のファイルに検索を制限します。
    
  •    limit (number): 最大フラグメント数(最大200)。
    
  • 返り値:
  •  { fragment: string, metadata: string } の配列
    
    1. upload
  • upload.create(filename, base_64_content): ファイルをアップロードします。
  • パラメーター:
  •  filename (string): ファイル名。
    
  •  base_64_content (string): Base64エンコードされたファイルコンテンツ。
    
  • 返り値:
  •  { id: number, short_url: string }
    
    1. chain
  • chain.setCustomRaw(raw): POSTの本文を設定し、チェーンを終了します。
  • パラメーター:
  •  raw (string): POSTに追加する生のコンテンツ。
    
  • 制約
  • 実行時間: ≤ 2000ms
  • メモリ: ≤ 10MB
  • HTTPリクエスト: 実行あたり ≤ 20件
  • 制限を超えると、エラーまたは終了が発生します。
  • セキュリティ
  • サンドボックス環境: システムオブジェクトまたはグローバルオブジェクトへのアクセスはありません。
  • ファイルシステムへのアクセス不可: ファイルの読み書きはできません。
    */

/**

  • Discourse トピック分類ツール
  • このツールを使用すると、Discourse APIを使用してDiscourseトピックのカテゴリを変更できます。
    */

/**

  • Discourse トピック分類ツール
  • このツールを使用すると、Discourse APIを使用してDiscourseトピックのカテゴリを変更できます。
    */

/**

  • Discourse トピック分類ツール
  • このツールを使用すると、Discourse APIを使用してDiscourseトピックのカテゴリを変更できます。
    */

function invoke(params) {
// 必須パラメーターの検証
if (!params.topic_id) {
return { error: “必須パラメーターがありません: topic_id” };
}

if (!params.category_id) {
return { error: “必須パラメーターがありません: category_id” };
}

// Discourseインスタンスの基本URL
const baseUrl = “https://community.mysite.com”;

// トピック更新のための完全なAPIエンドポイントURL
const apiUrl = ${baseUrl}/t/${params.topic_id}.json;

// リクエストボディの準備
const requestBody = {
category_id: params.category_id
};

// オプションパラメーター: タイトルが提供された場合は更新します
if (params.title) {
requestBody.title = params.title;
}

// 提供されたAPIキーを使用します
const apiKey = “Discourse-API-Key”;

try {
// トピックを更新するためにPUTリクエストを実行します
const response = http.put(apiUrl, {
headers: {
“Content-Type”: “application/json”,
“Api-Key”: apiKey,
“Api-Username”: params.api_username || “system”
},
body: JSON.stringify(requestBody)
});

if (response.status >= 200 && response.status < 300) {
  return {
    success: true,
    topic_id: params.topic_id,
    category_id: params.category_id,
    response: JSON.parse(response.body)
  };
} else {
  return {
    error: `トピックのカテゴリの更新に失敗しました。ステータス: ${response.status}`,
    details: response.body
  };
}

} catch (error) {
return {
error: “トピックのカテゴリの更新中にエラーが発生しました”,
details: error.toString()
};
}
}

function details() {
return “指定されたカテゴリにトピックを移動して分類します”;
}

「いいね!」 2