Langchainについてかるーーくまとめてみる。
Langchainについて
Langchain概要
langchainとはLLMを使用したアプリケーションを簡単に実装するために作られたライブラリです.
python製langchainとtypescript製langchainがあり現状ではpython製のlangchainが先行しています.僕はtypescript大好き人間なのでlangchain-jsを盛り上げるべくコントリビュートしたいなとひっそり企んでます.このライブラリはHarrison Chaseによって作成されたOSSであるため誰もが無料で使用が可能です.
Langchainの機能
LLMを使用したアプリケーションを簡単に実装するために作られたライブラリと一言で言われても何ができるのかさっぱりだと思うのでLangchainが持つ機能についてまとめてみます.
大きく分けてLangchainは6つの機能を持ちます.
Model I/O:
大きく
- Prompts
- Language models
- Output parsers
に機能が分けられます.
Prompts
これはプロンプトの最適化をおこなうための機能です.
- Prompt Template
- プロントをテンプレート化することで,テンプレートの穴埋めの回答を得ることができ,回答の安定性を増すことができます.(few-shot learningを使用する際などに使用する.)
- Example Selectors
- 大量の教師データからプロンプトに入力するデータを少量ランダムで選択するための機能です
Language models
「Models」は、異なるLLMモデルを組み合わせて利用可能です.本来はLLMモデルによってことのなるインターフェイスを持つので別々にインストールして使用する必要があるが,Langchainを使用することで以下のモデルを自由に切り替えて使用することができます.
AI21
Aleph Alpha
Anthropic
Azure OpenAI LLM Example
Banana
CerebriumAI LLM Example
Cohere
DeepInfra LLM Example
ForefrontAI LLM Example
GooseAI LLM Example
GPT4All
Hugging Face Hub
Llama-cpp
Manifest
Modal
OpenAI
Petals LLM Example
PromptLayer OpenAI
Replicate
SageMakerEndpoint
Self-Hosted Models via Runhouse
StochasticAI
Writer
Output Parsers
出力を特定のデータ形式に指定するための機能です
Retreival:外部データの利用
外部データを回答で利用できるようにするための機能です.
読み込ませたPDFファイルやCSVファイルに基づいて回答させることができます.
Chains:複数プロンプトで一連の処理の実行
複数のプロンプトを実行するための機能です.
一度の指示で複雑な回答を生成させるために使用します.Chainsは3つの種類があります.
1.Simple Chain
Chainの最小単位です.Chainはプロンプトとモデルによって構成されます.
2.Sequential Chain
Chainを複数つなげたものをSequential Chainと呼びます.
- 複数Chainの配列
- 最初のチェーンに入れる引数
を指定することが可能です.
# rapper
rapper_template: str = """You are an American rapper, your job is to come up with\
lyrics based on a given topic
Here is the topic you have been asked to generate a lyrics on:
{input}\
"""
rapper_prompt_template: PromptTemplate = PromptTemplate(
input_variables=["input"], template=rapper_template)
# creating the rapper chain
rapper_chain: LLMChain = LLMChain(llm=llm, prompt=rapper_prompt_template)
# verifier
verifier_template: str = """You are a verifier of rap songs, you are tasked\
to inspect the lyrics of rap songs. If they consist of violence and abusive languge\
flag the lyrics. Your response should be only one word either True or False.
Here is the lyrics submitted to you:
{input}\
"""
verified_prompt_template: PromptTemplate = PromptTemplate(
input_variables=["input"], template=verifier_template)
# creating the verifier chain
verifier_chain: LLMChain = LLMChain(llm=llm, prompt=verified_prompt_template)
# creating the simple sequential chain
ss_chain: SimpleSequentialChain = SimpleSequentialChain(
chains=[rapper_chain, verifier_chain])
# running chain
review: str = ss_chain.run("Gun violence")
print(review)
# This will execute in a loop till we get a lyric with no abusive content
while review == "True":
review: str = ss_chain.run("Gun violence")
print(review)
3.Custam Chain
Chainをより自由に繋ぎかえることができます.これでは,複数のChainが入力された際に
Chainの出力を他のChainにどのように渡すのかを設できます
Agents:
複数のツールを組み合わせて出力を得ることができる機能です.
Modelに渡されたツールを使用して,Model自体が自分で次にどのようなアクションを取るかを決定し実行, 観測, 完了までを繰り返す機能
Pandas agentを用いるとCSVデータから図を作成することなどができる.
Memory:対話履歴の保持
回答履歴を保持し, 必要に応じて再活用できるようにする機能です.過去の会話を記憶した上での回答生成が可能になります.
Callbacks
なんか書いてて本題のFunction calloingに全然行き着けなくて疲れたからまた気が向いたら書く..許してくれ
Function Callingについて
function calling概要
そもそもFunction Callingとは何か
Function callingは、LLMから幅広い目的のための構造化された出力を得るための便利な方法です。"関数"のスキーマを提供することで、LLMはその中から一つを選び、そのスキーマに合った応答を出力しようと試みます。
名前からはLLMが実際にコードを実行し、関数を呼び出しているように思えますが、より正確には、LLMが仮想関数が取る引数のスキーマに合致するパラメータを充填していると言った方が適切です。これらの構造化された応答を何にでも使うことができます!
Function callingは、LangChainのいくつかの他の人気機能の構築ブロックとして機能しており、OpenAI Functionsエージェントや構造化出力チェーンを含みます。これらのより特定のユースケースに加えて、モデルに直接関数パラメータを付けて呼び出すこともできます。
というように,Agentや,Outoput Chainを用いて,リクエストに応じてある関数に対して引数を渡して,出力を得た後に自然言語で回答するということが可能です.
Discussion