尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

langchain tools调用

langchain tools调用 前言从本质上讲大模型只能识别自然语言的语义然后根据自己训练的知识和提示词去回答并不具备自主学习的能力本质上rag 微调 重新训练都是为了增强模型的能力当模型需要做计算需要调用外部的api信息时模型自身能力就捉襟见肘了需要让模型识别工具的能力然后由agent发起调用最后由大模型根据提示词包装结果这样出现形式上由大模型自主的执行工具并拿到结果的能力。本质上是大模型根据提示词--找到工具--agent执行工具--结果给大模型组装提示词--大模型输出结果。demo还是使用openai的标准使用qwen 4bit mlx和gemma4-4bitgemma4的4bit体积大了很多本地toolsfrom datetime import datetime from langchain.tools import tool from langchain_core.messages import ToolMessage, HumanMessage from langchain_core.output_parsers import StrOutputParser from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder tool def get_now_datetime(): 今天的日期和时间包括日期和时间点 :return: 日期时间字符串 return str(datetime.now()) def init_openai_chat(): return ChatOpenAI(api_keyxxx, base_urlhttp://127.0.0.1:8000/v1, modelQwen3.5-4B-MLX-4bit) if __name__ __main__: client init_openai_chat() prompt ChatPromptTemplate.from_messages([(human, 请根据用户输入回答用户输入{user_input})]) client client.bind_tools([get_now_datetime]) chain prompt | client #| StrOutputParser() response chain.invoke({user_input:今天日期是}) print(response) print(response.tool_calls) if response.tool_calls: tool_call response.tool_calls[0] result get_now_datetime.invoke(tool_call[args]) # name tool_call[name] # 把结果传回模型 tool_msg ToolMessage(contentresult, tool_call_idtool_call[id]) final client.invoke([ HumanMessage(content今天日期是), response, tool_msg ]) print(final.content)笔者尝试qwen-4bit模型无法调用工具试试gemma4-4bit模型同样4bitgemma-4bit强很多agent同样使用agent其实就是agent封装自己调用函数toolsfrom datetime import datetime from langchain.agents import create_agent from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.tools import Tool from langchain_openai import ChatOpenAI # tool def get_datetime(mark) - str: 获取当前日期和时间 if 今天 in mark: now datetime.now() return f当前日期时间{now.strftime(%Y年%m月%d日 %H:%M:%S)} else: return 2026-10 def init_openai_chat(): return ChatOpenAI(api_keyxxx, base_urlhttp://127.0.0.1:8000/v1, modelgemma-4-e4b-it-4bit) if __name__ __main__: prompt ChatPromptTemplate.from_messages([ (system, 你是一个有用的助手可以调用工具来获取信息。), # 添加系统提示 (human, 请根据用户输入回答用户输入{user_input}), # MessagesPlaceholder(variable_nameagent_scratchpad) ]) # 创建工具列表 tools [ Tool( nameget_datetime, funcget_datetime, description获取今天的日期和时间包括年月日时分秒 ) ] # 创建 agent agent create_agent( modelinit_openai_chat(), toolstools, system_prompt你是聊天机器人你能回答用户的所有问题 ) chain prompt | agent # 执行 response chain.invoke({ user_input: 今天日期是 }) print(最终答案:, response[messages][-1].content)一样的结果其实mcp就是这种形态的归一化通过mcp网关实现HTTP的远程调用本质就是工具调用当然规范更统一工具不再局限本地函数。总结工具的使用赋予了大模型的手能自主选择调用工具大模型本身不具备调用工具的能力当然实际上是agent根据大模型的要求去调用工具此时可以执行工作流循环等逻辑harness诞生本质上其实就是让AI根据我们的要求自主的干活比如把一些重活耗时的封装提示词和skillsAI就能24小时不断的执行。就是费token优化步骤和工具的能力可以减少token的消耗。
返回列表