青训营X豆包MarsCode 技术训练营第一课 | 豆包MarsCode AI刷题

39 阅读2分钟

如果我们想开发更复杂的应用程序,那么就需要通过 “Chain” 来链接LangChain的各个组件和功能——模型之间彼此链接,或模型与其他组件链接。“Chain”简化了复杂应用程序的实现,并使之更加模块化,能够创建出单一的、连贯的应用程序,从而使调试、维护和改进应用程序变得容易。

8f671932142173689ef10d9f7148523.jpg 关于链的实现和使用

  • 首先LangChain通过设计好的接口,实现一个具体的链的功能。例如,LLM链(LLMChain)能够接受用户输入,使用 PromptTemplate 对其进行格式化,然后将格式化的响应传递给 LLM。这就相当于把整个Model I/O的流程封装到链里面。
  • 实现了链的具体功能之后,我们可以通过将多个链组合在一起,或者将链与其他组件组合来构建更复杂的链。

链在内部把一系列的功能进行封装,而链的外部则又可以组合串联。链其实可以被视为LangChain中的一种基本功能单元。

035f69faf7a1966a7985fc026b7c51f.jpg 最简单的链——LLMChain

LLMChain围绕着语言模型推理功能又添加了一些功能,整合了PromptTemplate、语言模型(LLM或聊天模型)和 Output Parser,相当于把Model I/O放在一个链中整体操作。它使用提示模板格式化输入,将格式化的字符串传递给 LLM,并返回 LLM 输出。

Eg:花语

若不使用链,代码:

#----第一步 创建提示

from langchain import PromptTemplate

template = "{flower}的花语是?"

prompt_temp = PromptTemplate.from_template(template)

prompt = prompt_temp.format(flower='玫瑰')

print(prompt)

#----第二步 创建并调用模型

from langchain import OpenAI

model = OpenAI(temperature=0)

result = model(prompt)

print(result)

输出:

玫瑰的花语是?

爱情、浪漫、美丽、永恒、誓言、坚贞不渝。

若使用链,代码:

from langchain import PromptTemplate, OpenAI, LLMChain

template = "{flower}的花语是?"

llm = OpenAI(temperature=0)

llm_chain = LLMChain(

    llm=llm,

    prompt=PromptTemplate.from_template(template))

result = llm_chain("玫瑰")

print(result)

输出:

{'flower': '玫瑰', 'text': '\n\n爱情、浪漫、美丽、永恒、誓言、坚贞不渝。'}

可见,代码结构更加简洁。

链的调用方式

  • 直接调用

当我们像函数一样调用一个对象时,它实际上会调用该对象内部实现的__call__方法。

如果我们示模板中包含多个变量,在调用链的时候,可以使用字典一次性输入它们。

  • 通过run方法

通过run方法,也等价于直接调用_call_函数。

  • 通过predict方法

predict方法类似于run,只是输入键被指定为关键字参数而不是 Python 字典。

  • 通过apply方法

apply方法允许我们针对输入列表运行链,一次处理多个输入。

  • 通过generate方法

generate方法类似于apply,只不过它返回一个LLMResult对象,而不是字符串。LLMResult通常包含模型生成文本过程中的一些相关信息,例如令牌数量、模型名称等。