🤖

社内 Slack BotをAssistants APIからResponses APIに切り替える

に公開

背景

弊社では、OpenAIのAPIを用いたSlack Botを開発・運用しています。
今回、Botの実行能力を拡張し、Web検索やMCPを利用したタスク実行を可能にするため、従来のAssistants APIからResponses APIへの切り替えを行いました。

(Slack Botの詳細については、こちらの記事をご参照ください)

Assistants APIとResponses API

Assistants APIとResponse APIは、どちらもOpenAIのAPIです。
そもそも、OpenAIのAPIには、単純な応答をするChat Completions APIと、 様々なツールを使いながらタスクを行うAssitants APIの2種類がありました。
この2つを統合したのが、Responses APIです。

それぞれのAPIに関しては以下のドキュメントも参照してください。
Assistants API
Migrating to Responses API

実際のコード変更

実際に行ったコード変更は以下です

Before (Assistants API)

const openai = new OpenAI({ apiKey: process.env.OPEN_AI_APIKEY });

// Assistantを作成
const assistant = await openai.beta.assistants.create({
  name: "Assistant",
  instructions: "system prompt",
  model: "gpt-4o",
  tools: [{ type: "file_search", vector_store_ids: ["vector_store_id"] }]
});

// Threadを作成
const thread = await openai.beta.threads.create();

// Threadにメッセージを追加
const message = await openai.beta.threads.messages.create(
  thread.id,
  {
    role: "user",
    content: "user message"
  }
);

// createAndPollを使用してrunを作成し、完了まで待機
const run = await openai.beta.threads.runs.createAndPoll(
  thread.id,
  {
    assistant_id: assistant.id
  }
);

上記の通り、Assistants APIを使った場合

  1. Asssitantの作成
  2. Threadの作成
  3. Threadに対するメッセージ追加
  4. 応答を待つ

という4段階のコードを書く必要がありました。

After (Responses API)

const openai = new OpenAI({ apiKey: process.env.OPEN_AI_APIKEY });
const input = [{role: 'system', content: 'system prompt'}]
const resp = await openai.responses.create({
    model: 'gpt-4o',
    input,
    tools: [
        { type: 'file_search', vector_store_ids:['vector_store_id'] },
        { type: "web_search" }
    ],
});

Responses APIはこちらの1段階のみで同等のタスク実行を行うことができます。
また、toolsに対して、web_searchやmcpの指定が簡単にできるようになりました。

メリット

コードが非常に簡潔になる

上記の通り、コードが非常に簡潔になり、可読性が上がりました。

Web検索 ・ MCPなどのツール利用

Responses APIでは、従来からあったfile_searchに加え、Web検索やMCPの利用が簡単にできるようになりました。
実際に、Web検索を使って最新の情報をとってきてもらった例が以下です。

MCPに関しては、Remote MCPしか利用できないこともあり、セットアップに多少の工夫が必要でした。この点については別記事で詳しく解説する予定です。

Slackでの表現力が上がった(?)

弊社の場合ですが、Responses APIに変更したことで、なぜかSlack上でコードブロックが正しくレンダリングされるようになりました。(Assistants APIの時はコードブロックも単なるテキストとして吐き出されていた)。
この改善がAPI切り替えに直接起因するのかは定かではありませんが、体験の向上に寄与しています。

まとめ

Assistants APIからResponses APIへの移行により、

  • コードが簡潔に
  • 新しいツールが利用可能に
  • Slack上での表現力も改善

といった効果を得られました。
すでにAssistant APIはOpenAIから 非推奨(deprecated) の通知も出ているため、これからSlack上でエージェントを構築・運用される方には、Responses APIの採用を強くおすすめします。


Bizibl では開発エンジニアを絶賛採用しています!カジュアル面談に興味がある方はこちらから!
https://open.talentio.com/r/1/c/bizibl/pages/99945

株式会社Bizibl Technologies テックブログ

Discussion