LangChain Tutorial (Python) #6: Self-Reasoning Agents with Tools