Initial commit
This commit is contained in:
158
skills/langgraph-master/04_tool_integration_overview.md
Normal file
158
skills/langgraph-master/04_tool_integration_overview.md
Normal file
@@ -0,0 +1,158 @@
|
||||
# 04. Tool Integration
|
||||
|
||||
Integration and execution control of external tools.
|
||||
|
||||
## Overview
|
||||
|
||||
In LangGraph, LLMs can interact with external systems by calling **tools**. Tools provide various capabilities such as search, calculation, API calls, and more.
|
||||
|
||||
## Key Components
|
||||
|
||||
### 1. [Tool Definition](04_tool_integration_tool_definition.md)
|
||||
|
||||
How to define tools:
|
||||
- `@tool` decorator
|
||||
- Function descriptions and parameters
|
||||
- Structured output
|
||||
|
||||
### 2. [Tool Node](04_tool_integration_tool_node.md)
|
||||
|
||||
Nodes that execute tools:
|
||||
- Using `ToolNode`
|
||||
- Error handling
|
||||
- Custom tool nodes
|
||||
|
||||
### 3. [Command API](04_tool_integration_command_api.md)
|
||||
|
||||
Controlling tool execution:
|
||||
- Integration of state updates and control flow
|
||||
- Transition control from tools
|
||||
|
||||
## Basic Implementation
|
||||
|
||||
```python
|
||||
from langchain_core.tools import tool
|
||||
from langgraph.prebuilt import ToolNode
|
||||
from langgraph.graph import MessagesState, StateGraph
|
||||
|
||||
# 1. Define tools
|
||||
@tool
|
||||
def search(query: str) -> str:
|
||||
"""Perform a web search.
|
||||
|
||||
Args:
|
||||
query: Search query
|
||||
"""
|
||||
return perform_search(query)
|
||||
|
||||
@tool
|
||||
def calculator(expression: str) -> float:
|
||||
"""Calculate a mathematical expression.
|
||||
|
||||
Args:
|
||||
expression: Expression to calculate (e.g., "2 + 2")
|
||||
"""
|
||||
return eval(expression)
|
||||
|
||||
tools = [search, calculator]
|
||||
|
||||
# 2. Bind tools to LLM
|
||||
llm_with_tools = llm.bind_tools(tools)
|
||||
|
||||
# 3. Agent node
|
||||
def agent(state: MessagesState):
|
||||
response = llm_with_tools.invoke(state["messages"])
|
||||
return {"messages": [response]}
|
||||
|
||||
# 4. Tool node
|
||||
tool_node = ToolNode(tools)
|
||||
|
||||
# 5. Build graph
|
||||
builder = StateGraph(MessagesState)
|
||||
builder.add_node("agent", agent)
|
||||
builder.add_node("tools", tool_node)
|
||||
|
||||
# 6. Conditional edges
|
||||
def should_continue(state: MessagesState):
|
||||
last_message = state["messages"][-1]
|
||||
if last_message.tool_calls:
|
||||
return "tools"
|
||||
return END
|
||||
|
||||
builder.add_edge(START, "agent")
|
||||
builder.add_conditional_edges("agent", should_continue)
|
||||
builder.add_edge("tools", "agent")
|
||||
|
||||
graph = builder.compile()
|
||||
```
|
||||
|
||||
## Types of Tools
|
||||
|
||||
### Search Tools
|
||||
|
||||
```python
|
||||
@tool
|
||||
def web_search(query: str) -> str:
|
||||
"""Search the web"""
|
||||
return search_api(query)
|
||||
```
|
||||
|
||||
### Calculator Tools
|
||||
|
||||
```python
|
||||
@tool
|
||||
def calculator(expression: str) -> float:
|
||||
"""Calculate a mathematical expression"""
|
||||
return eval(expression)
|
||||
```
|
||||
|
||||
### API Tools
|
||||
|
||||
```python
|
||||
@tool
|
||||
def get_weather(city: str) -> dict:
|
||||
"""Get weather information"""
|
||||
return weather_api(city)
|
||||
```
|
||||
|
||||
### Database Tools
|
||||
|
||||
```python
|
||||
@tool
|
||||
def query_database(sql: str) -> list[dict]:
|
||||
"""Query the database"""
|
||||
return execute_sql(sql)
|
||||
```
|
||||
|
||||
## Tool Execution Flow
|
||||
|
||||
```
|
||||
User Query
|
||||
↓
|
||||
[Agent Node]
|
||||
↓
|
||||
LLM decides: Use tool?
|
||||
↓ Yes
|
||||
[Tool Node] ← Execute tool
|
||||
↓
|
||||
[Agent Node] ← Tool result
|
||||
↓
|
||||
LLM decides: Continue?
|
||||
↓ No
|
||||
Final Answer
|
||||
```
|
||||
|
||||
## Key Principles
|
||||
|
||||
1. **Clear Descriptions**: Write detailed docstrings for tools
|
||||
2. **Error Handling**: Handle tool execution errors appropriately
|
||||
3. **Type Safety**: Explicitly specify parameter types
|
||||
4. **Approval Flow**: Incorporate Human-in-the-Loop for critical tools
|
||||
|
||||
## Next Steps
|
||||
|
||||
For details on each component, please refer to the following pages:
|
||||
|
||||
- [04_tool_integration_tool_definition.md](04_tool_integration_tool_definition.md) - How to define tools
|
||||
- [04_tool_integration_tool_node.md](04_tool_integration_tool_node.md) - Tool node implementation
|
||||
- [04_tool_integration_command_api.md](04_tool_integration_command_api.md) - Using the Command API
|
||||
Reference in New Issue
Block a user