当前位置: 首页 > news >正文

如何基于OneAPI构建langchain RAG系统

langchain是LLM时代广泛使用的agent和rag构建工具。

这里尝试构建基于langchain的RAG系统。

1 OneAPI安装

langchain主要采用openai接口访问大模型,然而面临访问受限的问题。

使用openai接口访问其他大模型,需要大模型厂商提供openai兼容接口,往往面临不可用问题。

OneAPI是LLM OpenAI接口的管理、分发系统,通过标准的OpenAI API访问所有的大模型。

OneAPI(2025.10.10)支持Deepseek、阿里通义、百度千帆、火山豆包、腾讯元宝等大部分LLM。

这里采用docker方式部署One API,命令如下

docker run --name one-api -d --restart always -p 3000:3000 -e TZ=Asia/Shanghai -v /data/apps/llm/oneapi/data/one-api:/data justsong/one-api

并基于OneAPI配置Deepseek R1大模型,具体过程参考

https://blog.csdn.net/liliang199/article/details/151393128

2 langchain安装

这里基于conda python 3.1,假设python环境已经安装。

2.1 安装依赖工具

gcc、g++、rust、pymupdf

conda install -c conda-forge gcc=12 gxx=12

conda install conda-forge::rust

conda install conda-forge::mupdf

conda install conda-forge::pymupdf

2.2 向量库

faiss-cpu, gcc, g++

conda install -c pytorch faiss-cpu

2.3 框架

langchian

pip install --upgrade langchain -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install --upgrade langchain-openai -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install --upgrade langchain-community -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install --upgrade langchain_ollama -i https://pypi.tuna.tsinghua.edu.cn/simple

3 model配置

这里分别配置LLM模型Deepseek r1和向量模型bge-m3。

3.1 LLM模型

在OneAPI配置对Deepseek r1的访问,支持本地以openai接口方式访问。具体配置过程参考

https://blog.csdn.net/liliang199/article/details/151393128

3.2 embedding模型

在OneAPI配置对本地ollama embedding模型的访问,模型为bge-m3

本地采用docker部署ollama,命令如下。

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

具体过程参考 https://blog.csdn.net/liliang199/article/details/151393128

模型pull过程示例如下

ollama pull bge-m3

1.3 OneAPI配置ollama

需要注意的是,OneAPI配置ollama embedding模型时,需要配置proxy代理地址。

OneAPI配置Ollama时默认proxy地址是http://localhost:11334

OneAPI运行在docker 容器,不能通过localhost:11334访问部署在宿主机的ollama服务。

因此,需要将localhost改为宿主机的ip,示例如下

4 运行langchain

基于langchain、ollama、faiss、oneapi构建RAG系统,进行数据导入、向量化、检索生成示例。

测试输入为llama2.pdf,原始链接如下

https://arxiv.org/pdf/2307.09288

4.1 加载文档

输入为"data/llama2.pdf",通过环境变量设置OneAPI的令牌和部署地址,代替OpenAI默认配置。

import os
os.environ['OPENAI_API_KEY'] = "sk-xxxxxxxxxxx" # OneAPI生成的令牌
os.environ['OPENAI_BASE_URL'] = "http://localhost:3000/v1" # OneAPI部署地址from langchain_ollama import OllamaEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import FAISS
from langchain_openai import ChatOpenAI
from langchain.chains import RetrievalQA
from langchain_community.document_loaders import PyMuPDFLoaderfrom dotenv import load_dotenv,find_dotenv
_ = load_dotenv(find_dotenv(),verbose=True)# 加载文档
loader = PyMuPDFLoader("data/llama2.pdf")
pages = loader.load_and_split()# 文档切分
text_splitter = RecursiveCharacterTextSplitter(chunk_size=300,chunk_overlap=100,length_function=len,add_start_index=True,
)texts = text_splitter.create_documents([page.page_content for page in pages[:4]]
)

4.2 RAG向量化

faiss向量化代码如下,注意这里采用OllamaEmbedding,调用ollama的bge-m3向量化。

# RAG向量化
embeddings = OllamaEmbeddings(model="bge-m3")
db = FAISS.from_documents(texts, embeddings)# 检索 top-2 结果
retriever = db.as_retriever(search_kwargs={"k": 2}) 

4.3 在线检索

以下是在线检索代码,注意这里采用ChatOpenAI,以OpenAI的方式访问deepseek-r1。

首先,将文本转向量,召回相似的文本片段;

然后,将召回的结果和原始的query输入到大模型,进行总结。

from langchain.schema.output_parser import StrOutputParser
from langchain.schema.runnable import RunnablePassthroughfrom langchain.prompts import (ChatPromptTemplate,HumanMessagePromptTemplate,SystemMessagePromptTemplate,
)
# Prompt模板
template = """Answer the question based only on the following context:
{context}Question: {question}
"""
prompt = ChatPromptTemplate.from_template(template)
llm = ChatOpenAI(model="deepseek-r1")# Chain
rag_chain = ({"question": RunnablePassthrough(), "context": retriever}| prompt| llm| StrOutputParser()
)rag_chain.invoke("Llama 2有多少参数")

输入如下所示

Llama 2的参数量级覆盖从70亿到700亿(7 billion至70 billion parameters),具体模型规模包括7B、13B等不同版本,最高达到700亿参数。这一信息在提供的上下文中明确提到参数范围是从7 billion到70 billion。

reference

---

OneAPI-通过OpenAI API访问所有大模型

https://blog.csdn.net/liliang199/article/details/151393128

docker ollama部署轻量级嵌入模型 - EmbeddingGemma

https://blog.csdn.net/liliang199/article/details/151393128

开源向量LLM - BGE (BAAI General Embedding)

https://blog.csdn.net/liliang199/article/details/149773775

bge-m3

https://www.ollama.com/library/bge-m3

http://www.dtcms.com/a/470846.html

相关文章:

  • 网站建设说明书模板wordpress菜单结构
  • 如何应对紧急投标?AI工具1小时完成400页标书
  • 百度网盘PC电脑端提速方法
  • 【触想智能】什么是工业平板电脑以及工业平板电脑对制造业具有什么意义
  • 郑州 网站建设p9制作公司
  • 深度解析 “应用程序无法正常启动 0xc000007b”:原因、解决方案与预防措施
  • 南宁智慧园区网站建设wordpress如何更改页面链接
  • PowerBI实战-跨页面钻取drill through
  • 怎样做网站标题优化百度网站开发
  • 前后端解耦架构的演进:从REST到GraphQL与gRPC的范式迁移
  • 9.4 归并排序(排序(上))
  • 老人摔倒检测的智能视觉分析技术与应用 跌倒检测 儿童摔倒检测 跌倒预警
  • 网站制作 语言选择怎么做h5网站模板免费下载
  • 【Linux】数据链路层 and 其他知识
  • 个人网站怎么做口碑怎么创建小程序卖东西
  • linux下conda未安装的解决方法(离线安装linux下的conda)
  • 不错的免费网站建设动漫画设计与制作是学什么
  • 《3D动作游戏受击反馈:从模板化硬直到沉浸式打击感的开发拆解》
  • QWidget 如何设置GPU渲染
  • 做动漫头像的网站it之家网站源码
  • 网站流量统计分析做外贸网站要注意什么
  • 建设本地端网站美食网页设计作品欣赏
  • 哪个网站看电影做便宜制作网站需要哪些技术
  • SPI接口数模转换DAC手册学习
  • OOALV 没有布局保存按钮解决
  • 网站建设陕西wordpress建站 百度网盘
  • GB28181: 应用层网关 ALG(Application Level Gateway)
  • Linux应用 线程
  • 网站建设公司业务提成多少wordpress 缩略图设置
  • RPC的原理及Go RPC