Runnable
1,简介
为了尽可能轻松创建自定义链,Langchain实现了“Runnable”协议(接口)。这是一个标准接口,可以轻松定义自定义链并以标准方式调用它们。比如 chat model、LLMs、output parser、retrievers、Prompt 等。都是实现了这个实现了这个协议。
标准接口包括:
- stream:流式返回响应的块
- invoke:在输入上调用链
- batch:在输入列表上调用链
这些方法对应的异步方法:
- astream:异步流式返回响应的块
- ainvoke:异步在输入上调用链
- abatch:异步在输入列表上调用链
- astream_log:异步流式返回中间步骤,以及最终响应
- astream_events:beta 异步流式返回链中发生的事件(在 langchain-core 0.1.14 中引入)
输入类型和输出类型因组件而异:
| 组件 | 输入类型 | 输出类型 |
|---|---|---|
| Prompt | 字典 | PromptValue |
| ChatModel | 单个字符串、聊天消息列表或 PromptValue | ChatMessage |
| LLM | 单个字符串、聊天消息列表或 PromptValue | 字符串 |
| OutputParser | LLM 或 ChatModel 的输出 | 取决于解析器 |
| Retriever | 单个字符串 | 文档列表 |
| Tool | 单个字符串或字典,取决于工具 | 取决于工具 |
所有可运行对象都公开输入和输出的模式以检查输入和输出:
- input_schema: 从 Runnable 的结构动态生成的输入 Pydantic 模型
- output_schema: 从 Runnable 的结构动态生成的输出 Pydantic 模型
2,示例代码
示例:
import os
from langchain_community.embeddings.huggingface import HuggingFaceEmbeddings
from langchain_community.llms import QianfanLLMEndpoint
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
os.environ["QIANFAN_AK"] = "*****" # 这里需要修改为自己的实际值
os.environ["QIANFAN_SK"] = "*****" # 这里需要修改为自己的实际值
def load_embedding_mode():
return HuggingFaceEmbeddings(model_name='text2vec-base-chinese',
model_kwargs={
'device': 'cpu'})
model = QianfanLLMEndpoint(
streaming=True,
model="ERNIE-Bot-turbo",
endpoint="eb-instant",
)
#提示词
prompt = ChatPromptTemplate.from_template("请给我讲一个笑话,字数在100字以内,主题是:{topic}")
output_parser = StrOutputParser()
chain = prompt | model | output_parser
#流式调用
for s in chain.stream({
"topic": "老虎"}):
print(s, end="", flush=True)
#好的,这是一个关于老虎的笑话:
#老虎去找医生,它说:“医生,我牙痛。”
#医生说:“给我看看。”
#老虎说:“我是老虎,不是猫。”
#医生回答:“不好意思,我没看过猫也没有老虎。”
#希望你喜欢这个笑话!
#一次输出
rep = chain.invoke({
"topic": "老虎"})
print(rep)
#好的,这是一个关于老虎的笑话:
#老虎感冒了,去医院开药,医生问:“你什么病啊?” 老虎说:“我流鼻涕。” 医生说:“哦,那开个感冒药吧。” 老虎惊讶地说:“我是老虎,不是狮子啊!”
#希望你喜欢这个笑话!
#可以同时生成多个故事
rep = chain.batch([{
"topic": "老虎"}, {
"topic": "狮子"}])
print(rep)
#['一只老虎抓到一只羊,羊说:“你放了我吧,我们还是好朋友。”老虎说:“既然是好朋友,那就多聊几句。”于是羊问:“你喜欢什么样的女人?”老虎说:“喜欢温柔贤惠的。”羊说:“那我这样的可以吗?”老虎一愣,然后放了羊。\n\n这个笑话的主题是:有时候,过于聪明或机智的人可能会让对方放松警惕,从而逃过一劫。', '好的,这是一个关于狮子的笑话:\n有一天,狮子对他的朋友说:“你知道我们狮子最擅长的运动是什么吗?跳跃!”\n他的朋友回答:“哦,真的吗?那你能跳多高?”\n狮子回答:“嗯,大概可以跳到我们自己身上吧。”']
内置方法
1.简介
在langchain中有助于传递和格式化的数据、调用自定义逻辑等方法,称为内置方法。

1>链接可运行对象
代码示例:
import os
from langchain_community.embeddings.huggingface import HuggingFaceEmbeddings
from langchain_community.llms import QianfanLLMEndpoint
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
os.environ["QIANFAN_AK"] = "*****" # 这里需要修改为自己的实际值
os.environ["QIANFAN_SK"] = "*****" # 这里需要修改为自己的实际值
def load_embedding_mode():
return

最低0.47元/天 解锁文章
372

被折叠的 条评论
为什么被折叠?



