# LangChain JS/TS

# はじめに

LangChainは、言語モデルによって動作するアプリケーションを開発するためのフレームワークです。LangChain JS/TS (opens new window)は、LangChain Pythonパッケージ (opens new window)とできるだけシームレスに統合するように設計されています。具体的には、プロンプト、LLM、チェーンなどのすべてのオブジェクトは、シリアライズされ、言語間で共有できるように設計されています。

# 前提条件

始める前に、langchain (opens new window)ClickHouse JS (opens new window)をインストールする必要があります。

# npm
npm install -S langchain @clickhouse/client
# yarn
yarn add langchain @clickhouse/client

# 環境のセットアップ

OpenAIの埋め込みモデルを使用するためには、OpenAI (opens new window)でAPIキーを取得する必要があります。また、MyScaleコンソールのクラスターホスト、ユーザー名、パスワード情報を取得する必要もあります(接続の詳細)。

次のコマンドを実行して環境変数を設定します。

export MYSCALE_HOST="YOUR_CLUSTER_HOST"
export MYSCALE_PORT=443 
export MYSCALE_USERNAME="YOUR_USERNAME" 
export MYSCALE_PASSWORD="YOUR_CLUSTER_PASSWORD"
export OPENAI_API_KEY="YOUR_OPENAI_API_KEY"

# インデックスとクエリのドキュメント

import { MyScaleStore } from "langchain/vectorstores/myscale";
import { OpenAIEmbeddings } from "langchain/embeddings/openai";
const vectorStore = await MyScaleStore.fromTexts(
  ["Hello world", "Bye bye", "hello nice world"],
  [
    { id: 2, name: "2" },
    { id: 1, name: "1" },
    { id: 3, name: "3" },
  ],
  new OpenAIEmbeddings(),
  {
    host: process.env.MYSCALE_HOST || "localhost",
    port: process.env.MYSCALE_PORT || "443",
    username: process.env.MYSCALE_USERNAME || "username",
    password: process.env.MYSCALE_PASSWORD || "password",
  }
);
const results = await vectorStore.similaritySearch("hello world", 1);
console.log(results);
const filteredResults = await vectorStore.similaritySearch("hello world", 1, {
  whereStr: "metadata.name = '1'",
});
console.log(filteredResults);

# 既存のコレクションからクエリのドキュメントを取得する

import { MyScaleStore } from "langchain/vectorstores/myscale";
import { OpenAIEmbeddings } from "langchain/embeddings/openai";
const vectorStore = await MyScaleStore.fromExistingIndex(
  new OpenAIEmbeddings(),
  {
    host: process.env.MYSCALE_HOST || "localhost",
    port: process.env.MYSCALE_PORT || "443",
    username: process.env.MYSCALE_USERNAME || "username",
    password: process.env.MYSCALE_PASSWORD || "password",
    database: "your_database", // デフォルトは "default"
    table: "your_table", // デフォルトは "vector_table"
  }
);
const results = await vectorStore.similaritySearch("hello world", 1);
console.log(results);
const filteredResults = await vectorStore.similaritySearch("hello world", 1, {
  whereStr: "metadata.name = '1'",
});
console.log(filteredResults);