基于本地模型实现的简单RAG

环境:

本地部署的LLM:Qwen2-72B-Instruct-GPTQ-Int4

使用vllm启动提供服务,并且采用兼容OPENAI接口服务

嵌入模型:bge-large-zh-v1.5

简单代码:

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import FAISS
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain.chains import create_retrieval_chain
from langchain_community.embeddings import HuggingFaceBgeEmbeddings

openai_api_key = 'token-abc123'
openai_api_base = 'http://172.18.25.21:8000/v1'
mode_id = 'Qwen2-72B-Instruct-GPTQ-Int4'
embedding_id = '/bge-large-zh-v1.5'

llm = ChatOpenAI(api_key=openai_api_key, base_url=openai_api_base, temperature=0, model=mode_id)

# L
loader = WebBaseLoader("https://docs.smith.langchain.com/user_guide")
docs = loader.load()

# E
embeddings = HuggingFaceBgeEmbeddings(model_name=embedding_id)

# D
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
documents = text_splitter.split_documents(docs)

# V
vector = FAISS.from_documents(documents, embeddings)

# R
retriever = vector.as_retriever()

prompt = ChatPromptTemplate.from_template("""基于以下已知信息,简洁和专业的来回答用户的问题。
如果无法从中得到答案,请说"根据已知信息无法回答该问题",不允许在答案中添加编造成分,答案请使用中文。
已知信息:
{context}

问题:
{input}""")

document_chain = create_stuff_documents_chain(llm, prompt)
retrieval_chain = create_retrieval_chain(retriever, document_chain)
ret = retrieval_chain.invoke({"input": "langsmith如何帮助测试?"})
print(ret["answer"])

得到的回答:

LangSmith通过以下方式帮助测试:

1. **创建数据集**:允许开发者创建包含输入和预期输出的数据集,用于测试LLM(大型语言模型)应用。

2. **批量上传测试案例**:测试案例可以批量上传,即时创建,或从应用跟踪中导出,便于全面评估应用性能。

3. **自定义评估**:提供工具运行自定义评估,包括基于LLM和启发式的评分,以量化测试结果。

4. **比较视图**:在应用不同版本间进行比较,检查是否因提示、检索策略或模型选择的改变而导致性能退化。

5. **反馈过滤**:通过应用内的反馈按钮收集用户反馈,过滤并分析具有特定反馈标签和评分的跟踪,以识别问题点。

6. **注释跟踪**:支持将运行发送到注释队列,让注释者根据不同标准详细检查和注释跟踪,帮助捕捉性能退化。

7. **数据集扩展**:在应用测试阶段,可以将运行作为示例添加到数据集中,以覆盖更多真实场景,持续收集数据以优化应用。

8. **调试支持**:LangSmith默认启用跟踪,提供每一步的清晰可见性和调试信息,便于快速定位和解决问题。

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现模型RAG(Retrieval Augmented Generation)主要包括**数据准备阶段和应用阶段**两个关键环节。具体步骤如下: 1. **数据准备阶段**: - **数据提取**:首先需要确定并提取适用于特定领域的私域数据,这些数据可以是PDF文件、数据库内容或其他形式的私有知识库。 - **文本分割**:将提取出的文档进行分块处理,以便于后续的处理和检索。 - **向量化**:对分割后的文本块进行向量化操作,即将文本转换为机器能够高效处理的数值表示形式。 - **数据入库**:处理好的数据需要构建索引并存入向量数据库中,为接下来的检索任务做准备。 2. **应用阶段**: - **用户提问**:当用户提出问题时,同样需要将这个查询向量化。 - **数据检索**:利用向量数据库的检索能力,找出与用户提问相似度最高的k个文档片段。 - **注入Prompt**:将检索到的结果结合用户的原始提问,按照一定的Prompt模板组装成一个完整的输入提示给大语言模型。 - **LLM生成答案**:大语言模型根据提供的Prompt生成最终的回答。 此外,还需要考虑如何优化数据的准备过程,比如选择适合的向量化技术(如使用词嵌入模型)以及如何设计高效的检索算法来快速准确地从大量数据中找到相关信息。同时,在应用阶段,需要精心设计Prompt模板,以便大模型能更好地理解问题和检索到的信息,从而给出更准确的回答。 值得一提的是,RAG架构的优势在于它结合了大模型的强大语言理解和生成能力以及向量检索系统的高效信息获取能力,使得大模型能够在专业场景或行业细分领域中提供更加精准和丰富的回答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值