chain模块是什么
把不同模块拼接起来,让它们按顺序完成复杂工作
chain怎么把不同模块拼接起来
通过 Squential (按顺序的)
//1.模块1:翻译
translate_chain = LLMChain(
llm=llm,
prompt=PromptTemplate(template="将英文翻译成中文: {text}", input_variables=["text"])
) //把输入放到提示模版,然后用LLM生成输出
//2.模块2:总结
summary_chain = LLMChain(
llm=llm,
prompt=PromptTemplate(template="把中文总结成一句话:{text}", input_variables=["text"])
)
//3.拼接
overall_chain = SequentialChain(
chains=[translate_chain, summary_chain],
input_variables=["text"],
output_variables=["summary"]
)
//4.获取结果
result = overall_chain.run("LangChain is a framework for building LLM apps.")
print(result)
链的类型及不同链示例
1.LLMChain:直接调用模型
from langchain import LLMChain, PromptTemplate
from langchain.chat_models import ChatOpenAI
llm = ChatOpenAI(temperature=0)
prompt = PromptTemplate(template="把下面英文翻译成中文:{text}", input_variables=["text"])
chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run("Hello, how are you?")
print(result) # 输出:你好,你怎么样?
2.顺序链:把多个 Chain 串联,前一个输出传给下一个
from langchain.chains import SequentialChain
from langchain import LLMChain, PromptTemplate
# 模块1:翻译
translate_chain = LLMChain(
llm=llm,
prompt=PromptTemplate(template="将英文翻译成中文:{text}", input_variables=["text"])
)
# 模块2:总结
summary_chain = LLMChain(
llm=llm,
prompt=PromptTemplate(template="把中文总结成一句话:{text}", input_variables=["text"])
)
# 顺序链
overall_chain = SequentialChain(
chains=[translate_chain, summary_chain],
input_variables=["text"],
output_variables=["summary"]
)
result = overall_chain.run("LangChain is a framework for building LLM apps.")
print(result)
3.工具链:先调用工具(搜索 API)获取结果,再用 LLM 生成自然语言回答
from langchain.agents import initialize_agent, Tool
from langchain.tools import SerpAPIWrapper
search = SerpAPIWrapper()
tools = [Tool(name="Search", func=search.run, description="搜索问题")]
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)
result = agent.run("现在北京天气怎么样?")
print(result)
4.文档链:处理文档内容,可逐段分析再汇总
from langchain.chains import AnalyzeDocumentChain
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
loader = TextLoader("example.txt", encoding="utf-8")
documents = loader.load()
splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = splitter.split_documents(documents)
doc_chain = AnalyzeDocumentChain(llm_chain=LLMChain(
llm=llm,
prompt=PromptTemplate(template="总结这段文字:{text}", input_variables=["text"])
))
for doc in texts:
print(doc_chain.run(doc.page_content))
5.路由链:根据任务类型选择不同 Chain 处理
from langchain.chains.router import MultiRouteChain, RouterChain
from langchain.chains import LLMChain
# 模块A:处理数学问题
math_chain = LLMChain(
llm=llm,
prompt=PromptTemplate(template="解决数学问题:{text}", input_variables=["text"])
)
# 模块B:处理写作问题
write_chain = LLMChain(
llm=llm,
prompt=PromptTemplate(template="帮我写一段话:{text}", input_variables=["text"])
)
# 路由器 Chain
router = RouterChain.from_chains([math_chain, write_chain], llm=llm)
multi_route_chain = MultiRouteChain(router_chain=router, default_chain=write_chain)
result = multi_route_chain.run("计算 12*13")
print(result)