logo
8

基于langchain+千帆sdk-自定义模型和文档加载器

背景介绍

在上文基于langchain+千帆sdk的一个基于文档的QA问答Demo给大家演示了如果使用langchain快速实现QA问答。但是存在两个限制:
  1. 默认使用的大模型是ERNIE-Bot-trubo如何使用千帆平台上的其他预置服务,甚至是自己SFT以后发布的大模型服务。
  2. 问答检索只能基于网页URL如何基于其他的在线pdf文档或者本地pdf文档进行问答。
上面的两个问题,qianfan-langchain都为你做了考虑。

自定义大模型服务

使用预置服务

定位到基于langchain+千帆sdk的一个基于文档的QA问答Demo文档的Step 5. Generate章节,修改QianfanChatEndpoint这个类的入参,通过model字段指定要使用的大模型服务即可。具体示例如下:
  
  
  
  
  
  
from langchain.chains import RetrievalQA
from langchain.chat_models import QianfanChatEndpoint
from langchain.prompts import PromptTemplate
QA_CHAIN_PROMPT = PromptTemplate.from_template(CUSTOM_PROMPT_TEMPLATE)
# 不指定模型,默认使用ERNIE-Bot-trubo
#llm = QianfanChatEndpoint(streaming=True)
# 指定model为ERNIE-Bot
#llm = QianfanChatEndpoint(streaming=True,model="ERNIE-Bot")
# 指定model为ChatGLM2-6B-32K
#llm = QianfanChatEndpoint(streaming=True,model="ChatGLM2-6B-32K")
# 指定model为Llama-2-70b-chat
llm = QianfanChatEndpoint(streaming=True,model="Llama-2-70b-chat")
retriever=vectorstore.as_retriever(search_type="similarity_score_threshold", search_kwargs={'score_threshold': 0.0})
qa_chain = RetrievalQA.from_chain_type(llm, retriever=retriever, chain_type_kwargs={"prompt": QA_CHAIN_PROMPT})
qa_chain({"query": QUESTION1})
当前支持的预置服务清单包含:ERNIE-BotERNIE-Bot-turboBLOOMZ-7BQianfan-BLOOMZ-7B-compressedLlama-2-7b-chatLlama-2-13b-chatLlama-2-70b-chatQianfan-Chinese-Llama-2-7BChatGLM2-6B-32KAquilaChat-7B

使用自定义服务

自定义服务主要包含两类:
  1. 用户 SFT模型 部署至资源池发布为服务
  2. 使用 预置模型 部署至资源池发布为服务
自定义服务因为没有固定的服务访问路径,可以通过修改QianfanChatEndpoint这个类的入参,通过endpoint字段指定要使用的大模型服务即可。
  
  
  
  
  
  
from langchain.chains import RetrievalQA
from langchain.chat_models import QianfanChatEndpoint
from langchain.prompts import PromptTemplate
QA_CHAIN_PROMPT = PromptTemplate.from_template(CUSTOM_PROMPT_TEMPLATE)
# 指定endpoint为用户自定已发布的服务名称
llm = QianfanChatEndpoint(streaming=True,endpoint="ptuning_v200")
retriever=vectorstore.as_retriever(search_type="similarity_score_threshold", search_kwargs={'score_threshold': 0.0})
qa_chain = RetrievalQA.from_chain_type(llm, retriever=retriever, chain_type_kwargs={"prompt": QA_CHAIN_PROMPT})
qa_chain({"query": QUESTION1})
上面的endpoint对应用户发布服务后,所得到的服务地址的最后一段,如下图所示,对应/chat/后面的内容,也就是ptuning_v200

自定义文档加载器

基于langchain+千帆sdk的一个基于文档的QA问答Demo文档的Step 1. Load章节,我们可以看到使用的文档加载器是WebBaseLoader,其实langchain官方也提供了很多官方加载器Module,其中就包含PyPDFLoader。在本demo当中,我们将原先的WebBaseLoader替换PyPDFLoader,其他全部保持不变,代码如下所示:
  
  
  
  
  
  
from langchain.document_loaders import PyPDFLoader
loader = PyPDFLoader("example_data/中国古代史-明朝.pdf")
data = loader.load()
如果还没有安装PyPDFLoader,可以先执行下面命令进行安装:
  
  
  
  
  
  
pip install pypdf

Demo物料

可以直接下载Demo:qianf-langchain-chat-with-pdf.zip,只需修改step0的ak和sk,即可顺利跑完整个demo。

应用创建以及权限开通

ak/sk可以登录千帆控制台创建应用获得:https://console.bce.baidu.com/qianfan/ais/console/applicationConsole/application
需要确保
  1. 创建的应用已经开通了对应大模型服务的权限。可以在【应用接入】当中检查应用是否开通了大模型服务的权限。
  2. 需要使用的大模型服务已经开通了计费。可以在【计费管理】当中检查大模型服务开通付费情况。

版本依赖说明

lanchain >= 0.0.292
qianfan >= 0.0.3
python >= 3.7
评论
用户头像