LlamaIndex + ModelRiver 强强联手合体

把从 LlamaIndex 脱口而出的每一声查询调配悉数指路由 ModelRiver 代为引航。即刻让您的 RAG 数据工厂享受到无痛级别的被动式防故障坠毁备位转移、锱铢必较的账目成本图记跟制式的结构化成品封装规范输出。

概势大起底 (Overview)

要知道 LlamaIndex 这方大拿可是出了名是个为 RAG 底座、编织打捞那由庞杂知识拼就而成的硕大图谱,以及专吃对付公文纸叠大山式的文档问答系统 (QA) 这种重度依托着需要与数据面发生贴身感知肉搏才能大展宏图显神威的重装架构而量身打造的特供化 LLM 开发包底盘。正因为该家好汉早已贴地气地默认承接并容纳下那泛大街谁都在使得与 OpenAI 别无二致的客户端点衔接面,于是乎要想跟咱们的 ModelRiver 打通串联,那也自然是只需轻轻变动拨改那一行只言片语便大功告成事毕矣。

您所能攫取坐收囊中的好处有哪些:

  • 上下每一丝经由 LlamaIndex 口中崩发指派的走访探问都将被无声息顺当地分流入由 ModelRiver 给您挂好的专属通道网
  • 自带了无感被动切换防坠崖大救星机制,若是你挂帅点将的头号当家主力供货厂商在检索问路期间突发癫痫哑火脱线
  • 以点滴 Token 豆子计跟按每次去文档海里翻找抽调拼句外加提炼发散生成环节统统有案可稽可复盘审账跟计算开花本钱的大数据记账权
  • 光在总平台幕后调度控制台之上就能徒手完成供应商阵中人选走马走账换角大轮调戏码:免去了牵一发还要劳师动众去倒腾那原码基桩再去重启翻炒布置的大烦忧

搞点干爽利落一步到位的启动仪式 (Quick start)

把需要的组装补给库依赖包给盘上来安好了先

Bash
pip install llama-index llama-index-llms-openai llama-index-embeddings-openai

将 LlamaIndex 的喉管卡在咱们的 ModelRiver 阀口上拧死

PYTHON
1from llama_index.llms.openai import OpenAI
2from llama_index.embeddings.openai import OpenAIEmbedding
3from llama_index.core import Settings
4 
5# 给用来正儿八经憋大招遣词造句搞主干生成的这位重炮手 (LLM for generation) 挪个窝
6llm = OpenAI(
7 api_base="https://api.modelriver.com/v1",
8 api_key="mr_live_YOUR_API_KEY",
9 model="my-chat-workflow",
10 temperature=0.7,
11)
12 
13# 管叫那处理把成篇大论砸碎摊平为向量降维码流的这一号角色 (Embeddings) 给找准靠山 (若是你碰巧在此处也开通启用了专门负责伺候转写投影业务的主力专槽工作流的话)
14embed_model = OpenAIEmbedding(
15 api_base="https://api.modelriver.com/v1",
16 api_key="mr_live_YOUR_API_KEY",
17 model="my-embedding-workflow",
18)
19 
20# 大棒一挥:立它为整个全局环境下所有兄弟都必须无条件听令的法定铁手腕默认标配 (Set as global defaults)
21Settings.llm = llm
22Settings.embed_model = embed_model

啃文山书海式的文件一问一答 (Document QA)

搬运书袋入库造册并且给挂上索引书签

PYTHON
1from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
2 
3# 把指定了名叫这个路牌目录的房里成摞散纸件堆全一股脑装车拉进门 (Load documents from a directory)
4documents = SimpleDirectoryReader("./data").load_data()
5 
6# 然后建起名录档案的索引墙图册 (这底下把字面翻译成降维密字长串的操作全交由 ModelRiver 包全了)
7index = VectorStoreIndex.from_documents(documents)
8 
9# 出列开战要答卷咯 (那些真正打动了 LLM 去思考作答的深邃质询这下子就也全托付进了 ModelRiver 的地盘里了)
10query_engine = index.as_query_engine()
11response = query_engine.query("请告诉我在这些发黄字皮纸页堆里盘绕主打的几根故事主轴命题核心主线上都刻写了啥意思?")
12print(response)

从生肉文字字串当中活取起手干

PYTHON
1from llama_index.core import Document, VectorStoreIndex
2 
3documents = [
4 Document(text="常听说这唤作 ModelRiver 的神明是一具把各式漫天飞扬要命的跟 AI 有交涉求问帖抛包分转路由去到海量列阵大拿名下的分拨神机。"),
5 Document(text="所谓的重度打造配置工作流机制囊括并定义了一切从对大供给方供应商之确立、这底下能干将挑型号敲定连同当它俩玩脱熄火了还得拉来殿后的换备用胎后路策略之规制配置大总管集权。"),
6 Document(text="而被施加上锁了的结构化倒模输出规范则是斩钉截铁定下铁证合约以绝对强权逼得那些跑来交差的成篇字句死活亦只能在这副名为 JSON 的死框框里苟定绝不逾越雷池半寸。"),
7]
8 
9index = VectorStoreIndex.from_documents(documents)
10query_engine = index.as_query_engine()
11response = query_engine.query("您可知晓这叫作个 ModelRiver 的行当是如何拨弦打弄那些针对它底下挂靠的一路供应商们施加并料理他们走过场次序派发这手腾挪转路由身段活的?")
12print(response)

连珠炮般对切开扯的连天拉剧长谈对话机头 (Chat engine)

PYTHON
1chat_engine = index.as_chat_engine(chat_mode="context")
2 
3response = chat_engine.chat("那么到底这唤作 ModelRiver 者是尊哪路真神底细呢?")
4print(response)
5 
6# 就着话茬再一路粘打猛追深问到底 (此番招式还能不忘死咬住前头扯的老交情上文不放手以护住上下气血语境不会散架子跑调)
7response = chat_engine.chat("能再细细说穿了它那个说是不脱靶不断电的故障大滑翔无痛转移绝学又是个怎样的运转名堂口诀么?")
8print(response)

点滴潺潺绵柔现字如吐丝流泻向面版 (Streaming)

PYTHON
1query_engine = index.as_query_engine(streaming=True)
2 
3streaming_response = query_engine.query("给我把这叫个兜底转挡扛刀机制(failover)给掰开了揉碎了里外通透解出个大底细来瞧瞧")
4streaming_response.print_response_stream()

发散切碎再分头发配兵力探题目的支脉分级小探子搜捕引擎机动大队 (Sub-question query engine)

但凡撞上那些个头特大如同长龙阵一样的复杂重型疑难大题目需要你把它大卸八块剁开来一点点打散分锅下料成各派小的单刀切题兵分路探穴法方能理得分明时请上它:

PYTHON
1from llama_index.core.query_engine import SubQuestionQueryEngine
2from llama_index.core.tools import QueryEngineTool, ToolMetadata
3 
4# 为截然各有出路分别归口管理不在一条道上的杂料乱卷集文件套专门打模子配不同出差使的小差役套具来把各自这一路地头蛇给理顺捋圆滑
5tool_1 = QueryEngineTool(
6 query_engine=index_1.as_query_engine(),
7 metadata=ToolMetadata(
8 name="product_docs",
9 description="所有打上商品产线功能件介绍或者附庸特性卖弄文字宣传大法的册子全收于此"
10 ),
11)
12 
13tool_2 = QueryEngineTool(
14 query_engine=index_2.as_query_engine(),
15 metadata=ToolMetadata(
16 name="api_docs",
17 description="大通篇给极客程序员照着依葫芦画大瓢用的 API 取用图解全篇名录合集配码说明文体"
18 ),
19)
20 
21# 后方的这位只顾收底盘控着各个旁支细流的小疑难追问马达核心其最终抛头露脸跑腿求真的出包方均皆全归了流给到了由底头这统管大阵中交警 ModelRiver 名下去签收放行过了这道法门后向远方递交
22query_engine = SubQuestionQueryEngine.from_defaults(
23 query_engine_tools=[tool_1, tool_2],
24 llm=llm,
25)
26 
27response = query_engine.query("请把这主战线上列阵出摊的所有叫好功能件特点长处挨个儿都拿去跟你那在后台藏的暗箱叫作 API 操纵潜力的真手腕功夫拉到同个天平上对比一通打打称斤两让俺过过目")
28print(response)

把各种异化零碎不同工种单拆分离塞进各个量身特配对版的别动工作流套组通道上分流进军分击

为降维压缩映射刻版去配那种价格白菜又极尽粗快出活如风影闪电掠过的轻骑兵去扛旗包办,而又拨一尊孔武有力精深厚积善言工文体巨力强的大猛犸象留着它作最终坐镇憋文作词的大杀器大梁使唤这就叫差异配队。

PYTHON
1from llama_index.llms.openai import OpenAI
2from llama_index.embeddings.openai import OpenAIEmbedding
3 
4# 疾步如飞轻如燕般专门专工搞定刻板降维向量映射打包字串的小快手 (Fast embedding model)
5embed_model = OpenAIEmbedding(
6 api_base="https://api.modelriver.com/v1",
7 api_key="mr_live_YOUR_API_KEY",
8 model="fast-embeddings", # 大概就是接上那像 text-embedding-3-small 之类廉价又特好使大流线
9)
10 
11# 稳如重器沉着静气去构架庞大立论打基输出下重手生成答解的大强手型款主核大模型重器 (Powerful generation model)
12llm = OpenAI(
13 api_base="https://api.modelriver.com/v1",
14 api_key="mr_live_YOUR_API_KEY",
15 model="deep-generation", # 像去靠上诸如 GPT-4o 或者是 Claude 3.5 这等大当家这级别当打红牌才配拥的宽阔大江名流专属工作流水包间线
16)
17 
18# 从中取轻就简光负责在里头穿插收个毛边拔尖儿抽要大抵粗略做个收纳总结提神摘要小动作而指哪打哪便宜量还大轻灵快捷便宜版机型 (Lightweight model for summarisation steps)
19summary_llm = OpenAI(
20 api_base="https://api.modelriver.com/v1",
21 api_key="mr_live_YOUR_API_KEY",
22 model="fast-summary", # 例如比照 GPT-4o-mini 这号段位当差专门跑个流水做那极巧又速成之工作流大线专属槽通道
23)

被供进神龛的铁板钉钉必胜绝招以及避坑良方要则不传之真秘诀 (Best practices)

  1. 分兵破拆互不干政两挂车切开来用大不一样的流派专属工位给拉车 (Separate embedding and LLM workflows): 要指使动用上那最贱卖廉价也快如旋风的粗模轻兵型号用来办这大批量把生猛大乱字句图钉压平打包做降维打靶压缩(即 embeddings 这个粗累活),再去留有这等气沉丹田力顶泰山具备极强神魂主推演重功型大家伙用来主领全军生词现对的大将冲锋担纲收口把尾主打发散推陈(generation,即起势生大文生成答对大回帖)才作长策也是正道。
  2. 切莫眨眼成精时刻严防死盯在铺这宏伟索引大册版开天辟地初造库时刻疯狂乱烧滚动的花费单价跳高数字码表: 把一本惊天大块头宏篇巨著生劈切解拿去扔炉里面做映射刻底版化炼可是一趟能逼停疯狂吞吃如无尽黑洞贪吃大批恐怖浩瀚 Token 数目的暴行旅途;还请赶紧时刻盯牢绑在那位于在主账控制面 清查底案日志薄册位 (Request Logs) 前头免得叫人被割了肉尤不知。
  3. 挂好免下桌的不死免死金牌自动接包大顺位换胎顶包制 (Configure failover): 有个事实你得早摸透它,一遭涉及挂着 RAG 翻江倒海底细那查询全流程能漫长费时得很,您必须得提拉稳下并设定备战有充分补底的救灾替身型号供用商列个大名单跟防丢大兜圈网,得去确权以图保驾这些翻云捣海查书拉长流线不出岔差乱了锅阵。
  4. 拴紧口头框不挪身在规范打板式压模里成片拿来硬塞挤出标定好外包装造型的格式样板成果来见客 (Use structured outputs): 直接奔到 ModelRiver 之老家内堂重地设定好去勾勒规约这些回话作答都必须要披戴些长着哪幅长短嘴脸哪根脚爪长怎样的体貌外型框架面纱,藉以此让这送出来呈现全盘如你意一模一个面貌。
  5. 打通闸道水吼狂流如天降流瀑哗啦直挂向脸直冲奔打往幕前客座眼前直接泄发成排 (Stream for interactive QA): 想玩面对着直接就开唱跟打擂互推这种需要高度抢先夺目即刻反馈好有即视体验打斗推击双雄激辩你来我往活的就绝对别关这个要勾挂成带流挂串狂泻版式状态让文字雨挂着屏幕。

还有这下家余留大菜接下来继续去逛的地方找乐子