LlamaIndex 接在线 DeepSeek,Base URL 填 TaoToken,百炼 Embeddings 照旧
LlamaIndex 接在线 DeepSeekBase URL 填 TaoToken百炼 Embeddings 照旧在 LlamaIndex 第五篇的在线 LLM 与 Embeddings 实践里LiteLLM 初始化 DeepSeek 时通常会把 api_base 写死成 https://api.deepseek.comapi_key 写成 sk-xxxx换 Key 或换入口就要改源码。本文只调整 LLM 通道先访问 TaoToken 官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册并创建 Key再把 LiteLLM 的 api_base 改为 https://taotoken.net/apiapi_key 填 YOUR_API_KEYmodel 仍按原文核对 deepseek/deepseek-chat。百炼 Embeddings 的 QwenAliyunEmbedding 继续走 DashScope Key调用 text-embedding-v3不改成 TaoToken。TaoToken 在这里只提供统一 Key 和 Base URL不替代 DeepSeek 或百炼模型本身。原问题与场景LlamaIndex 第五篇的 LiteLLM 与 QwenAliyunEmbedding原文第五篇的目标是让 LlamaIndex 同时具备在线 LLM 和在线 Embeddings 能力。LLM 部分使用 LiteLLM 初始化 DeepSeek代码里直接写 api_base、api_key 和 modelEmbeddings 部分使用 DashScope 自定义 QwenAliyunEmbedding通过百炼平台调用 text-embedding-v3。这个结构本身很清晰但在实际接入时会有两个明显痛点。第一个痛点是 LLM 通道的 Key 和 Base URL 绑定在源码里。你每次换 Key、换测试入口、或者把同一个 Demo 给不同同事运行都要手动改 Python 文件。更麻烦的是如果项目里同时存在多个调用点很容易漏改其中一处最后出现“一个文件能跑、另一个文件 401”的情况。第二个痛点是 Key 混用。LLM 通道需要 DeepSeek 或 TaoToken 的 KeyEmbeddings 通道需要百炼控制台的 DashScope Key。如果两个 Key 都写成占位符或者把百炼 Key 填到 LiteLLM 的 api_key 里就会在验证时看到鉴权失败。本文要解决的是 LLM 通道的接入配置不改变百炼 Embeddings 的原有步骤。所以场景可以明确为你已经有一份 LlamaIndex 第五篇代码里面包含 LiteLLM DeepSeek 和 QwenAliyunEmbedding text-embedding-v3。现在希望把 LLM 通道接到 TaoToken用统一 Key 和 Base URL 管理 DeepSeek 调用同时保留 QwenAliyunEmbedding 调百炼 Embeddings 的代码路径。改动范围只限 LiteLLM 初始化部分其他地方尽量不动。TaoToken 前置注册、创建 Key 与确认 Base URL先把前置信息固定下来避免后面代码里混入错误地址。官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 在这里注册并创建 Key。创建完成后把 Key 保存为 YOUR_API_KEY不要提交到公开仓库。本文的 API Base URL 是 https://taotoken.net/api 注意它不带 /v1也不加任何 UTM 参数。LiteLLM 的 model 仍然按原文写 deepseek/deepseek-chat接入前建议在模型列表或模型对话页核对一次模型 ID。百炼 Embeddings 的前置不变继续去百炼控制台获取 DashScope API Key代码里可以通过参数传入也可以使用环境变量 DASHSCOPE_API_KEY。TaoToken 的 Key 只用于 LLM 通道不要填到 dashscope.api_key百炼的 Key 也不要填到 LiteLLM 的 api_key。两个通道分开管理后面排错会简单很多。依赖安装可以沿用原文方式。如果之前已经装好可以跳过新环境建议补上pip install llama-index-llms-litellm -i https://mirrors.aliyun.com/pypi/simple/ pip install llama-index-core -i https://mirrors.aliyun.com/pypi/simple/ pip install dashscope -i https://mirrors.aliyun.com/pypi/simple/其中 llama-index-llms-litellm 提供 LiteLLM 类llama-index-core 提供 ChatMessage、BaseEmbedding 等基础组件dashscope 用于调用百炼 TextEmbedding。安装完成后先不要急着把整个 RAG 流程跑起来可以先单独验证 LLM 通道和 Embeddings 通道。可复制配置main.py 里改 LiteLLMQwenAliyunEmbedding.py 保持百炼1. LiteLLM 初始化只改 api_base 和 api_key在 main.py 或你的入口文件里找到原文的 LiteLLM 初始化代码。模型名保持 deepseek/deepseek-chatapi_base 从 https://api.deepseek.com 改成 https://taotoken.net/apiapi_key 改成刚创建的 YOUR_API_KEY。from llama_index.llms.litellm import LiteLLM from llama_index.core.llms import ChatMessage llm LiteLLM( modeldeepseek/deepseek-chat, api_basehttps://taotoken.net/api, api_keyYOUR_API_KEY, ) message ChatMessage(roleuser, content你是谁) chat_response llm.chat([message]) print(chat_response)这段代码里最需要检查的是 api_base。不要写成 https://taotoken.net/api/v1 也不要从浏览器地址栏复制带 UTM 的链接填进去。LiteLLM 接收的是 API 入口不是官网活动页也不是控制台页面。model 名称如果写成 deepseek-chat部分版本可能无法匹配到 DeepSeek 路由因此先按 deepseek/deepseek-chat 保留。2. QwenAliyunEmbedding.py百炼 Embeddings 照旧Embeddings 部分不要接 TaoToken继续使用 DashScope 和百炼 text-embedding-v3。原文通过自定义 QwenAliyunEmbedding 继承 BaseEmbedding并实现查询向量、文本向量、批量向量以及异步方法。这里给出一个等价写法你可以直接放到 QwenAliyunEmbedding.py 中。from typing import List, Optional import dashscope from dashscope import TextEmbedding from llama_index.core.embeddings import BaseEmbedding class QwenAliyunEmbedding(BaseEmbedding): def __init__( self, model_name: Optional[str] None, api_key: Optional[str] None, dimension: Optional[int] None, **kwargs, ): super().__init__( model_namemodel_name, api_keyapi_key, dimensiondimension, **kwargs, ) if api_key: dashscope.api_key api_key def _get_query_embedding(self, query: str) - List[float]: resp TextEmbedding.call(modelself.model_name, inputquery) return list(resp.output[embeddings][0][embedding]) def _get_text_embedding(self, text: str) - List[float]: resp TextEmbedding.call(modelself.model_name, inputtext) return list(resp.output[embeddings][0][embedding]) def _get_text_embeddings(self, texts: List[str]) - List[List[float]]: return [self._get_text_embedding(t) for t in texts] async def _aget_query_embedding(self, query: str) - List[float]: return self._get_query_embedding(query) async def _aget_text_embedding(self, text: str) - List[float]: return self._get_text_embedding(text) async def _aget_text_embeddings(self, texts: List[str]) - List[List[float]]: return self._get_text_embeddings(texts)调用时DashScope Key 继续来自百炼控制台from Qwen.QwenAliyunEmbedding import QwenAliyunEmbedding embed_model QwenAliyunEmbedding( model_nametext-embedding-v3, api_keyDASHSCOPE_API_KEY, dimension64, ) vec embed_model.get_text_embedding(测试。。) print(len(vec))这里的 dimension 只是测试时用 64实际项目按你的向量库和百炼 text-embedding-v3 支持维度配置。QwenAliyunEmbedding 内部传给 TextEmbedding.call 的核心参数是 model_name 和 inputDashScope Key 通过 dashscope.api_key 生效。只要百炼控制台侧 Key 正常这段不需要因为 TaoToken 而改动。验证请求与成功结果llm.chat 返回 assistantEmbeddings 长度正常先验证 LLM 通道。运行前面的 llm.chat 调用message ChatMessage(roleuser, content你是谁) chat_response llm.chat([message]) print(chat_response)如果配置正确你会看到返回对象里包含 assistant 角色的内容而不是 401、404 或 model not found。成功时 print(chat_response) 通常会输出类似 assistant: 我是 DeepSeek Chat…… 的文本。重点不是回复内容完全一样而是 role 为 assistantcontent 非空且没有鉴权异常。再验证 Embeddings 通道。运行vec embed_model.get_text_embedding(测试。。) print(len(vec))如果 DashScope Key 有效、text-embedding-v3 可用你会得到一个浮点数列表len(vec) 与 dimension 配置或实际返回维度一致。这里不要用 TaoToken Key 去测百炼 Embeddings否则会出现 DashScope 鉴权错误。两个通道分别通过后再把 LlamaIndex 的 ServiceContext 或 Settings 接到 llm 和 embed_model 上继续后面的索引和查询流程。一个完整的验证顺序建议是先只跑 llm.chat再只跑 embed_model.get_text_embedding最后再跑组合流程。这样一旦报错你能快速判断是 LLM 通道问题还是 Embeddings 通道问题。本文只改 LLM 通道所以 Embeddings 报错时优先回到百炼 Key、模型名和网络出口排查不要先怀疑 TaoToken。本篇常见错排查api_base、Key、model 与环境变量错误一api_base 多写了 /v1。本文的 LiteLLM 配置应使用 https://taotoken.net/api 不要写成 https://taotoken.net/api/v1 。有些 OpenAI 兼容客户端会要求 /v1但这里按 LiteLLM TaoToken 的接入方式先保持不带 /v1。如果误加 /v1常见表现是 404 或路径不存在。错误二Key 混用。LiteLLM 的 api_key 填 TaoToken 创建的 YOUR_API_KEYdashscope.api_key 或 QwenAliyunEmbedding 的 api_key 填百炼控制台的 DashScope Key。把百炼 Key 填到 LLM 通道或者把 TaoToken Key 填到 Embeddings 通道都会鉴权失败。出现 401 时先确认报错来自哪一个调用。错误三model 名称不匹配。原文使用 deepseek/deepseek-chat本文保持这个写法。如果你改成了 deepseek-chat、DeepSeek-Chat 或其他别名可能触发 model not found。遇到此类报错去模型对话页或模型列表核对可用模型 ID再回代码里改。错误四环境变量干扰。LiteLLM 可能会读取 OPENAI_API_KEY、OPENAI_API_BASE 等环境变量DashScope 也可能读取 DASHSCOPE_API_KEY。如果显式传参和系统环境变量同时存在优先确认实际生效的是哪一个。排错时可以临时在代码里显式写参数确保不依赖隐式环境变量。错误五安装包缺失或版本不兼容。LlamaIndex 生态拆包较细llama-index-llms-litellm、llama-index-core、dashscope 缺一不可。导入报 ModuleNotFoundError 时先补安装再确认虚拟环境是否是当前终端使用的环境。错误六把 TaoToken 当成模型替代。TaoToken 在这里只提供统一 Key 和 Base URL不替代 DeepSeek 或百炼模型本身。DeepSeek 仍然由对应模型提供服务百炼 text-embedding-v3 仍然由 DashScope 调用。不要因为换了 Base URL 就认为 Embeddings 也要一起换 Key。错误七复制链接时带空格或 UTM。api_base 只写 https://taotoken.net/api 不要从官网活动链接、控制台链接或带 UTM 的浏览器地址里复制。多余参数可能导致请求路径异常。语义一致 CTA接入文档、API Keys 与模型对话如果你正在按本文接入 LlamaIndex 的 LiteLLM 在线 DeepSeek建议先把 Key 和 Base URL 固定下来到 API Keys 页面创建并复制 Key地址是 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentapi-keys 。接入过程中遇到路径、鉴权或模型名问题可以对照接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdoc 。如果你只是想先验证 deepseek/deepseek-chat 是否可用可以直接去模型对话页发一条“你是谁”https://taotoken.net/console/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmodel-chat 。确认模型返回 assistant 内容后再回到 LlamaIndex 里填 LiteLLM。长期做编码、Agent 或批量任务可以了解 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding-plan 。最后再强调一次本文的边界LLM 通道改用 TaoToken 的 Base URL 和 KeyEmbeddings 通道继续走百炼 DashScope Key 调 text-embedding-v3。按这个边界配置LlamaIndex 的 LiteLLM 在线 DeepSeek 调用能跑通QwenAliyunEmbedding 的原文步骤也不用推翻。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →