課程網址: https://www.deeplearning.ai/short-courses/functions-tools-agents-langchain/ > 全都在介紹 Langchain 和 Pydantic 搭配 Function Calling 的專用語法而已 > 沒有講什麼 Function Calling 的 Pro Tips,只是在教 langchain 過度抽象的特異語法,失望 > 實在不喜歡 LCEL 語法,這門課就沒教 initialize_agent 方法了,而是用 LCEL 來做 ![[Pasted image 20231124142720.png]] ## OpenAI Function Calling ![[Pasted image 20231124142915.png]] 用 openai 套件,講解 OpenAI 的天氣範例,沒用到 langchain ## LangChain Express Language (LCEL) ![[Pasted image 20231124143802.png]] ![[Pasted image 20231124143812.png]] ![[Pasted image 20231124143925.png]] ![[Pasted image 20231124144851.png]] ![[Pasted image 20231124145603.png]] ![[Pasted image 20231124145619.png]] ![[Pasted image 20231124145932.png]] 用 Bind 幫 functions 綁上去 ![[Pasted image 20231124150007.png]] ![[Pasted image 20231124151321.png]] ![[Pasted image 20231124151514.png]] ![[Pasted image 20231124151558.png]] 支援 batch, stream, async invoke ## OpenAI Function Calling in LangChain ![[Pasted image 20231124152110.png]] ![[Pasted image 20231124152139.png]] ![[Pasted image 20231124152344.png]] ![[Pasted image 20231124152411.png]] ![[Pasted image 20231124152612.png]] ![[Pasted image 20231124152629.png]] ![[Pasted image 20231124153048.png]] ![[Pasted image 20231124153108.png]] ![[Pasted image 20231124153127.png]] ## Tagging and Extraction ![[Pasted image 20231124185231.png]] ![[Pasted image 20231124191036.png]] ![[Pasted image 20231124191816.png]] "Think carefully, and then tag the text as instructed" ![[Pasted image 20231124191828.png]] ![[Pasted image 20231124200837.png]] "Extract the relevant information, if not explicitly provided do not guess. Extract partial info" ![[Pasted image 20231124201117.png]] ![[Pasted image 20231124201140.png]] ![[Pasted image 20231124201149.png]] """A article will be passed to you. Extract from it all papers that are mentioned by this article. Do not extract the name of the article itself. If no papers are mentioned that's fine - you don't need to extract any! Just return an empty list. Do not make up or guess ANY extra information. Only extract what exactly is in the text.""" 最後用了 chunking 跟 map reduce 來處理整份文件 >prep = RunnableLambda(lambda x: [{"input": doc} for doc in text_splitter.split_text(x)] ) chain = prep | extraction_chain.map() | flatten 這種 LCEL 語法實在太 🤢 了... 不喜歡 > 另外,這種一定需要呼叫某一個且唯一的 function 的場景,我覺得用 JSON mode 就好啦。應該還比較省 token! > 這課程是在 OpenAI JSON mode 之前的 ## Tools and Routing ![[Pasted image 20231124211041.png]] ![[Pasted image 20231124212740.png]] ![[Pasted image 20231124215428.png]] ![[Pasted image 20231124221938.png]] 從 OpenAPI 轉成 langchain 的工具格式 ![[Pasted image 20231124222311.png]] ![[Pasted image 20231124222259.png]] ![[Pasted image 20231124222311.png]] ![[Pasted image 20231124222642.png]] ![[Pasted image 20231124222659.png]] ## Conversational Agent ![[Pasted image 20231124223010.png]] ![[Pasted image 20231124223242.png]] ![[Pasted image 20231124223703.png]] 這個 agent_scratchpad 作用就是塞 FunctionMessage ????? ![[Pasted image 20231124223804.png]] 搞這個 AgentFinish,就只是為了做 遞迴 function calling 呼叫..... 明明是很簡單的遞迴,搞這麽複雜...... ![[Pasted image 20231124224256.png]] ![[Pasted image 20231124223945.png]]