某些模型能够进行工具方法调用:生成用户自定义的方法的签名并调用它。一般来说,此交互过程主要包含下面几个步骤:
LLM(大语言模型)
根据用户的问题推理生成调用工具方法的名称和参数- 调用工具,返回简单的结果
- 再次调用
LLM
,生成自然流畅的回答
下面我们来说明这一过程。
应该是因为
langchian
对deepseek
的支持还完善,使用deepseek-r1
无法生成工具方法签名,使用MFDoom/deepseek-r1-tool-calling:7b
可以生成工具方法签名,但是在调用工具方法时不成功。
所以本文仅使用llama3.1
。
准备
在正式开始撸代码之前,需要准备一下编程环境。
-
计算机
本文涉及的所有代码可以在没有显存的环境中执行。 我使用的机器配置为:- CPU: Intel i5-8400 2.80GHz
- 内存: 16GB
-
Visual Studio Code 和 venv
这是很受欢迎的开发工具,相关文章的代码可以在Visual Studio Code
中开发和调试。 我们用python
的venv
创建虚拟环境, 详见:
在Visual Studio Code中配置venv。 -
Ollama
在Ollama
平台上部署本地大模型非常方便,基于此平台,我们可以让langchain
使用llama3.1
、qwen2.5
等各种本地大模型。详见:
在langchian中使用本地部署的llama3.1大模型 。
定义工具方法
下面我们定义两个简单的工具方法,它可以做加法和乘法运算。
@tool
def add(a: int, b: int) -> int:
"""计算a和b的和。"""
print (f"add is called...{
a}+{
b}")
return a + b
@tool
def multiply(a: int, b: int) -> int:
"""计算a和b的乘积。"""
print (f"multiply is called...{
a}*{
b}")
return a * b
tools = [add