当前位置:   article > 正文

Llamaindex实战-在本地使用多种LLM_llamaindex中huggingfacellm如何加载本地模型

llamaindex中huggingfacellm如何加载本地模型

Llamaindex实战-在本地使用多种LLM

有关我们支持的大语言模型列表及其功能比较,请查看我们的大语言模型模块指南

使用LLM的基本范式

构建基于 LLM 的应用程序时的第一步是决定使用哪个 LLM;也可以使用多个。
LLM 可用于管道的多个不同阶段:

  • 在索引期间,您可以使用 LLM 来确定数据的相关性(是否对其进行索引),或者您可以使用 LLM 来汇总原始数据并为摘要建立索引。
  • 在查询期间,LLM 可以通过两种方式使用:
  • 在检索(从索引中获取数据)期间,大语言模型可以获得一系列选项(例如多个不同的索引),并决定在哪里最好地找到您要查找的信息。代理LLM在这个阶段还可以使用工具来查询不同的数据源。
  • 在响应合成(将检索到的数据转换为答案)期间,LLM 可以将多个子查询的答案组合成一个连贯的答案,或者可以转换数据,例如从非结构化文本转换为 JSON 或其他编程输出格式。

LlamaIndex 为大量不同的 LLM 提供统一接口,允许您将您选择的任何 LLM 传递到管道的任何阶段。它可以像这样简单:

from llama_index.llms.openai import OpenAI

response = OpenAI().complete("Paul Graham is ")
print(response)
  • 1
  • 2
  • 3
  • 4

通常,您将实例化 LLM 并将其传递到 Settings,然后将其传递到管道的其他阶段,如下例所示:

from llama_index.llms.openai import OpenAI
from llama_index.core import Settings
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

Settings.llm = OpenAI(temperature=0.2, model="gpt-4")

# 加载可读文本
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(
    documents,
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在本例中,您已实例化 OpenAI 并将其自定义为使用 gpt-4 模型而不是默认的 gpt-3.5-turbo,并且还修改了温度。 VectorStoreIndex 现在将使用 gpt-4 来回答查询时的问题。

设置(Settings)是一组配置数据,您可以将其传递到 LlamaIndex 的不同部分。您可以了解有关设置以及如何自定义它的更多信息

使用本地大语言模型

  1. 使用ollama托管的模型

LlamaIndex 不仅支持托管的 LLM API;您还可以在本地运行本地模型,例如 Llama2
例如,如果您安装并运行 Ollama

from llama_index.llms.ollama import Ollama
from llama_index.core import Settings

Settings.llm = Ollama(model="llama3", request_timeout=60.0)
  • 1
  • 2
  • 3
  • 4

有关更多详细信息,请参阅自定义大语言模型的操作方法

注意:这里的model="llama3"参数,可以通过ollama list来查看,换成自己本地ollama拉(pull)下来的模型。

  1. 使用HuggingFace的大模型

当然也可以使用huggeface中的模型:

Settings.llm = HuggingFaceLLM(
    model_name="HuggingFaceH4/zephyr-7b-beta",
    tokenizer_name="HuggingFaceH4/zephyr-7b-beta",
    context_window=3900,
    max_new_tokens=256,
    generate_kwargs={"temperature": 0.7, "top_k": 50, "top_p": 0.95},
    messages_to_prompt=messages_to_prompt,
    completion_to_prompt=completion_to_prompt,
    device_map="auto",
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

这里的model_name给出的模型可以是下载下来并保存在本地的模型,只需要给出本地模型的路径即可。

一个例子

from llama_index.core.llms import ChatMessage
from llama_index.llms.ollama import Ollama

# ollama
llm = Ollama(model="llama3", request_timeout=360.0)

# questions
messages = [
    ChatMessage(role="user", content="What is your name"),
]

resp = llm.chat(messages)

print(resp)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

我在16C32G的机器上运行以上代码,运行了大约几分钟时间,得到以下输出:

assistant: I don't have a personal name. I'm an AI designed to assist and communicate with humans, so I don't have a personal identity or self-awareness. My purpose is to provide information, answer questions, and help users like you with their queries. I exist solely as a digital entity, and my "name" is simply "Assistant" or "AI" - no specific name assigned to me!
  • 1

从以上反馈来看,该模型的输出还是相对比较好的。

另外,要注意,messages这个参数可以输入多个角色和问题,类似于这样:

messages = [
    ChatMessage(role="user", content="who are you?"),
    ChatMessage(role="user", content="What is your name?"),
]
  • 1
  • 2
  • 3
  • 4

提示(Prompts)

默认情况下,LlamaIndex 附带了一组经过实战检验的内置提示,可处理让特定 LLM 正确处理和格式化数据的棘手工作。这是使用 LlamaIndex 的最大好处之一。如果需要,您可以自定义提示

参考
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/903940
推荐阅读
相关标签
  

闽ICP备14008679号