Ich schreibe einen Agenten unter Verwendung der LangChain- und LangGraph-Bibliotheken. Ich möchte, dass mein Agent mit Dateien interagieren kann, aber nur innerhalb des lokalen Verzeichnisses. Deshalb schreibe ich eine Familie von Tools, die eigentlich Mitgliedsfunktionen einer Klasseninstanz zum Speichern des Speicherorts des lokalen Verzeichnisses sind (das später um Tracing-/Rollback-Funktionen erweitert werden kann). Die Struktur ist wie folgt:
file_interface = FileInterface()
agent = create_agent(
model=init_model(...),
state_schema=MyState,
tools=file_interface.get_tools(),
system_prompt="You are a helpful agent [...]",
checkpointer=InMemorySaver()
)
print(agent.invoke({"messages":[{"role":"human","content":"tell me the contents of file example.txt"}]},context=context))
Aber wenn ich den Agenten mit einer Abfrage aufrufe, die ihn auffordert, ein solches Tool zu verwenden, erhalte ich die Fehlermeldung:
TypeError: StructuredTool._run() got multiple values for argument 'self'
Ich hätte gerne eine Familie von Tools, die sich alle auf die Daten innerhalb eines Objekts beziehen. Wie soll dies erreicht werden?
Hier ist die vollständige Rückverfolgung eines Agentenanrufs mit Tool-Aufruf:
Traceback (most recent call last):
File "/home/ubuntu/dev/elster/.venv/bin/elster", line 10, in
sys.exit(main())
~~~~^^
File "/home/ubuntu/dev/elster/src/elster/main.py", line 49, in main
resp = agent.invoke(args.command,args.request)
File "/home/ubuntu/dev/elster/src/elster/agent.py", line 61, in invoke
return self.agent.invoke(
~~~~~~~~~~~~~~~~~^
{"messages":[{"role":"human","content":request}]},
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
config=CONFIG
^^^^^^^^^^^^^
)
^
File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langgraph/pregel/main.py", line 3094, in invoke
for chunk in self.stream(
~~~~~~~~~~~^
input,
^^^^^^
......
**kwargs,
^^^^^^^^^
):
^
File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langgraph/pregel/main.py", line 2679, in stream
for _ in runner.tick(
~~~~~~~~~~~^
[t for t in loop.tasks.values() if not t.writes],
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
......
schedule_task=loop.accept_push,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
):
^
File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langgraph/pregel/_runner.py", line 167, in tick
run_with_retry(
~~~~~~~~~~~~~~^
t,
^^
......
},
^^
)
^
File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langgraph/pregel/_retry.py", line 42, in run_with_retry
return task.proc.invoke(task.input, config)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langgraph/_internal/_runnable.py", line 656, in invoke
input = context.run(step.invoke, input, config, **kwargs)
File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langgraph/_internal/_runnable.py", line 400, in invoke
ret = self.func(*args, **kwargs)
File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langchain/tools/tool_node.py", line 702, in _func
outputs = list(executor.map(self._run_one, tool_calls, input_types, tool_runtimes))
File "/home/ubuntu/.local/share/uv/python/cpython-3.13.9-linux-x86_64-gnu/lib/python3.13/concurrent/futures/_base.py", line 619, in result_iterator
yield _result_or_cancel(fs.pop())
~~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/home/ubuntu/.local/share/uv/python/cpython-3.13.9-linux-x86_64-gnu/lib/python3.13/concurrent/futures/_base.py", line 317, in _result_or_cancel
return fut.result(timeout)
~~~~~~~~~~^^^^^^^^^
File "/home/ubuntu/.local/share/uv/python/cpython-3.13.9-linux-x86_64-gnu/lib/python3.13/concurrent/futures/_base.py", line 449, in result
return self.__get_result()
~~~~~~~~~~~~~~~~~^^
File "/home/ubuntu/.local/share/uv/python/cpython-3.13.9-linux-x86_64-gnu/lib/python3.13/concurrent/futures/_base.py", line 401, in __get_result
raise self._exception
File "/home/ubuntu/.local/share/uv/python/cpython-3.13.9-linux-x86_64-gnu/lib/python3.13/concurrent/futures/thread.py", line 59, in run
result = self.fn(*self.args, **self.kwargs)
File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langchain_core/runnables/config.py", line 546, in _wrapped_fn
return contexts.pop().run(fn, *args)
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langchain/tools/tool_node.py", line 911, in _run_one
return self._execute_tool_sync(tool_request, input_type, config)
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langchain/tools/tool_node.py", line 860, in _execute_tool_sync
content = _handle_tool_error(e, flag=self._handle_tool_errors)
File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langchain/tools/tool_node.py", line 389, in _handle_tool_error
content = flag(e) # type: ignore [assignment, call-arg]
File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langchain/tools/tool_node.py", line 352, in _default_handle_tool_errors
raise e
File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langchain/tools/tool_node.py", line 815, in _execute_tool_sync
response = tool.invoke(call_args, config)
File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langchain_core/tools/base.py", line 591, in invoke
return self.run(tool_input, **kwargs)
~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langchain_core/tools/base.py", line 856, in run
raise error_to_raise
File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langchain_core/tools/base.py", line 825, in run
response = context.run(self._run, *tool_args, **tool_kwargs)
TypeError: StructuredTool._run() got multiple values for argument 'self'
During task with name 'tools' and id 'da9f60b1-3238-488d-27f9-b25e894f60b0'
Ich schreibe einen Agenten unter Verwendung der LangChain- und LangGraph-Bibliotheken. Ich möchte, dass mein Agent mit Dateien interagieren kann, aber nur innerhalb des lokalen Verzeichnisses. Deshalb schreibe ich eine Familie von Tools, die eigentlich Mitgliedsfunktionen einer Klasseninstanz zum Speichern des Speicherorts des lokalen Verzeichnisses sind (das später um Tracing-/Rollback-Funktionen erweitert werden kann). Die Struktur ist wie folgt: [code]class FileInterface: def __init__(self): self.localdir = Path.cwd() # memorize local directory
def get_tools(self): return [self.read_file,...]
@tool def read_file(self, path:str) -> str: """tool for reading file at path""" if ... path is inside self.localdir ...: return path.read() [/code] usw. Ich übergebe die Liste dann an eine langchain.agents.create_agent-Funktion, um die Fähigkeiten dieses einfachen Agenten zu testen: [code]file_interface = FileInterface() agent = create_agent( model=init_model(...), state_schema=MyState, tools=file_interface.get_tools(), system_prompt="You are a helpful agent [...]", checkpointer=InMemorySaver() )
print(agent.invoke({"messages":[{"role":"human","content":"tell me the contents of file example.txt"}]},context=context)) [/code] Aber wenn ich den Agenten mit einer Abfrage aufrufe, die ihn auffordert, ein solches Tool zu verwenden, erhalte ich die Fehlermeldung: [code]TypeError: StructuredTool._run() got multiple values for argument 'self' [/code] Ich hätte gerne eine Familie von Tools, die sich alle auf die Daten innerhalb eines Objekts beziehen. Wie soll dies erreicht werden? Hier ist die vollständige Rückverfolgung eines Agentenanrufs mit Tool-Aufruf: [code]Traceback (most recent call last): File "/home/ubuntu/dev/elster/.venv/bin/elster", line 10, in sys.exit(main()) ~~~~^^ File "/home/ubuntu/dev/elster/src/elster/main.py", line 49, in main resp = agent.invoke(args.command,args.request) File "/home/ubuntu/dev/elster/src/elster/agent.py", line 61, in invoke return self.agent.invoke( ~~~~~~~~~~~~~~~~~^ {"messages":[{"role":"human","content":request}]}, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ config=CONFIG ^^^^^^^^^^^^^ ) ^ File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langgraph/pregel/main.py", line 3094, in invoke for chunk in self.stream( ~~~~~~~~~~~^ input, ^^^^^^ ...... **kwargs, ^^^^^^^^^ ): ^ File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langgraph/pregel/main.py", line 2679, in stream for _ in runner.tick( ~~~~~~~~~~~^ [t for t in loop.tasks.values() if not t.writes], ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...... schedule_task=loop.accept_push, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ): ^ File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langgraph/pregel/_runner.py", line 167, in tick run_with_retry( ~~~~~~~~~~~~~~^ t, ^^ ...... }, ^^ ) ^ File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langgraph/pregel/_retry.py", line 42, in run_with_retry return task.proc.invoke(task.input, config) ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^ File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langgraph/_internal/_runnable.py", line 656, in invoke input = context.run(step.invoke, input, config, **kwargs) File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langgraph/_internal/_runnable.py", line 400, in invoke ret = self.func(*args, **kwargs) File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langchain/tools/tool_node.py", line 702, in _func outputs = list(executor.map(self._run_one, tool_calls, input_types, tool_runtimes)) File "/home/ubuntu/.local/share/uv/python/cpython-3.13.9-linux-x86_64-gnu/lib/python3.13/concurrent/futures/_base.py", line 619, in result_iterator yield _result_or_cancel(fs.pop()) ~~~~~~~~~~~~~~~~~^^^^^^^^^^ File "/home/ubuntu/.local/share/uv/python/cpython-3.13.9-linux-x86_64-gnu/lib/python3.13/concurrent/futures/_base.py", line 317, in _result_or_cancel return fut.result(timeout) ~~~~~~~~~~^^^^^^^^^ File "/home/ubuntu/.local/share/uv/python/cpython-3.13.9-linux-x86_64-gnu/lib/python3.13/concurrent/futures/_base.py", line 449, in result return self.__get_result() ~~~~~~~~~~~~~~~~~^^ File "/home/ubuntu/.local/share/uv/python/cpython-3.13.9-linux-x86_64-gnu/lib/python3.13/concurrent/futures/_base.py", line 401, in __get_result raise self._exception File "/home/ubuntu/.local/share/uv/python/cpython-3.13.9-linux-x86_64-gnu/lib/python3.13/concurrent/futures/thread.py", line 59, in run result = self.fn(*self.args, **self.kwargs) File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langchain_core/runnables/config.py", line 546, in _wrapped_fn return contexts.pop().run(fn, *args) ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^ File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langchain/tools/tool_node.py", line 911, in _run_one return self._execute_tool_sync(tool_request, input_type, config) ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langchain/tools/tool_node.py", line 860, in _execute_tool_sync content = _handle_tool_error(e, flag=self._handle_tool_errors) File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langchain/tools/tool_node.py", line 389, in _handle_tool_error content = flag(e) # type: ignore [assignment, call-arg] File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langchain/tools/tool_node.py", line 352, in _default_handle_tool_errors raise e File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langchain/tools/tool_node.py", line 815, in _execute_tool_sync response = tool.invoke(call_args, config) File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langchain_core/tools/base.py", line 591, in invoke return self.run(tool_input, **kwargs) ~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^ File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langchain_core/tools/base.py", line 856, in run raise error_to_raise File "/home/ubuntu/dev/elster/.venv/lib/python3.13/site-packages/langchain_core/tools/base.py", line 825, in run response = context.run(self._run, *tool_args, **tool_kwargs) TypeError: StructuredTool._run() got multiple values for argument 'self' During task with name 'tools' and id 'da9f60b1-3238-488d-27f9-b25e894f60b0' [/code]
Wenn der folgende Code mit -O3 und -fPIC kompiliert wird, kann der Compiler Foo::priv() nicht einbinden, da er über eine externe Verknüpfung verfügt. Im Gegensatz dazu kann Foo::priv2() inline sein,...
Ich führe eine Gitea -Instanz auf meinem Raspberry Pi 5 mit ARM -Prozessor aus. Ich habe mich mit ähnlichen Fragen befasst, in denen es heißt, -Channel = 3 , verwenden Sie Zitate, um Pakete zu...
Ich führe eine Gitea -Instanz auf meinem Raspberry Pi 5 mit ARM -Prozessor aus. Ich habe mich mit ähnlichen Fragen befasst, in denen es heißt, -Channel = 3 , verwenden Sie Zitate, um Pakete zu...
Ich bin neu im Codieren und versuche, das Lombok -Plugin zu verwenden, um Getters/Setzer usw. für meine Felder einer bestimmten Klasse automatisch zu erstellen. Dabei werde ich mit dem folgenden...