借助Llama-index构建llm和embedding模型
思路一:使用Llama-index为单独的模型构建的专门的包
国内目前仅适用于智谱和零一万物。
思路二:借助Llama-index为openai构建的库接入国内的模型
前提是使用的模型是openai兼容型的,就可以稍微修改一下该库源码直接使用。
llama index 把OpenAI和OpenAIEmbedding的模型名称写死在代码里了,它会检查每个模型的输入上下文大小,如果模型没有在他的列表中,就会报错。所以我们可以重写一下llama_index的OpenAI类,通过新建一个NewOpenAI类,并继承OpenAI类,我们直接把输入上下文大小写死,不让它检查了,它就不报错了。
from llama_index.llms.openai import OpenAI
from llama_index.core.base.llms.types import LLMMetadata,MessageRole
class NewOpenAI(OpenAI):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@property
def metadata(self) -> LLMMetadata:
# 创建一个新的LLMMetadata实例,只修改context_window
return LLMMetadata(
context_window=8192,
num_output=self.max_tokens or -1,
is_chat_model=True,
is_function_calling_model=True,
model_name=self.model,
system_role=MessageRole.USER,
)
思路三:自定义模型接口
利用openai-like的包,来封装任何openai类似的大模型 这个思路的缺点很明显,只有对话模型,没有嵌入模型。
思路四:本地安装Ollama
在本地安装好模型,然后在Llama-index中使用Ollama的服务。Ollama这个嵌入模型用来做向量检索,效果不好。一般来说向量的相似度得分是在0到1之间的小数。但是Ollama这个嵌入模型计算出来的得分要么非常大,要么非常小。根据经验,还是智谱的这个向量模型效果最好。