使用LLMchain和手动创建的区别
使用llmchain llmchain是一个更高级的接口,他将提示模板和模型实例结合在一起,并提供一个统一的接口来生成结果 llmchain直接接受一个字符串作为输入,并自动将其格式化为完整的提示,然后传递给模型进行处理
手动创建和调用模板 使用PromptTemplate创建模板,并手动格式化提示 创建模型实例,并手动格式化后的提示传递给模型进行处理
区别
-
抽象层次: llmchain提供一个更高层次的抽象,将模板和模型结合,简化调用模型 手动创建和调用模型提供了更细粒度的控制,但需要更多的代码
-
使用简便性: 使用llmchain时,只需要一次调用即可生成和传递提示,不需要手动格式化提示 手动创建和调用模型需要明确的分步骤操作,是恶化更多自定义或控制的场景
-
代码量: llmchain将多个操作封装在一起。减少代码量 手动操作的代码更为冗长,但可能更直观,适合调试和理解每一步的具体操作
手动操作可以确保符合预期的格式和内容,通过手动格式化,可以精确控制生成的提示和最终输出,确保他们满足特定的要求和标准
from langchain import LLMChain, PromptTemplate
# 定义一个提示模板
prompt = PromptTemplate(
template="Translate the following English text to French: {text}",
input_variables=["text"]
)
# 创建一个 LLMChain 实例
llm_chain = LLMChain(prompt=prompt, llm=my_llm)
# 使用 LLMChain 进行调用
result = llm_chain.run(text="Hello, how are you?")
print(result)
链的调用方式:
直接调用
直接调用的链对象。当我们像函数一样调用一个对象时,实际上调用该对象内部实现的__call__方法。
run方法
- 参数:一个字典,字典的键是模板中的变量名,值是变量的值。
- 用法:适用于单个输入。
通过run方法,也等价于直接调用_call_函数。
predict方法
- 参数:模板中的变量值,作为关键字参数传递。
- 用法:适用于单个输入,参数直接传递变量值。
predict方法类似于run,只是输入键被指定为关键字参数而不是 Python 字典。
apply方法
- 参数:一个包含多个输入字典的列表。
- 用法:适用于批量处理多个输入。
apply方法允许我们针对输入列表运行链,一次处理多个输入。
generate方法
- 参数:一个包含多个输入字典的列表。
- 用法:适用于批量处理多个输入,并生成更详细的输出。
generate方法类似于apply,只不过它返回一个LLMResult对象,而不是字符串。LLMResult通常包含模型生成文本过程中的一些相关信息,例如令牌数量、模型名称等。
run 和predict方法用于处理单个输入,区别在于参数传递方式不同。 apply和generate方法用于批量处理多个输入,区别在于输出的详细程度不同。
# run方法的参数是一个字典,字典的键是模板中的变量名,值是变量的值
response = llm_chain.run({"flower": "玫瑰","season": "夏季"})
# predict方法的参数是模板中的变量值
result = llm_chain.predict(flower="玫瑰", season="夏季")
# apply方法允许您针对输入列表运行链
input_list = [
{"flower": "玫瑰", "season": "夏季"},
{"flower": "百合", "season": "春季"},
{"flower": "郁金香", "season": "秋季"},
]
result = llm_chain.apply(input_list)
# generate方法
result = llm_chain.generate(input_list)