了解Langchain的核心--Chain,掌握Chain的概念

Chains指的是将一系列的调用组装成序列--包括大语言模型(LLM),工具tool,还有数据预处理步骤的调用等等。目前最新的实现是通过LangChain Expression Language(LCEL)实现的Chains。

LCEL非常适合构建您自己的Chains,也有一些已经封装好的Chains也可以拿来就用。LangChain支持两种类型的现成的Chains:

[推荐]  使用LCEL构建的Chains。在这种情况下,LangChain提供了一个更高级别的构造器方法。然而,在底层所做的只是用LCEL构建一个Chain。

[遗留】通过从遗留的Chain类继承来构建的Chain。这些链在底层不使用LCEL,而是独立的类。

LangChain计划将所有Chains的LCEL版本创建出来。这样做有几个原因:

以这种方式构建的Chain很好,因为如果您想修改链的内部,您可以简单地修改LCEL。

这些Chain天生支持流式处理(stream)、异步(ainvoke)和批量处理(batch)。

这些Chain在每一步自动获得可观察性。langsmith

 

大模型生成笑话的示例,使用Chain改写依赖Chain的使用方式

import os
from dotenv import find_dotenv, load_dotenv
from langchain.prompts import PromptTemplate
from langchain_community.llms.tongyi import Tongyi
from langchain_core.output_parsers import JsonOutputParser, PydanticOutputParser  # json格式的
from langchain_core.pydantic_v1 import BaseModel,Field, validator
from langchain.chains import LLMChain

# 通义获取api key
load_dotenv(find_dotenv())
DASHSCOPE_API_KEY = os.environ["DASHSCOPE_API_KEY"]


# 1.定义模型
model = Tongyi(model_name='qwen-max', model_kwargs={'temperature': 0.01})


# 定义期望的数据结构。
class Joke(BaseModel):
    content: str = Field(description="笑话的内容")
    reason: str = Field(description="为什么好笑")


# 2. 定义参数解析器。
output_parser = PydanticOutputParser(pydantic_object=Joke)

# 返回 内容指令 parser.get_format_instructions()
format_instructions = output_parser.get_format_instructions()

# 3.定义模板
prompt_tpl = PromptTemplate(
    template="参考下面的格式,回答用户的问题.\n{format_instructions}\n{query}\n",
    input_variables=["query"],
    partial_variables={"format_instructions": format_instructions},  # 设置解析器并将指令注入到提示模板中。
)


# 3.定义个chain
#  chain = LLMChain(prompt=prompt, llm=model, output_parser=parser)  # 这种写法LangChai中的LLMChain类已弃用
chain = prompt_tpl | model | output_parser  # chain表达式语言,社区推荐的方式

res = chain.invoke({
    "query": "讲一个翠花进城里找小伙子的故事。",}
)

#print(res)
print(res.content)
print(res.reason)

 

end...

 

posted @ 2025-01-06 11:01  王竹笙  阅读(156)  评论(0)    收藏  举报