tomoima525's blog

Androidとか技術とかその他気になったことを書いているブログ。世界の秘密はカレーの中にある!サンフランシスコから発信中。

あなたのしらない米国所得申告システム

確定申告の時期なので、米国の一風変わった(?)所得申告システム(Information Return)と連携するアプリケーションを開発した話について書こうと思う。

  • 米国の所得申告
  • 所得申告システム、FIRE
  • 不思議なファイルフォーマット
  • みよ、これがメジャーの仕様書だ
  • レスポンス(多分速達のほうが早い)
  • 初心者には厳しすぎるテスト環境
  • FIREへの申告自動化ツールを開発する
  • おわりに
続きを読む

シリコンバレーで起業したCTOの一日

「今って一日どう過ごしてるんですか?」「小さい子供いながら起業って大変じゃないですか?」 ってたまに聞かれるので、平日の朝から晩までの様子を書いてみる。
答えから言うと、”気を張らずロングランでやっていく”スタンスをとることでなんとかなる(なんとかしている?)んじゃないかなと思う。この記事が起業やら外国で働くことを検討している人の参考になれば幸いです。

  • こんな人でこんなことをしている
  • 朝~午前
    • オフィス
    • 仕事
  • 昼 ~ 午後
    • リモートチーム
  • 日々思うこと
続きを読む

プロンプトエンジニアリングってソフトウェア開発?と感じるあなたへ ~ LLM開発とソフトウェア開発の違いの話

この記事はLLM開発におけるプロンプトエンジニアリングに違和感がある人に向けた、捉え方を変えてみたら少し印象が変わるかも、という提案をするものです。

かくいう自分もなんだか普通のソフトウェア開発とは異なると感じていました。この違和感の言語化を試みると、すべてはブラックボックス化したインプットとアウトプットに集約される気がします。

  • コンテキスト量が増えると回答の取りこぼしが発生する
  • 突然"ない答え"を作り始める
  • "一呼吸しましょう"など謎のおまじないが回答率を上げる

などなど。プロンプトを調整し、期待した結果が得られるかお伺いをたてる開発プロセスは、トライアンドエラーするしかないといった具合です。*1

そんな折に、たまたま聴いたのがStack Overflow podcastのこのエピソードでした。

open.spotify.com

ゲストのKatanforoosh氏は元々機械学習の研究者で、現在はスタンフォード大学Deep Learning講座を受け持っています。その彼に対してホストから投げかけられた、 ”CSの学生がAIや機械学習開発を始めるために何に取り組めば良いか?” という質問への答えの中で、彼はこう述べました。

“AI開発とソフトウェア開発の根本的な違いは、Less predictable(予測がつきにくい)ということです。多くのソフトウェア開発はアイデアからリリースまでの見通しが立てやすいです。AIはモデルがいつ機能するか予測を立てるのが難しいです”

これを聴いたとき、自分はハタと手を打ちました。なるほど、LLMのような汎用的なモデルの登場によって、ソフトウェア開発にパラダイムシフトが起きたのだと。

機械学習モデルのプロジェクトでは、効果的に機能するまでモデルの改善を行うプロセスがプロジェクトに組み込まれています。これまでの機械学習を使ったプロダクト開発では最終的なモデルを利用するだけなので、ある種決定論的にアウトプットが得られました。
しかし、インプットでアウトプットの精度を向上できるLLMのような汎用モデルが登場したことにより、機械学習のチューニングがソフトウェア開発にシフトし、開発段階での改善プロセスが必要になったのです。

そのような開発では結果評価とフィードバックの仕組みが重要になります。最近自分の取り組んでいるAI開発プロジェクトでは、どのように結果評価を行うかの検討を始めました。現状LLM開発についてはいくつかのツールや考え方があるようです。

Langsmith

docs.smith.langchain.com

  • 実装したプロンプトのテストや評価、ログの分析を包括的に行うサービス
  • LangchainがサポートするLLMとの統合

AWS Bedrock

docs.aws.amazon.com

  • AWS BedrockによるAI開発で、結果の評価を行う手法やテストのためのデータセットが提供されている

Open AI Production best practices

https://platform.openai.com/docs/guides/production-best-practices

  • Open AIによる、AIを本番利用するためのMLOps戦略やコスト・マネジメントについて整理されたガイド

そんなわけで、最近自分はもうちょっと本腰入れてLLMOps(というのかな?)やプロンプトエンジニアリングについて学んでみようと思っています。面白いアイデアや実装ができたら、またシェアします。

*1:もちろん安定した結果を得るためにRAGを含めたさまざまな手法はあります

免税に使う在留証明書手続きには罠がある

数ヶ月ほど前に日本に旅行したときに免税のための在留証明書を発行したのですが、面倒だったのでメモ。

要点

  • “2年前から在留していた”ということを証明する書類を持っていく
  • 手続きはなるべく窓口でやる
  • ラップトップPCを持っていく

です。ちなみにこの手続きは日本国籍を要していて、かつ住民登録がない人が前提です。

続きを読む

TypeScript の AWS Lambda function を2000倍見栄え良くする

AWS Lambda Advent Calendar 13日目の記事です。

qiita.com

今回は AWS Lambda function で TypeScript の 関数を書くときにコンソール上で2000倍(※当社比)見栄え良くする方法を書きます。

ちなみにここでの"見栄えの良さ"はAWS コンソール上での読みさすさのことです! 副次的な効果として、最初のロード時のコードサイズが限界まで小さくなるので、パフォーマンスも良くなるかもしれません。(未検証)

なお、これはAWS CDKを使うことが前提となっています。

  • 通常の場合
  • 見栄え良く書くステップ1 - Lambda Layer
  • 見栄え良く書くステップ2 - ESM
  • 小ネタ: ESMに対応してないライブラリについて
  • まとめ
続きを読む

LLM開発のいろはをおさらいする~手法からツール、開発ノウハウまで

最近PoCやサービス開発を通じて、どっぷりLLMの開発をしています。この記事では最近の大規模言語モデル(LLM)を使ったアプリケーション開発の種類や手法、ツール群について一通りまとめました。よくあるチャットボットからReActといった最先端のものまで、この記事を読めばエンジニアだけでなく非エンジニアの方でも概要をつかめるよう書きました!それではどうぞ。

  • そもそもLLMとはなんぞや
  • LLMアプリケーションとは
    • アプリケーションは内部的に何をやっているのか
  • LLMで開発できるもの
    • やりとりを記録する
    • 手順を考えさせる
    • いくつか例をだしてアウトプットを学ばせる
    • 外部データから答えを取得する
    • 大量のデータから答えを得る
    • 手順を考えさせ、外部のデータを必要なら利用する
    • LLM自体をチューニングする
  • 開発ツール
  • LLMアプリケーション開発の難しいことと対策
    • エラーハンドリング
    • 処理できるトークンのリミット
    • レスポンスタイム
  • 勉強のためのリンク集
  • まとめ
続きを読む

Amazonのサーバレス→モノリス移行記事から学ぶこと

今年の3月頃、Amazon Prime のテックブログでストリーミング監視システムのマイクロサービスをモノリスに作り替えて90%コストを削減した記事が投稿され、ソフトウェア業界に波紋を呼びました。この記事の真相はなんだったのか、我々が学ぶべきことはなんだったのかについて書きます。

  • ことの経緯
  • 記事の解説
  • この記事はなんだったのか?
  • この記事と出来事の教訓
続きを読む