[已弃用] 实验性 Anthropic 工具包装
警告
Anthropic API 官方支持工具调用,因此此解决方法不再需要。请使用 ChatAnthropic 并设置 langchain-anthropic>=0.1.15。
本笔记本展示了如何使用围绕Anthropic的实验性包装器,使其具备工具调用和结构化输出能力。它遵循Anthropic的指南此处。
包装器可从 langchain-anthropic 包中获取,还需要可选依赖项 defusedxml 来解析来自llm的XML输出。
注意:这是一个 beta 版功能,将被 Anthropic 的正式工具调用实现所取代,但在测试和实验期间它仍然非常有用。
%pip install -qU langchain-anthropic defusedxml
from langchain_anthropic.experimental import ChatAnthropicTools
API 参考:ChatAnthropicTools
工具绑定
ChatAnthropicTools 暴露了一个 bind_tools 方法,允许你将 Pydantic 模型或 BaseTools 传递给 llm。
from pydantic import BaseModel
class Person(BaseModel):
name: str
age: int
model = ChatAnthropicTools(model="claude-3-opus-20240229").bind_tools(tools=[Person])
model.invoke("I am a 27 year old named Erick")
AIMessage(content='', additional_kwargs={'tool_calls': [{'function': {'name': 'Person', 'arguments': '{"name": "Erick", "age": "27"}'}, 'type': 'function'}]})
结构化输出
ChatAnthropicTools 还实现了 with_structured_output 规范 以提取值。注意:这可能不如明确提供工具调用的模型那样稳定。
chain = ChatAnthropicTools(model="claude-3-opus-20240229").with_structured_output(
Person
)
chain.invoke("I am a 27 year old named Erick")
Person(name='Erick', age=27)