How to create custom tool in LangChain
Quick answer
To create a custom tool in
LangChain, subclass BaseTool and implement the _run method for synchronous logic or _arun for async. Register your tool with a name and description, then use it in chains or agents for AI workflows.PREREQUISITES
Python 3.8+pip install langchain>=0.2OpenAI API key or other AI API key in environment variables
Setup
Install langchain via pip and set your API key as an environment variable. This example assumes you have an OpenAI API key.
pip install langchain openai Step by step
Create a custom tool by subclassing BaseTool and implementing the _run method. Then instantiate and use it in a LangChain agent or chain.
import os
from langchain.tools import BaseTool
from langchain.chains import LLMChain
from langchain_openai import ChatOpenAI
class ReverseTextTool(BaseTool):
name = "reverse_text"
description = "Reverses the input text string."
def _run(self, query: str) -> str:
return query[::-1]
async def _arun(self, query: str) -> str:
# Async version if needed
return query[::-1]
# Example usage
if __name__ == "__main__":
tool = ReverseTextTool()
input_text = "Hello LangChain"
output = tool.run(input_text)
print(f"Input: {input_text}")
print(f"Output: {output}") output
Input: Hello LangChain Output: niaChgnaL olleH
Common variations
- Use
_arunfor async tool implementations. - Integrate with different LLMs by importing from
langchain_openaior other providers. - Combine multiple tools in an agent for complex workflows.
from langchain_openai import ChatOpenAI
from langchain.agents import initialize_agent, Tool
# Wrap custom tool for agent
reverse_tool = Tool(
name="reverse_text",
func=ReverseTextTool().run,
description="Reverses input text"
)
llm = ChatOpenAI(model_name="gpt-4o", temperature=0)
agent = initialize_agent([reverse_tool], llm, agent="zero-shot-react-description", verbose=True)
response = agent.run("Reverse the phrase: LangChain is powerful")
print(response) output
lufrewop si niahCgnaL
Troubleshooting
- If you see
AttributeErroron_run, ensure your tool class inherits fromBaseTooland implements_run. - For environment variable issues, confirm
OPENAI_API_KEYis set correctly. - Use
verbose=Truein agents to debug tool calls and outputs.
Key Takeaways
- Subclass
BaseTooland implement_runto create custom LangChain tools. - Use your custom tool in LangChain agents by wrapping it with
Tooland initializing an agent. - Implement async logic with
_arunfor asynchronous workflows. - Set API keys in environment variables and install
langchainand provider SDKs before use. - Enable
verbose=Truein agents to troubleshoot tool integration issues.