使用 Ollama、Llama 3.1 和 Milvus 进行函数调用案例

请添加图片描述

偶然看到一篇很短代码就能实现llama function call的文章。
秉着学习加分项的原则,进行了实验测试。这里给出案例和全部改写后的代码。

将 LLM 与函数调用相结合,就如同赋予您的 AI 连接世界的能力。通过将您的 LLM 与外部工具(例如用户自定义函数或
API)集成起来,您可以构建解决现实问题应用程序。在本文中,我们将探讨如何将 Llama 3.1 与 Milvus 等外部工具以及 API
集成,以构建强大且具备上下文感知能力的应用程序。

函数调用简介 Function Calling

像 GPT-4、Mistral Nemo 和 Llama 3.1 这样的 LLM 现在可以检测到它们需要调用函数时,然后输出包含用于调用该函数的参数的
JSON。这使得您的 AI 应用更加通用和强大。
函数调用使开发人员能够创建:

  • 由 LLM 提供支持的数据提取和标记解决方案(例如,从维基百科文章中提取人物姓名)
  • 可以帮助将自然语言转换为 API 调用或有效数据库查询的应用程序
  • 与知识库交互的对话式知识检索引擎

使用的工具介绍

  • Ollama:将 LLM 的强大功能带到您的笔记本电脑上,简化本地操作。
    ref: https://ollama.com/
  • Milvus:我们首选的向量数据库,用于高效的数据存储和检索。
    ref: https://milvus.io/
  • Llama 3.1–8B:8B 模型的升级版本支持多语言,上下文长度显著提高至 128K,并且可以利用工具使用。
    ref: https://huggingface.co/meta-llama/Meta-Llama-3.1-8B

使用 Llama 3.1 和 Ollama Llama 3.1 已针对函数调用进行了微调

它支持单一、嵌套和并行函数调用,以及多回合函数调用。这意味着您的
AI 可以处理涉及多个步骤或并行流程的复杂任务。 在我们的示例中,我们将实现不同的函数来模拟 API 调用以获取航班时间并在 Milvus
中执行搜索。Llama 3.1 将根据用户的查询决定调用哪个函数。

安装依赖

  • 使用 Ollama 下载 Llama 3.1:
    ollama run llama3.1
    这将把模型下载到您的笔记本电脑,使其可以使用 Ollama。

  • 接下来,安装必要的依赖项:
    pip install ollama openai "pymilvus[model]"

    我们正在安装带有模型扩展的 Milvus Lite,它允许您使用 Milvus 中提供的模型嵌入数据。

    像我这里使用的截图一样。这里建议使用conda创建一个单独的环境进行实验。详细见网上conda的使用教程。

    请添加图片描述

将数据插入 Milvus

现在,让我们将一些数据插入 Milvus。如果 Llama 3.1 认为它相关,它将在以后决定搜索这些数据!
这里建议大家创建一个python文件,单独运行。

from pymilvus import MilvusClient, model

# 获取默认的嵌入函数(用于将文本转换为向量)
embedding_fn = model.DefaultEmbeddingFunction()

# 文档列表,包含要进行向量化的文本
docs = [
    "Artificial intelligence was founded as an academic discipline in 1956.",
    "Alan Turing was the first person to conduct substantial research in AI.",
    "Born in Maida Vale, London, Turing was raised in southern England.",
]

# 使用嵌入函数将文档转换为嵌入向量
vectors = embedding_fn.encode_documents(docs)

# 输出向量的维度是768,与我们刚创建的集合相匹配
print("Dim:", embedding_fn.dim, vectors[0].shape)  # 输出维度信息

# 每个实体包含id、向量表示、原始文本和一个主题标签
data = [
    {
   
   "id": i, "vector": vectors[i], "text": docs[i], "subject": "history"}
    for i in range(len(vectors))
]

# 打印数据的基本信息,每个实体都包含多个字段
print("Data has", len(data), "entities, each with fields: ", data[0].keys())
print("Vector dim:", len(data[0]["vector"]))  # 向量的维度

# 创建Milvus客户端连接到本地数据库
client = MilvusClient('./milvus_local.db')

# 创建一个集合来存储数据
client.create_collection(
    collection_name="demo_collection",
    dimension=768,  # 我们在此示例中使用的向量有768维
)

# 将数据插入到集合中
client.insert(collection_name="demo_collection", data=data)

这里我们在环境上运行这段代码,可以看到如下截图,代表插入数据成功。
请添加图片描述

定义要使用的函数

在这个示例中,我们定义了两个函数。第一个函数模拟一个获取航班时间的API调用。第二个函数在Milvus中运行搜索查询。

from pymilvus import model, MilvusClient
import json

# 获取默认的嵌入函数
embedding_fn = model.DefaultEmbeddingFunction()

client = MilvusClient('./milvus_local.db')


# 模拟获取航班时间的API调用
# 在实际应用中,这会从实时数据库或API获取数据
def get_flight_times(departure: str, arrival: str) -> str:
    flights = {
   
   
        'NYC-LAX': {
   
   'departure': '08:00 AM', 'arrival': '11:30 AM', 'duration': '5h 30m'},
        'LAX-NYC': {
   
   'departure': '02:00 PM', 'arrival': '10:30 PM', 'duration': '5h 30m'},
        'LHR-JFK': {
   
   'departure': '10:00 AM', 'arrival': '01:00 PM', 'duration': '8h 00m'},
        'JFK-LHR': {
   
   'departure': '09:00 PM', 'arrival': '09:00 AM', 'duration': '7h 00m'},
        'CDG-DXB': {
   
   'departure': '11:00 AM', 'arrival': '08:00 PM', 'duration': '6h 00m'},
        'DXB-CDG': {
   
   'departure': '03:00 AM', 'arrival': '07:30 AM',
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值