deepseek调用本地方法----本地方法该怎么执行
另一点,AI返回值是有一定随机性的,这时候要么严格规定AI(提示词),要么就微调AI参数(需要一定的数据和资源)。建议通过加提示词的方式来规定AI(或者多试几次),至于微调AI,如果各位有需求的话,可以私信我,出一期AI微调教程。接下来我们给AI一点提示词:告诉AI只能在我们提供的字典中选择函数,不要自己乱写,没有就告诉我们没有对应的方法。首先我们先明白一点,AI没有执行代码的能力,所以他只能告诉
上次讲了deekseep的本地部署和deekseek如何帮助我们选择调用哪个方法,
本次讲解deekseep帮助我们选择好函数以后,函数该如何执行。
首先我们先明白一点,AI没有执行代码的能力,所以他只能告诉我们该执行哪个函数,但是函数的执行还是由我们来控制。所以我们要有一套控制函数执行的逻辑。
接下来就开始吧。
这里我用的是我上次提到的装饰器,将函数信息都放到一个字典里:
name:函数名称(作为字典的key),des:功能介绍,args_schema:参数列表
# 工具字典{ 函数名 :函数对象 }
tools = {}
def tool(name: str, des: str, args_schema: dict):
def decorator(func):
tools[name] = {
"func": func,
"des": des,
"args_schema": args_schema
}
return func
return decorator
函数:这里有两个简单的函数:
@tool(
name="get_weather",
des="获取指定城市天气",
args_schema={
"location": {"type": "string", "des": "城市"}
}
)
def get_weather(location: str) -> str:
return f"{location}天气:晴,10℃,这是本地方法,不是瞎胡闹的"
@tool(
name="calculator",
des="计算器",
args_schema={
"exp": {"type": "string", "des": "数学表达式"}
}
)
def claculator(exp: str) -> float:
return eval(exp)
先简单输出一下tools的信息:

可以看到函数信息已经被写到字典里面了。
接下来我们给AI一点提示词:告诉AI只能在我们提供的字典中选择函数,不要自己乱写,没有就告诉我们没有对应的方法。(这点很重要,因为deepseek有推导能力,不这么说他会自己写一个莫须有的函数返回给你)。并给出返回格式(一般都用json)。

限定AI以json格式返回:配置一下即可
completion = client.chat.completions.create(
model="deepseek-r1:1.5b",
messages=messages,
max_tokens=1024,
temperature=0.7,
response_format={
'type': 'json_object' #以json格式返回
}
)
ai_res = completion.choices[0].message.content
print(ai_res)
看看AI给我们返回了什么:

很好,AI已经给我们返回了需要调用的函数名,以及参数列表。
接下来就是执行了。
我们要对AI返回的json解析并执行对应的函数
def exe_tool(ai_res: str) -> str:
try:
action = json.loads(ai_res)
tool_name = action["func"]#拿到函数名
args = action["args"]#用户要传给函数的参数,这是AI推理出来的
if isinstance(args, str): #这里是因为我在执行的时候发现AI返回的json中,有时候会返回字符串,有时会返回字典
args = eval(action["args"])
if tool_name not in tools:
return f"错误:工具{tool_name}不存在"
tool = tools[tool_name]
return tool["func"](**args)
except Exception as e:
return str(e)
接下来我们在执行一下,看看结果如何

很明显这是我的本地方法,这样就实现了我提需求,AI执行的全部过程。
以上就是利用AI执行对应的本地方法的过程。需要注意的是,根据官方文档所说,以json返回有时候会返回空字符串,暂时还没解决。另一点,AI返回值是有一定随机性的,这时候要么严格规定AI(提示词),要么就微调AI参数(需要一定的数据和资源)。建议通过加提示词的方式来规定AI(或者多试几次),至于微调AI,如果各位有需求的话,可以私信我,出一期AI微调教程。
更多推荐


所有评论(0)