Agent Skills by ALSEL
Anthropic ClaudeLLM・AI開発⭐ リポ 33品質スコア 80/100

langchain-development

LangChain JS/TSフレームワークを使用してLLM搭載アプリケーションを構築できます。チャットモデル、プロンプトテンプレート、LCELチェーン、ツールバインディング、またはRAGパイプラインを操作する際に利用します。

description の原文を見る

LangChain JS/TS framework for building LLM-powered apps. Use when working with chat models, prompt templates, LCEL chains, tool binding, or RAG pipelines.

SKILL.md 本文

LangChain 開発

このスキルを使用する場合

このスキルを使用する場合代わりにシブリングスキルを使用する場合
LCEL チェーン(プロンプト → モデル → パーサー)または RAG パイプラインを構築する場合ステートフルなグラフワークフローが必要な場合 — langgraph-agents を使用してください
チャットモデル、プロンプトテンプレート、またはツールバインディングを操作する場合階層的なマルチエージェントオーケストレーションが必要な場合 — deep-agents を使用してください
既存の TypeScript プロジェクトに LangChain を追加する場合新規プロジェクトをスキャフォルディングしている場合 — langchain-init(/langchain:init) を使用してください
ドキュメントローダーとベクトルストアを実装する場合LangChain を使用しないワンオフの SDK 呼び出しのみが必要な場合 — プロバイダーの SDK を直接使用してください

コアの専門知識

LangChain JS/TS は LLM アプリケーション構築のためのフレームワークです。

  • モデルプロバイダー全体での統一インターフェース(OpenAI、Anthropic、Google など)
  • 構成可能なチェーンとエージェント
  • 組み込みツール統合
  • RAG(検索拡張生成)のサポート
  • LangSmith 可観測性統合

インストール

パッケージマネージャーの設定

# コアパッケージ
npm install langchain
# または
pnpm add langchain
# または
bun add langchain

# モデルプロバイダーパッケージ(必要なものをインストール)
npm install @langchain/openai
npm install @langchain/anthropic
npm install @langchain/google-genai

# 一般的な統合
npm install @langchain/community  # コミュニティ統合
npm install @langchain/textsplitters  # ドキュメント分割

TypeScript 構成

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "esModuleInterop": true,
    "strict": true
  }
}

チャットモデル

基本的な使用方法

import { ChatOpenAI } from "@langchain/openai";
import { ChatAnthropic } from "@langchain/anthropic";
import { HumanMessage, SystemMessage } from "@langchain/core/messages";

// OpenAI
const openai = new ChatOpenAI({
  model: "gpt-4o",
  temperature: 0,
});

// Anthropic
const anthropic = new ChatAnthropic({
  model: "claude-haiku",
  temperature: 0,
});

// メッセージで呼び出し
const response = await openai.invoke([
  new SystemMessage("You are a helpful assistant."),
  new HumanMessage("Hello!"),
]);

ストリーミング

const stream = await openai.stream([new HumanMessage("Tell me a story")]);

for await (const chunk of stream) {
  process.stdout.write(chunk.content as string);
}

構造化出力

import { z } from "zod";

const schema = z.object({
  name: z.string().describe("The name"),
  age: z.number().describe("The age"),
});

const structuredLlm = openai.withStructuredOutput(schema);
const result = await structuredLlm.invoke("John is 30 years old");
// { name: "John", age: 30 }

プロンプトテンプレート

基本テンプレート

import { ChatPromptTemplate } from "@langchain/core/prompts";

const prompt = ChatPromptTemplate.fromMessages([
  ["system", "You are a {role}."],
  ["human", "{input}"],
]);

const formatted = await prompt.invoke({
  role: "helpful assistant",
  input: "Hello!",
});

フューショットプロンプト

import { FewShotChatMessagePromptTemplate } from "@langchain/core/prompts";

const examples = [
  { input: "2+2", output: "4" },
  { input: "3+3", output: "6" },
];

const fewShotPrompt = new FewShotChatMessagePromptTemplate({
  examplePrompt: ChatPromptTemplate.fromMessages([
    ["human", "{input}"],
    ["ai", "{output}"],
  ]),
  examples,
  inputVariables: ["input"],
});

チェーン(LCEL)

基本的なチェーン

import { ChatOpenAI } from "@langchain/openai";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { StringOutputParser } from "@langchain/core/output_parsers";

const prompt = ChatPromptTemplate.fromTemplate("Tell me a joke about {topic}");
const model = new ChatOpenAI();
const parser = new StringOutputParser();

// パイプ演算子でチェーンを構成
const chain = prompt.pipe(model).pipe(parser);

const result = await chain.invoke({ topic: "programming" });

並列チェーン

import { RunnableParallel } from "@langchain/core/runnables";

const parallel = RunnableParallel.from({
  joke: jokeChain,
  poem: poemChain,
});

const results = await parallel.invoke({ topic: "cats" });
// { joke: "...", poem: "..." }

分岐

import { RunnableBranch } from "@langchain/core/runnables";

const branch = RunnableBranch.from([
  [(x) => x.type === "math", mathChain],
  [(x) => x.type === "code", codeChain],
  defaultChain, // フォールバック
]);

ツール

ツールの定義

import { tool } from "@langchain/core/tools";
import { z } from "zod";

const calculatorTool = tool(
  async ({ a, b, operation }) => {
    switch (operation) {
      case "add":
        return String(a + b);
      case "subtract":
        return String(a - b);
      case "multiply":
        return String(a * b);
      case "divide":
        return String(a / b);
    }
  },
  {
    name: "calculator",
    description: "Performs basic arithmetic",
    schema: z.object({
      a: z.number(),
      b: z.number(),
      operation: z.enum(["add", "subtract", "multiply", "divide"]),
    }),
  },
);

ツールバインディング

const modelWithTools = model.bindTools([calculatorTool]);

const response = await modelWithTools.invoke("What is 25 * 4?");

// ツール呼び出しをチェック
if (response.tool_calls?.length) {
  const toolCall = response.tool_calls[0];
  const result = await calculatorTool.invoke(toolCall.args);
}

RAG(検索拡張生成)

ドキュメント読み込み

import { TextLoader } from "langchain/document_loaders/fs/text";
import { PDFLoader } from "@langchain/community/document_loaders/fs/pdf";
import { RecursiveCharacterTextSplitter } from "@langchain/textsplitters";

// ドキュメントを読み込み
const loader = new TextLoader("./data/document.txt");
const docs = await loader.load();

// チャンクに分割
const splitter = new RecursiveCharacterTextSplitter({
  chunkSize: 1000,
  chunkOverlap: 200,
});
const splitDocs = await splitter.splitDocuments(docs);

ベクトルストア

import { MemoryVectorStore } from "langchain/vectorstores/memory";
import { OpenAIEmbeddings } from "@langchain/openai";

const embeddings = new OpenAIEmbeddings();
const vectorStore = await MemoryVectorStore.fromDocuments(
  splitDocs,
  embeddings,
);

// 検索
const results = await vectorStore.similaritySearch("query", 4);

RAG チェーン

import { createRetrievalChain } from "langchain/chains/retrieval";
import { createStuffDocumentsChain } from "langchain/chains/combine_documents";

const retriever = vectorStore.asRetriever({ k: 4 });

const combineDocsChain = await createStuffDocumentsChain({
  llm: model,
  prompt: ChatPromptTemplate.fromTemplate(`
    Answer based on this context:
    {context}

    Question: {input}
  `),
});

const ragChain = await createRetrievalChain({
  retriever,
  combineDocsChain,
});

const response = await ragChain.invoke({
  input: "What is the document about?",
});

エージェント(ReAct)

基本的なエージェント

import { createReactAgent } from "@langchain/langgraph/prebuilt";

const agent = createReactAgent({
  llm: model,
  tools: [calculatorTool, searchTool],
});

const result = await agent.invoke({
  messages: [{ role: "user", content: "Calculate 25 * 4" }],
});

エージェント最適化

コンテキストコマンド/パターン
クイックテストnpx tsx --test src/**/*.test.ts
型チェックnpx tsc --noEmit
デバッグトレースLANGCHAIN_TRACING_V2=true を設定
トークン削減テキストのみの場合は StringOutputParser を使用
ストリーム出力.invoke() の代わりに .stream() を使用
バッチリクエスト並列処理の場合は .batch([inputs]) を使用
レスポンスキャッシング繰り返し呼び出しの場合は InMemoryCache を使用

クイックリファレンス

環境変数

変数説明
OPENAI_API_KEYOpenAI API キー
ANTHROPIC_API_KEYAnthropic API キー
LANGCHAIN_TRACING_V2LangSmith トレーシングを有効化
LANGCHAIN_API_KEYLangSmith API キー
LANGCHAIN_PROJECTLangSmith プロジェクト名

一般的なインポート

インポートパッケージ
ChatOpenAI@langchain/openai
ChatAnthropic@langchain/anthropic
ChatPromptTemplate@langchain/core/prompts
StringOutputParser@langchain/core/output_parsers
tool@langchain/core/tools
RunnableSequence@langchain/core/runnables

主要パッケージ

パッケージ目的
langchainコアフレームワーク
@langchain/core基本抽象化
@langchain/openaiOpenAI 統合
@langchain/anthropicAnthropic 統合
@langchain/communityコミュニティ統合
@langchain/langgraphグラフベースのエージェント

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
laurigates
リポジトリ
laurigates/claude-plugins
ライセンス
MIT
最終更新
2026/5/12

Source: https://github.com/laurigates/claude-plugins / ライセンス: MIT

本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: laurigates · laurigates/claude-plugins · ライセンス: MIT