本地大模型编程实战(11)与外部工具交互(2)


在使用 LLM(大语言模型) 时,经常需要调用一些自定义的工具方法完成特定的任务,比如:执行一些特殊算法、查询天气预报、旅游线路等。
很多大模型都具备使用这些工具方法的能力,Langchain 也为这些调用提供了便利。

之前的文章介绍了 llama3.1 与工具方法交互的实际例子,不过可惜 langchaindeepseek 支持还不够,导致:

  • llm.bind_tools 根据用户问题生成的工具方法签名与 llama3.1 不同,在后续在调用工具方法时报错
  • deepseek 返回的结果中包含了思考过程内容,显然 Langchain 还不能正确解析出最终结果,这会导致 langchain 的很多方法不能正常运行

这次我们将尝试通过以下两种方法解决 Langchain 使用 deepseek 时产生的上述问题:

  • 使用提示词让大模型推理调用工具的方法名称和参数
  • 使用自定义的 JsonOutputParser 处理 deepseek 返回的信息

这里使用 llama3.1deepseek 等不同模型做对比,并不是为了说明孰优孰劣,而是仅仅为了技术演示需要。

准备

在正式开始撸代码之前,需要准备一下编程环境。

  1. 计算机
    本文涉及的所有代码可以在没有显存的环境中执行。 我使用的机器配置为:

    • CPU: Intel i5-8400 2.80GHz
    • 内存: 16GB
  2. Visual Studio Code 和 venv
    这是很受欢迎的开发工具,相关文章的代码可以在 Visual Studio Code 中开发和调试。 我们用 pythonvenv 创建虚拟环境, 详见:
    在Visual Studio Code中配置venv

  3. Ollama
    Ollama 平台上部署本地大模型非常方便,基于此平台,我们可以让 langchain 使用 llama3.1qwen2.5 等各种本地大模型。详见:
    在langchian中使用本地部署的llama3.1大模型

定义工具方法

下面定义了两个简单的工具方法:计算加法和乘法:

def create_tools():
    """创建tools"""
    @tool
    def add(x: int, y: int) -> int:
        """计算a和b的和。"""
        print (f"add is called...{
     x}+{
     y}")
        return x + y

    @tool
    def multiply(x: int, y: int) -> int:
        """计算a和b的乘积。"""
        print (f"multiply is called...{
     x}*{
     y}")
        return x * y
    
    tools = [add, multiply]

    for t in tools:
        print("--")
        print(t.name)
        print(t.description
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值