概要 LLMにおけるプロンプトの構成要素を理解して扱うことで 期待通りの回答を得られる(精度が高くなる) なぜTemplateはこの書き方をするのかが分かる なぜagent_scratchpadのような変数がいるのかが分かる といったようになります。 プロンプト 構成要素 …
概要 LlamaIndexを使うと非常に簡単にRAG(Retrieval-Augmented Generation)を使った検索システムを作ることができます。 今回はLLMにない情報(PDF)をベクトル化して検索できる方法を紹介します。 環境 python 3.11.8 streamlit 1.31.1 llama-index 0.10.14…
概要 PythonはGoと違ってライブラリのdeprecatedや破壊的変更が多いため、環境やライブラリバージョンの固定が非常に重要です。 Dev Containers poetry 仮想環境(venvなど、今回はpoetryのvirtualenv) を使うことで、それらを固定してチーム内で安定した開発…
概要 GKE Ingressを使うとGCE LBのヘルスチェックが自動的に作成されますが、一定のルールがあります。 これらを理解していないと期待しないヘルスチェックが作成され、疎通ができなかったりするのでまとめておきます。 生成ルール GKE Ingressは次の流れで…
背景 Function callingでJSONを定義する際はJSON Schemaを用いますが、JSON Schemaは覚えることが多く不慣れだと非常に扱いにくいです。 pydnaticを使うとクラス定義から簡単にJSON Schemaを生成できるので、PythonでJSON Schemaを利用する際はおすすめです…
背景 pyenvでpython 3.10.13をインストールしようとしたところ、次のようなエラーを受けました。 $ pyenv install 3.10.13 python-build: use openssl@1.1 from homebrew python-build: use readline from homebrew Downloading Python-3.10.13.tar.xz... ->…
背景 tmuxでコピーモードで範囲選択によるコピー機能をよく使っていますが、そこでコピーしたものがそのままDeepLの翻訳の方へ渡されてしまう問題に悩まされてました。 今は有料版なのでコピーしたものが学習データに使われることはありませんが、偶にDeepL…
概要 WebコンソールのChatGPTでは入力したデータを学習させない方法として2種類のやり方が提供されています。 設定からChatの履歴を保持しないようにする フォームでオプトアウト申請を行う 前者は簡単にできる一方で、Chatの履歴が使えず不便になります。 …
概要 christina04.hatenablog.com ではGitHubのIDを持っていればログインできる認証機能を追加しました。 今回は「そのGitHubアカウントが特定のGitHub Organizationに所属しているかどうか」を使ってページを閲覧できるかどうか認可する仕組みを導入します…
概要 Backstageに認証機能を導入します。 Backstageでは様々な認証方法を提供していますが、今回はGitHubを使った認証を実装します。 環境 backstage v1.21.1 認証 GitHub Authentication Provider | Backstage Software Catalog and Developer Platform に…
概要 年の瀬なので2023年に買ってよかったものを挙げてきます。 SESAMEタッチ & オープンセンサー 2021年買ってよかったものリスト - Carpe Diem でも紹介したスマートロックで 指紋認証 ICカード認証 に対応したデバイスがリリースされました。 【New】SESA…
概要 前回紹介したBackstageをローカルで使うための説明です。 開発者ポータル Backstage とは - Carpe Diem 環境 backstage v1.21.1 yarn v1.22.19 Get Started とりあえず起動してみる アプリケーション作成 以下のコマンドでアプリケーションを作成できま…
背景 KubernetesでPodがOOM Killされた際には以下のようなログが発生します。 Memory cgroup out of memory: Kill process 9130 (XXXX) score 1592 or sacrifice child Killed process 9130 (XXXX) total-vm:423008kB, anon-rss:122484kB, file-rss:33792kB,…
背景 開発チームが抱えるよくある課題として システムが変化する一方でドキュメントは更新されず腐る メンバーの流入出によって口伝でかろうじて継承された知見も失われる 検索性が良くないと過去のドキュメントが気づかれず、同じような内容のドキュメント…
背景 支払い処理などで問題になりがちな二重サブミット問題(Double Posting Problem)ですが、主に以下のようなケースで発生します。 ボタンのダブルクリック ユーザが間違えて2回ボタンを触ってしまう(ときには遅さにイライラして何度もクリック) リク…
背景 GraphQLでよく挙がるメリットとして以下があります。 RESTful APIと違って都度UIに依存したAPI設計をする必要がない マルチデバイス対応サービスにおいて大きなメリット オーバーフェッチを避けることができる Switchなどデバイス制約が多いクライアン…
背景 GraphQLでN+1になってないかを確認したいときに、スロークエリだけでなく全てのクエリログを見たくなったのでその設定方法を説明します。 Dockerコンテナの中に直接入って見る方法 Dockerログに吐き出す方法 の2通りで説明します。 環境 macOS 13.6 Do…
背景 Kubernetes Ingressで作成されたGCPロードバランサー周りのコンポーネントは k8s2-um-xxx k8s2-rm-xxx k8s2-tp-xxx k8s-be-xxx など色々あり、どれが何を表しているのか分かりづらかったのでまとめます。 命名規則とコンポーネント 命名規則とコンポー…
概要 BigQueryにおける分割テーブルは パーティション分割テーブル 大きな1つのテーブル 日付別テーブル(レガシー) 複数テーブル の大きく2種類あり、さらにパーティション分割テーブルは 取り込み時間による分割 時間単位カラムによる分割 整数範囲によ…
概要 christina04.hatenablog.com のNode.js版です。 環境 Node.js v18.18.0 TypeScript v5.2.2 Express v4.18.2 課題 次のようなアプリケーションコードがあった際に import type { Express, Request, Response } from "express"; import express from "exp…
背景 マイクロサービス環境でIstio(Envoy sidecar)を使っていると、いくつかのエラーに遭遇します。 それぞれどういった状況で発生しているエラーなのかを区別できないと、適切な対応にならないため各種エラーをまとめます。 環境 Envoy 1.22.0 Go 1.21 構成…
背景 DBのconfigのように一部機密情報が含まれるものを環境変数(k8s Secret等)で注入することは多いです。 そしてその環境変数がちゃんと設定されているか起動時にログを吐きたいということもよくあります。 一方で type Config struct { Addr string Port i…
背景 最近GitHubでページ内検索を使ってると、たまに次のような表示崩れが発生します。 スクロールしても前のコードがずっとそこに残っています。 このときのコンソールログとしては決まって次のエラーで、 content.js:1 Uncaught DOMException: Failed to e…
概要 Podの冗長化をする上でマルチゾーン構成にしたい場合 Pod Topology Spread Constraints | Kubernetes 上記のPod Topology Spread Constraintsを使うと実現できます。 環境 Kubernetes v1.24 Pod Topology Spread Constraints Pod Topology Spread Const…
背景 5xx系エラーをbugsnagのようなエラー検知サービスに送信したい middleware層で網羅的に対応したい といった際に、 http.ResponseWriterに書き込まれたstatus codeは直接アクセスできない という問題があります。 今回はこの問題を解決する方法を紹介し…
概要 Go言語でRedisを使う際に選択肢に挙がるのがgo-redisです。 今回はgo-redisでTimeoutを設定する際に注意すべきことをまとめました。 手前味噌ですがBlast Radius of Failureを最小にするためにTimeoutを短くすることを1つのテクニックとしても紹介して…
概要 iptablesで特定のポートへのパケットをドロップしたい場合は次のようなコマンドを実行します。 $ sudo iptables -A INPUT -p tcp -d 127.0.0.1 --dport 8080 -j DROP しかしmacOSではiptablesは無いためこれができません。 なのでiptablesではなくpfを…
背景 Alpine Linuxはデフォルトではtzdataが含まれていないため、以下のような package main import ( "log" "time" ) func main() { loc, err := time.LoadLocation("Asia/Tokyo") if err != nil { log.Fatal("%w", err) } log.Printf("%v", loc) } time.Lo…
背景 christina04.hatenablog.com のように設定ファイルをYAMLで管理するパターンは良くありますが、設定項目が増えるほど運用つらくなるので、あまり弄らない項目に対してはデフォルトを用意し、値がなければそれを設定したいケースがあります。 イメージと…
概要 OpenTelemetryでは直接ExportせずにCollectorと呼ばれるProxyを挟むことで以下のことが可能になります。 アプリケーションコードでExport先を意識しなくて済み、ベンダーロックインを避けることができる データを一元的に管理できる アプリケーションや…