-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_LangChain
-
LLMを自作プログラムと接続し、プロンプトチェーンを構成するツール。
-
LLMクライアントであり、プロンプトに、Chat履歴を含めたり、RAG機能を追加したりするのに必要。
-
私もLangChainの書籍を読み、そこからLLMのPEのレシピを抽出したが(→ LLMのPE)、
その後、単純にWebAPI経由でLLMを呼び出すだけの「Hello World」ならぬ「Hell World」で挫折。 -
また、界隈のパッケージは破壊的変更を含み非常に速く変更されているので、ネットやGPTの情報が役に立たないケースが多い。
-
プログラマーが LLM をプログラムに簡単に統合できるようにする抽象化ラッパー
-
物事をシンプルにするどころか、過剰な設計 / 依存性で、シンプルなものを相対的に複雑にしている。
- 自分で簡単にできる簡単な問題を解決し、難しいことを支援する設計やアーキテクチャについてはあまり考慮していない。
- LangChainの「Hello World」は、OpenAIとほぼ同じコード量で不必要な多くのクラスを組み込む「Hell World」だ。
-
一種のAIクックブックとして機能し、さまざまなタスクのレシピを提供したと言う業績はある。
-
OpenAIやLlamaIndexがLangChainから学んだ機能をリリースしておりコレを代替できる。
-
LangChainをLangFlow実装用のSDKと認識して、LangFlowダケ使用すれば、過剰な設計 / 依存性の問題は解決する。
※ しかも、こんな言われようにも関わらず、バージョンアップで互換性を破壊する変更を繰り返している。
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
-
LangChain の公式観測・デバッグ・モニタリング基盤、プラットフォーム
複雑なワークフローやエージェントを「状態遷移グラフ(State Machine)」として定義・実行できるフレームワーク
- LangFlowは、LangChainアプリをノーコードで設計・可視化できるWebベースのツール。
- ドラッグ&ドロップでChainやAgent、各種ツールを接続して対話フローを構築できる。
- 生成AIアプリ開発のプロトタイピングやチューニングに適している。
-
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
- 別マシンの Ollama へのアクセス #ollama - Qiita
BaseRetrieverを使用してRetrieverをLlamaIndex拡張する。
- 参考
- LangChainでLlama Indexを使う #ChatGPT - Qiita
https://qiita.com/tamyu/items/d4018572bfa7fb9d4393
- LangChainでLlama Indexを使う #ChatGPT - Qiita
-
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 は LLM アプリケーションの開発に採用すべきではない
-
LangChain関係は、変化が激しくて、ネット上の「動かしてみました」サンプルは、大概古くて動かないなぁ・・・#langchain
https://twitter.com/kamoyan/status/1844768568015044754 -
LangChainを新環境で使おうとしたら詰みかけた話(2023年12月14日時点)|よーへん(バーチャル学芸員・バーチャルライブコーダ)
https://note.com/361yohen/n/nd143959368aa
- langchain
https://www.langchain.com/
LLM Engineering:Master AI、Large Language Models&Agentsの該当節
移行メモ
- 元 Wiki の「戻る」の並びで LangChain が HTML 実体参照(
LangChain)で 書かれていたが、PukiWiki のページ内リンク自動生成を避けるための記法と 思われるため、通常の文字列に戻した。- 元 Wiki 末尾の本文の無い見出し「...」は除去し、 参考の「LangSmith」「LangGraph」「LangFlow」は 1 つの節にまとめた。
- 同名の見出し(「LCEL」「LangSmith」「LangGraph」「LangFlow」「実装」)が 詳細と参考で重複し GitHub Wiki でアンカが衝突するため、 括弧で文脈を補って一意にした。
- 本 Wiki(dotnetdevelopmentinfrastructure.osscons.jp)への URL リンクは、 移行先のファイル名(予約名)に置き換えた。
- PukiWiki のページ内アンカ(
#xxxxxxxx)は GitHub Wiki では再現できないため、 同一ページ内のアンカは見出しから生成されるアンカに張り替え、 他ページのアンカを指すリンクは「〜(ページ名の該当節を参照)」の形に置き換えた。
Tags: 移行, LangChain, LCEL, LangSmith, LangGraph, LangFlow, LLM, RAG, Ollama, LlamaIndex
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。