# 解锁LLMs强大的工具调用能力:一步步打造动态Chat模型
## 引言
随着大型语言模型(LLMs)的发展,它们不仅可以生成自然语言,还能通过调用外部工具实现更强大的功能。然而,并不是所有的模型都原生支持工具调用。那么,我们如何为这些模型添加即席工具调用能力呢?本文将为您揭示如何通过巧妙的提示工程方法使LLMs动态调用工具,增强其功能。
## 主要内容
### 1. 环境设置
首先,确保安装必要的软件包:
```bash
%pip install --upgrade --quiet langchain langchain-community
如果打算使用LangSmith,可以通过环境变量设置API密钥:
import getpass
import os
# os.environ["LANGCHAIN_TRACING_V2"] = "true"
# os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()
选择合适的模型进行实验(如OpenAI、Anthropic等),并在需要时设置相应的API密钥和端点。
2. 创建工具
接下来,我们定义两个数学运算工具:加法和乘法。
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]
3. 构建提示
定义一个系统提示,明确模型可用的工具及其用法格式:
from langchain_core.prompts import ChatPromptTemplate
system_prompt = """\
You are an assistant that has access to the following set of tools.
Here are the names and descriptions for each tool:
multiply(x: float, y: float) -> float - Multiply two numbers together.
add(x: int, y: int) -> int - Add two numbers.
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}")]
)
4. 解析输出并调用工具
通过解析模型返回的JSON格式输出,实现工具的实际调用。
from langchain_core.output_parsers import JsonOutputParser
chain = prompt | model | JsonOutputParser()
message = chain.invoke({"input": "what's 3 plus 1132"})
接下来是工具调用逻辑:
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):
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"])
invoke_tool({"name": "multiply", "arguments": {"x": 3, "y": 5}})
常见问题和解决方案
在使用未经过专门调优的模型进行工具调用时,可能会遇到以下问题:
- 模型输出格式不准确:可以通过提供示例或增加提示详细性来改善。
- 工具调用错误:添加异常处理并使用模型反馈机制进行自我修复。
总结和进一步学习资源
通过本文所述方法,您可以为大型语言模型添加即席工具调用能力,从而大幅提升其应用场景。对于更深入的学习,推荐参考以下资源:
参考资料
- LangChain: python.langchain.com/docs/
- Chat Models: platform.openai.com/docs/guides…
- Tool Calling in Chat Models: python.langchain.com/docs/guides…
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---