langchain ChatAnthropic - 发现元数据被提供了两次

yacmzcpb  于 6个月前  发布在  其他
关注(0)|答案(2)|浏览(53)

检查其他资源

  • 为这个问题添加了一个非常描述性的标题。
  • 使用集成搜索在LangChain文档中进行了搜索。
  • 使用GitHub搜索找到了一个类似的问题,但没有找到。
  • 我确信这是LangChain中的一个bug,而不是我的代码。
  • 通过更新到LangChain的最新稳定版本(或特定集成包)无法解决此bug。

示例代码

import os

from langchain_anthropic import ChatAnthropic
from langchain_core.runnables import ConfigurableField, RunnableConfig
from pydantic.v1 import SecretStr

client = ChatAnthropic(
    base_url=os.environ['CHAT_ANTHROPIC_BASE_URL'],
    api_key=SecretStr(os.environ['CHAT_ANTHROPIC_API_KEY']),
    model_name='claude-3-opus-20240229',
).configurable_fields(
    model_kwargs=ConfigurableField(
        id="model_kwargs",
        name="Model Kwargs",
        description="Keyword arguments to pass through to the chat client (e.g. user)",
    ),
)

configurable = {
    "model_kwargs": {"metadata": {"user_id": "testuserid"}}
}

response = client.invoke("Write me a short story", config=RunnableConfig(configurable=configurable))

print(response)

错误信息和堆栈跟踪(如果适用)

异常:ValidatorError

Traceback (most recent call last):
  File "main.py", line 32, in <module>
    response = client.invoke("Write me a short story", config=RunnableConfig(configurable=configurable))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/.venv/lib/python3.12/site-packages/langchain_core/runnables/configurable.py", line 115, in invoke
    runnable, config = self.prepare(config)
                       ^^^^^^^^^^^^^^^^^^^^
  File "/.venv/lib/python3.12/site-packages/langchain_core/runnables/configurable.py", line 104, in prepare
    runnable, config = runnable._prepare(merge_configs(runnable.config, config))
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/.venv/lib/python3.12/site-packages/langchain_core/runnables/configurable.py", line 415, in _prepare
    self.default.__class__(**{**init_params, **configurable}),
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/.venv/lib/python3.12/site-packages/pydantic/v1/main.py", line 341, in __init__
    raise validation_error
pydantic.v1.error_wrappers.ValidationError: 1 validation error for ChatAnthropic
__root__
  Found metadata supplied twice. (type=value_error)

描述

  • 我正在尝试设置一个可重用的聊天模型,在其中每次调用时都可以传入一个用户
  • Anthropic通过在messages.create(...)调用上的metadata对象来实现这一点,如此处所述
  • 由于它是create()调用的额外参数,我认为我应该能够通过model_kwargs传递它
  • 但似乎与某物冲突(我猜是BaseLanguageModelmetadata字段)

有没有办法绕过这个问题,以便可以将metadata关键字参数传递给create()调用,就像预期的那样?从表面上看,由于它位于model_kwargs下面,它不应该与其他参数冲突。它们是否被展平了,如果是的话,为什么?

系统信息

系统信息

操作系统:Darwin
OS版本:Darwin Kernel Version 23.5.0: Wed May 1 20:14:38 PDT 2024; root:xnu-10063.121.3~5/RELEASE_ARM64_T6020
Python版本:3.12.3 (main, Jul 2 2024, 11:16:56) [Clang 15.0.0 (clang-1500.3.9.4)]

软件包信息

langchain_core: 0.2.13
langchain: 0.2.7
langchain_community: 0.2.7
langsmith: 0.1.85
langchain_anthropic: 0.1.19
langchain_openai: 0.1.15
langchain_text_splitters: 0.2.2

没有安装的软件包(不一定是一个问题)

以下软件包未找到:
langgraph
langserve

ttp71kqs

ttp71kqs1#

元数据应该直接传递,而不是通过model_kwargs。

import os

from langchain_anthropic import ChatAnthropic
from langchain_core.runnables import ConfigurableField, RunnableConfig

client = ChatAnthropic(
    model_name='claude-3-opus-20240229',
).configurable_fields(
    metadata=ConfigurableField(
        id="metadata",
        name="Metadata",
        description="metadata ",
    ),
)

configurable = {
    "metadata": {"user_id": "testuserid"}
}

response = client.invoke("Write me a short story", config=RunnableConfig(configurable=configurable))

print(response)

628mspwn

628mspwn2#

我尝试了你的建议@baskaryan,现在不再报错,但遗憾的是它也无法发送用户ID。以下是在请求中发送的参数:

{
  "model": "claude-3-opus-20240229",
  "messages": [
    {
      "role": "user",
      "content": "Write me a short story"
    }
  ],
  "max_tokens": 1024
}

相关问题