LLM
LLMChain是一个简单的链,它在语言模型周围添加了一些功能。它在LangChain中被广泛使用,包括在其他链和代理中。
LLMChain由PromptTemplate和语言模型(LLM或聊天模型)组成。它使用提供的输入键值(如果可用,还包括内存键值)格式化提示模板,将格式化的字符串传递给LLM并返回LLM输出。
入门
from langchain import PromptTemplate, OpenAI, LLMChain
prompt_template = "一个制造{product}的公司的好名字是什么?"
llm = OpenAI(temperature=0)
llm_chain = LLMChain(
llm=llm,
prompt=PromptTemplate.from_template(prompt_template)
)
llm_chain("五颜六色的袜子")
输出结果:
{'product': '五颜六色的袜子', 'text': '\n\n袜子奇妙!'}
运行LLM Chain的其他方式
除了所有Chain
对象共享的__call__
和run
方法之外,LLMChain
还提供了几种调用链逻辑的其他方式:
apply
允许您对输入列表运行链:
input_list = [
{"product": "袜子"},
{"product": "电脑"},
{"product": "鞋子"}
]
llm_chain.apply(input_list)
输出结果:
[{'text': '\n\n袜子奇妙!'},
{'text': '\n\n科技核心解决方案。'},
{'text': '\n\n鞋类工厂。'}]
generate
与apply
类似,只是它返回一个LLMResult
而不是字符串。LLMResult
通常包含有用的生成信息,如令牌使用情况和完成原因。
llm_chain.generate(input_list)
输出结果:
LLMResult(generations=[[Generation(text='\n\n袜子奇妙!', generation_info={'finish_reason': 'stop', 'logprobs': None})], [Generation(text='\n\n科技核心解决方案。', generation_info={'finish_reason': 'stop', 'logprobs': None})], [Generation(text='\n\n鞋类工厂。', generation_info={'finish_reason': 'stop', 'logprobs': None})]], llm_output={'token_usage': {'prompt_tokens': 36, 'total_tokens': 55, 'completion_tokens': 19}, 'model_name': 'text-davinci-003'})
predict
与run
方法类似,只是输入键以关键字参数的形式指定,而不是Python字典。
# 单个输入示例
llm_chain.predict(product="五颜六色的袜子")
输出结果:
'\n\n袜子奇妙!'
# 多个输入示例
template = """给我讲一个关于{subject}的{adjective}笑话。"""
prompt = PromptTemplate(template=template, input_variables=["adjective", "subject"])
llm_chain = LLMChain(prompt=prompt, llm=OpenAI(temperature=0))
llm_chain.predict(adjective="悲伤的", subject="鸭子")
输出结果:
'\n\n问:当鸭子的朋友死了,它说了什么?\n答:嘎嘎,再见。'
解析输出
默认情况下,LLMChain
不解析输出,即使底层的prompt
对象有一个输出解析器。如果您想在LLM输出上应用该输出解析器,可以使用predict_and_parse
代替predict
,使用apply_and_parse
代替apply
。
使用predict
:
from langchain.output_parsers import CommaSeparatedListOutputParser
output_parser = CommaSeparatedListOutputParser()
template = """列出彩虹中的所有颜色"""
prompt = PromptTemplate(template=template, input_variables=[], output_parser=output_parser)
llm_chain = LLMChain(prompt=prompt, llm=llm)
llm_chain.predict()
输出结果:
'\n\n红色,橙色,黄色,绿色,蓝色,靛蓝色,紫色'
使用predict_and_parse
:
llm_chain.predict_and_parse()
输出结果:
['红色', '橙色', '黄色', '绿色', '蓝色', '靛蓝色', '紫色']
从字符串初始化
您还可以直接从字符串模板构建LLMChain。
template = """给我讲一个关于{subject}的{adjective}笑话。"""
llm_chain = LLMChain.from_string(llm=llm, template=template)
llm_chain.predict(adjective="悲伤的", subject="鸭子")
输出结果:
'\n\n问:当鸭子的朋友死了,它说了什么?\n答:嘎嘎,再见。'