-正文-
==========================
-
工具(Tool)
-
通过参数自定义工具
-
通过解析文档字符串配置定义工具
-
通过大模型的 Tool calling 调用工具
-
代码示例
-
完整日志
近年来大模型发展过程中面临的几个核心挑战:静态知识的局限性、执行能力的缺失、与外部系统的割裂。为了应对这些挑战,推动大模型从单纯的语言生成工具演变为真正的任务执行引擎,Function calling 诞生了,成为大模型一项不可或缺的核心能力。
概念 Function calling 和 Tool Calling 会混用
LangChain 是一个灵活的框架,它提供了与多种大模型进行交互的能力
它的设计允许集成和使用来自不同源的多种模型,包括但不限于OpenAl、Cohere和 Hugging Face 等模型库中的模型。这样,你不必拘泥于某种模型,而是为自己的应用选择最合适的模型。对于Tool Calling能力来说,LangChain 也做了抽象
调用其他工具的 API(如:Database Tool) 通常需要特定的有效负载格式。可以使用 Tool Calling 来向模型请求与特定格式匹配的响应。随后可以使用这个响应作为负载去做“工具(Tool)实际的执行”
通俗来将就是:让大模型通过理解用户的提示词,来决定是否需要调用工具(如上图),
如果需要调用工具,会返回需要调用的工具名称和调用参数(不是直接执行工具),后续由代码去执行对应的工具(Tool)
如果不需要调用工具,那么就直接回复自然语言(如:How can I assist you?)
针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料
分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程
等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓
👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

工具(Tool)
tool抽象 在 LangChain 中将 Python函数 与 定义“函数名称、描述和预期参数”的schema 关联起来。
工具(Tool) 可以传给支持 tool calling 的 聊天模型,允许模型使用特定输入执行特定函数。
创建工具的推荐方法是使用@tool 装饰器。此装饰器旨在简化工具创建过程,在大多数情况下应使用它。定义函数后,可以使用@tool 对其进行装饰,以创建实现工具接口 的工具。
代码如:
from langchain_core.tools import tool
@tool
def multiply(a: int, b: int) -> int:
"""两个数字相乘."""
return a * b
默认情况下,装饰器使用函数名称作为工具名称
装饰器将使用函数的文档字符串作为工具的描述 —— 因此必须提供文档字符串。
定义工具后,可以通过调用直接使用它
result = multiply.invoke({"a": 2, "b": 3})
print(result)
# Output: 6
也能直接看到工具的具体信息
print(multiply.name)
print(multiply.description)
print(multiply.args)
# 输出
multiply
两个数字相乘.
{'a': {'title': 'A', 'type': 'integer'}, 'b': {'title': 'B', 'type': 'integer'}}
通过参数自定义工具
@tool("multiplication-tool", args_schema=CalculatorInput, return_direct=True)
代码如:
from pydantic import BaseModel, Field
class CalculatorInput(BaseModel):
a: int = Field(description="第一个数字")
b: int = Field(description="第二个数字")
# 通过参数自定义
@tool("multiplication-tool", args_schema=CalculatorInput, return_direct=True)
def multiply(a: int, b: int) -> int:
"""两个数字相乘."""
return a * b
# 查看工具的具体信息
print(multiply.name)
print(multiply.description)
print(multiply.args)
print(multiply.return_direct)
输出:
# 输出
multiplication-tool
两个数字相乘.
{'a': {'description': '第一个数字', 'title': 'A', 'type': 'integer'}, 'b': {'description': '第二个数字', 'title': 'B', 'type': 'integer'}}
通过解析文档字符串配置定义工具
@tool 可以选择性地解析Google Style 文档字符串,并将文档字符串组件(例如参数描述)与工具schame的相关部分关联起来。使用这种方法,需要指定 parse_docstring
代码如:
@tool(parse_docstring=True) # 解析文档字符串
def multiply(a: int, b: int) -> int:
"""两个数字相乘.
Args:
a: 第一个数字
b: 第二个数字
Returns:
两个数字相乘的结果
"""
return a * b
# 查看工具的具体信息
print(multiply.name)
print(multiply.description)
print(multiply.args)
print(multiply.return_direct)
结果:
# 输出
multiply
两个数字相乘.
{'a': {'description': '第一个数字', 'title': 'A', 'type': 'integer'}, 'b': {'description': '第二个数字', 'title': 'B', 'type': 'integer'}}
False
通过大模型的 Tool calling 调用工具
Tool calling 允许聊天模型通过“Tool calling”来响应给定的提示词。
虽然“Tool calling”这个名字暗示模型正在直接执行某些操作,但实际上并非如此!模型仅生成工具的参数,而是否运行工具(或不运行)取决于用户。
Tool calling 可以从模型生成结构化输出,即使您不打算调用任何工具,也可以使用它。该技术是从非结构化文本中提取信息
如下图,把用户输入的文本,通过大模型的Tool calling提取出了符合工具get_weather的信息
代码示例
第一步:定义工具
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
model = ChatOpenAI(
api_key='hk-iwtb1e427',
base_url='https://api.openai-hk.com/v1',
temperature=0
)
print("第一步 :定义工具")
@tool
def multiply(a: int, b: int) -> int:
"""两个数字相乘."""
return a * b
tools = [multiply]
第二步:把工具绑定到大模型
# Tool binding
print("第二步 :把工具绑定到大模型")
model_with_tools = model.bind_tools(tools)
第三步:大模型 Tool calling
# Tool calling
print("第三步 :大模型Tool calling")
query = "2乘以3"
messages = [HumanMessage(query)]
ai_msg = model_with_tools.invoke(messages)
print(ai_msg)
# 获取返回的response中工具名称和调用参数
print("大模型 Tool calling 返回结果 : ",ai_msg.tool_calls)
# [{'name': 'multiplication-tool', 'args': {'a': 2, 'b': 3}, 'id': 'call_2bJbBe74qhuDfg3ZGCu7p9e3', 'type': 'tool_call'}]
messages.append(ai_msg)
第四步:工具的执行(Tool calling 返回需要执行的工具)
print("第四步 :工具的执行")
# 定义所有的工具字典
all_tools = {
"multiply": multiply
}
for tool_call in ai_msg .tool_calls:
selected_tool = all_tools[tool_call["name"].lower()]
tool_msg = selected_tool.invoke(tool_call)
print("工具的执行 返回结果 : ",tool_msg)
messages.append(tool_msg)
# content='6' name='multiply' tool_call_id='call_CTCJAFlibfN3zhM9jMMStBlp'
print("聊天上下文 :")
print(messages)
第五步:大模型处理工具的返回结果
print("第五步:大模型处理工具的返回结果")
response = model_with_tools.invoke(messages)
print("大模型返回 :",response.content)
# 大模型返回 : 2乘以3的结果是6。
用户输入 :2乘以3
大模型返回 : 2乘以3的结果是6。
日志:
如何学习AI大模型?
大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业
?”“谁的饭碗又将不保了?
”等问题热议不断。
不如成为「掌握AI工具的技术人
」,毕竟AI时代,谁先尝试,谁就能占得先机!
想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。
但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高
那么针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料
分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程
等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓
👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈
学习路线
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓