{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/llms-in-the-imaginarium-tool-learning-through","title":"LLMs in the Imaginarium: Tool Learning through Simulated Trial and Error","arxiv_id":"2403.04746","date":"2024-03-07","proceeding":null,"authors":["Boshi Wang","Hao Fang","Jason Eisner","Benjamin Van Durme","Yu Su"],"abstract":"Tools are essential for large language models (LLMs) to acquire up-to-date information and take consequential actions in external environments. Existing work on tool-augmented LLMs primarily focuses on the broad coverage of tools and the flexibility of adding new tools. However, a critical aspect that has surprisingly been understudied is simply how accurately an LLM uses tools for which it has been trained. We find that existing LLMs, including GPT-4 and open-source LLMs specifically fine-tuned for tool use, only reach a correctness rate in the range of 30% to 60%, far from reliable use in practice. We propose a biologically inspired method for tool-augmented LLMs, simulated trial and error (STE), that orchestrates three key mechanisms for successful tool use behaviors in the biological system: trial and error, imagination, and memory. Specifically, STE leverages an LLM's 'imagination' to simulate plausible scenarios for using a tool, after which the LLM interacts with the tool to learn from its execution feedback. Both short-term and long-term memory are employed to improve the depth and breadth of the exploration, respectively. Comprehensive experiments on ToolBench show that STE substantially improves tool learning for LLMs under both in-context learning and fine-tuning settings, bringing a boost of 46.7% to Mistral-Instruct-7B and enabling it to outperform GPT-4. We also show effective continual learning of tools via a simple experience replay strategy.","url_abs":"https://arxiv.org/abs/2403.04746v1","url_pdf":"https://arxiv.org/pdf/2403.04746v1.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"llms-in-the-imaginarium-tool-learning-through","repo_url":"https://github.com/microsoft/simulated-trial-and-error","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"continual-learning","task_name":"Continual Learning"},{"task_slug":"in-context-learning","task_name":"In-Context Learning"}],"methods":[{"method_slug":"absolute-position-encodings","method_name":"Absolute Position Encodings"},{"method_slug":"adam","method_name":"Adam"},{"method_slug":"attention","method_name":"Attention"},{"method_slug":"bpe","method_name":"BPE"},{"method_slug":"dense-connections","method_name":"Dense Connections"},{"method_slug":"dropout","method_name":"Dropout"},{"method_slug":"experience-replay","method_name":"Experience Replay"},{"method_slug":"gpt-4","method_name":"GPT-4"},{"method_slug":"label-smoothing","method_name":"Label Smoothing"},{"method_slug":"layer-normalization","method_name":"Layer Normalization"},{"method_slug":"linear-layer","method_name":"Linear Layer"},{"method_slug":"multi-head-attention","method_name":"Multi-Head Attention"},{"method_slug":"position-wise-feed-forward-layer","method_name":"Position-Wise Feed-Forward Layer"},{"method_slug":"residual-connection","method_name":"Residual Connection"},{"method_slug":"softmax","method_name":"Softmax"},{"method_slug":"transformer","method_name":"Transformer"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2403.04746","atlas_url":"https://app.syntology.ai/?focus=2403.04746","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2403.04746"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/microsoft/simulated-trial-and-error","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran":6,"unverified":7},"by_repo_kind":{"official":{"samples":13,"ran":6,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"d905a14ca2a7fd88","entry":"find_reverse","repo":"microsoft/simulated-trial-and-error","repo_kind":"official","path":"STE/utils.py","file_url":"https://github.com/microsoft/simulated-trial-and-error/blob/HEAD/STE/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"d905a14ca2a7fd88"}},{"code_sha256_prefix":"42840b65b58c1a33","entry":"format_tokens_split","repo":"microsoft/simulated-trial-and-error","repo_kind":"official","path":"llama-recipes/ft_datasets/tool_dataset.py","file_url":"https://github.com/microsoft/simulated-trial-and-error/blob/HEAD/llama-recipes/ft_datasets/tool_dataset.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"42840b65b58c1a33"}},{"code_sha256_prefix":"86440eb9f495e01b","entry":"load_model","repo":"microsoft/simulated-trial-and-error","repo_kind":"official","path":"llama-recipes/inference/model_utils.py","file_url":"https://github.com/microsoft/simulated-trial-and-error/blob/HEAD/llama-recipes/inference/model_utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"86440eb9f495e01b"}},{"code_sha256_prefix":"6d5ba8546b6aad2c","entry":"load_peft_model","repo":"microsoft/simulated-trial-and-error","repo_kind":"official","path":"llama-recipes/inference/model_utils.py","file_url":"https://github.com/microsoft/simulated-trial-and-error/blob/HEAD/llama-recipes/inference/model_utils.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6d5ba8546b6aad2c"}},{"code_sha256_prefix":"35aa73ace7771e74","entry":"random_choose","repo":"microsoft/simulated-trial-and-error","repo_kind":"official","path":"STE/utils.py","file_url":"https://github.com/microsoft/simulated-trial-and-error/blob/HEAD/STE/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"35aa73ace7771e74"}},{"code_sha256_prefix":"ddfcf16bfe34d155","entry":"strip_end","repo":"microsoft/simulated-trial-and-error","repo_kind":"official","path":"STE/utils.py","file_url":"https://github.com/microsoft/simulated-trial-and-error/blob/HEAD/STE/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"ddfcf16bfe34d155"}},{"code_sha256_prefix":"8e1faaeb38a03d1c","entry":"chat_my","repo":"microsoft/simulated-trial-and-error","repo_kind":"official","path":"STE/my_llm.py","file_url":"https://github.com/microsoft/simulated-trial-and-error/blob/HEAD/STE/my_llm.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"8e1faaeb38a03d1c"}},{"code_sha256_prefix":"0a6c3afab42d36ec","entry":"format_tokens","repo":"microsoft/simulated-trial-and-error","repo_kind":"official","path":"llama-recipes/ft_datasets/tool_dataset.py","file_url":"https://github.com/microsoft/simulated-trial-and-error/blob/HEAD/llama-recipes/ft_datasets/tool_dataset.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"0a6c3afab42d36ec"}},{"code_sha256_prefix":"9c0d0d1ea3a973f6","entry":"format_tokens_single","repo":"microsoft/simulated-trial-and-error","repo_kind":"official","path":"llama-recipes/ft_datasets/tool_dataset.py","file_url":"https://github.com/microsoft/simulated-trial-and-error/blob/HEAD/llama-recipes/ft_datasets/tool_dataset.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"9c0d0d1ea3a973f6"}},{"code_sha256_prefix":"8808b039130caf65","entry":"get_chat_completion_my","repo":"microsoft/simulated-trial-and-error","repo_kind":"official","path":"STE/my_llm.py","file_url":"https://github.com/microsoft/simulated-trial-and-error/blob/HEAD/STE/my_llm.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"8808b039130caf65"}},{"code_sha256_prefix":"994fab6bf2f22a99","entry":"load_llama_from_config","repo":"microsoft/simulated-trial-and-error","repo_kind":"official","path":"llama-recipes/inference/model_utils.py","file_url":"https://github.com/microsoft/simulated-trial-and-error/blob/HEAD/llama-recipes/inference/model_utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"994fab6bf2f22a99"}},{"code_sha256_prefix":"92809d0bd14c1523","entry":"prepare_tool_data","repo":"microsoft/simulated-trial-and-error","repo_kind":"official","path":"llama-recipes/data_proc_format.py","file_url":"https://github.com/microsoft/simulated-trial-and-error/blob/HEAD/llama-recipes/data_proc_format.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"92809d0bd14c1523"}},{"code_sha256_prefix":"b530360e413bc3fd","entry":"unwrap_model","repo":"microsoft/simulated-trial-and-error","repo_kind":"official","path":"llama-recipes/model_checkpointing/checkpoint_handler.py","file_url":"https://github.com/microsoft/simulated-trial-and-error/blob/HEAD/llama-recipes/model_checkpointing/checkpoint_handler.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b530360e413bc3fd"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}