Вызов инструментов LangChain - Ошибка шаблона: неизвестный фильтр: строка фильтра неизвестнаPython

Программы на Python
Ответить
Anonymous
 Вызов инструментов LangChain - Ошибка шаблона: неизвестный фильтр: строка фильтра неизвестна

Сообщение Anonymous »

Я следую приведенному здесь руководству и пытаюсь создать очень простую функцию вызова инструмента. Я точно следовал коду, изменив только сам инструмент.

Код: Выделить всё

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. Это показано на распечатках ниже:

Код: Выделить всё

Messages:
[HumanMessage(content='pippify the number 102 and calculate 8 bryanify 3', additional_kwargs={}, response_metadata={}), AIMessage(content='', additional_kwargs={'tool_calls': [ChatCompletionOutputToolCall(function=ChatCompletionOutputFunctionDefinition(arguments={'number': 102}, name='pippify', description=None), id='0', type='function')]}, response_metadata={'token_usage': ChatCompletionOutputUsage(completion_tokens=19, prompt_tokens=277, total_tokens=296), 'model': '', 'finish_reason': 'stop'}, id='run-b00d61a6-0a4f-4b02-8cac-30663ae5e5e3-0', tool_calls=[{'name': 'pippify', 'args': {'number': 102}, 'id': '0', 'type': 'tool_call'}]), ToolMessage(content='102 102 102', name='pippify', tool_call_id='0')]

content='pippify the number 102' additional_kwargs={} response_metadata={}
type 

content='' additional_kwargs={'tool_calls': [ChatCompletionOutputToolCall(function=ChatCompletionOutputFunctionDefinition(arguments={'number': 102}, name='pippify', description=None), id='0', type='function')]} response_metadata={'token_usage': ChatCompletionOutputUsage(completion_tokens=19, prompt_tokens=277, total_tokens=296), 'model': '', 'finish_reason': 'stop'} id='run-f65ed238-9c6f-42f0-84f1-c7b521920f09-0' tool_calls=[{'name': 'pippify', 'args': {'number': 102}, 'id': '0', 'type': 'tool_call'}]
type 

content='102 102 102' name='pippify' tool_call_id='0'
type 
Похоже, это работает хорошо. Однако последний вызов llm_with_tools выдает следующую ошибку:

Код: Выделить всё

Template error: unknown filter: filter string is unknown (in :79)
Полное сообщение об ошибке:

Код: Выделить всё

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 находится в списке сообщений . Например:
  • Код: Выделить всё

    llm_with_tools.invoke(HumanMessage(content=query))
    работает
  • Код: Выделить всё

    llm_with_tools.invoke([HumanMessage(content=query)])
    работает
  • Код: Выделить всё

    llm_with_tools.invoke([HumanMessage(content=query), ai_msg])
    работает
  • Код: Выделить всё

    llm_with_tools.invoke(messages[-1])
    не работает, поскольку тип ввода должен быть 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 не может быть частью списка, но безрезультатно.
Может кто-нибудь мне помочь? Все ответы очень приветствуются

Подробнее здесь: https://stackoverflow.com/questions/793 ... -is-unknow
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»