如何使用DSPy搭建RAG应用?

内容分享1周前发布
0 0 0

如何使用DSPy搭建RAG应用?

DSPy搭建RAG的核心是「检索+生成+优化器自动调优」,无需手动调提示词,以下是极简可落地步骤(含本地向量库适配):

1. 前置准备:安装依赖+配置核心组件

python

# 安装依赖

pip install dspy-ai openai sentence-transformers faiss-cpu

# 配置模型与检索器(本地FAISS+Sentence-BERT,适配私有数据)

import dspy

import faiss

import numpy as np

from sentence_transformers import SentenceTransformer

# 1. 初始化大模型(支持Ollama本地模型:dspy.Ollama(model=”llama3″))

llm = dspy.OpenAI(model='gpt-3.5-turbo-instruct', max_tokens=800)

# 2. 初始化Embedding模型(用于文档/问题向量化)

embed_model = SentenceTransformer('all-MiniLM-L6-v2')

# 3. 构建本地FAISS检索器(私有数据用这个,公开数据可换ColBERTv2)

def build_faiss_retriever(documents):

embeddings = embed_model.encode(documents) # 生成文档向量

index = faiss.IndexFlatL2(embeddings.shape[1]) # 初始化FAISS索引

index.add(embeddings) # 加入向量

return dspy.FAISSRetriever(index=index, documents=documents, embedding_model=embed_model)

# 示例私有文档(替换为你的知识库,如PDF解析后的文本)

private_docs = [

“产品A支持AI语音交互,续航24小时,售价1299元”,

“产品B主打轻便,重量200g,适配安卓/iOS系统”,

“售后政策:7天无理由退货,1年质保,全国200+服务点”

]

retriever = build_faiss_retriever(private_docs)

# 全局配置DSPy

dspy.settings.configure(lm=llm, retriever=retriever)

2. 定义RAG模块:检索+生成一体化

python

class RAGQA(dspy.Module):

def forward(self, question: str) -> dspy.Prediction:

# 步骤1:检索相关文档(k=3,返回top3相关内容)

context = dspy.Retrieve(k=3)(question).passages

# 步骤2:结合上下文生成答案(限制不编造信息)

return dspy.ChainOfThought(

signature=”question: str, context: list -> answer: str”,

instructions=”严格依据提供的上下文回答,简洁准确,不添加额外信息”

)(question=question, context=context)

3. 优化器调优(核心:自动优化提示词/检索策略)

python

from dspy.teleprompt import BootstrapFewShot

from dspy.evaluate import Evaluate

# 1. 准备训练样本(格式:[{“question”: 问题, “answer”: 正确答案}])

train_set = [

{“question”: “产品A的续航时间是多久?”, “answer”: “24小时”},

{“question”: “产品B支持哪些系统?”, “answer”: “安卓/iOS系统”}

]

# 2. 定义评估指标(判断答案是否准确)

def rag_metric(pred, ground_truth):

return ground_truth[“answer”].lower() in pred.answer.lower()

# 3. 初始化优化器并编译

teleprompter = BootstrapFewShot(metric=rag_metric, max_bootstrapped_demos=2)

optimized_rag = teleprompter.compile(RAGQA(), trainset=train_set)

4. 调用与评估

python

# 1. 调用RAG回答问题

result = optimized_rag(question=”产品A的售价是多少?”)

print(“回答:”, result.answer) # 输出:1299元

# 2. 评估优化效果(验证集测试)

dev_set = [{“question”: “售后质保期是多久?”, “answer”: “1年”}]

evaluator = Evaluate(devset=dev_set, metric=rag_metric, display_table=True)

evaluator(optimized_rag) # 展示准确率

# 3. 保存模块(后续直接加载)

optimized_rag.save(“private_rag.json”)。

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...