基于langchain+千帆sdk-自定义模型和文档加载器
大模型开发/技术交流
- LLM
- 文心大模型
- API
2023.10.087545看过
背景介绍
在上文基于langchain+千帆sdk的一个基于文档的QA问答Demo给大家演示了如果使用langchain快速实现QA问答。但是存在两个限制:
-
默认使用的大模型是
ERNIE-Bot-trubo
,如何使用千帆平台上的其他预置服务,甚至是自己SFT以后发布的大模型服务。 -
问答检索只能基于网页URL,如何基于其他的在线pdf文档或者本地pdf文档进行问答。
上面的两个问题,qianfan-langchain都为你做了考虑。
自定义大模型服务
使用预置服务
定位到基于langchain+千帆sdk的一个基于文档的QA问答Demo文档的
Step 5. Generate
章节,修改QianfanChatEndpoint这个类的入参,通过model字段指定要使用的大模型服务即可。具体示例如下:
from langchain.chains import RetrievalQAfrom langchain.chat_models import QianfanChatEndpointfrom langchain.prompts import PromptTemplateQA_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-chatllm = 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-Bot
、ERNIE-Bot-turbo
、BLOOMZ-7B
、Qianfan-BLOOMZ-7B-compressed
、Llama-2-7b-chat
、Llama-2-13b-chat
、Llama-2-70b-chat
、Qianfan-Chinese-Llama-2-7B
、ChatGLM2-6B-32K
、AquilaChat-7B
使用自定义服务
自定义服务主要包含两类:
-
用户 SFT模型 部署至资源池发布为服务
-
使用 预置模型 部署至资源池发布为服务
自定义服务因为没有固定的服务访问路径,可以通过修改QianfanChatEndpoint这个类的入参,通过endpoint字段指定要使用的大模型服务即可。
from langchain.chains import RetrievalQAfrom langchain.chat_models import QianfanChatEndpointfrom langchain.prompts import PromptTemplateQA_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 PyPDFLoaderloader = 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

需要确保
-
创建的应用已经开通了对应大模型服务的权限。可以在【应用接入】当中检查应用是否开通了大模型服务的权限。
-
需要使用的大模型服务已经开通了计费。可以在【计费管理】当中检查大模型服务开通付费情况。
版本依赖说明
lanchain >= 0.0.292
qianfan >= 0.0.3
python >= 3.7
qianfan >= 0.0.3
python >= 3.7
评论
