如何使用LangChain插件¶
为了便利大家结合文心大模型与LangChain开发应用,ERNIE Bot Agent扩展LangChain框架的功能,提供大语言模型(large language model)、聊天模型(chat model)、文本嵌入模型(text embedding model)等组件(这些组件的集合称为LangChain插件)。本文档将介绍ERNIE Bot Agent的LangChain插件的基础用法。
ERNIE Bot Agent的LangChain插件目前包含如下组件:
ErnieBot:大语言模型,用于完成文本补全任务。ErnieBotChat:聊天模型,用于完成对话补全任务。ErnieEmbeddings:文本嵌入模型,用于生成文本的向量表示。
准备工作¶
安装erniebot-agent与langchain:
In [ ]:
Copied!
!pip install erniebot-agent langchain
!pip install erniebot-agent langchain
根据ERNIE Bot 认证鉴权文档中的说明,获取AI Studio星河社区的access token。执行如下代码,填写access token并敲击回车键:
In [ ]:
Copied!
import getpass
access_token = getpass.getpass(prompt="Access token: ")
import getpass
access_token = getpass.getpass(prompt="Access token: ")
ErnieBot¶
ErnieBot是LangChain大语言模型组件,可用于完成文本补全任务。本文档仅介绍ErnieBot的用法,大家可以在LangChain官方文档了解关于大语言模型组件的更多信息。
创建一个ErnieBot对象:
In [ ]:
Copied!
from erniebot_agent.extensions.langchain.llms import ErnieBot
from erniebot_agent.extensions.langchain.llms import ErnieBot
In [ ]:
Copied!
llm = ErnieBot(aistudio_access_token=access_token)
llm = ErnieBot(aistudio_access_token=access_token)
基本使用¶
In [ ]:
Copied!
question = "What does SFINAE mean in C++ template metaprogramming?"
print(llm(question))
question = "What does SFINAE mean in C++ template metaprogramming?"
print(llm(question))
在chain中使用¶
In [ ]:
Copied!
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
In [ ]:
Copied!
template = "Tell me a joke about {content}."
prompt = PromptTemplate(template=template, input_variables=["content"])
template = "Tell me a joke about {content}."
prompt = PromptTemplate(template=template, input_variables=["content"])
In [ ]:
Copied!
llm_chain = LLMChain(prompt=prompt, llm=llm)
llm_chain = LLMChain(prompt=prompt, llm=llm)
In [ ]:
Copied!
content = "rabbits"
print(llm_chain.run(content=content))
content = "rabbits"
print(llm_chain.run(content=content))
异步调用¶
In [ ]:
Copied!
question = "Please write a Python program that checks if an integer is a prime number."
answer = await llm.agenerate([question])
print(answer)
question = "Please write a Python program that checks if an integer is a prime number."
answer = await llm.agenerate([question])
print(answer)
流式回复¶
In [ ]:
Copied!
question = "What is the difference between capybara and kiwi?"
for chunk in llm.stream(question):
print(chunk, end="", flush=True)
print("")
question = "What is the difference between capybara and kiwi?"
for chunk in llm.stream(question):
print(chunk, end="", flush=True)
print("")
ErnieBotChat¶
ErnieBotChat是LangChain聊天模型组件,可用于完成文本补全任务。本文档仅介绍ErnieBotChat的用法,大家可以在LangChain官方文档了解关于聊天模型模型组件的更多信息。
创建一个ErnieBotChat对象:
In [ ]:
Copied!
from erniebot_agent.extensions.langchain.chat_models import ErnieBotChat
from erniebot_agent.extensions.langchain.chat_models import ErnieBotChat
In [ ]:
Copied!
chat = ErnieBotChat(aistudio_access_token=access_token)
chat = ErnieBotChat(aistudio_access_token=access_token)
基本使用¶
In [ ]:
Copied!
from langchain.chat_models.base import HumanMessage
from langchain.chat_models.base import HumanMessage
In [ ]:
Copied!
message = HumanMessage(content="What does SFINAE mean in C++ template metaprogramming?")
print(chat([message]))
message = HumanMessage(content="What does SFINAE mean in C++ template metaprogramming?")
print(chat([message]))
在chain中使用¶
In [ ]:
Copied!
from langchain.prompts import ChatPromptTemplate
from langchain.prompts import ChatPromptTemplate
In [ ]:
Copied!
message = "Tell me a joke about {content}."
prompt = ChatPromptTemplate.from_messages([("human", message)])
message = "Tell me a joke about {content}."
prompt = ChatPromptTemplate.from_messages([("human", message)])
In [ ]:
Copied!
chain = prompt | chat
chain = prompt | chat
In [ ]:
Copied!
print(chain.invoke({"content": "rabbits"}))
print(chain.invoke({"content": "rabbits"}))
异步调用¶
In [ ]:
Copied!
from langchain.chat_models.base import HumanMessage
from langchain.chat_models.base import HumanMessage
In [ ]:
Copied!
message = HumanMessage(content="Please write a Python program that checks if an integer is a prime number.")
response = await chat.agenerate([[message]])
print(response)
message = HumanMessage(content="Please write a Python program that checks if an integer is a prime number.")
response = await chat.agenerate([[message]])
print(response)
流式回复¶
In [ ]:
Copied!
from langchain.chat_models.base import HumanMessage
from langchain.chat_models.base import HumanMessage
In [ ]:
Copied!
message = HumanMessage(content="What is the difference between capybara and kiwi?")
for chunk in chat.stream([message]):
print(chunk.content, end="", flush=True)
print("")
message = HumanMessage(content="What is the difference between capybara and kiwi?")
for chunk in chat.stream([message]):
print(chunk.content, end="", flush=True)
print("")
ErnieEmbeddings¶
ErnieEmbeddings是LangChain文本嵌入模型组件,可用于生成文本的向量表示。本文档仅介绍ErnieEmbeddings的用法,大家可以在LangChain官方文档了解关于聊天模型模型组件的更多信息。
创建一个ErnieEmbeddings对象:
In [ ]:
Copied!
from erniebot_agent.extensions.langchain.embeddings import ErnieEmbeddings
from erniebot_agent.extensions.langchain.embeddings import ErnieEmbeddings
In [ ]:
Copied!
embeddings = ErnieEmbeddings(aistudio_access_token=access_token)
embeddings = ErnieEmbeddings(aistudio_access_token=access_token)
处理单段输入文本¶
In [ ]:
Copied!
text = "This is a test document."
query_result = embeddings.embed_query(text)
print(len(query_result))
text = "This is a test document."
query_result = embeddings.embed_query(text)
print(len(query_result))
处理多段输入文本¶
In [ ]:
Copied!
texts = ["doc1", "doc2"]
docs_result = embeddings.embed_documents(texts)
print(len(docs_result))
for res in docs_result:
print(len(res))
texts = ["doc1", "doc2"]
docs_result = embeddings.embed_documents(texts)
print(len(docs_result))
for res in docs_result:
print(len(res))