
LLM飿ºã¢ããªã®éçºãæ¯æŽããã©ã€ãã©ãª LangChain ã®äœ¿ãæ¹ (1) - LLMãšããã³ããã»ãã§ãŒã³
ãLangChainãã®ãLLMãšããã³ãããããã§ãŒã³ãã®äœ¿ãæ¹ããŸãšããŸããã
1. LangChain
ãLangChainãã¯ããLLMã (Large language models) ãšé£æºããã¢ããªã®éçºãæ¯æŽããã©ã€ãã©ãªã§ãã
ãLLMããšãã驿°çãã¯ãããžãŒã«ãã£ãŠãéçºè ã¯ä»ãŸã§äžå¯èœã ã£ãããšãå¯èœã«ãªããŸããããããããLLMããåç¬ã§äœ¿çšããã ãã§ã¯ãçã«åŒ·åãªã¢ããªã±ãŒã·ã§ã³ãäœæããã®ã«äžååã§ããæ¬åœã®åã¯ããããä»ã®èšç®ãç¥èãšçµã¿åãããæã«ããããããŸãããLangChainãã¯ããã®ãããªã¢ããªã±ãŒã·ã§ã³ã®éçºããµããŒãããŸãã
2. LangChainã®æ¯æŽé å
ãLangChainãã®æ¯æŽé åã¯ã次ã®5ã€ããããŸãã
(1) LLM ãšããã³ãã
(2) ãã§ãŒã³
(3) ããŒã¿æ¡åŒµçæ
(4) ãšãŒãžã§ã³ã
(5) ã¡ã¢ãª
(6) è©äŸ¡ (BETA)
3. ãŠãŒã¹ã±ãŒã¹
ãLangChainãã®ãŠãŒã¹ã±ãŒã¹ã¯ã次ã®ãšããã§ãã
ã»ãšãŒãžã§ã³ã : èšèªã¢ãã«ã䜿çšããŠä»ã®ããŒã«ãšå¯Ÿè©±ãããããæ ¹æ ã®ãã質åå¿çãå®è¡ããããAPIãšããåãããããã¢ã¯ã·ã§ã³ãå®è¡ãããããããšãã§ããã
ã»ãã£ããããã : ãã£ããã䜿çšããŠèªåçã«äŒè©±ããã
ã»äŸã®çæ : æ¢åã®äŸãšåæ§ã®äŸãçæããã
ã»ããŒã¿æ¡åŒµçæ : LLMãåŠç¿ããããŒã¿ã«åºã¥ããŠããã¹ãçæããã®ã§ã¯ãªããç¹å®ã®ããŒã¿ã«åºã¥ããŠããã¹ãçæããã
ãã»ç¹å®ã®æç« (Webãµã€ãã»ç§ææžãªã©) ã®èŠçŽã
ãã»ç¹å®ã®ããã¹ã (Webãµã€ãã»ç§ææžãªã©) ã«å¯Ÿãã質åå¿çã
ãã»è€æ°ã®ããã¹ã (è€æ°ã®Webãµã€ãã»ç§ææžãªã©) ã«å¯Ÿãã質åå¿çã
ãã»API ãžã®å€éšåŒã³åºãã®çµæ (SQL ã¯ãšãªçµæãªã©) ã®äœ¿çšã
ã»è³ªåå¿ç : ããã¥ã¡ã³ãã®å 容ã«é¢ãã質åã«å¯ŸããŠãå¿çãè¿ãã
ã»èŠçŽ : è€æ°ã®é·ãããã¥ã¡ã³ãããå°ããªèŠçŽãäœæããã
ã»è©äŸ¡ : èšèªã¢ãã«èªäœã䜿çšããŠèšèªã¢ãã«ãè©äŸ¡ããã
ã»ã¢ãã«æ¯èŒ : æ§ã ãªå ¥åããã³ãªãã·ã§ã³ã§èšèªã¢ãã«ãæ¯èŒããã
4. ã€ã³ã¹ããŒã«
Google Colabã§ã®ã€ã³ã¹ããŒã«æé ã¯ã次ã®ãšããã§ãã
(1) ããã±ãŒãžã®ã€ã³ã¹ããŒã«ã
# ããã±ãŒãžã®ã€ã³ã¹ããŒã«
!pip install langchain
!pip install openai(2) ç°å¢å€æ°ã®æºåã
以äžã®ã³ãŒãã®Â <OpenAI_APIã®ããŒã¯ã³> ã«ã¯OpenAI APIã®ããŒã¯ã³ãæå®ããŸãã(ææ)
# ç°å¢å€æ°ã®æºå
import os
os.environ["OPENAI_API_KEY"] = "<OpenAI_APIã®ããŒã¯ã³>"5. LLMãšããã³ãã
5-1. LLMã®åŒã³åºã
ãLangChainãã®æãåºæ¬çãªæ§æèŠçŽ ã¯ããLLMã®åŒã³åºããã§ãã
ä»åã¯ããäœããã®ã«åºã¥ããäŒç€ŸåããçæããŸãã
from langchain.llms import OpenAI
# LLMã®æºå
llm = OpenAI(temperature=0.9)
# LLMã®åŒã³åºã
print(llm("ã³ã³ãã¥ãŒã¿ã²ãŒã ãäœãæ°äŒç€Ÿåã®æ¡ã1ã€åºããŠãã ãã"))ãã¯ã«ã²ãŒã ã¹5-2. LLMChain ãš PromptTemplate
éåžžãLLMã䜿çšããå ŽåããŠãŒã¶ãŒå
¥åãçŽæ¥LLMã«æž¡ãããšã¯ãããŸããããŠãŒã¶ãŒå
¥åãåºã«ãPromptTemplateã§ããã³ãããäœæãããããLLMã«æž¡ããŸãã
ä»åã¯ããäœããã®ããåºã«ããäœããã®ã«åºã¥ããäŒç€ŸåããçæããŸãã
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
# ããã³ãããã³ãã¬ãŒãã®æºå
prompt = PromptTemplate(
input_variables=["product"],
template="{product}ãäœãæ°äŒç€Ÿåã®æ¡ã1ã€åºããŠãã ãã",
)
# LLMChainã®æºå
chain = LLMChain(llm=llm, prompt=prompt)
# LLMChainã®å®è¡
print(chain.run("å®¶åºçšãããã"))ãã±ããããããã«ã³ãããŒ6. ãã§ãŒã³
6-1. SequentialChain
èšèªã¢ãã«ã®åºåãå¥ã®èšèªã¢ãã«ã®å ¥åã«æž¡ããã§ãŒã³ã§ããæ±ºå®è«çãªé åºã§åŒã³åºããŸãã
次ã®2çš®é¡ããããŸãã
ã»SimpleSequentialChain : å ¥åºåã1ã€ãã€æã€ãã§ãŒã³ãç¹ããã·ã³ãã«ãªãã§ãŒã³ã§ãã
ã»SequentialChain : å ¥åºåãè€æ°æã€ãã§ãŒã³ãç¹ããäžè¬çãªãã§ãŒã³
â SimpleSequentialChain
å
¥åºåã1ã€ãã€æã€ãã§ãŒã³ãç¹ããã·ã³ãã«ãªãã§ãŒã³ã§ãã
ä»åã¯ã1ã€ç®ãåã®ã¿ã€ãã«ãããããããçæããšã2ã€ç®ãåã®ããããããã¬ãã¥ãŒãçæãã®ãã§ãŒã³ãç¹ããŸãã
(1) ããã±ãŒãžã®ã€ã³ããŒãã
# ããã±ãŒãžã®ã€ã³ããŒã
from langchain.llms import OpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate(2) 1ã€ç®ã®ãã§ãŒã³ã®æºåã
# 1ã€ç®ã®ãã§ãŒã³ã®æºå : åã®ã¿ã€ãã«ãããããããçæ
# LLMã®æºå
llm = OpenAI(temperature=.7)
# ãã³ãã¬ãŒãã®æºå
template = """ããªãã¯åäœå®¶ã§ããåã®ã¿ã€ãã«ãäžããããå Žåããã®ã¿ã€ãã«ã®ãããããæžãã®ãããªãã®ä»äºã§ãã
ã¿ã€ãã«:{title}
ãããã:"""
# ããã³ãããã³ãã¬ãŒãã®æºå
prompt_template = PromptTemplate(
input_variables=["title"],
template=template
)
# LLMChainã®æºå
synopsis_chain = LLMChain(llm=llm, prompt=prompt_template)(3) 2ã€ç®ã®ãã§ãŒã³ã®æºåã
# 2ã€ç®ã®ãã§ãŒã³ : åã®ããããããã¬ãã¥ãŒãçæ
# LLMã®æºåæºå
llm = OpenAI(temperature=.7)
# ãã³ãã¬ãŒãã®æºå
template = """ããªãã¯æŒåè©è«å®¶ã§ãã åã®ãããããäžããããå Žåããã®ããããã®ã¬ãã¥ãŒãæžãã®ãããªãã®ä»äºã§ãã
ãããã:
{synopsis}
ã¬ãã¥ãŒ:"""
# ããã³ãããã³ãã¬ãŒãã®æºå
prompt_template = PromptTemplate(
input_variables=["synopsis"],
template=template
)
# LLMChainã®æºå
review_chain = LLMChain(llm=llm, prompt=prompt_template)(4) SimpleSequentialChainã§2ã€ã®ãã§ãŒã³ãç¹ã
from langchain.chains import SimpleSequentialChain
# SimpleSequentialChainã§2ã€ã®ãã§ãŒã³ãç¹ã
overall_chain = SimpleSequentialChain(
chains=[synopsis_chain, review_chain],
verbose=True
)(5) SimpleSequentialChainã®å®è¡ã
# SimpleSequentialChainã®å®è¡
review = overall_chain.run("æµèŸºã®å€æ®ãæã®æ²å")> Entering new SimpleSequentialChain chain...
æµèŸºã®è¡ã§æ®ããå®¶æãããŸããæ«ã£åã®ãžã§ãšã«ã¯ãè©©ãæžããã鳿¥œãäœã£ãããããããªå€¢ãæã£ãŠããŸããããå®¶æããã¯å®å®¶ãç¶ãããšã匷ãæãŸããŠããŸããããããããžã§ãšã«ã¯ãããªå€¢ãæšãŠãããã«ããŸããã
ãã倿®ãæããžã§ãšã«ã¯å®¶æã®çåå¯ŸãæŒãåããèªèº«ã®å€¢ã«åãã£ãŠå€§ããªäžæ©ãèžã¿åºãããšããŸããããæªã 倢ãå¶ããããšãã§ãããæåŸã«ã¯åœŒã¯å®¶æã®æ²åã
ãæµèŸºã®è¡ãã¯ãäžå®¶ã®æ²åãæããå¿æž©ãŸããã©ãã§ãããžã§ãšã«ã¯ãè©©ã鳿¥œã«é¢ããå€¢ãæ±ããŠããŸãããå®¶æã¯å®å®¶ãç¶ãããæãã§ããŸãããžã§ãšã«ã¯å€¢ãæšãŠãããã«ããŸãããå®¶æã®çåå¯ŸãæŒãåããèªèº«ã®å€¢ã«åãããšãããŸã§ã¯æ¥ãŸãããããããæåŸã«åœŒã¯å€¢ãå¶ããããšãã§ãããå®¶æã®æ²åãçµãããŸã§ãã£ãšå¿çãç¶æ
ã«ãããŸãã æ¬äœã¯ãå®¶æã®ææ
ãæãã
> Finished SimpleSequentialChain chain.(6) ã¬ãã¥ãŒã®è¡šç€ºã
# ã¬ãã¥ãŒã®è¡šç€º
print(review)ãæµèŸºã®è¡ãã¯ãäžå®¶ã®æ²åãæããå¿æž©ãŸããã©ãã§ãããžã§ãšã«ã¯ãè©©ã鳿¥œã«é¢ããå€¢ãæ±ããŠããŸãããå®¶æã¯å®å®¶ãç¶ãããæãã§ããŸãããžã§ãšã«ã¯å€¢ãæšãŠãããã«ããŸãããå®¶æã®çåå¯ŸãæŒãåããèªèº«ã®å€¢ã«åãããšãããŸã§ã¯æ¥ãŸãããããããæåŸã«åœŒã¯å€¢ãå¶ããããšãã§ãããå®¶æã®æ²åãçµãããŸã§ãã£ãšå¿çãç¶æ
ã«ãããŸãã æ¬äœã¯ãå®¶æã®ææ
ãæããâ SequentialChain
å
¥åºåãè€æ°æã€ãã§ãŒã³ãç¹ããäžè¬çãªãã§ãŒã³ã§ãã
ä»åã¯ã1ã€ç®ãåã®ã¿ã€ãã«ãããããããçæããšã2ã€ç®ãåã®ããããããã¬ãã¥ãŒãçæãã®ãã§ãŒã³ãç¹ããŸãã
(1) 1ã€ç®ã®ãã§ãŒã³ã®æºåã
# 1ã€ç®ã®ãã§ãŒã³ : åã®ã¿ã€ãã«ãšæä»£ãããããããçæ
# LLMã®æºå
llm = OpenAI(temperature=.7)
# ãã³ãã¬ãŒãã®æºå
# ãã³ãã¬ãŒãã®æºå
template = """ããªãã¯åäœå®¶ã§ããåã®ã¿ã€ãã«ãšæä»£ãäžããããå Žåããã®ã¿ã€ãã«ã®ãããããæžãã®ãããªãã®ä»äºã§ãã
ã¿ã€ãã«:{title}
æä»£:{era}
ãããã:"""
# ããã³ãããã³ãã¬ãŒãã®çæ
prompt_template = PromptTemplate(
input_variables=["title", 'era'],
template=template
)
# LLMChainã®æºå
synopsis_chain = LLMChain(
llm=llm,
prompt=prompt_template,
output_key="synopsis"
)(2) 2ã€ç®ã®ãã§ãŒã³ã®æºåã
# 2ã€ç®ã®ãã§ãŒã³ : åã®ããããããã¬ãã¥ãŒãçæ
# LLMã®æºåæºå
llm = OpenAI(temperature=.7)
# ãã³ãã¬ãŒãã®æºå
template = """ããªãã¯æŒåè©è«å®¶ã§ãã åã®ãããããäžããããå Žåããã®ããããã®ã¬ãã¥ãŒãæžãã®ãããªãã®ä»äºã§ãã
ãããã:
{synopsis}
ã¬ãã¥ãŒ:"""
# ããã³ãããã³ãã¬ãŒãã®æºå
prompt_template = PromptTemplate(
input_variables=["synopsis"],
template=template
)
# LLMChainã®æºå
review_chain = LLMChain(
llm=llm, prompt=prompt_template,
output_key="review"(3) SequentialChainã§2ã€ã®ãã§ãŒã³ãç¹ãã
from langchain.chains import SequentialChain
# SequentialChainã§2ã€ã®ãã§ãŒã³ãç¹ã
overall_chain = SequentialChain(
chains=[synopsis_chain, review_chain],
input_variables=["era", "title"],
output_variables=["synopsis", "review"],
verbose=True
)(4) SequentialChainã®å®è¡ã
# SequentialChainã®å®è¡
review = overall_chain({"title":"æµèŸºã®å€æ®ãæã®æ²å", "era": "æŠåœæä»£"})> Entering new SequentialChain chain...
Chain 0:
{'synopsis': '\n\nãã®ç©èªã¯æŠåœæä»£ã®æ¥æ¬ãèå°ã«ããŠããŸããããå°ããªéèœãååšããããã«ã¯è¥ãç·å¥³ãäœãã§ããŸããã\n\n䞻人å
¬ã®äžäººã¯ãå°ãå€ãã£ãæ§æ Œã§ããå°å¹Žã®ãžã§ã³ã§ãããžã§ã³ã¯æ¯æ¥ã®ããã«æµèŸºãæ£æ©ããŠããŸãããããæ¥ããžã§ã³ã¯æµèŸºã§è¥ã女æ§ãšåºäŒããŸããããã®å¥³æ§ã¯ãæŠå£«ã§ãããåœŒå¥³ã®æ°é«ãæ
床ãèª å®ãªæ°æã¡ã«å¿ã奪ãããŸããã\n\nãããããžã§ã³ã¯åœŒå¥³ã®ååãç¥ã'}
Chain 1:
{'review': '\n\nãã®ç©èªã¯æŠåœæä»£ã®æ¥æ¬ãèå°ã«ãããçŽ æŽãããã¹ããŒãªãŒã§ãã䞻人å
¬ã®ãžã§ã³ããæµèŸºã§è¥ã女æ§ãšåºäŒãããšã§ãæä»£ã®èæ¯ãèŠäºã«è¡šçŸããŠããŸãããžã§ã³ã¯ãåœŒå¥³ã®æ°é«ãæ
床ãèª å®ãªæ°æã¡ã«å¿ã奪ãããŸããããã¯ã女æ§ã®æã€åŒ·ããšæãããã象城ããŠããŸããç©èªãéããŠãå€ãã®äººã
ããèªåã®å
ãªãåãä¿¡ããããšãåŠã¹ãã§ããããæŠåœæä»£ãèå°ã«ãããã®ç©èª'}
> Finished SequentialChain chain.(5) ã¬ãã¥ãŒã®è¡šç€ºã
# ã¬ãã¥ãŒã®è¡šç€º
print(review){'review': '\n\nãã®ç©èªã¯æŠåœæä»£ã®æ¥æ¬ãèå°ã«ãããçŽ æŽãããã¹ããŒãªãŒã§ãã䞻人å
¬ã®ãžã§ã³ããæµèŸºã§è¥ã女æ§ãšåºäŒãããšã§ãæä»£ã®èæ¯ãèŠäºã«è¡šçŸããŠããŸãããžã§ã³ã¯ãåœŒå¥³ã®æ°é«ãæ
床ãèª å®ãªæ°æã¡ã«å¿ã奪ãããŸããããã¯ã女æ§ã®æã€åŒ·ããšæãããã象城ããŠããŸããç©èªãéããŠãå€ãã®äººã
ããèªåã®å
ãªãåãä¿¡ããããšãåŠã¹ãã§ããããæŠåœæä»£ãèå°ã«ãããã®ç©èª'}é¢é£
LangChain-AGI ð€
â Harrison Chase (@hwchase17) December 23, 2022
A (somewhat) facetious attempt to create AGI using the best agent & tools in @LangChainAI
Can currently use search, do complex math, lookup weather, lookup current news, and more
Notebook here: https://t.co/2UPQ7A7nwl