1. 背景介绍

最近在使用 LlamaIndex 构建 RAG 应用时,我选择了接入 硅基流动 (SiliconFlow) 的 Embedding 服务,不过还是因为有它的免费额度hhh。现在有送免费额度,个人觉得还是不错的https://cloud.siliconflow.cn/i/1rELEvcO

在安装依赖并编写初始化代码后,本以为能顺利运行,结果却遇到了一个无法正常访问服务的问题,排查许久才发现是配置细节上的疏忽。特此记录,希望能帮到同样遇到此问题的朋友。

2. 问题现象

首先,我的API key是没有问题的,能够访问硅基流动的对话模型。在访问Embedding模型,我一开始使用的OpenAI API,因为之前使用的openai库是可以访问第三方大模型提供商的,就像下面这样:

from openai import OpenAI

client = OpenAI(
    api_key="sk-xxxxxx",
    base_url="https://api.siliconflow.cn/v1"
)

response = client.embeddings.create(
    model="BAAI/BGE-m3",
    input="这是一个文本"
)

return response.data[0].embedding

因此第一时间我选择了LlamaIndex中的OpenAI库,为我向量搜索的索引添加Embedding模型,当我按照以下代码配置时:

from llama_index.embeddings.openai import OpenAIEmbedding

embed_model = OpenAIEmbedding(
    model="BAAI/BGE-m3",
    api_key="sk-xxx",
    base_url="https://api.siliconflow.cn/v1",
)

index = VectorStoreIndex.from_vector_store(vector_store, embed_model=embed_model)

# 省略后面向量搜索的业务代码

在运行业务代码后,出现了如下报错/异常行为:

Error code: 401 - {'error': {'message': 'Incorrect API key provided: sk-***************************************rmtk. You can find your API key at https://platform.openai.com/account/api-keys. ', 'type': 'invalid_request_error', 'code': 'invalid_api_key', 'param': None}, 'status': 401}

起初我以为是 API Key 过期或者网络问题,但检查了 SilliconFlow 控制台,Key 是正常的,网络也是通的,但报错信息明显需要我接入OpenAI平台的api-key,无法正常识别硅基流动服务的URL。这里可以选择使用OpenAI的服务,但是由于本人的项目之前一些模块已经基于硅基流动的服务实现了,为了不增加复杂度,还是继续选择了硅基流动

3. 解决方案

3.1 补充api_key

使用OpenAIEmbedding接口的话,不是使用base_url,而是使用api_base中填入硅基流动的就可以了,即https://api.siliconflow.cn/v1

from llama_index.embeddings.openai import OpenAIEmbedding

embed_model = OpenAIEmbedding(
    model_name=embedding_model,
    api_key=api_key,
    api_base="https://api.siliconflow.cn/v1",
)

3.2 使用SilliconFlow服务

通过查阅官方文档,发现LlamaIndex支持SiliconFlow服务的库,安装如下:

pip install llama-index-embeddings-siliconflow

而Embedding模型的配置方式如下:

from llama_index.embeddings.siliconflow import SiliconFlowEmbedding

embed_model = SiliconFlowEmbedding(
    model="BAAI/BGE-m3",
    api_key="sk-xxxx",
    base_url="https://api.siliconflow.cn/v1/embeddings"
)

按照这样配置之后,我的相关代码就能跑通了,这里需要注意几个点:

  • 模型名称参数名是model="xx",不是model_name="xx",这里很多不同库的规范不一样,在使用其他LLM库需要注意
  • base_url是"https://api.siliconflow.cn/v1/embeddings",这里一定要把embeddings给加上

4. 补充建议

在使用第三方 LLM 或 Embedding 集成库时,建议大家:

  • 优先查阅集成库的 GitHub Issues:很多适配问题社区里已经有讨论。
  • 是否真的需要借助框架:事实上,在个性化需求多的情况下,LlamaIndex的引入可能并不会加速开发,效率还不如自己手搓,而且很容易遇到上述这样的坑,参考文档和源码调试十分麻烦。
  • 打印原始 Request:如果可能,开启 debug 模式查看实际发送的 HTTP 请求体,能快速定位是参数错了还是鉴权错了。

5. 结语

这个小坑虽然不大,但确实浪费了不少调试时间。希望这篇笔记能让大家少走弯路。如果你在使用 LlamaIndex 对接国内大模型时遇到其他问题,欢迎在评论区交流!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐