当前位置: 首页 > news >正文

如何在不依赖函数调用功能的情况下结合工具与大型语言模型

当大型语言模型(LLM)原生不支持函数调用功能时,如何实现智能工具调度?本文通过自然语言解析+结构化输出控制的方法来实现。

GitHub代码地址

核心实现步骤

  1. 定义工具函数
    使用@tool装饰器声明可调用工具:
from langchain_core.tools import tool@tool
def multiply_by_max(a: int, b: list[int]
) -> int:"""将a乘以b列表中的最大值"""return a * max(b)@tool
def divide_by(a: float, b: float) -> float:"""将a除以b"""return a / b
  1. 构建响应模型
    使用Pydantic定义结构化响应格式:
from pydantic import BaseModel, Fieldclass Response(BaseModel):name: str = Field(None, description="调用的函数名称")args: dict = Field(None, description="函数参数")
  1. 创建输出解析器
from langchain_core.output_parsers import PydanticOutputParserparser = PydanticOutputParser(pydantic_object=Response)
  1. 设计提示模板
from langchain_core.prompts import ChatPromptTemplateprompt = ChatPromptTemplate.from_messages([("human", """请根据需求从下列函数中选择合适的工具:可用工具:\n{functions}\n输出格式:\n{format_instructions}问题:{query}""")
]).partial(functions=[tool.args_schema.model_json_schema() for tool in [multiply_by_max, divide_by]],format_instructions=parser.get_format_instructions()
)

工作原理

  1. 自然语言解析:LLM分析用户query的语义
  2. 工具匹配:根据函数描述自动选择最合适的工具
  3. 参数提取:从自然语言中提取结构化参数
  4. 格式化输出:生成符合预定格式的JSON响应

示例演示

示例1:数学计算

chain = prompt | ChatOpenAI(model="qwen-max") | parser
result = chain.invoke("请将3乘以一至九的最大值")
# 输出:
# name='multiply_by_max', args={'a':3, 'b':[1,2,3,4,5,6,7,8,9]}

示例2:无匹配工具

result = chain.invoke("查询北京天气")
# 输出:
# name=None, args=None
http://www.lryc.cn/news/538801.html

相关文章:

  • 【Linux AnolisOS】关于Docker的一系列问题。尤其是拉取东西时的网络问题,镜像源问题。
  • 【Elasticsearch】Mapping概述
  • GPT-4o悄然升级:能力与个性双突破,AI竞技场再掀波澜
  • 如何选择合适的超参数来训练Bert和TextCNN模型?
  • C# SpinLock 类 使用详解
  • 【linux】在 Linux 上部署 DeepSeek-r1:32/70b:解决下载中断问题
  • 机器学习所需要的数学知识【01】
  • 4.【线性代数】——矩阵的LU分解
  • 【清晰教程】本地部署DeepSeek-r1模型
  • Spring Cloud工程搭建
  • 使用Redis实现分布式锁,基于原本单体系统进行业务改造
  • 【MediaTek】 T750 openwrt-23.05编 cannot find dependency libexpat for libmesode
  • CHARMM-GUI EnzyDocker: 一个基于网络的用于酶中多个反应状态的蛋白质 - 配体对接的计算平台
  • c# 2025/2/17 周一
  • vite【详解】常用配置 vite.config.js / vite.config.ts
  • 最新智能优化算法: 阿尔法进化(Alpha Evolution,AE)算法求解23个经典函数测试集,MATLAB代码
  • 用于可靠工业通信的5G-TSN集成原型:基于帧复制与消除可靠性的研究
  • HaProxy源码安装(Rocky8)
  • shell脚本备份MySQL数据库和库下表
  • 23. AI-大语言模型
  • Linux /dev/null
  • Unity CommandBuffer绘制粒子系统网格显示
  • Java延时定时刷新Redis缓存
  • 智能硬件定位技术发展趋势
  • 全单模矩阵及其在分支定价算法中的应用
  • DeepSeek 的创新融合:多行业应用实践探索
  • 利用SkinMagic美化MFC应用界面
  • IMX6ULL的公板的以太网控制器(MAC)与物理层(PHY)芯片(KSZ8081RNB)连接的原理图分析(包含各引脚说明以及工作原理)
  • 采用分布式部署deepseek
  • Cloud: aws:network: limit 含有pps这种限制