ブックマーク / zenn.dev (3,069)

  • RAGに質問分類させる「Adaptive-RAG」の解説

    記事では、「Adaptive-RAG」についてざっくり理解します。軽めの記事です。 株式会社ナレッジセンスでは普段の業務で、生成AIやRAGシステムを活用したサービスを開発しています。 この記事は何 この記事は、Adaptive系で現在、最も「コスパ」が良いとされる「Adaptive-RAG」の論文[1]について、日語で簡単にまとめたものです。 今回も「そもそもRAGとは?」については、知っている前提で進みます。確認する場合は以下の記事もご参考下さい。 題 ざっくりサマリー RAGの回答精度を高めるための手法です。韓国科学技術院(KAIST)の研究者らによって2024年3月に提案されました。「Adaptive-RAG」という手法を使うメリットは、ユーザーからの入力としてシンプルな質問・複雑な質問、どちらも想定される場合に、「そこまで遅くなりすぎずに、ある程度の回答精度がでる」という点

    RAGに質問分類させる「Adaptive-RAG」の解説
  • テックカンファレンスに「なんとなく」や「ただ楽しいから」で参加してない?

    この記事を書くきっかけ PHPカンファレンス小田原の参加レポートを書いたところ、武田さんからこんなフィードバックをいただきました。 こんなふうに褒めていただいて、恐縮です。 けど、これまで自分はオフラインのテックカンファレンス[1]に3回しか参加したことがありません。遠征かつ何泊かするのは今回が初めてでした。 にも関わらずこう言っていただけるような行動がきちんとできているようです。実際時間が凝縮されている感覚は自分でもあって、カンファレンスに参加すると2,3日くらいのできごとのはずなのに1週間分くらいの出来事に感じます。 では、「なんでそう感じるんだろう?」を考えてネタにしてみたら面白いんじゃないだろうか。そう思って筆を取ったのがこの記事です。自分は人に褒められたとき、「なぜ褒められたのか?」を振り返ります。詳しくはこの記事に。 そして自分のカンファレンスに対するスタンス「なぜカンファレン

    テックカンファレンスに「なんとなく」や「ただ楽しいから」で参加してない?
  • Unityを通じて3D空間、グラフィックを理解する

    はじめに ゲーム開発の旅を始める上で、開発者が最低限理解すべきコンピュータの基的な仕組み、グラフィックスの原理、そしてスクリプティングの技術について、記事では詳しく掘り下げていきます。 コンピュータの心臓部であるCPUGPUの役割と相互作用から始め、これらがどのようにして3D空間のレンダリングやアプリケーションの実行に影響を与えるかを解説します。 Unityエンジンを用いたゲーム開発では、これらのハードウェアコンポーネントの理解が不可欠です。 続いて、ゲーム開発におけるグラフィックスの基礎を学びます。 ここでは、ビルトインレンダーパイプラインから、より高度なUniversal Render Pipeline (URP) やHigh Definition Render Pipeline (HDRP) まで、Unityで利用可能なレンダリングパイプラインの違いとその選択がプロジェクトに及

    Unityを通じて3D空間、グラフィックを理解する
  • UbieにおけるGo言語のエラーハンドリング

    背景 Ubieでは以下の記事にあるように、一昨年から新しく始めるプロジェクトにはGoTypeScriptを積極的に採用しています。私は来プロダクトセキュリティが主な専門領域なのですが、公私ともに普段からGoでツールやサービスの開発をしているため、社内のGo言語の普及をサポートしたりプロダクト開発に参加したりしています。 Go言語で開発したことがある方はご存知かと思いますが、Goは標準パッケージで提供されているエラーハンドリングは最低限の機能しか提供されていません。これは、CLIツールなどではエラーの内容が簡潔に表せてよいのですが、サーバサイドアプリケーションのようにエラーにまつわる情報を詳細に残してあとから調査に利用する、という場面では不向きです。特に番環境でしか再現しないようなエラーの場合は、いかに関連情報を残せているかが、問題の解決に大きく影響します。 先日も話題になっていました

    UbieにおけるGo言語のエラーハンドリング
  • TypeScript の型検査にかかる時間を短縮した話

    こんにちは。ナレッジワークの torii です。 最近、プロジェクトで使用している TypeScript の型検査にかかる時間を 3 割ほど短縮することに成功しました。 参考までにどのようにボトルネックを調査して改善に繋げたのかを書いてみます! きっかけ 改善のきっかけは、たまたまネットを徘徊していて見つけた Zenn 記事でした。 (素晴らしい記事をありがとうございます!) これを読んで「自社のプロダクトでも型検査にかかる時間を短縮できるのでは?」と思い立ち、試してみたところ実際に改善に役立てることができた、というのがこの記事の概要になります。 改善対象 改善対象は、弊社のメインプロダクトであるナレッジワークのフロントエンドです。現在マルチプロダクト化に向けたコード分割に取り組んでいる最中ですが、執筆時点はモノリシックな構成となっています。 改善前の TypeScript ファイルは自動

    TypeScript の型検査にかかる時間を短縮した話
  • 【随時更新】主要な大規模言語モデル比較表

    これはなに? ひょんなことからOpenAI・Anthropic・GoogleのLLMの一覧表を作りました 手前味噌ながら便利だなと思ったのでZennにも載せておきます 各社のモデルの主要諸元・費用に加えて、自分の印象を書いてあります。 性能の目安としてChatbot Arenaのスコアを参考までに添付しています これはあくまで参考用かつ英語での評価なので、スコアが一番高いものがいい、もしくは低いからダメというわけではありません。 少なくともこの記事に掲載されているモデルは、スコアが低いものでも単純な翻訳などでは十分な性能を持っています。そして何より高性能モデルとは比較にならないほど高速です。 用途や使用言語によって試してみて最適なものを選ぶのが良いでしょう OpenAI 歴史的経緯もあり、以下の表に掲載するもの以外にも大量のモデルがあります。 一旦は最新のモデルを列挙します。 モデル名 A

    【随時更新】主要な大規模言語モデル比較表
  • Docker 環境を作るなら Ubuntu のクロスプラットフォームな仮想化ツール Multipass を使おう

    はじめに Web アプリケーションを開発する際、バックエンドの API サーバーやデータベースなどの複数のマシン環境を1台の PC で動かすことの可能なコンテナツールとして、Docker は広く利用されています。 この便利な Dockerですが、複数人で Web アプリケーションを開発しているチームで各メンバの開発用 PC の OS が異なる状態(例えば、A さんが Windows、B さんが macOS など)で、Docker をローカル環境に直接インストールしていた場合、下記のような不都合が発生します。 Docker のバージョンがメンバ間で統一されていない 😱 コンテナ外で使用必須のツールのインストール方法・バージョンがメンバ間で異なる 😱 コンテナ外で使用必須のシェルスクリプトは OS 毎で(または OS の差異を考慮して)作成する必要がある 😱 以上の問題は、Docker

    Docker 環境を作るなら Ubuntu のクロスプラットフォームな仮想化ツール Multipass を使おう
  • スロークエリを改善したらECSの負荷が爆下がりした話(TypeORM)

    TL;DR TypeORMで発生していたスロークエリを改善 スロークエリを改善したらECSの負荷も減少 はじめに スロークエリを改善したら、ECSコンテナ側の負荷も下がってなんでだろ?と思ったので記事にしようと思います。 環境 TypeORM v0.3.20 Node.js v18.x バックエンドインフラ ECS on Fargate => Amazon Aurora MySQL 負荷改善の前と後 まずはどのくらい改善したのかを示します。 この時ECSコンテナ8台動いてました。(4vCPU 8GBMem) 改善前 改善後 改善前と改善後は一日前の同じ時間帯のものです。 ちゃんと動いてるのか不安になるくらい下がってました笑 どのような対応をしたのか スロークエリの出ていたクエリでMySQLの実行計画を確認しました。 TypeALL,index, Using Filesort等はなかったので

    スロークエリを改善したらECSの負荷が爆下がりした話(TypeORM)
  • ブラウザーにChromeのデベロッパーツールを埋め込めるReactコンポーネントを作ってみた

    とてもニッチな用途で使えるコンポーネントですがその場のiframeのデバックができるReactコンポーネントを作ってみました! まずはこちらのポストをご覧ください! このポストではChromeのデベロッパーツールを開いているわけではなく、ブラウザー内に直接デベロッパーツールが埋め込まれています! 今回はこのようなReactコンポーネントを作ってみたので、どのように作ったかをご紹介したいと思います。 デモページ こちらのページで実際にデモを試すことができます。 https://react-embed-devtools.vercel.app/ なぜ作ったか Reactをオンラインで学習できるサービスmosya Reactを先日リリースしました。 このサイトではオンライン上でコードを書いてその場で書いたコードがプレビューできるようになっています。 詳しい開発記事はこちらをご覧ください! ただ、プ

    ブラウザーにChromeのデベロッパーツールを埋め込めるReactコンポーネントを作ってみた
  • 【JS】「ただの {}(ブロック文)」を使うと嬉しいこと

    JavaScript の 「ブロック文」 をご存知でしょうか。 波括弧(ブレース)で囲む、コレです。 if ブロック if () {} や、for ブロック for () {} として目にすることが多いですが、 {} 単体でもブロック文になります。 これだけだとオブジェクトと思ってしまうかもしれませんが、ブロック文になります。 (オブジェクトとブロック文の解釈については javascriptのオブジェクトリテラルは評価されるまでは、あくまでブロック文でしかない - メモを揉め が詳しいです) なんの意味もないように見える「ただの {}(ブロック文)」ですが、意外と便利なことがあるのでこの記事ではそれを紹介します!

    【JS】「ただの {}(ブロック文)」を使うと嬉しいこと
  • You don't need Node.js

    Node.jsはいらない場合がある、むしろいらない場合の方が多いかもしれない、 そしてDenoBunを使い分けて代替する方法を説明するという記事です。 Post Node.js ランタイムの登場 Node.js のあとにできたランタイムがいくつも登場しています。 Deno Bun WinterJS LLRT この中でも、人気であるDenoBunを中心に考えていきます。 DenoBunに変えるメリット これがなければNode.jsから変える必要はないと思います。 私は、以下の3つが、2ランタイムに共通して言える大きなメリットだと思います: ネイティブTypeScriptサポート 高速 Web標準 ネイティブTypeScriptサポート 現在、JavaScriptを記述するときは、TypeScriptを利用することが多いと思います。 Node.jsでTypeScriptを使うとき。tsc

    You don't need Node.js
  • 強化学習未経験者がテトリスの AI を作ってみた話

    はじめに この度、強化学習によるテトリスの AI を作成してみました。想像以上にうまくいき、最終的には半永久的にラインを消してくれる AI に成長してくれたので、今回はその記録として AI を作成した過程をここに記していきます! 今回の AI の概要 今回作成したテトリス AI の概要は以下の通りです。 特定のゲームの状態から可能な行動パターンを全てシミュレーションする 行動後の状態を入力情報として Neural Network に今後の報酬の期待値を推測させる 今後の報酬の期待値が一番高くなる行動を実際の行動として選択して遷移する (貪欲方策) Game Over になるまで 1 ~ 3 を繰り返す Tetris AI を可視化した図 何も知らない頃は『AI ってどうやって動いてるんだ?』と自分は思っていたんですが、動作原理は非常にシンプルです。強化学習とは、この今後の報酬の期待値を推測

    強化学習未経験者がテトリスの AI を作ってみた話
  • 「実装例から見る React のテストの書き方」をアップデートする

    社内の人から、自分が以前書いた次の記事が「便利で助かった!書いた時から何かアップデートある?」ってメッセージがきた。 そんな便利だなんてどうもありがとうございますウフフ、と思いながら書いた日を見てみると 2022-08-09 だった。もうすぐ 2 年経とうとしてる。時の流れが早くて怖い。 この記事に書かれた実装例はリポジトリにまとめていたんだけど、当然、何かメンテをしていたわけもなく、2022 年当時の状態がそのまま残っていた。 せっかく便利に思ってくれる人がいたので、内容をアップデートする。 アップデートまとめ メジャーバージョンのリリースやビルドツールの統一の観点で Jest から Vitest に移行 useFakeTimers({ shouldAdvanceTime: true }) @testing-library/reactを v15 にバージョンアップ MSW を v2 にバ

    「実装例から見る React のテストの書き方」をアップデートする
  • 文字数のカウントはどれが正解なのか?

    A. ユースケース次第でどう実装すべきかは変わる。Intl.Segmenter が万能というわけでもない。 (クソ最悪な小バズをかましてしまったので、贖罪も兼ねて記事を書きました) 「文字数を数える」のは難しい 「文字数を数える」実装は意外と難しいです。というのも、アルファベットや数字だけなら str.length でも正しく数えられますが、絵文字や異体字などが入った文字列は見た目どおりに数えられません。

    文字数のカウントはどれが正解なのか?
  • 最近はJavaScriptをデフォルト無効化してブラウジングしてる

    こういう事(これが当にマルバタイジングだったのかサイト改ざんだったのかどうか等はITmediaから経緯説明があったわけでもないので知らない)があって こういうスタンスなのだけれど、モバイル環境に関しては最近はJavaScriptを無効化してブラウジングしてる。使っているスマホのバッテリーがへたりはじめているので少しでも消費電力を下げたいというのもある。 基的にはChromeをデフォルトJavaScript無効、よく利用するサイトを例外ドメインとして設定して利用 例外ドメインに追加したくはないけどアドホックにJavaScript有効で見たいページは共有メニュー(インテント)からFirefox Focusで開いている。この運用で今のところ不便さは感じてない。ただデスクトップ環境に関しては今の所は何もしてない。 昔々IEコンポブラウザと呼ばれるものが流行っていた頃のkiller featur

    最近はJavaScriptをデフォルト無効化してブラウジングしてる
  • RPC対応によりCloudflare Workers間の連携がすごいことになった

    時間の2024/04/05にCloudflareからRPCを使用したCloudflare Workers間の通信が発表されました。 これによりいくつかの課題が解決されると同時にCloudflare上にアプリケーションを構築する利便性が1段階どころか2段階以上上がったといっても過言ではないと思っています。 このRPCの対応によりService Bindingsが更に使い勝手がよくなったのでそれの紹介です。 出来上がりのコードはここにありますので、時間の無い方はこちらを参照ください。 前提条件 以前RemixとPrismaでD1に接続する記事を書きました。 その中で容量制限の問題があると書きましたが、それを解消する話をベースに今回のRPC対応の内容を書きます。ですので記事を読んでない方はCloudflare Workersの無料版はビルドファイルが1MBまでの制限があるということを念頭にお

    RPC対応によりCloudflare Workers間の連携がすごいことになった
  • Linuxの各種仮想ネットワークデバイスにおけるSegmentation Offloadの振る舞い

    LinuxにおけるSegmentation OffloadとはTCPなどのトランスポートレイヤのプロトコルが送信するデータをMTUに収まるように分割する処理(Segmentation)をNICのレイヤにオフロードすることによってスループットを向上させる技術です. Segmentation Offloadを使った場合, トランスポートレイヤのプロトコルはIPレイヤで許容される最大のサイズ(64KB程度)までのデータを1つのIPパケットで送信することができます. 受信側は逆にネットワークから入ってきたSegmentation済みのパケットをNICのレイヤで1つの大きなIPパケットに集約した上でプロトコルスタックの処理にかけます. これによってプロトコルスタックで処理されるパケットの個数を減らすことができるため, スループットが上がるという仕組みです. Linuxには仮想ネットワークデバイスとい

    Linuxの各種仮想ネットワークデバイスにおけるSegmentation Offloadの振る舞い
  • 【HTML】dl, dt, ddで組みたくなる表、tableにするのがいいかもね(スクリーンリーダーと検索エンジンのために)

    dl や ul で組むべきでないという主張ではありませんので誤解のなきよう! dl で書くんだ!と思える人はそれがいいと思います😉👍 私自身は dl と table が HTML の使い方としてはどちらも正解で差がないように感じられて、どちらを使うべきか判断がつかず悩んだ末、具体的なメリットの部分を見て table にしたという話です。 同じように迷った人の参考になれば幸いです。 詳しくは以降で説明します。 想定する表の内容 この記事の議論では、名前と値の組が複数並んでいる、メタデータの表を想定します。 プログラミング言語でいうところの、連想配列 (Map, Dictionary, JS では Object) の構造に相当します。 具体的には以下のようなものです。 会社概要(「会社名:〇〇、所在地:〇〇、資金:〇〇、…」) 商品の仕様表(「商品名:〇〇、価格:〇〇、サイズ:〇〇、…」

    【HTML】dl, dt, ddで組みたくなる表、tableにするのがいいかもね(スクリーンリーダーと検索エンジンのために)
  • はじめてのプロジェクトマネジメントでやりたい放題した結果

    株式会社プラハは2022年、株式会社アガルートによるM&Aで子会社となりました。 この変化の一環として、アガルート社長自らがプロダクトオーナーのひとりとして参加する新規プロダクト開発が始まりました。プロダクトの開発はプラハの私たちが担当し、私も「開発チームのリーダー」としてそのチームに加わることになりました。 私はこれまで開発メンバーとしての経験しかありませんでしたが、エクストリームプログラミングとかレガシーコードからの脱却とかめっちゃ好きで、で学んだプラクティスをリーダーとして実践できる機会が与えられて最高にハッピーでした。しかも、プロダクトオーナーの一人として参加するアガルート社長はこれまで伝統的な開発手法しか経験したことがないとのことで、新たな開発の進め方を経験してもらう絶好の機会でもありました。 やったこと 「欲しい機能一覧」を受け取ったが、いったん白紙に戻した プロジェクトが始

    はじめてのプロジェクトマネジメントでやりたい放題した結果
  • とりあえずvimを使えるようになりたい人のための記事

    始めに 私が「Vimはいいぞ」って言っていると、「どうやって始めたらいいですか?」という質問がたまにあります。 今回はそんな人に向けて、「Vimの始め方指南書」になったらよいなと思って書いていきます。 上記のVimmerレベルをベースに紹介していきます。 目標 Vimの流儀に沿った操作方法を覚える InsertModeでカーソル移動しない カーソル移動はNormalModeで行う カーソルキーは使わず、代わりにh/j/k/lを使う .vimrcを作成する 最低限の.vimrcを作成して、ちょっと快適に操作できるようになる プラグインのインストールを次のステップとして視野に入れる あくまでも視野に入れるだけ、プラグインのインストールはしない 非目標 Vim使いこなせるようになる この記事でそこまで誘導することは目標ではない プラグインをインストールする 目標でも記載しているが、プラグインのイ

    とりあえずvimを使えるようになりたい人のための記事