主流网站模板,wordpress筛选最新文章,中山网红打卡点,成都网站seo性价比高当大型语言模型#xff08;LLM#xff09;原生不支持函数调用功能时#xff0c;如何实现智能工具调度#xff1f;本文通过自然语言解析结构化输出控制的方法来实现。
GitHub代码地址
核心实现步骤
定义工具函数 使用tool装饰器声明可调用工具#xff1a;
from langcha…当大型语言模型LLM原生不支持函数调用功能时如何实现智能工具调度本文通过自然语言解析结构化输出控制的方法来实现。
GitHub代码地址
核心实现步骤
定义工具函数 使用tool装饰器声明可调用工具
from langchain_core.tools import tooltool
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除以breturn a / b构建响应模型 使用Pydantic定义结构化响应格式
from pydantic import BaseModel, Fieldclass Response(BaseModel):name: str Field(None, description调用的函数名称)args: dict Field(None, description函数参数)创建输出解析器
from langchain_core.output_parsers import PydanticOutputParserparser PydanticOutputParser(pydantic_objectResponse)设计提示模板
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_instructionsparser.get_format_instructions()
)工作原理
自然语言解析LLM分析用户query的语义工具匹配根据函数描述自动选择最合适的工具参数提取从自然语言中提取结构化参数格式化输出生成符合预定格式的JSON响应
示例演示
示例1数学计算
chain prompt | ChatOpenAI(modelqwen-max) | parser
result chain.invoke(请将3乘以一至九的最大值)
# 输出
# namemultiply_by_max, args{a:3, b:[1,2,3,4,5,6,7,8,9]}示例2无匹配工具
result chain.invoke(查询北京天气)
# 输出
# nameNone, argsNone