langchain自定义tool
时间: 2025-04-24 07:34:25 AIGC 浏览: 40
### 如何在LangChain中创建或修改自定义工具
#### 创建自定义工具
为了构建智能代理并赋予其实用功能,可以利用LangChain库提供的`Tool`特性来创建自定义工具。每个工具除了核心功能外,还需配备诸如名称、描述以及参数验证等功能[^2]。
下面是一个具体的例子,展示了如何基于特定需求设计一个发送HTTP POST请求的工具:
```python
import requests
from typing import Optional, Dict
from langchain.tools import StructuredTool
def post_message(url: str, body: Dict, parameters: Optional[Dict] = None) -> str:
"""
Sends a POST request to the specified URL with provided data.
:param url: Target endpoint of the HTTP POST request.
:param body: JSON serializable object that will be sent as payload.
:param parameters: Additional query string parameters (optional).
:return: Response status code along with response text.
"""
result = requests.post(url, json=body, params=parameters)
return f"Status: {result.status_code} - {result.text}"
# Convert function into structured tool automatically using LangChain's utility method
tool = StructuredTool.from_function(post_message)[^3]
```
这段代码首先导入必要的模块,并定义了一个名为`post_message`的函数用于发起POST请求;接着借助`StructuredTool.from_function()`方法快速将此函数转换成符合LangChain标准的工具实例。
#### 修改已有工具
对于已有的工具而言,如果想要对其进行调整,则可以通过继承`BaseTool`类来自定义新的行为逻辑。这允许开发者根据具体应用场景灵活改变原有工具的行为模式而不影响其他部分的工作流程。
例如,在不破坏现有接口的前提下增加额外的日志记录或其他辅助操作:
```python
from langchain.agents.agent_toolkits.base import BaseToolkit
from pydantic import BaseModel, Field
class EnhancedPostMessage(BaseModel):
base_url: str = Field(description="The base URL for all operations.")
class Config:
arbitrary_types_allowed = True
def enhanced_post(self, path: str, body: Dict, **kwargs) -> str:
full_url = self.base_url + path
try:
resp = requests.post(full_url, json=body, **kwargs)
log_event(f"Request made successfully at {full_url}")
return f"Enhanced Status: {resp.status_code}, Message: {resp.text}"
except Exception as e:
error_log(str(e))
raise
enhanced_toolkit = EnhancedPostMessage(base_url='https://example.com/api')
print(enhanced_toolkit.enhanced_post('/endpoint', {'key': 'value'}))[^5]
```
在这个增强版的例子中,通过引入一个新的模型类`EnhancedPostMessage`实现了对原始`post_message`函数更丰富的封装形式。这里不仅增加了URL路径拼接的支持,还在内部加入了异常处理机制和日志跟踪的能力。
阅读全文
相关推荐




















