float: """Multiplies two numbers together.""" return a * b multiply_tool = StructuredTool.from_function( func=multiply, name="multiply", description="Multiplies two numbers together.", args_schema=MultiplyInput, ) BaseTool subclass — for full control, async support, and complex logic: from langchain_core.tools import BaseTool class DatabaseQueryTool(BaseTool): name = "database_query" description = "Query the internal product database. Input should be a SQL WHERE clause." def _run(self, query: str) -> str: return db.execute(f"SELECT * FROM products WHERE {query}") async def _arun(self, query: str) -> str: return await db.async_execute(query)"> float: """Multiplies two numbers together.""" return a * b multiply_tool = StructuredTool.from_function( func=multiply, name="multiply", description="Multiplies two numbers together.", args_schema=MultiplyInput, ) BaseTool subclass — for full control, async support, and complex logic: from langchain_core.tools import BaseTool class DatabaseQueryTool(BaseTool): name = "database_query" description = "Query the internal product database. Input should be a SQL WHERE clause." def _run(self, query: str) -> str: return db.execute(f"SELECT * FROM products WHERE {query}") async def _arun(self, query: str) -> str: return await db.async_execute(query)" />

Prev Next

AI / LangGraph LangChain Interview questions

How do you create custom tools?

There are three ways to create custom tools in LangChain, in order of increasing complexity: the @tool decorator, StructuredTool.from_function(), and subclassing BaseTool.

@tool decorator — simplest approach for single-string input tools:

from langchain_core.tools import tool

@tool
def get_word_count(text: str) -> int:
    """Counts the number of words in the provided text. Use when asked about word count."""
    return len(text.split())

# Tool name: 'get_word_count', description from docstring
print(get_word_count.invoke("Hello world"))  # 2

StructuredTool.from_function() — for tools with multiple inputs:

from langchain_core.tools import StructuredTool
from pydantic import BaseModel

class MultiplyInput(BaseModel):
    a: float
    b: float

def multiply(a: float, b: float) -> float:
    """Multiplies two numbers together."""
    return a * b

multiply_tool = StructuredTool.from_function(
    func=multiply,
    name="multiply",
    description="Multiplies two numbers together.",
    args_schema=MultiplyInput,
)

BaseTool subclass — for full control, async support, and complex logic:

from langchain_core.tools import BaseTool

class DatabaseQueryTool(BaseTool):
    name = "database_query"
    description = "Query the internal product database. Input should be a SQL WHERE clause."

    def _run(self, query: str) -> str:
        return db.execute(f"SELECT * FROM products WHERE {query}")

    async def _arun(self, query: str) -> str:
        return await db.async_execute(query)
Where does the @tool decorator get the tool's description from?
When should you use BaseTool subclassing instead of the @tool decorator?

Invest now in Acorns!!! 🚀 Join Acorns and get your $5 bonus!

Invest now in Acorns!!! 🚀
Join Acorns and get your $5 bonus!

Earn passively and while sleeping

Acorns is a micro-investing app that automatically invests your "spare change" from daily purchases into diversified, expert-built portfolios of ETFs. It is designed for beginners, allowing you to start investing with as little as $5. The service automates saving and investing. Disclosure: I may receive a referral bonus.

Invest now!!! Get Free equity stock (US, UK only)!

Use Robinhood app to invest in stocks. It is safe and secure. Use the Referral link to claim your free stock when you sign up!.

The Robinhood app makes it easy to trade stocks, crypto and more.


Webull! Receive free stock by signing up using the link: Webull signup.

More Related questions...

What is LangChain? What is LCEL (LangChain Expression Language)? What are the key components of LangChain? How does LangChain differ from traditional LLM integration? What are LangChain Runnables? How do you install and set up LangChain? How do you use ChatModels in LangChain? What are PromptTemplates in LangChain? What are output parsers in LangChain? What is the LangSmith platform? What is LangChain Hub? What is LangServe? How do callbacks work in LangChain? How do you implement streaming in LangChain? How does LangChain handle versioning? What are Chains in LangChain? What is the difference between sequential and parallel chains? How do you use the pipe operator in LCEL? What are RunnablePassthrough and RunnableLambda? What are common chain composition patterns? How do you implement a ConversationChain? How does routing work in LCEL? How do you handle errors in chains? What are chain fallbacks and retries? How do you do batch processing with LCEL? What are LangChain Agents? What are the different agent types in LangChain? How do you create custom agents? What is AgentExecutor? How do tools work in LangChain agents? How do you create custom tools? What are multi-action agents? How do agents plan and reason? How do you integrate memory with agents? How do you debug LangChain agents? What is LangGraph? What are the differences between LangGraph and LangChain Agents? What is StateGraph in LangGraph? How do nodes and edges work in LangGraph? How do you implement conditional edges in LangGraph? How does state management work in LangGraph? What is the difference between MessageGraph and StateGraph? How does checkpointing work in LangGraph? How do you implement human-in-the-loop with LangGraph? How do you build multi-agent systems with LangGraph? What are subgraphs in LangGraph? How do streaming and callbacks work in LangGraph? What are persistence patterns in LangGraph? How do you handle errors in LangGraph? How do you deploy LangGraph applications?
Show more question and Answers...

LangGraph LangChain Interview questions II

Comments & Discussions