OpenAI DevDay 2024 | コミュニティスポットライト | Stainless

2,295 文字

OpenAI DevDay 2024 | Community Spotlight | Stainless
Designing Delightful APIs and SDKs: Building APIs and SDKs from OpenAI, Stripe, and Twilio, and exploring future possibi...

司会者: ロバート、早速ですが本題に入らせていただきます。これって無料で使えるんじゃないですか?既にOpenAPI仕様からクライアントライブラリを生成できるオープンソースのツールがたくさんあると思うんですが、なぜStainlessに6桁もの金額を支払ってSDKを生成してもらう必要があるのでしょうか?
ロバート: はい、この会場にいる方で覚えているかもしれませんが、以前のOpenAIのNode.jsバージョンは、OpenAPI Generatorというオープンソースツールを使って生成されていました。ただし、それにはOpenAIが本当に必要とする重要な機能の1つ、ストリーミングが欠けていました。そこで私たちは、お客様のためにそれをSDKに組み込みました。さらに、カスタムコードという機能を使って生成されたSDKの上に機能を追加することができ、通常のリポジトリと同じように、SDKに好きな変更を加えることができます。
司会者: なるほど。SDKを通じて構造化された出力を使用した方はいらっしゃいますか?
ロバート: 何人かいらっしゃいますね。これはカスタムコードの良い例です。SDKの一部としてZodとPydanticのヘルパーがあり、これはOpenAI…申し訳ありません、同じ文でOpenAIとOpenAPIという言葉を使うのは本当に厄介ですが、これは私たちの技術がどのように動作するかに非常に特化したものです。
司会者: それはどのようにまとめられるんですか?リリース時にカスタムコードをSDKにどのように適用するんですか?
ロバート: 裏側でGitの魔法を使っています。複数のブランチがあり、1つは純粋な生成出力用で、もう1つはその上に追加された機能を持つブランチです。そしてGitのチェリーピックを使用します。基本的には最後にパッチを適用するようなものです。カスタムコードがパッチとして入り、リポジトリには新しい型定義などの関連する変更だけが含まれたプルリクエストが作成されます。かなり素晴らしいですよ。
司会者: 私は開発者ツールの分野でしばらく仕事をしてきましたが、ロバートに最初に書いたAPIクライアントがNode.js 0.8だったと言ったら、彼は恐怖で目を見開いていました。そんな昔にソフトウェアを書いていた人がいるなんて信じられなかったようです。でも私の時代には、RESTful APIの上に乗るSDKを一から書かなければなりませんでした。その時、私たちは適切な抽象化レベルについて深く考えました。HTTPリクエスト・レスポンスサイクルの上に薄い層を作るべきか、それとも大きなオブジェクトモデルの背後に完全に抽象化するべきか。適切なバランスをどのように考えていますか?
ロバート: 提供するサービスの種類によって本当に異なります。LangChainやLlamaIndexのようなパッケージを開発している場合は、特定のユースケースに対して独自の素晴らしい抽象化を作ることができます。しかし、OpenAI Pythonのような一次パーティSDKを提供する場合は、APIが提供するすべての機能をサポートする必要があります。HTTPのAPIの上に非常に薄いラッパーを作成すれば、すべてをサポートでき、お客様やユーザーはAPIドキュメントを見るだけで、APIがどのように動作するかとSDKの使い方を素早く対応付けることができます。独自の抽象化を作成すると、APIの動作方法とSDKの使い方の両方を学ばなければならなくなります。
司会者: では、APIの荒い部分を隠すためにSDKを使用することは一般的に有害とされているんですね。実際に何があるのかについて混乱を招く可能性があるからですか?
ロバート: その通りです。なぜ同じものに異なる名前が付いているのかという混乱を招きます。
司会者: では、どのような抽象化が有用だと考えていますか?HTTPインターフェースでどのような抽象化が役立つと思いますか?
ロバート: 大きなものの1つがページネーションです。すべてのデータを1つのHTTPレスポンスに収めることはできないので、複数に分割する必要があります。SDKはそのための素晴らしいユースケースです。また、自動リトライも重要です。何らかの理由で接続できない場合、それは一時的なエーラーなので、自動リトライがあれば、単純なHTTPリクエストを行う場合と比べて、アプリケーションは問題なく動作し続けることができます。
司会者: HTTPのAPIで抽象化できない重要な詳細は何ですか?
ロバート: ヘッダーのような要素です。ユーザーは生のレスポンスにアクセスできる必要があります。場合によっては受け取ったすべてのヘッダーやレスポンスの取得にかかった時間をログに記録したい場合があるかもしれませんし、レスポンスを独自のJSONオブジェクトにパースしたくない場合もあるかもしれません。一般的に、HTTPリクエストが発生しているという事実は本質的なもので、最終的にはそのデータが必要になります。
司会者: SDKのコードを自動生成することには、良くないコードが生成される可能性があるというリスクがあります。それが、以前使用していたオープンソースのソリューションを最終的に採用しなかった理由です。生成された出力が期待する水準に達していなかったからです。特にPythonのような言語では、コードがPythonicである、つまり特定の見た目や感覚を持っているべきだという考えがありますが、それについてどう考えていますか?

コメント

タイトルとURLをコピーしました