尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
RAG 系统 Embedding 流程分析与自托管 API 适配
1. 问题背景在构建一个轻量化 RAG检索增强生成系统时使用了 LangChain 框架结合自托管的 FreeLLMApi兼容 OpenAI 格式进行文本向量化。在开发过程中遇到了运行时类型错误并对 Embedding 模型如何处理文本以及自托管服务与 OpenAI 原生服务的差异产生了疑问。2. 运行时问题分析2.1 错误现象错误日志TypeError: Document.__init__() got an unexpected keyword argument page_content2.2 根本原因该错误发生在load_chunks_from_file函数中。代码尝试通过Document(page_content..., metadata...)实例化对象。原因实例化时传递的参数名page_content与当前环境中安装的Document类定义不匹配。这通常是因为导入了错误的Document类或者使用了版本不兼容的 LangChain 核心库。解决方案确保从langchain_core.documents正确导入Document类并核对该版本类构造函数的参数名。3. 深度技术探讨Embedding 工作机制3.1 文本是如何转换为向量的调用embeddings.embed_documents(batch_texts)时内部执行流程如下原始文本→\rightarrow→Tokenizer分词→\rightarrow→Token IDs (整数序列)→\rightarrow→神经网络→\rightarrow→Embedding向量核心结论神经网络无法直接处理字符串必须经过 Token 化转换为数字 ID 才能进行矩阵运算。3.2_tokenize方法的作用在 LangChain 的OpenAIEmbeddings实现中_tokenize方法的作用不是预处理文本而是计数量长度。目的计算当前文本包含多少个 token以判断是否超过模型最大长度限制例如 8191 tokens。逻辑如果超限→\rightarrow→执行截断或切分→\rightarrow→再次检查如果不超限→\rightarrow→进入_get_len_safe_embeddings阶段。3.3_get_len_safe_embeddings解析该方法名为 “Length Safe”意味着它假设输入文本已经通过了长度校验因此它会跳过所有校验步骤直接将原始字符串batch_texts发送给 API 接口。4. 自托管服务 vs OpenAI 原生 API4.1 推理逻辑对比特性OpenAI 原生 API自托管推理服务 (如 FreeLLMApi)传输内容原始字符串 (str)可能是字符串也可能是Token IDsTokenize 位置服务端完成可能在客户端完成→\rightarrow→传输 IDsAPI 接口https://api.openai.com/v1私有 IP (如172.21.6.101) 自定义端口模型定义明确的模型名 (如text-embedding-3)可能使用auto等路由别名4.2 如何判断是否为自建推理服务IP 地址使用私有 IP 段10.x,172.16-31.x,192.168.x。端口号使用非标准 HTTPS 端口如3001。客户端类型self.client的类型不是标准openai.OpenAI类。输入参数API 调用时传递的是batch_tokens(List[int]) 而非batch_texts(List[str])。5. 适配方案让自托管服务走 OpenAI 逻辑若自托管服务兼容 OpenAI 格式但其 SDK 强制要求传递batch_tokens而你希望传输原始文本可采取以下方案方案 A重写 Embedding 类 (推荐)继承OpenAIEmbeddings并重写embed_documents绕过内部的 Token 转换逻辑强制发送原始字符串。方案 B直接使用 HTTP 请求不使用 LangChain 的封装直接通过requests或httpx调用/v1/embeddings端点确保input字段传递的是字符串列表。# 伪代码示例responserequests.post(urlhttp://172.21.6.101:3001/v1/embeddings,json{model:auto,input:[原始文本1,原始文本2]},headers{Authorization:fBearer{API_KEY}})6. 总结运行时错误→\rightarrow→检查类导入与参数匹配。Embedding 流程→\rightarrow→本地 Tokenize 仅用于长度校验→\rightarrow→传输原始文本→\rightarrow→服务端 Tokenize→\rightarrow→生成向量。自托管识别→\rightarrow→通过私有 IP、非标端口及self.client类型判断。适配关键→\rightarrow→确认 API 接收的是string还是token_ids通过重写方法或直接调用 REST API 解决不兼容问题。
RELATED

相关推荐

同时降重降AIGC率能降到多少?实测两项都压到达标以内

同时降重降AIGC率能降到多少?实测两项都压到达标以内

同时降重降AIGC率能降到多少?实测两项都压到达标以内 你现在最想知道的,大概就是一个具体的数:如果重复率和 AI 率一起降,到底能降到多少?是勉强压到线上,还是能踏踏实实落到合格区间里?你手里…

📅 2026/8/23 17:18:11
2026年电销外包服务商怎么选?合规要求与选型标准解析

2026年电销外包服务商怎么选?合规要求与选型标准解析

2026年,随着通信监管持续收紧与AI技术普及,电销外包市场进入深度调整期。部分服务商存在低价引流后增加隐形收费、以AI冒充真人、数据不透明等问题。企业在选择服务商时,需重点关注合规资质、坐席真实性、数据透明度和行业适配度等维度。下文…

📅 2026/9/8 14:17:58
Vue.js+uni-app构建电商小程序与后台管理系统实战指南

Vue.js+uni-app构建电商小程序与后台管理系统实战指南

在实际电商项目开发中,小程序商城和后台管理系统往往是密不可分的整体。特别是对于一番赏手办这类垂直领域,既要保证前端用户体验的流畅性,又要确保后台管理的高效性。基于 Vue.js 和 uni-app 的技术栈组合,能够实现一套代码多端发…

📅 2026/8/23 9:58:51
MORE NEWS

更多资讯

📰

Qt甘特图重写:基于QGraphicsScene的高性能交互式任务调度组件

简介:一套完整的Qt甘特图组件源码(GanttMel-master 项目),面向需要在桌面应用中展示任务时间线、项目进度或进行项目调度的Qt开发者及相关学习者。资源包共27个文件,主要包含C源代码(cpp/h)、Qt…

📰

想管理商品库存,库存管理系统该怎么选?

库存管理是线下实体门店经营的核心命脉。库存积压会占用门店流动资金,库存短缺会直接流失客源,库存数据混乱则会导致对账出错、利润核算失真。很多中小门店的库存乱象,根源并非运营能力不足,而是选错了管理系统。市面门店管理系统…

📰

AI社交产品架构拆解:从AI Agent到消息推送与积分体系的完整设计

引言:为什么我要把 AIFriends 的架构和流程单独写成一份复习文档如果你最近在准备 AI 应用方向的面试,或者正在从零搭一个带社交属性的 AI 产品,那 AIFriends 这个项目应该是个不错的参考样本。它不算特别复杂,但麻雀虽小五脏俱全…

📰

程序员转型全栈运营:从写代码到驱动用户增长的实战路径

1. 为什么一个写代码的人,最后被逼成了“全栈运营”1.1 从“需求写完了吗”到“用户为什么不点按钮”我原来是一个正经写代码的程序员,日常工作是接需求、写接口、修 bug、上线、再修 bug。我那时的世界观很简单:产品经理说做什么&#xff0c…

📰

量化交易入门:从产品分类到盈利模式的完整指南

做量化交易也有一段时间了,从最早自己写Python脚本跑股票策略,到后来接触期货、期权,再到帮团队搭建整套回测框架,最大的感受是:新手入门最难的不是代码,也不是数学,而是根本没搞清自己到底在交…

📰

VC++实战:基于POP3的邮件监视系统与仿360界面实现

简介:一份基于VC的POP3邮件系统完整项目源码,面向C网络编程及界面开发学习者。项目实现了标准的POP3协议收信、后台线程定时监视邮箱、提取新邮件数量/发件人/主题等信息,并仿照360安全卫士设计交互界面,演示了通知栏图标、弹窗提…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬