「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>LLM系ツール]] --LangChain --[[LangSmith]] --[[LangGraph]] --[[LangFlow]] *目次 [#ga4258eb] #contents *概要 [#ua8663d6] -LLMを自作プログラムと接続し、プロンプトチェーンを構成するツール。 -LLMクライアントであり、プロンプトに、Chat履歴を含めたり、[[RAG>LLMのRAG]]機能を追加したりするのに必要。 -私もLangChainの書籍を読み、そこからLLMのPEのレシピを抽出したが(→ [[LLMのPE]])、~ その後、単純にWebAPI経由でLLMを呼び出すだけの「Hello World」ならぬ「Hell World」で挫折。 -また、界隈のパッケージは破壊的変更を含み非常に速く変更されているので、ネットやGPTの情報が役に立たないケースが多い。 *詳細 [#u3cfafdb] **問題 [#wdd0e98c] -プログラマーが LLM をプログラムに簡単に統合できるようにする抽象化ラッパー -物事をシンプルにするどころか、過剰な設計 / 依存性で、シンプルなものを相対的に複雑にしている。 --自分で簡単にできる簡単な問題を解決し、難しいことを支援する設計やアーキテクチャについてはあまり考慮していない。 --LangChainの「Hello World」は、[[OpenAI]]とほぼ同じコード量で不必要な多くのクラスを組み込む「Hell World」だ。 -一種のAIクックブックとして機能し、さまざまなタスクのレシピを提供したと言う業績はある。 -[[OpenAI]]や[[LlamaIndex]]がLangChainから学んだ機能をリリースしておりコレを代替できる。 -LangChainを[[LangFlow>#k3130395]]実装用のSDKと認識して、[[LangFlow>#k3130395]]ダケ使用すれば、過剰な設計 / 依存性の問題は解決する。 **サブシステム [#k0523dcd] 何気に似ている[[LCEL>#y77d3941]]と[[LangFlow>#k3130395]] ***LCEL [#y77d3941] LCEL (LangChain Expression Language) -コードアプローチの代替として使用できる宣言型言語。 -LangChainにおけるデータフロー構築を簡潔に記述するための宣言的なDSL。 -YAMLファイルで達成したいことを記述し直接コーディングするよりも簡単ではない。 -チェーンやツール、LLMなどのコンポーネントを組み合わせた処理パイプラインを直感的に定義できる。 -Python関数のように扱え、再利用性や可読性に優れたプロンプト・パイプライン設計が可能になります。 -以下のように実装できる。 --Pythonで実装 from langchain.chat_models import ChatOpenAI from langchain.prompts import ChatPromptTemplate from langchain.output_parsers import StrOutputParser # LLM(OpenAIなど)を定義 llm = ChatOpenAI(model="gpt-4") # プロンプトテンプレートを定義 prompt = ChatPromptTemplate.from_template("都道府県「{prefecture}」の観光名所を3つ教えてください。") # 出力パーサー(文字列に変換) output_parser = StrOutputParser() # LCEL構文でチェーンを構築(Expression Language) chain = prompt | llm | output_parser # 実行(入力:プレースホルダに"京都府"を渡す) result = chain.invoke({"prefecture": "京都府"}) print(result) --YAMLで実装 # chain.yaml type: chain root: output_parser nodes: prompt: type: prompt template: 都道府県「{prefecture}」の観光名所を3つ教えてください。 llm: type: llm model: gpt-4 output_parser: type: output_parser parser_type: str input: llm edges: - source: prompt target: llm - source: llm target: output_parser ***[[LangFlow]] [#k3130395] -LangFlowは、LangChainアプリをノーコードで設計・可視化できるWebベースのツール。 -ドラッグ&ドロップでChainやAgent、各種ツールを接続して対話フローを構築できる。 -生成AIアプリ開発のプロトタイピングやチューニングに適している。 ***LangSmith [#a57e04c4] LangChain の公式観測・デバッグ・モニタリング基盤、プラットフォーム ***LangGraph [#i36d4bb3] 複雑なワークフローやエージェントを「状態遷移グラフ(State Machine)」として定義・実行できるフレームワーク ***[[LangFlow]] [#k3130395] -LangFlowは、LangChainアプリをノーコードで設計・可視化できるWebベースのツール。 -ドラッグ&ドロップでChainやAgent、各種ツールを接続して対話フローを構築できる。 -生成AIアプリ開発のプロトタイピングやチューニングに適している。 **連携 [#m6ce7a92] ***[[Ollama]] [#n697b0fa] -from langchain_ollama.llms import OllamaLLM -from langchain_community.llms import Ollama -いずれも、base_url を指定して既定値を変更できる。 -参考 --別マシンの Ollama へのアクセス #ollama - Qiita~ https://qiita.com/7shi/items/65741fa8ab0a553f51be --【Ollama】ローカル環境でLLMを選んでLangChainで実行する。~ https://zenn.dev/buenotheebiten/articles/7c351b06494be0 ***[[LlamaIndex]] [#z831ea22] BaseRetrieverを使用してRetrieverを[[LlamaIndex]]拡張する。 -参考 --LangChainでLlama Indexを使う #ChatGPT - Qiita~ https://qiita.com/tamyu/items/d4018572bfa7fb9d4393 **... [#u07cc28f] *参考 [#v9a19d42] -LangChain を使い始める | Harsh Bakshi 著 | Medium~ https://bakshiharsh55.medium.com/getting-started-with-langchain-9845f15f7505 -LangChainを使わない - ABEJA Tech Blog~ https://tech-blog.abeja.asia/entry/advent-2023-day13 --LangChain は LLM アプリケーションの開発に採用すべきではない~ https://zenn.dev/kurarrr/articles/c001548c981aca --The Problem With LangChain | Max Woolf's Blog~ https://minimaxir.com/2023/07/langchain-problem/ --LangChain is Garbage Software~ https://analyticsindiamag.com/langchain-is-garbage-software/ --The Problem with LangChain | Hacker News~ https://news.ycombinator.com/item?id=36725982 --Langchain is pointless : LangChain~ https://www.reddit.com/r/LangChain/comments/13fcw36/langchain_is_pointless/?rdt=50988 -LangChain関係は、変化が激しくて、ネット上の「動かしてみました」サンプルは、大概古くて動かないなぁ・・・#langchain~ https://twitter.com/kamoyan/status/1844768568015044754 -LangChainを新環境で使おうとしたら詰みかけた話(2023年12月14日時点)|よーへん(バーチャル学芸員・バーチャルライブコーダ)~ https://note.com/361yohen/n/nd143959368aa **公式 [#m17a7e90] -langchain~ https://www.langchain.com/ **LCEL [#e66471ec] -https://python.langchain.com/docs/concepts/lcel/ **[[LangSmith]] [#daa8363c] **[[LangGraph]] [#f92b8943] **[[LangFlow]] [#o6edde2f] **LangSmith [#daa8363c] **LangGraph [#f92b8943]