Closed14

TypeScript版LangChain試行錯誤記録

shin_t_o_shin_t_o_

Models

shin_t_o_shin_t_o_

new OpenAI() と new ChatOpenAI() の違いは?

  • LangChainのサンプルを読むとどちらも見かける
  • より対話的、文脈把握特化を重視するなら ChatOpenAI とのこと
  • ただ「過去情報を元にユーザからの質問に対して返答するchatbot」は OpenAI で良いのでは?との指摘(LangChain内Mendableより)

ただそもそも OpenAI インスタンスと ChatOpenAI インスタンスは型情報が異なっており、後者をそのまま .fromLLM() メソッドなどに渡すと型エラーで怒られる。 OpenChatAI という名前と呼び出し方が微妙に異なるクラスであれば問題なく動く…までは確認したがこのあたりの区分けがよくわかっていない。

// import先の違い
import { OpenAI, OpenAIChat } from "langchain/llms/openai"
import { ChatOpenAI } from "langchain/chat_models/openai"
// それぞれの.d.tsファイル参照
class OpenAI extends BaseLLM implements OpenAIInput
// -> BaseLLM extends BaseLanguageModel

class ChatOpenAI extends BaseChatModel implements OpenAIInput
// -> BaseChatModel extends BaseLanguageModel

class OpenAIChat extends LLM implements OpenAIInput
// -> LLM extends BaseLLM
// -> BaseLLM extends BaseLanguageModel
// ChatQAサイド
static fromLLM(llm: BaseLLM, retriever: BaseRetriever, options?: {
    inputKey?: string;
    outputKey?: string;
    returnSourceDocuments?: boolean;
    questionGeneratorTemplate?: string;
    qaTemplate?: string;
}): ConversationalRetrievalQAChain;
shin_t_o_shin_t_o_

Prompts

shin_t_o_shin_t_o_
  • document別にvector storeを作成し保存しておく
    • 「○○特化型チャット」がたくさん作れる
    • <Select /> のvalueに応じて vector storeやprompt, prompt templateなどの形式を揃えれば挿し替えが容易に
shin_t_o_shin_t_o_

Indexes

shin_t_o_shin_t_o_

Text Splittersよくわからん問題

  • 過去記事データをjson出力
  • 各種splitterを適用
    出力結果を逐一確認したわけではなく、 console.log() で出力された範囲での確認だが、区切り方は異なるものの出力形式が異なるということでもなく、型を辿るといずれも class TextSplitter に行き着く。

しかし不適切な? Text Splitters で分割すると 404 error が返ってくる。エラー詳細も不明のためここで数日沼る。
https://js.langchain.com/docs/modules/indexes/text_splitters/examples/

shin_t_o_shin_t_o_

vector store 要吟味

今のところ動作を確認したのは HNSWLib のみだが、 web app だからといって Node.js 環境に対応した vector store を選定する必要もない。

shin_t_o_shin_t_o_

vector store × NextJs詰み問題

  • ChatGPT API利用チャットはNextJsのAPI Routesで構築
    • LangChainベースで構築する場合vector storeの実行結果を保存する手段がない
      -> 何かしらの拡張が必要そう
  • 別途APIを立てれば済む話
    • pythonベースで構築し .save_local() で実行結果を保存しておく
    • メモリ上で保持する(手段は色々)
      -> langchainjsでも save localが使えれば…


2023/5/21 更新
いつの間にか種別が増えている & save localの項が増えている!
https://js.langchain.com/docs/modules/indexes/vector_stores/integrations/

shin_t_o_shin_t_o_

Chains

shin_t_o_shin_t_o_

Chainsの関係性よくわからん問題

公式 -> deepl

「読み込んだIndexesを元に回答してくれるbot」は2番目で良さそうではある。
ただちょくちょく採用事例を見かける loadQAChain(llm: BaseLanguageModel, params: QAChainParams = ...) はどういう位置づけにあるのか。

Index-related chains でも qaTemplate という PromptTemplate 的なものを利用できたが、 LLMChains との差異は何なのか、etc...

このスクラップは2024/01/30にクローズされました