Я следую приведенному здесь руководству и пытаюсь создать очень простую функцию вызова инструмента. Я точно следовал коду, изменив только сам инструмент.
from langchain_huggingface import ChatHuggingFace, HuggingFaceEndpoint
from langchain_core.messages import HumanMessage, AIMessage
@tool
def duddify(first_number: int, second_number: int):
"""Concatenate two numbers twice."""
return int(f"{str(first_number)}{str(second_number)}{str(first_number)}{str(second_number)}")
@tool
def pippify(number: int):
"""Repeats the number three times."""
return f"{str(number)} {str(number)} {str(number)}"
llm = ChatHuggingFace(
llm=HuggingFaceEndpoint(
repo_id="mistralai/Mistral-7B-Instruct-v0.3",
task='text-generation'
),
verbose=True
)
llm_with_tools = llm.bind_tools([duddify, pippify])
query = "pippify the number 102"
messages = [HumanMessage(content=query)]
ai_msg = llm_with_tools.invoke(messages)
messages.append(ai_msg)
for tool_call in ai_msg.tool_calls:
selected_tool = {"duddify": duddify, "pippify": pippify}[tool_call["name"].lower()]
tool_msg = selected_tool.invoke(tool_call)
messages.append(tool_msg)
print(f"Messages:\n{messages}\n")
for message in messages:
print(f'{message}\ntype {type(message)}\n')
final_response = llm_with_tools.invoke(messages)
print(final_response)
После вызова инструмента в списке «сообщений» появляются три сообщения: HumanMessage (запрос), AIMessage (исходный вызов) и ToolMessage. Это показано на распечатках ниже:
Traceback (most recent call last):
File "C:\Users\path\.venv\Lib\site-packages\huggingface_hub\utils\_http.py", line 406, in hf_raise_for_status
response.raise_for_status()
File "C:\Users\path\.venv\Lib\site-packages\requests\models.py", line 1024, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 422 Client Error: Unprocessable Entity for url: https://api-inference.huggingface.co/models/mistralai/Mistral-7B-Instruct-v0.3/v1/chat/completions
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "c:\Users\path\testing_langchain_agents.py", line 57, in
print(f"\n{llm_with_tools.invoke([messages[-1]])}\n")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\path\.venv\Lib\site-packages\langchain_core\runnables\base.py", line 5354, in invoke
return self.bound.invoke(
^^^^^^^^^^^^^^^^^^
File "C:\Users\path\.venv\Lib\site-packages\langchain_core\language_models\chat_models.py", line 286, in invoke
self.generate_prompt(
File "C:\Users\path\.venv\Lib\site-packages\langchain_core\language_models\chat_models.py", line 786, in generate_prompt
return self.generate(prompt_messages, stop=stop, callbacks=callbacks, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\path\.venv\Lib\site-packages\langchain_core\language_models\chat_models.py", line 643, in generate
raise e
File "C:\Users\path\.venv\Lib\site-packages\langchain_core\language_models\chat_models.py", line 633, in generate
self._generate_with_cache(
File "C:\Users\path\.venv\Lib\site-packages\langchain_core\language_models\chat_models.py", line 851, in _generate_with_cache
result = self._generate(
^^^^^^^^^^^^^^^
File "C:\Users\path\.venv\Lib\site-packages\langchain_huggingface\chat_models\huggingface.py", line 370, in _generate
answer = self.llm.client.chat_completion(messages=message_dicts, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\path\.venv\Lib\site-packages\huggingface_hub\inference\_client.py", line 892, in chat_completion
data = self.post(model=model_url, json=payload, stream=stream)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\path\.venv\Lib\site-packages\huggingface_hub\inference\_client.py", line 306, in post
hf_raise_for_status(response)
File "C:\Users\path\.venv\Lib\site-packages\huggingface_hub\utils\_http.py", line 477, in hf_raise_for_status
raise _format(HfHubHTTPError, str(e), response) from e
huggingface_hub.errors.HfHubHTTPError: 422 Client Error: Unprocessable Entity for url: https://api-inference.huggingface.co/models/mistralai/Mistral-7B-Instruct-v0.3/v1/chat/completions (Request ID: z1qkv0HDiNWIwsBGxA-xp)
Template error: unknown filter: filter string is unknown (in :79)
Я искал по всему Интернету, но не нашел подобных проблем.
У меня есть:
удалил и переустановил langchain, langchain_huggingface и другие пакеты
создал venv с другими версиями Python и протестировал тот же код
исходная версия была 3.11
пробовал 3.12, произошла та же ошибка
пробовал 3.13, фонарик не может быть установлен
[*]пробовал вызов с разными сообщениями и обнаружил, что эта ошибка возникает только тогда, когда объект ToolMessage находится в списке сообщений . Например:
не работает, поскольку тип ввода должен быть PromptValue, str или списком BaseMessages, а не ToolMessage. Это понятно. Обратите внимание, что messages[-1] — это ToolMessage, добавленный в список сообщений последним.
llm_with_tools.invoke([messages[-1]]) не работает
llm_with_tools.invoke([messages[-1]]) не работает
llm_with_tools.invoke([messages[-1]]) Strong> и выдает эту ошибку. Таким образом, очевидно, что ошибка вызвана тем, что ToolMessage передается как часть списка в llm_with_tools.invoke().
[*] Это не проблема с моделью HuggingFace/учетными данными для входа, поскольку я могу легко вызвать модель с помощью строк и сообщений HumanMessages
HfHubHTTPError не дает никакой информации ; эта ошибка выдается из-за ошибок типа «etcetera».
Я также пробовал искать исходный код для ответа на вопрос, почему ToolMessage не может быть частью списка, но безрезультатно.
Может кто-нибудь мне помочь? Все ответы очень приветствуются
Я следую приведенному здесь руководству и пытаюсь создать очень простую функцию вызова инструмента. Я точно следовал коду, изменив только сам инструмент. [code]from langchain_huggingface import ChatHuggingFace, HuggingFaceEndpoint from langchain_core.messages import HumanMessage, AIMessage
content='102 102 102' name='pippify' tool_call_id='0' type [/code] Похоже, это работает хорошо. Однако последний вызов llm_with_tools выдает следующую ошибку: [code] Template error: unknown filter: filter string is unknown (in :79) [/code] Полное сообщение об ошибке: [code]Traceback (most recent call last): File "C:\Users\path\.venv\Lib\site-packages\huggingface_hub\utils\_http.py", line 406, in hf_raise_for_status response.raise_for_status() File "C:\Users\path\.venv\Lib\site-packages\requests\models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 422 Client Error: Unprocessable Entity for url: https://api-inference.huggingface.co/models/mistralai/Mistral-7B-Instruct-v0.3/v1/chat/completions
The above exception was the direct cause of the following exception:
Traceback (most recent call last): File "c:\Users\path\testing_langchain_agents.py", line 57, in print(f"\n{llm_with_tools.invoke([messages[-1]])}\n") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\path\.venv\Lib\site-packages\langchain_core\runnables\base.py", line 5354, in invoke return self.bound.invoke( ^^^^^^^^^^^^^^^^^^ File "C:\Users\path\.venv\Lib\site-packages\langchain_core\language_models\chat_models.py", line 286, in invoke self.generate_prompt( File "C:\Users\path\.venv\Lib\site-packages\langchain_core\language_models\chat_models.py", line 786, in generate_prompt return self.generate(prompt_messages, stop=stop, callbacks=callbacks, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\path\.venv\Lib\site-packages\langchain_core\language_models\chat_models.py", line 643, in generate raise e File "C:\Users\path\.venv\Lib\site-packages\langchain_core\language_models\chat_models.py", line 633, in generate self._generate_with_cache( File "C:\Users\path\.venv\Lib\site-packages\langchain_core\language_models\chat_models.py", line 851, in _generate_with_cache result = self._generate( ^^^^^^^^^^^^^^^ File "C:\Users\path\.venv\Lib\site-packages\langchain_huggingface\chat_models\huggingface.py", line 370, in _generate answer = self.llm.client.chat_completion(messages=message_dicts, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\path\.venv\Lib\site-packages\huggingface_hub\inference\_client.py", line 892, in chat_completion data = self.post(model=model_url, json=payload, stream=stream) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\path\.venv\Lib\site-packages\huggingface_hub\inference\_client.py", line 306, in post hf_raise_for_status(response) File "C:\Users\path\.venv\Lib\site-packages\huggingface_hub\utils\_http.py", line 477, in hf_raise_for_status raise _format(HfHubHTTPError, str(e), response) from e huggingface_hub.errors.HfHubHTTPError: 422 Client Error: Unprocessable Entity for url: https://api-inference.huggingface.co/models/mistralai/Mistral-7B-Instruct-v0.3/v1/chat/completions (Request ID: z1qkv0HDiNWIwsBGxA-xp)
Template error: unknown filter: filter string is unknown (in :79) [/code] Я искал по всему Интернету, но не нашел подобных проблем. У меня есть: [list] [*]удалил и переустановил langchain, langchain_huggingface и другие пакеты
[*]создал venv с другими версиями Python и протестировал тот же код
исходная версия была 3.11 [*]пробовал 3.12, произошла та же ошибка [*]пробовал 3.13, фонарик не может быть установлен [/list]
[*]пробовал вызов с разными сообщениями и обнаружил, что [b]эта ошибка возникает только тогда, когда объект ToolMessage находится в списке сообщений [/b]. Например: [list] [code]llm_with_tools.invoke(HumanMessage(content=query))[/code] работает [*][code]llm_with_tools.invoke([HumanMessage(content=query)])[/code] работает [*][code]llm_with_tools.invoke([HumanMessage(content=query), ai_msg])[/code] работает [*][code]llm_with_tools.invoke(messages[-1])[/code] не работает, поскольку тип ввода должен быть PromptValue, str или списком BaseMessages, а не ToolMessage. Это понятно. Обратите внимание, что messages[-1] — это ToolMessage, добавленный в список сообщений последним. [*]llm_with_tools.invoke([messages[-1]]) не работает [*]llm_with_tools.invoke([messages[-1]]) не работает [*]llm_with_tools.invoke([messages[-1]]) Strong> и выдает эту ошибку. Таким образом, очевидно, что ошибка вызвана тем, что ToolMessage передается как часть списка в llm_with_tools.invoke(). [/list]
[*] Это не проблема с моделью HuggingFace/учетными данными для входа, поскольку я могу легко вызвать модель с помощью строк и сообщений HumanMessages [list] HfHubHTTPError не дает никакой информации ; эта ошибка выдается из-за ошибок типа «etcetera». [/list]
Я также пробовал искать исходный код для ответа на вопрос, почему ToolMessage не может быть частью списка, но безрезультатно. Может кто-нибудь мне помочь? Все ответы очень приветствуются