import json
import ollama
def callModel(prompt):
response = ollama.chat(
model='qwen2.5:7b',
messages=[{'role': 'user', 'content': prompt}]
)
#print(response['message']['content'])
return response['message']['content']
def checkTools(query):
prompt = ("""你是一位可靠的个人助理,现在为你提供【工具集】,根据【用户问题】判断是否需要使用其中的工具,并按照【指定格式】输出,不允许输出任何其他字符。
【工具集】
[getTrainSchedule]
getTrainSchedule的作用是根据指定的日期、起点城市名称和终点城市名称,查询列车班次
【指定格式】
{"是否需要调用【工具集】中的工具":"是",
"需要调用的工具名称":"getTrainSchedule",
"调用工具需要的参数":{"queryDate":"10月12日","start":"上海","end":"北京"}}
【用户问题】
""" + query)
checkToolsResult = callModel(prompt)
return checkToolsResult
def callTools(toolCall):
with open('tools.py', 'r', encoding='utf-8') as f:
content = f.read()
argsStr = ",".join(str(key)+'="'+toolCall["调用工具需要的参数"][key]+'"' for key in toolCall["调用工具需要的参数"])
print(argsStr)
content+="\ntoolRes="+str(toolCall["需要调用的工具名称"])+"("+argsStr+")"
#print(content)
exec(content)
toolResult = locals()["toolRes"]
return toolResult
def getAnswer(query):
checkToolsResult = json.loads(checkTools(query))
print("checkTools results:*********************************")
print(checkToolsResult)
if checkToolsResult["是否需要调用【工具集】中的工具"] == "是":
toolRes = callTools(checkToolsResult)
print("callTools results:*********************************")
print(toolRes)
prompt = "你是一位可靠的个人助理,用户的问题是:"+query+"。 查询工具得到的结果是:"+toolRes+"。 根据这些信息,给出合理的回复。"
finalResult = callModel(prompt)
else:
prompt = "你是一位可靠的个人助理,用户的问题是:" + query + "。 根据这些信息,给出合理的回复。"
finalResult = callModel(prompt)
return finalResult
if __name__ == '__main__':
query = "我要7月13日从北京到南昌出差,帮我规划一下行程,要求尽可能快捷舒适。"
result = getAnswer(query)
print("final result:*********************************")
print(result)