(纯python实现代码)Ollama部署的llm+不同Tool的调用
使用ollama部署好后的大模型,进一步调用tool,来使得大模型的功能更丰富。
·
from langchain_experimental.llms.ollama_functions import OllamaFunctions
model = OllamaFunctions(model='qwen2:7b', base_url='http://{your ollama ip}:11434', format='json')
# 定义相关API_Key
tavily_api_key = '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' #官网:Tavily tavily.com
# 1. 自定义网络搜索工具二
def search_web(query, k=5, max_retry=3):
print('Call tool2: search_web(query=' + query+')' )
import os
from langchain_community.retrievers import TavilySearchAPIRetriever
os.environ["TAVILY_API_KEY"] = tavily_api_key
retriever = TavilySearchAPIRetriever(k=5)
documents = retriever.invoke(query)
# return [{'title': doc.metadata['title'], 'abstract': doc.page_content, 'href': doc.metadata['source'], 'score': doc.metadata['score']} for doc in
# documents]
content = '\n\n'.join([doc.page_content for doc in documents])
prompt = f"""请将下面这段内容(<<<content>>><<</content>>>包裹的部分)进行总结:
<<<content>>>
{content}
<<</content>>>
"""
# print('prompt:')
# print(prompt)
return model.invoke(prompt).content
# 自定义汇率查询工具一
def get_currency_exchange(fromcoin, tocoin, money):
print('Call tool1: get_currency_exchange(fromcoin='+fromcoin+', tocoin='+tocoin+', money='+str(money)+')')
import requests
currency_api_key = "6gb4ac0058c31fed14e86ac8f3fb160f" #your tool api key
url = f'https://apis.tianapi.com/fxrate/index?fromcoin={fromcoin}&tocoin={tocoin}&money={money}&key={currency_api_key}'
resp = requests.get(url)
"""样例数据
{
"code": 200,
"msg": "success",
"result": {
"money": "7.0752"
}
}
"""
#print('汇率转换:')
#print(resp.json())
result = f"{resp.json()['result']['money']}"
# print(result)
if money == 1:
prompt = f"""请将下面这段内容(<<<content>>><<</content>>>包裹的部分)进行总结:
{fromcoin}转换成{tocoin}的汇率为{result}
"""
else:
prompt = f"""请将下面这段内容(<<<content>>><<</content>>>包裹的部分)进行总结:
待转换的现金为{money} {fromcoin},转换成{tocoin}以后,结果为{result}
"""
return model.invoke(prompt).content
# 3. 工具映射列表
fn_map = {
'get_currency_exchange': get_currency_exchange,
'search_web': search_web
}
# 4. 使用下面的语句,将自定义的函数,绑定到大语言模型上
llm_with_tool = model.bind_tools(
tools=[
{
"name": "get_currency_exchange",
"description": "实现不同现金格式的实时汇率转换",
"parameters": {
"type": "object",
"properties": {
"fromcoin": {
"type": "string",
"description": "待被转换汇率的现金格式,默认为USD"
},
"tocoin": {
"type": "string",
"description": "目标转换现金格式,默认为CNY"
}, "money": {
"type": "int",
"description": "待被转换汇率的现金的数量,默认为1"
}
},
"required": ["fromcoin", "tocoin","money"]
}
},
{
"name": "search_web",
"description": "搜索互联网",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "要搜素的内容"
}
},
"required": ["query"]
}
},
],
#function_call={"name": "get_current_weather"}
)
# 5.使用工具
# 基于大模型获取调用工具及相关参数
import json
# 不调用工具,直接使用大模型生成答案
# ai_msg = llm_with_tool.invoke("中国最具影响力的10大事件有哪些?")
# 调用工具一:实时汇率转换工具,get_currency_exchange --调用接口 https://www.tianapi.com/apiview/119,1天限调100次
# ai_msg = llm_with_tool.invoke("待转换现金单位:CNY(元),目标转换现金单位:USD(美元),待转换金额:2元,最终得到多少美元?")
# ai_msg = llm_with_tool.invoke("按照实时汇率将5欧元转换成人民币")
ai_msg = llm_with_tool.invoke("欧元转换成人民币按照实时汇率是多少")
# 调用工具二:网上搜索前5工具,search_web
# ai_msg = llm_with_tool.invoke("从互联网搜索什么是命运?")
# 下面一行是去掉的,无用的原来的代码
# kwargs = json.loads(ai_msg.additional_kwargs['function_call']['arguments'])
if len(ai_msg.lc_attributes['tool_calls'])==0:
print('没有调用tool,直接使用大模型的回答。')
res = ai_msg.content
else:
kwargs = ai_msg.lc_attributes['tool_calls'][0]['args']
# print(kwargs)
# 调用自定义函数,获得返回结果
res = fn_map[ai_msg.lc_attributes["tool_calls"][0]['name']](**kwargs)
print(res)
更多推荐


所有评论(0)