エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

ChatGPT Retrieval Pluginに任意のベクトル検索エンジンProviderを実装する

Overview

エムスリーエンジニアリンググループ AI・機械学習チームでソフトウェアエンジニアをしている中村(po3rin) です。検索とGoが好きです。

エムスリーではChatGPTの可能性にいち早く注目して活用を検討している段階ですが、本格的なデータ投入にはまだ懸念もあり、セキュリティチームと検討を進めている段階です。

そんな中で個人または組織のドキュメントのセマンティック検索と取得を可能にするChatGPTプラグイン「ChatGPT Retrieval Plugin」が登場しました。

github.com

情報検索好きとしては黙っていられず、外部公開用のエムスリーAI・機械学習チームのメンバー紹介ドキュメントを使ってローカルで試してみました。

# 用意したドキュメント

中村弘武は東京都在住で、エムスリーという企業で働いでいます。
エムスリーの検索基盤を主に担当しています。また、書籍推薦システム開発なども行っています。

農見俊明は前職では自然言語処理をタンパク質解析に応用するモデルの開発に従事
エムスリーでは推薦アルゴリズム・システムの構築とREST API開発を担当

浮田純平は医学部出身 (MD)・医学博士 (PhD)。学部時より約8年間、機械学習 (特に深層学習) を用いた生体データの解析や深層学習の研究を行った。
大学院では自身の研究のほか、計算機サーバーの立ち上げや学部生の研究指導にも従事した。

質問

# (省略: コードは後ほど紹介します)..

response = index.query("エムスリーAIチームに所属する医学部出身のエンジニアを“名前:特徴“のフォーマットで一人教えてください")
print(response)

結果

名前: 浮田純平 特徴: 医学部出身 (MD)・医学博士 (PhD)であり、機械学習 (特に深層学習) を用いた生体データの解析や深層学習の研究を約8年間行ってきた。また、大学院では自身の研究のほか、計算機サーバーの立ち上げや学部生の研究指導にも従事している。さらに、エムスリーでは検索基盤を主に担当し、書籍推薦システム...

なんか僕のプロフィールをしれっと最後に混ざて嘘を言っていますが(笑)、それらしい回答は得られました。これでChatGPTの情報源を拡張できることを確認できました。

動かすだけだとつまらないので、今回はChatGPT Retrieval Pluginがサポートしているベクトル検索エンジンではなく、AWSで利用できるOpenSearch のProviderを実装して、ChatGPTにOpenSearchのベクトル検索を提供する方法を試してみました。

このブログを読むことで、ChatGPT Retrieval Pluginの動作の理解と、皆さんが日頃使っている慣れ親しんだベクトル検索エンジンをChatGPT Retrieval Pluginに対応させる知見を獲得できます。

続きを読む

波紋で広がるボトムアップブランディング

はじめまして、エムスリーデザイングループBXデザイナーの花井です。

エムスリーのデザイン組織には、BX支援チームというちょっと変わったチームがあります。 所属しているメンバーは、モーションデザイナーやクリエイティブディレクター、エディトリアルデザイナーなど多種多様! 複数の事業を横断しながら、それぞれの得意とするスキルを活かして活躍しています。

続きを読む

cruft実践入門 ~cookiecutter templateの変更に追従する~

Overview

エムスリーエンジニアリンググループ AI・機械学習チームでソフトウェアエンジニアをしている中村(po3rin) です。検索とGoが好きです。

AI・機械学習チームでは開発の効率化のため、プロジェクトの雛形を自動的に生成するcookiecutterのプロジェクトtemplateを利用しています。下記はAPI開発で利用しているcookiecutterプロジェクトtemplateについての記事です。

www.m3tech.blog

しかし、templateから作成したプロジェクトはtemplateが新しくなった場合に、その変更に追従するのが困難になります。そこで、今回はcruftというツールを導入して、最新cookiecutter templateへの追従を楽にできるようにしました。今回はcruftの紹介と、それをどのように導入したかをお話しします。

続きを読む

人間にUnicode正規化は難しい

【AI・機械学習チーム ブログリレー2日目】

AI・機械学習チームの池嶋 (@mski_iksm) です。

私達のチームでは、機械学習バッチの実行方法やインターンを含む新配属者のPC初期セットアップ手順など多くのドキュメントがGitLab上で管理されています。Gitでドキュメントを管理するのは、Wiki等と比較して更新時のピアレビューがしやすかったり、CIによる自動チェックがやりやすかったりなどのメリットから採用されています。

CIの自動チェックの1つとしてリンクチェッカーがあります。これは切れているリンクがないかを更新時にチェックするものです。

ある日、ファイルはあるように「見える」のに、なぜかリンクチェッカーのCIが落ちているという事象が発生しました。

タイトルでネタバレしているのですが、原因はUnicodeの正規化でした。 この記事では、何が起きていたのか?どのようなケースで起こりうるのか?どう回避すればいいのか?に加え、macのファイルシステムや各アプリケーションのUnicodeの対応を紹介します。

続きを読む

僕がAIチームで知っている技術スタックまとめ

こんにちは、エムスリーエンジニアリンググループ AI・機械学習チーム(以下「AIチーム」)で機械学習エンジニアをしている農見です。

今日から1週間「AIチーム ブログリレー」と題し、AIチームメンバーでリレー形式でテックブログを執筆し、AIチームがどのような開発をしているのか・どんなチームなのか・どんなメンバーがいるのかなど、ご紹介できればと思います。

記念すべき初回は僕がAIチームで知っている技術スタック( AIチーム内で使ってる技術スタックではない)についてです。それではどうぞ

続きを読む

デジスマチームでのOpenAPI活用方法の紹介

【デジスマチーム ブログリレー6日目】

こんにちは、デジスマチームに所属している大和です。
タイトルに含まれるOpenAPIという文字から、ChatGPTやGPT-4で話題のOpenAIと見間違えた方もいらっしゃるかもしれませんが、今回はREST APIのスキーマ定義に使用されるOpenAPIの話をします。

私が所属するデジスマチームではデジスマ診療というサービスを開発しており、マイクロサービスアーキテクチャでOpenAPIを利用して開発しています。
なお、システムのアーキテクチャについては以下の記事が詳しいです。

www.m3tech.blog

今回はどのような構成でOpenAPIを利用し、スキーマ駆動開発を行っているかについて例を用いて紹介します。

  • ねらい
  • スキーマ定義ファイルの構成
    • APIサーバの定義
    • 共通化されたファイルの定義
    • イベント駆動用の定義
  • クライアントコード生成
  • Swagger UIの活用
    • まとめ
    • 参考
  • We are hiring!
続きを読む

gokartのMLパイプラインをKubernetesで並列分散実行できるライブラリkannonを作った話

初めまして!2023年3月前半にエムスリーのAIチームで10日間インターンに参加していた小栗 (@irungo_ic )です。

インターンでは、エムスリー発の機械学習パイプラインOSSであるgokart をKubernetes上で高速にかつ簡単に実行できるようになるライブラリであるkannon('cannon'と同じ発音!)をゼロから実装し、OSSとして公開しました。

github.com

この記事ではkannonの技術的な解説、インターンに参加した感想をお伝えします!

  • gokartの概要
  • gokartの抱えていた課題
    • シングルスレッドでの逐次実行により実行時間が長くなってしまう
    • GKEのリソースを効率的に使えない
  • kannonの概要
  • kannonの使い方
    • gokart
    • kannon
    • gokart
    • kannon
    • 補足
  • kannonのアーキテクチャ
  • kannonの実装
    • 1. Task Queueの構築
    • 2. Task Queueの処理
    • なぜQueueが必要なのか?
  • 動作の流れ
    • 自然な例
    • もっとユーザが楽をするには?
  • Future Work
    • 社内の実プロダクトへの適用
    • Document, Quick Startの整備
    • child jobが自律的に依存Taskを実行する分散アーキテクチャ
    • より使いやすいインタフェース
  • 余談: kannonという名前の由来
  • 補足: ArgoWorkflowとの比較
  • 最後に

gokartの概要

gokartは機械学習パイプラインを扱う他のライブラリに比べ、以下のような特徴があります。

  • オブジェクト指向プログラミングにおけるSOLID原則を尊重できること

  • 機械学習プロジェクトにおいて必須な再現性を確実のものにすること

これらの詳細な説明や開発の経緯などは過去の記事で語られていますので是非ご覧ください!

www.m3tech.blog

続きを読む