自定义Chain实现,掌握Chain的内部构造
基于文档内容回答用户问题
1.每个人喜欢的颜色
2.最喜欢某种颜色的人是谁
create_stuff_documents_chain
它接受一个文档列表,并将它们全部格式化为一个提示,然后将该提示传递给LLM(大型语言模型)它会传递所有文档,因此您应该确保这些文档长度适合您所使用的LLM的上下文窗口限制。
基于文档问答Chain, 回答梁山和朝廷,每个人喜欢的颜色
传递梁山喜欢的颜色。
from typing import List
from langchain.prompts import PromptTemplate
from langchain_community.llms.tongyi import Tongyi
from langchain_core.output_parsers import StrOutputParser
# 构建文档内容。存储文本内容及其元数据
from langchain_core.documents import Document
# 根据文档内容回答用户问题。 文档处理,生成摘要
from langchain.chains.combine_documents import create_stuff_documents_chain
# pass传递数据,简化链式调用。 自定义的函数或操作Lambda
from langchain_core.runnables import RunnablePassthrough, RunnableLambda
# 通义获取api key
import os
from dotenv import find_dotenv, load_dotenv
load_dotenv(find_dotenv())
DASHSCOPE_API_KEY = os.environ["DASHSCOPE_API_KEY"]
# 1.定义模型
model = Tongyi(model_name='qwen-max', model_kwargs={'temperature': 0.01})
def get_docs(role: str = 'liangshan') -> List[Document]:
"""
默认角色为 Liangshan
"""
docs = []
if role == 'liangshan':
docs = [
Document(page_content="武大郎,喜欢红色但不喜欢绿色"),
Document(page_content="宋押司,喜欢绿色但他更喜欢的是色")
]
elif role == 'court':
docs = [
Document(page_content="高球,喜欢紫色"),
Document(page_content="蔡京,喜欢黄色和蓝色")
]
return docs
prompt_tlp1 = PromptTemplate.from_template(
"每个人喜欢的颜色是什么:n\n{context}"
)
# print(get_docs())
# StrOutputParser() 大模型返回字符串不做处理
chain1 = create_stuff_documents_chain(llm=model, prompt=prompt_tlp1, output_parser=StrOutputParser())
# context 模板里定义的占位符。
res = chain1.invoke({"context": get_docs()}) # 传递默认是 liangshan
print(res)
传递朝廷喜欢的颜色
from typing import List
from langchain.prompts import PromptTemplate
from langchain_community.llms.tongyi import Tongyi
from langchain_core.output_parsers import StrOutputParser
# 构建文档内容。存储文本内容及其元数据
from langchain_core.documents import Document
# 根据文档内容回答用户问题。 文档处理,生成摘要
from langchain.chains.combine_documents import create_stuff_documents_chain
# pass传递数据,简化链式调用。 自定义的函数或操作Lambda
from langchain_core.runnables import RunnablePassthrough, RunnableLambda
# 通义获取api key
import os
from dotenv import find_dotenv, load_dotenv
load_dotenv(find_dotenv())
DASHSCOPE_API_KEY = os.environ["DASHSCOPE_API_KEY"]
# 1.定义模型
model = Tongyi(model_name='qwen-max', model_kwargs={'temperature': 0.01})
def get_docs(role: str = 'liangshan') -> List[Document]:
"""
默认角色为 Liangshan
"""
docs = []
if role == 'liangshan':
docs = [
Document(page_content="武大郎,喜欢红色但不喜欢绿色"),
Document(page_content="宋押司,喜欢绿色但他更喜欢的是色")
]
elif role == 'court':
docs = [
Document(page_content="高球,喜欢紫色"),
Document(page_content="蔡京,喜欢黄色和蓝色")
]
return docs
prompt_tlp1 = PromptTemplate.from_template(
"每个人喜欢的颜色是什么:n\n{context}"
)
# print(get_docs())
# StrOutputParser() 大模型返回字符串不做处理
chain1 = create_stuff_documents_chain(llm=model, prompt=prompt_tlp1, output_parser=StrOutputParser())
# context 模板里定义的占位符。
res = chain1.invoke({"context": get_docs('court')}) # 传递自定义 参数 court朝廷
print(res)
附加文档的问答Chain, 回答梁山和朝廷,每个人喜欢的颜色
from typing import List
from langchain.prompts import PromptTemplate
from langchain_community.llms.tongyi import Tongyi
from langchain_core.output_parsers import StrOutputParser
# 构建文档内容。存储文本内容及其元数据
from langchain_core.documents import Document
# 根据文档内容回答用户问题。 文档处理,生成摘要
from langchain.chains.combine_documents import create_stuff_documents_chain
# pass传递数据,简化链式调用。 自定义的函数或操作Lambda
from langchain_core.runnables import RunnablePassthrough, RunnableLambda
# 通义获取api key
import os
from dotenv import find_dotenv, load_dotenv
load_dotenv(find_dotenv())
DASHSCOPE_API_KEY = os.environ["DASHSCOPE_API_KEY"]
# 1.定义模型
model = Tongyi(model_name='qwen-max', model_kwargs={'temperature': 0.01})
def get_docs(role: str = 'liangshan') -> List[Document]:
"""
默认角色为 Liangshan
"""
docs = []
if role == 'liangshan':
docs = [
Document(page_content="武大郎,喜欢红色但不喜欢绿色"),
Document(page_content="宋押司,喜欢绿色但他更喜欢的是色")
]
elif role == 'court':
docs = [
Document(page_content="高球,喜欢紫色"),
Document(page_content="蔡京,喜欢黄色和蓝色")
]
return docs
prompt_tlp1 = PromptTemplate.from_template(
"每个人喜欢的颜色是什么:n\n{context}"
)
# print(get_docs())
# StrOutputParser() 大模型返回字符串不做处理
chain1 = create_stuff_documents_chain(llm=model, prompt=prompt_tlp1, output_parser=StrOutputParser())
# 将上一步的输出,变成输入内容来计算. 使用 langchain表达式 |
chain2 = {"context": get_docs} | chain1
# context 模板里定义的占位符。
res = chain2.invoke('court') # 传递自定义 参数 court朝廷
print(res)
最喜欢某种颜色的人
from typing import List
from langchain.prompts import PromptTemplate
from langchain_community.llms.tongyi import Tongyi
from langchain_core.output_parsers import StrOutputParser
# 构建文档内容。存储文本内容及其元数据
from langchain_core.documents import Document
# 根据文档内容回答用户问题。 文档处理,生成摘要
from langchain.chains.combine_documents import create_stuff_documents_chain
# pass传递数据,简化链式调用。 自定义的函数或操作Lambda
from langchain_core.runnables import RunnablePassthrough, RunnableLambda
# 通义获取api key
import os
from dotenv import find_dotenv, load_dotenv
load_dotenv(find_dotenv())
DASHSCOPE_API_KEY = os.environ["DASHSCOPE_API_KEY"]
# 1.定义模型
model = Tongyi(model_name='qwen-max', model_kwargs={'temperature': 0.01})
def get_docs(role: str = 'liangshan') -> List[Document]:
"""
默认角色为 Liangshan
"""
docs = []
if role == 'liangshan':
docs = [
Document(page_content="武大郎,喜欢红色但不喜欢绿色"),
Document(page_content="宋押司,喜欢绿色但他更喜欢的是白色")
]
elif role == 'court':
docs = [
Document(page_content="高球,喜欢紫色"),
Document(page_content="蔡京,喜欢黄色和蓝色")
]
return docs
prompt_tlp1 = PromptTemplate.from_template(
"每个人喜欢的颜色是什么:n\n{context}"
)
prompt_tlp2 = PromptTemplate.from_template(
"谁喜欢{color}:n\n{context}"
)
# StrOutputParser() 大模型返回字符串不做处理
chain1 = create_stuff_documents_chain(llm=model, prompt=prompt_tlp1, output_parser=StrOutputParser())
chain2 = {"context": get_docs} | chain1
# context 模板里定义的占位符。
res = chain2.invoke('court') # res 查看下结果,对比res2 用啥效果。
# print(res)
who_like_chain = {
"context": RunnableLambda(lambda x: x['role']) | chain2,
"color": RunnableLambda(lambda x: x['color'])
} | prompt_tlp2 | model
res2 = who_like_chain.invoke({'role': 'liangshan', 'color': '白色'})
print(res2)
end...
本文来自博客园,作者:王竹笙,转载请注明原文链接:https://www.cnblogs.com/edeny/p/18655753
分类:
AI大模型
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix