Skip to content

DNET_LangChain

nishi_74322014 edited this page Sep 11, 2026 · 1 revision

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クックブックとして機能し、さまざまなタスクのレシピを提供したと言う業績はある。

  • OpenAILlamaIndexがLangChainから学んだ機能をリリースしておりコレを代替できる。

  • LangChainをLangFlow実装用のSDKと認識して、LangFlowダケ使用すれば、過剰な設計 / 依存性の問題は解決する。

※ しかも、こんな言われようにも関わらず、バージョンアップで互換性を破壊する変更を繰り返している。

サブシステム

何気に似ているLCELLangFlow

LCEL

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

LangSmith

LangSmith

LangChain の公式観測・デバッグ・モニタリング基盤、プラットフォーム

LangGraph

LangGraph

複雑なワークフローやエージェントを「状態遷移グラフ(State Machine)」として定義・実行できるフレームワーク

LangFlow

LangFlow

  • LangFlowは、LangChainアプリをノーコードで設計・可視化できるWebベースのツール。
  • ドラッグ&ドロップでChainやAgent、各種ツールを接続して対話フローを構築できる。
  • 生成AIアプリ開発のプロトタイピングやチューニングに適している。

連携

Ollama

Ollama

LlamaIndex

BaseRetrieverを使用してRetrieverをLlamaIndex拡張する。

参考

公式

実装(参考)

LLM Engineering:Master AI、Large Language Models&Agentsの該当節

LCEL(参考)

関連プロダクト(参考)

移行メモ

  • 元 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

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally