Slide 1

Slide 1 text

@gitkado LangChainでLLMの ポテンシャルを引き出す OSC2023 Shimane

Slide 2

Slide 2 text

自己紹介 ● 嘉戸 亮佑 ● 島根県松江市 (出身/在住) ● AWSに惹かれてJAWS-UGへ ● 仕事 ○ Kotlin(SpringBoot) + Python(FastAPI) + 時々 Nuxt.js

Slide 3

Slide 3 text

ChatGPT

Slide 4

Slide 4 text

ChatGPT(UI)からOpenAIのLLMを呼び出す ● LLM ○ GPT-3.5 ○ GPT-4 ○ DALL·E ○ etc.. 自分たちのコードからも利用できる

Slide 5

Slide 5 text

🦜🔗 LangChain

Slide 6

Slide 6 text

🦜LangChain ● LLMのポテンシャルを最大限に引き出します(続く) ● 2022年10月にOSSとして公開しました ● PythonとTypeScriptをサポートします ● もちろんAmazon Bedrockも使えます 2022/12 ChatGPTテスト版公開 週6でリリース ※ 10/20~26

Slide 7

Slide 7 text

🦜LLMだけでは実現できないタスクを実行できる Case: 2021年9月以降の情報も含めたい。 Ans: Google検索結果をPromptに組み込みLLMへ Case: 社内情報を含めたい。 Ans: ベクトル化した社内情報をVectorStoresに格納しておく VectorStoresから関連する情報を取得してPromptに組み込みLLMへ

Slide 8

Slide 8 text

llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0) web_research_retriever = WebResearchRetriever.from_llm( vectorstore=Chroma(embedding_function=OpenAIEmbeddings()), llm=llm, search=GoogleSearchAPIWrapper()) qa_chain = RetrievalQAWithSourcesChain.from_chain_type( llm=llm, retriever=web_research_retriever) result = qa_chain({"question": "Who developed langchain as OSS?"}) Question: Who developed langchain as OSS? Answer: LangChain was developed by Harrison Chase. Sources: https://en.wikipedia.org/wiki/LangChain Google検索結果をPromptに組み込みLLMへ

Slide 9

Slide 9 text

ReActプロンプト(ReasoningAction) 1. どういう理由(Reason)でどういう行動(Action)を取る必要があるか 思考(Thought)して行動 2. 結果を観察(Observation) 3. 最終的な回答が出るまで繰り返す 🦜LLM精度を向上させる手法を意識せず使える

Slide 10

Slide 10 text

boto3_bedrock = boto3.client("bedrock-runtime") llm = Bedrock(model_id="anthropic.claude-v2", client=boto3_bedrock) tools = load_tools(["google-search", "python_repl"], llm=llm) suffix = """ Human: 以下のcontextを活用して、次の質問にできる限り答えてください。 : {input} {agent_scratchpad} Assistant: """ prompt = ZeroShotAgent.create_prompt(tools, suffix=suffix, input_variables=["input", "agent_scratchpad"]) agent_executor = AgentExecutor.from_agent_and_tools( agent=ZeroShotAgent(llm_chain=LLMChain(llm=llm, prompt=prompt), tools=tools), verbose=True, tools=tools) ReAct(Bedrock+tools)

Slide 11

Slide 11 text

agent_executor.run("プログラミング言語Rubyは誰が開発した?") > Entering new AgentExecutor chain... Question: プログラミング言語Rubyは誰が開発した? Thought: Rubyの開発者を知るには、Google検索で「Ruby 開発者」を検索するのが良いと思います。 Action: google_search Action Input: Ruby 開発者 Observation: まつもと ゆきひろ(本名:松本 行弘(読み同じ)、1965年(昭和40年)4月14日 - )は、日本のソフトウェア技術 者。株式会社ネットワーク応用通信研究所フェロー、楽天 ... Sep 26, 2019 ... その数少ない人物のひとりが、日本にいま す。プログラミング言語・Ruby(ルビー)の作者である、<略> Thought: 観察結果から、プログラミング言語 Rubyの開発者はまつもとゆきひろさんであることがわかりました。 Final Answer: プログラミング言語Rubyの開発者はまつもとゆきひろさんです。 > Finished chain. プログラミング言語Rubyの開発者はまつもとゆきひろさんです。 ReAct(Bedrock+tools)

Slide 12

Slide 12 text

🔗 注意事項

Slide 13

Slide 13 text

● 勢い余って破壊的な変更が入りがち ○ バージョン指定忘れずに ● 公式ドキュメントから過去バージョン引けない ○ 構成すぐ変わるからURL保存してても飛べなくなる ○ cloneして手元でbuildしたら見れます ○ コード直接読むのが一番早い ● 日本語はトークン数が膨れたり文脈も伝えづらい ○ 英語で伝えてPromptに `answer in Japanese.` を添える 🔗 注意事項(ハマったこと)

Slide 14

Slide 14 text

🔗 注意事項(ハマったこと) ● 新機能が普通にバグりがち ○ Bedrock組み込まれるも使えず ○ OSSだから皆でIssueあげよう‼ ● OpenAIやAWS使えるがLLM切り替えるだけではダメ ○ モデルによって最適なプロンプトが違う ○ ClaudeV2でハマった🙋 ○ 対応してないパラメータや指定方法が違うことが

Slide 15

Slide 15 text

🦜🔗 まとめ ● LLMとLangChainの組み合わせは最強です。 ● まずはLangChain公式ドキュメントをCheck! 今一番熱い分野の一番勢いのあるOSSを 皆さんも触ってみてください🔥

Slide 16

Slide 16 text

No content