サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
今年の「#文学」
note.com/mahlab
LangChainエコシステムの盛り上がり昨年の3月ぐらいから「もくもくLangChain」と称したLangChain推し活動を続けていますが、昨年年末にかけてLangChain関連書籍が多数出版されていたり、SoftwareDesign誌でのLLMアプリケーション開発に関する連載も好調だったりと、LangChain周辺のエコシステムは継続して盛り上がり続けているのではないかと感じています。 一方で「LangChainは処理をブラックボックスにしすぎ」「ライブラリ内で利用されているプロンプトを差し替えられなくて草」といった、さすがにプロダクションで使うのは難しいよね、みたいな講評もあるわけですが、その問題もLangChainの安定バージョン(0.1.X)のリリースにあたってライブラリ内のモジュールが3分割されたことによって解決の方向に向かっているように見えます。 その中で特に重要な役割を果
AIエージェントシステム構築のガイドラインについてOpenAIの研究者らが論じているホワイトペーパー『Practices for Governing Agentic AI』(2023年12月14日公開、以下ホワイトペーパー)の内容が非常に示唆に富むものだったので、本稿ではこの内容を読み解いていこうと思います。 注意事項ホワイトペーパー内の表現は、分かりやすいように意訳してお届けしています。例えば"limited direct supervision"は「限定的な直接の監視」と訳せますが、表現が硬いため、意を汲んで「人間による部分的な管理」などと訳出しています。そのため正確な表現については原著をご参照ください。 3分で理解したい人向けのまとめエージェント型AIシステムとは、人間による部分的な管理下であっても、複雑な目標を自律的に遂行できるAIシステムのことを指します。 このようなシステムは、
はじめにみなさまはAIエージェントという言葉をご存知でしょうか。 ご存知ない方はとりあえずDoryさんの以下の記事を読んで頂けると良いと思う訳ですが、 ざっくりAIエージェントを定義すると、「人がいちいち指示しなくても、自分でやることを考えて、様々なツールを活用して目標に向かってタスクをこなしていくAI」をAIエージェントと呼んでいます。 AIエージェントと比較すると、ChatGPTのようにチャットを介してコミュニケーションするAIは指示待ち人間とも言えます。 どんなに高いパフォーマンスを出すのだとしても人間がいちいち指示を出さないと仕事をしてくれないのはつらいよね、という視点から、自律的に仕事をし続けてくれるAIエージェントはAI活用においてブレイクスルーを起こすのではないかと考えられています。 本当に自律的に仕事をし続けてくれるのだとしたら、ある意味従業員の代替になるわけですし、更にそ
⚡️New paper!⚡️ It’s tempting to interpret chain-of-thought explanations as the LLM's process for solving a task. In this new work, we show that CoT explanations can systematically misrepresent the true reason for model predictions.https://t.co/ecPRDTin8h 🧵 pic.twitter.com/9zp5evMoaA — Miles Turpin (@milesaturpin) May 9, 2023 著者の方が Twitterでまとめられていたので、これをざっくりリストするとこんな感じになるかと思います。 バイアスのかかったCoTによって誤っ
世の中function calling一色に染まっていますが、地味にGPT-3.5が16kトークンに対応していたり、4kトークン版の料金が下がったり、GPT-4のウェイティングリストを早期に消し去る宣言が出ていたりと、さらっと凄いことばかりやってのけるのがOpenAIの恐ろしいところです。ちなみに私の元にはまだGPT-4の利用許可が下りておりません。 16kトークンの分量について地味に嬉しいのがGPT-3.5の16kトークン版のAPIが用意されたことでして、GPT-3.5は高速だけどいい加減4kトークンのコンテキスト制限はつらいなー、という声が日々聞こえていたことと思います。 一気に4倍になったことでざっくり日本語換算で1万6000文字ぐらい扱えるようになったのですが、数字だけだとイマイチ分量が分かりづらいです。新書で大体8〜12万字なので、新書サイズの情報は扱えないことは分かる。 という
SQLiteでベクトル検索を可能にするsqlite-vssそんなポータブルで便利なSQLiteですが、そのSQLiteでベクトル検索ができるとなるとより夢が広がります。 SQLite自体はファイルベースなので、あらかじめベクトルデータを設定したSQLiteデータベースファイルをアプリに組み込んで配布しても良いわけです。そうすればデータベースサーバを用意しなくて済む分コストも圧縮されますし、組み込みなのでアプリからは軽量に動作します。 ホスティングする場合でもFly.ioのようにボリュームイメージを利用できるPaaSを利用すれば、問題なく運用が可能です。 前置きが長くなりましたが、このような夢を叶えてくれる拡張がsqlite-vssです。ベクトル検索はFaissベースで実装されています。 とっても良さげではあるのですが、実際に組み込んでみた場合のコード例が見つからなかったので、手を動かして試
NewsPicksの記事の平均Picks数と言えば、体感で大体100〜200Picksぐらいが相場の中で、シュンスケ氏のプロンプト特集は4000Picks以上ものPickを集めていた。プレミアム会員のみの記事なのに凄まじいことで、いかに一般の人々が「より良い」プロンプトの蒐集に熱心かが計り知れる。 ChatGPT Pluginが一般にも利用できるようになったことで、いよいよプロンプトは何でも叶えてくれる魔法の呪文と化してきている。この前は大学生の子に「大学の学費は払うのにChatGPTのサブスクリプションをケチるんだったら、大学辞めて浮いた学費分でサブスクリプションを支払った方が良い」なんて暴言を吐いてしまったけど、結構本気でそう思っている。 「モデルが変化すれば当然プロンプトも変化するのだから、現状のプロンプト芸にこだわることに意味はない」なんて言われていた時期もあったが、Pluginと
MicrosoftのguidanceライブラリはLLMアプリケーションを作成する際の新たな定番となりそうな気がしています。そういう訳で、今回はguidanceのgenメソッドについて詳しく追ってみたいと思います。 基本的な使い方import guidance gpt3 = guidance.llms.OpenAI("text-davinci-003") gpt3_5 = guidance.llms.OpenAI("gpt-3.5-turbo") gpt4 = guidance.llms.OpenAI("gpt-4", api_key=API_KEY) guidance.llm = gpt3まずはguidanceライブラリを読み込み、使用するLLMを宣言します。OpenAI APIを使用する場合、初期化パラメータとして以下のパラメータを使用できます。 model 使用するモデルの名前を指定し
先日5/18(木)は参加者全員デモ必須&発表必須という狂気じみた参加条件で話題のLLM Meetup Tokyoの第2回が開催されておりました。 毎日LLM系の情報をチェックしている皆様におかれましては、一夜にしておびただしい数のスライドが共有される意味不明なイベントとして認知されているのではないでしょうか・・・。 私自身は第1回に参加者枠で参加しておりましたが、第2回からは運営スタッフとしてお手伝いさせて頂いております。 というわけで、今回の記事はその開催レポを兼ねてのLT資料まとめです。 参加者全員がデモを持ってきて何か話すという狂気のミートアップの2回目が無事終了。技術コミュニティのあるべき姿を味わえる夜でした。参加者のみなさま、会場提供&ビル受付設置から会場までの案内掲示&ピザ&飲み物まで提供して下さったメルカリさん、ありがとうございました! #LLMMeetUpTokyo — m
世はオープンソースLLMの戦国時代なのか、本日5月17日サイバーエージェント社と立て続けにrinna社からもオープンソースで36億パラメータを持つ言語モデル「japanese-gpt-neox-3.6b」が公開されました。こちらは対話形式のプロンプトにファインチューニングした「japanese-gpt-neox-3.6b-instruction-sft」も同時に公開されています。 japanese-gpt-neox-3.6bまずは汎用モデルの方を試してみようと思います。 import torch from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("rinna/japanese-gpt-neox-3.6b", use_fast=False
過去に「個別の関数を実装をプロンプトで行うような流れは既にきている」と言ってみてはいたものの、考え方としては関数としてプロンプトを実行する、ぐらいの世界観が関の山で、ソフトウェア設計としてLLMとの調和を考えるという域までは達していませんでした。 なんですが、何というかAI時代のプログラムコードってこんな感じになっていくのかなーと思わせるライブラリが登場していたので紹介したいと思います。 Marvinとはどんな感じのライブラリなのかその名もMarvinと言います。 コンセプトから入るとイメージしづらい気がしたので、いきなり実例から説明させてください。 例えばなんか適当にエナジードリンクをリストしてくれるような関数が欲しかったとしますね?(そんなケースあるかな) そういう場合はこんな風に書けます。 from marvin import ai_fn @ai_fn def list_energy
なぜFeature Storeが役に立つのか?Feature Storeとはざっくり「機械学習モデルで扱う特徴量をひとまとめに管理する基盤」のこと。特徴量のソースとなるデータレイクがバラバラだったり、学習時と推論時でモデルに入力する特徴量の参照先が異なるといった事情があったりといった、機械学習モデルにおける特徴量運用の問題を解決するために存在している。 https://www.tecton.ai/blog/what-is-a-feature-store/このような役割上、Feature Storeは様々なデータによってリアルタイムに特徴量を更新する特徴量のリアルタイムパイプラインとも言える。 GPTのようなLLMのコンテキストサイズには限りがある(GPT-3.5で4096トークン)ので、より濃縮された、LLMによるアウトプットを適切に左右するようなデータをプロンプトに投入することがカギにな
最近Cloudflare Workers + D1(SQLiteベースの分散データベース)の組み合わせにアツさを感じており、さらにそこに乗せるアプリケーションを開発するフレームワークとしてRemixに注目しています。RailsならHeroku、Next.jsならVercel、RemixならCloudflareという様相です。 「cloudflare-workers + d1 のポテンシャルは最強で、近い未来、開発者|個人開発者の銀の弾丸になると思っている」 GW中に遊びにきてくれた元同僚とも全く同じ話で盛り上がった。10年前ぐらいにRails x Herokuが無敵だった頃を思い出す。 https://t.co/LPTTm9pXeJ — mah_lab / Masahiro Nishimi (@mah_lab) May 8, 2023 とはいえCloudflareについて現状ではフルスタッ
めちゃくちゃ分かりやすい機械学習の講義で有名なAndrew NgさんとOpenAIのIsa Fulfordさんが無料で提供しているChatGPT Prompt Engineering for Developersというコンテンツが面白かったので、内容をまとめてみました。 (注)大規模言語モデル(LLM)を利用したアプリケーションを開発する開発者向けのコンテンツなので、ChatGPTのUIで扱うようなゴールシークプロンプトといったようなプロンプトテクニックを扱うものではないことをご承知置きください。 最も重要なポイント自身の開発するアプリケーションに適したプロンプトを開発するためのプロセスを持つこと。 インターネット上にあるような「完璧なプロンプト30選」のようなコンテンツをアテにして、1回で成功させようなんて思わないこと。もし1回目でうまくいかなくても、例えば指示が十分に明確でなかった、あ
とある大きめの文章データを目の前にしたとき、とりあえずGPTに突っ込んで論点を抽出したいけど、データ的に大きすぎてトークン制限オーバーしちゃうし、どうしたものかなと思うことはないでしょうか。私はあります。 LangChainの要約系のチェーンを使っても良いのですが、仕組み上、かなりざっくりとした要約を作られてしまうので、何か大切なものを失ってしまう気がしてなりません。 そんな中で何となく思ったのは、文章を何らかの形でクラスタリングしたときの集合が大きい部分が論点であり、その集合毎に要約を作ってあげれば論点っぽい文章が作れるのではないか?ということでした。 というわけで早速試しにコードを書いてみたいと思います。 k-means法でクラスタリングする文章をある程度の長さでチャンクに分けた後で、埋め込みベクトルを求めてあげれば「意味の分布」を取ることができます。 そこで今回はその「意味の分布」を
StableLMのファインチューニングってできるのかな?と調べたところ、GitHubのIssueで「モデル自体の性能がまだ良くないから、ファインチューニングの段階ではないよ」というコメントがありまして。 シートの中身を見てみるlm-evalシートstablelm-base-alpha-7bは54行目にありまして、確かに他の言語モデルと比較するとまだまだな性能のようです。応援したいですね。 シートの列の意味それぞれの列の意味については推定ですが以下の通りです。 RAM 言語モデルのGPUメモリ消費量。 lambada(ppl) LAMBADAデータセットによる測定値。ロングレンジの言語理解能力をテストする(文章全体を読まないと答えられないタスクでの評価)。PPLはPerplexityという指標で、モデルの予測の不確かさを示す。PPLが低いほど、モデルの予測精度が高い。 lambada(acc
オンラインIDEを提供しているReplitでは自社で大規模言語モデルをトレーニングしているらしく、そのノウハウがブログ記事にまとめられていたので要約してみました。 なぜ自社で大規模言語モデルをトレーニングするのか?企業が独自に大規模言語モデル(以下、LLMs)をトレーニングすることを決める理由は、データのプライバシーやセキュリティから、アップデートや改良のコントロールの強化まで様々なものがあるが、Replit社ではカスタマイズ性、依存度の低減、コスト効率に重点を置いている。 カスタマイズ性 カスタムモデルをトレーニングすることで、GPT-4のような汎用モデルやCodexのようなコードに特化したモデルではカバーしきれないプラットフォーム固有の機能、用語、コンテキストなどといった特定のニーズや要件に合わせてモデルを調整することができる。例えば、Replitで人気の高いJavascript Re
Q&Aチャットボットのようなシステムを作成するとき、ユーザーの問い合わせに関連した情報をプロンプトに埋め込んで精度の高い回答を返す、といった仕組みはもはや一般的だと思います。 https://blog.langchain.dev/improving-document-retrieval-with-contextual-compression/その上で、関連情報を取り出す仕組みとしてベクトルDBの利用が一般的になってきていますが、抽出した文章が必ずしも質問に対して適切な情報源になっているとは限らない可能性はあります。類似度から算出して似ていると評価されていても、文脈が違うケースもあったりするのではないでしょうか。 先日(4/21)追加されたContextual Compression Retrieverはまさにこの問題を解決するためのもので、ベクトルDBなどから抽出した情報の評価を行い、更に
LMQL Playgroundでクエリを試すLMQLには動作を簡単に検証できるPlaygroundが用意されています。ローカルでPlaygroundを起動することもできます。 まずはGetting Startedで紹介されている以下のクエリを実行します。 argmax "Hello[WHO]" from "openai/text-ada-001" where len(WHO) < 10「Run」ボタンをクリックするとOpenAIのAPI KEYを求められるので、入力します。 実行するとModel Responseの枠に結果が表示されます。 LMQLの基本構造LMQLは記法的にはSQLと似ていて、以下のような構造を持っています。 デコーダ節(Decoder Clause): テキスト生成に使用するデコード・アルゴリズムを指定します。LMQLでは様々なデコード・アルゴリズムを選択することができ
前回に引き続きGenerative Agentsです。今回はこちらのドキュメントの内容を中心に見ていきます。 GenerativeAgentクラスの概要この実装で中心的な役割を果たしているのがGenerativeAgentクラスです。 class GenerativeAgent(BaseModel): """A character with memory and innate characteristics."""このクラスは以下のパラメータを持っており、これがキャラクターの振る舞いや言動に影響を与えます。 name (str): キャラクターの名前。 age (int): キャラクターの年齢。 traits (str): キャラクターの固有の特徴。「anxious, likes design」といった値を設定する。 status (str): キャラクターの現在の状態。 reflecti
先週、LLM(GPT-3.5)によって固有の性格や属性を持たせた25人のAIエージェントによる小規模社会シミュレーションの実現を試みたGenerative Agents論文が話題になりました。 本論文では、信憑性のある人間の行動をシミュレートするジェネラティブエージェントを紹介します。大規模言語モデルを拡張したアーキテクチャを用いて、エージェントの経験を自然言語で記録し、リフレクションにより統合し、それを行動計画に利用します。インタラクティブな環境でユーザーと自然言語で対話できるようにし、信憑性のある個々の行動と新たに現れる社会的行動を実現します。今後の研究では、生成エージェントのアーキテクチャをさらに改良し、人間の行動のシミュレーションをさらに向上させることが求められます。またこの技術は、教育、ゲーム、ビジネスコミュニケーションなど、さまざまな分野での応用が期待されています。 アブストラ
OpenAIのGPT-4 APIのウェイティングリストに申し込むと、メールで以下のような内容が送られてきます。 While we ramp up, invites will be prioritized to developers who have previously build with the OpenAI API. You can also gain priority access if you contribute model evaluations to OpenAI Evals that get merged, as this will help us improve the models for everyone. OpenAI APIで開発したことがある開発者に優先的に招待します。また、OpenAI Evalsにモデル評価を投稿し、それがマージされた場合にも、優先的にアク
そういえば先日のLangChainもくもく会でこんな質問があったのを思い出しました。 Q&Aの元ネタにしたい文字列をチャンクで区切ってembeddingと一緒にベクトルDBに保存する際の、チャンクで区切る適切なデータ長ってどのぐらいなのでしょうか? 以前に紹介していた記事ではチャンク化をUnstructuredライブラリに任せていたので「このぐらいが良いよ」とハッキリとは言えなかったのですが、今日はこの問題について検証を交えながら考えてみたいと思います。 埋め込みベクトル化するデータ長の限界値そもそもで埋め込みベクトル化できるデータ長の限界値はどの程度なのでしょうか。OpenAIのドキュメントによると、OpenAIのtext-embedding-ada-002を利用して埋め込みベクトルを求める際の最大入力トークンは8,191トークンと書かれています。 トークン単位は日本語の文字数と一致しな
新興で勢いのあるベクトルDBにChromaというOSSがあり、オンメモリのベクトルDBとして気軽に試せます。 LangChainやLlamaIndexとのインテグレーションがウリのOSSですが、今回は単純にベクトルDBとして使う感じで試してみました。 データをChromaに登録する今回はLangChainのドキュメントをChromaに登録し、LangChainのQ&Aができるようなボットを作成しようと思います。 しかしLangChainのドキュメントはほとんどがJupyter Notebook形式なので、ベクトルDBへ取り込みやすいようにフラットテキストにしてあげる必要があります。 以下の関数はJupyter Notebook形式(JSON)のファイルを分解してMarkdown形式に変換し、その後Unstructured.ioのMarkdownスプリッタを利用してコンテンツをチャンクに分割
こんにちは!AIにアシストされすぎて認知機能の退化を実感している今日この頃です。むしろ加速しているのか?よく分からないですね。。 読書中も「これってどうなの?」「あれってどうなの?」とすぐ聞きたくなってしまう病にかかってしまっておりまして、プログラマならお馴染みの、こういう動物が表紙に描いてある本すらも落ち着いて読むことができなくなってきました。 表紙に動物の絵が描いてあるやーつじゃあもういっそのことAIに読書を手伝ってもらえば良いよね、ということで、最近はAIとチャット形式で読書しています。 いや、読んだのはAIなので私はおしゃべりしているだけか? と、そんな感じのモーティマー・アドラーが言っていたような「著者と対話をするような読書」をAIチャットで実現してみたので、この体験をお裾分けしたいと思います。
ChatGPT風の画面を表示するOSSがいくつか出てきている中で、コードの読みやすさと操作性を比較した上でオススメしたいのが、Next.jsで書かれているChatbot UIというOSSだ。 ローカルでサクッと起動ができ、立ち上がるとこんな画面が表示される。 ChatGPTの画面とうり二つOpenAIのAPI Keyを入力すれば簡単にOpenAIのチャットモデルと接続される。API接続のChatGPTなので、本家のChatGPTよりはやりとりできる文字量が制限されるものの、本家のChatGPTではセンシティブな情報を扱うことができないため、API接続のUIにも価値はある。 ところでこのChatbot UI、ソースコードを読んでみると環境変数でAPI接続先を差し替えることができるようになっている。process.env.OPENAI_API_HOSTの部分だ。 utils/app/const
LangChainでstreamingオプションをつけた生成結果をFastAPI + event-streamで返すデモ pic.twitter.com/WcT0FAZj1O — 野生のまーくん🐕🦺 (@mah_lab) March 29, 2023 ソースコードimport threading import queue import uvicorn from fastapi import FastAPI from fastapi.responses import StreamingResponse from langchain.chat_models import ChatOpenAI from langchain.callbacks.base import CallbackManager from langchain.callbacks.streaming_stdout impo
【告知】『AIエージェント』に特化した生成AIの書籍を12/16より発売します! 去る11月はOpenAIのGPTsの発表や、Microsoft Ignite 2023でのナデラCEOによる"We are Copilot Company"発言から、ユーザーのニーズからAIが自律的にタスクをこなしてくれる「エージェント体験」が話題になりました。 この「エージェント体験」を支える技術が、AIエージェントです。 本書ではこのAIエージェントに注目し、AIエージェントはどのように業務の体験を変えていくのか、その仕組みはどのように実現されているのかをまとめていま
先日以下のような記事を書いてみたものの、いちいち結果をChatGPTに手でコピペしながら検証するのはダサいなと思っていました。 そういうわけでRSpecが通るまで愚直に検証&生成を繰り返すようなコードを書いてみたものの、修正履歴までChatGPTのコンテキストに持たせようとすると、すぐに最大トークン数を超えてしまい失敗してしまいます。 最大トークン数を超えないように頭の良いコンテキストを持たせるような実装も可能だとは思いますが、結構複雑な実装になってしまいそうです。 そんな中で出会ったのがこのツイートでした。 I saw a somewhat astonishing thing today. GPT was asked a question that it needed to write code to answer, and given access to a Python REPL.
次のページ
このページを最初にブックマークしてみませんか?
『mah_lab / 西見 公宏|note』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く