【Langchain】chain模块

42 阅读2分钟

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)