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

LangChain调用自定义工具

下面的示例代码连接的是本地Ollama中的QWen2.5。

方式1 解析tool_calls

解析LLM返回的tool_calls信息,再调用tool。自定义函数必须使用tool注解。

from langchain_core.tools import tool
from langchain.chat_models import init_chat_model
from langchain.schema import HumanMessage
from langchain_openai import ChatOpenAI

@tool
def controllLight(status: bool): 
   """用于控制灯的开关,若为True则为开灯,若为False则为关灯
   """
   print(f"light status : {status}")

client = ChatOpenAI(
    api_key="qwen",
    model="qwen2.5",
    base_url="http://127.0.0.1:11434/v1",
)

tools = [controllLight]
llm_with_tools = client.bind_tools(tools)
query = "关闭灯"
messages = [HumanMessage(query)]
resp = llm_with_tools.invoke(messages)

print(resp.tool_calls)

for tool_call in resp.tool_calls:
    selected_tool = {"controllLight": controllLight}[tool_call["name"]]
    tool_msg = selected_tool.invoke(tool_call)
    messages.append(tool_msg)

相对于自己解析出参数值,然后再手动调用函数来说,此方式更方便。

执行后响应:

light status : True

方式2 链式调用

使用LangChain的链式调用。

from langchain_core.tools import tool
from langchain.schema import HumanMessage
from langchain_openai import ChatOpenAI

@tool
def controllLight(status: bool): 
   """用于控制灯的开关,若为True则为开灯,若为False则为关灯
    """
   print(f"light status : {status}")

client = ChatOpenAI(
    api_key="qwen2.5",
    model="qwen2.5",
    base_url="http://127.0.0.1:11434/v1",
)

tools = [controllLight]
llm_with_tools = client.bind_tools(tools)
query = "打开灯"
messages = [HumanMessage(query)]

chain = llm_with_tools | (lambda msg: msg.tool_calls[0]["args"]) | controllLight
resp = chain.invoke(messages)

此方式比较通用,不需要处理参数。但需要把方法绑定到链式调用中。会导致程序可复用性较差。

相关文章:

  • 【读点论文】What’s Really New with NewSQL?
  • SEO关键词长尾词高效策略
  • redisson 使用与分析
  • C语言入门教程100讲(34)结构体初始化
  • RISC-V: 固件与操作系统引导 | eg OpenSBI | 借助AI注释项目代码
  • Java架构师成长之路
  • llama源码学习·model.py[3]ROPE旋转位置编码(2)旋转角度生成代码
  • vue-cli如何正确关闭prefetch和preload
  • 让S7-1200与DeepSeek联动(转)
  • MCU vs SoC
  • vue3 UnwrapRef 与 unref的区别
  • [极客大挑战 2019]BuyFlag-3.23BUUCTF练习day5(3)
  • LeetCode HOT100系列题解之岛屿数量(10/100)
  • 【Keil5-开发技巧】
  • VSCode 生成HTML 基本骨架
  • 【CICD】Ansible知识库
  • 【MySQL数据库】触发器与事件
  • 从失衡到平衡:手撕 AVL 树的插入旋转操作
  • Cursor 一键自动无限续杯(3月24日)亲测有效
  • 黑马点评-UV统计
  • 涉案资金超2亿元 “健康投资”骗局,专挑老年人下手
  • 中国青年报:为见义勇为者安排补考,体现了教育的本质目标
  • 联合国报告:全球经济前景恶化,面临高度不确定性
  • 商人运作亿元“茅台酒庞氏骗局”,俩客户自认受害人不服“从犯”判决提申诉
  • 山东:小伙为救同学耽误考试属实,启用副题安排考试
  • 多条跨境铁路加速推进,谁是下一个“超级枢纽”?