使用大型语言模型(LLMs)#
概念#
选择合适的大型语言模型(LLM)是构建任何LLM应用程序时需要考虑的第一步。
LLMs是LlamaIndex的核心组件。它们可以作为独立模块使用,也可以插入其他核心的LlamaIndex模块(索引、检索器、查询引擎)。它们始终在响应合成步骤中使用(例如,在检索之后)。根据所使用的索引类型,LLMs也可能在索引构建、插入和查询遍历过程中使用。
LlamaIndex提供了一个统一的接口来定义LLM模块,无论是来自OpenAI、Hugging Face还是LangChain,这样你就不必自己编写定义LLM接口的样板代码。该接口包括以下内容(详细信息如下):
- 支持文本补全和聊天端点(详细信息如下)
- 支持流式和非流式端点
- 支持同步和异步端点
使用模式#
以下代码片段显示了如何开始使用LLMs。
如果你还没有安装它,请安装你的LLM:
pip install llama-index-llms-openai
然后:
from llama_index.llms.openai import OpenAI
# 非流式
resp = OpenAI().complete("Paul Graham is ")
print(resp)
关于标记化的说明#
默认情况下,LlamaIndex使用全局标记化器进行所有标记计数。这默认为来自tiktoken的cl100k
,这是与默认的LLMgpt-3.5-turbo
匹配的标记化器。
如果你更改了LLM,可能需要更新此标记化器,以确保准确的标记计数、分块和提示。
标记化器的唯一要求是它是一个可调用的函数,它接受一个字符串,并返回一个列表。
你可以这样设置全局标记化器:
from llama_index.core import Settings
# tiktoken
import tiktoken
Settings.tokenizer = tiktoken.encoding_for_model("gpt-3.5-turbo").encode
# huggingface
from transformers import AutoTokenizer
Settings.tokenizer = AutoTokenizer.from_pretrained(
"HuggingFaceH4/zephyr-7b-beta"
)
LLM兼容性跟踪#
虽然LLMs很强大,但并非每个LLM都容易设置。此外,即使进行了适当的设置,有些LLM在执行需要严格遵循指令的任务时也会遇到困难。
LlamaIndex提供了几乎与每个LLM的集成,但往往不清楚LLM是否会很好地开箱即用,或者是否需要进一步定制。
下面的表格试图验证各种LLMs对于各种LlamaIndex功能的初始体验。这些笔记本作为评估性能的最佳尝试,以及需要多少努力和调整才能使事情正常运行的尝试。
一般来说,像OpenAI或Anthropic这样的付费API被认为更可靠。然而,由于其可定制性和透明度的方法,本地开源模型因其定制性而日益受到欢迎。
贡献: 欢迎任何人为文档贡献新的LLMs。只需复制现有的笔记本,设置和测试你的LLM,并使用你的结果打开一个PR。
如果你有改进现有笔记本设置的方法,欢迎对此进行更改的贡献!
图例
- ✅ = 应该正常工作
- ⚠️ = 有时不可靠,可能需要提示工程来改进
- 🛑 = 通常不可靠,需要提示工程/微调来改进
付费LLM API#
模型名称 | 基本查询引擎 | 路由查询引擎 | 子问题查询引擎 | Text2SQL | Pydantic程序 | 数据代理 | 备注 |
---|---|---|---|---|---|---|---|
gpt-3.5-turbo (openai) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |
gpt-3.5-turbo-instruct (openai) | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | 数据代理中的工具使用似乎不稳定。 |
gpt-4 (openai) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |
claude-3 opus | ✅ | ⚠️ | ✅ | ✅ | ✅ | ✅ | |
claude-3 sonnet | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | 易于产生工具输入幻觉。 |
claude-2 (anthropic) | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | 易于产生工具输入幻觉。 |
claude-instant-1.2 (anthropic) | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | 易于产生工具输入幻觉。 |
开源LLM#
由于开源LLM需要大量资源,因此进行了量化。量化只是一种通过缩小模型内计算的精度来减小LLM大小的方法。研究表明,对于大型LLM,可以实现高达4位的量化,而不会严重影响性能。
模型名称 | 基本查询引擎 | 路由查询引擎 | 子问题查询引擎 | Text2SQL | Pydantic程序 | 数据代理 | 备注 |
---|---|---|---|---|---|---|---|
llama2-chat-7b 4bit (huggingface) | ✅ | 🛑 | 🛑 | 🛑 | 🛑 | ⚠️ | Llama2似乎非常健谈,这使得解析结构化输出变得困难。可能需要进行微调和提示工程以获得更好的结构化输出性能。 |
llama2-13b-chat (replicate) | ✅ | ✅ | 🛑 | ✅ | 🛑 | 🛑 | 我们的ReAct提示期望结构化输出,而llama-13b在这方面表现不佳。 |
llama2-70b-chat (replicate) | ✅ | ✅ | ✅ | ✅ | 🛑 | ⚠️ | 解析结构化输出仍然存在一些问题,特别是在处理Pydantic程序时。 |
Mistral-7B-instruct-v0.1 4bit (huggingface) | ✅ | 🛑 | 🛑 | ⚠️ | ⚠️ | ⚠️ | 与Llama2相比,Mistral在处理结构化输出方面似乎稍微更可靠。可能通过一些提示工程来提高性能。 |
zephyr-7b-alpha (huggingface) | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | 总体而言,zyphyr-7b-alpha 似乎比其他同等大小的开源模型更可靠。尽管仍然会有一些幻觉,特别是作为一个代理。 |
zephyr-7b-beta (huggingface) | ✅ | ✅ | ✅ | ✅ | 🛑 | ✅ | 与zyphyr-7b-alpha 相比,zyphyr-7b-beta 作为代理表现良好,但在Pydantic程序方面存在问题。 |
stablelm-zephyr-3b (huggingface) | ✅ | ⚠️ | ✅ | 🛑 | ✅ | 🛑 | stablelm-zephyr-3b 在处理结构化输出方面表现出色(甚至超过许多更大的模型)。它在文本转SQL和工具使用方面有些困难。 |
starling-lm-7b-alpha (huggingface) | ✅ | 🛑 | ✅ | ⚠️ | ✅ | ✅ | starling-lm-7b-alpha 在代理任务上表现出色。它在路由方面有些困难,并且在文本转SQL方面表现不一致。 |
phi-3-mini-4k-instruct (microsoft) | ✅ | ⚠️ | ✅ | ✅ | ✅ | ⚠️ | phi-3-mini-4k-instruct 在基本的RAG、文本转SQL、Pydantic程序和查询规划任务上表现良好。它在路由和代理任务方面有些困难。 |
模块#
我们支持与OpenAI、Hugging Face、PaLM等的集成。
查看完整的模块列表。