前言
模型是langchain框架的最底层,是构成语言模型应用的核心元素,因为langchain应用开发就是以langchain作为框架,通过API调用大模型解决实际问题,整个langchian框架的逻辑都是由LLM(large language model)这个发动机来驱动,没有模型langchain就失去存在的意义。
使用过程
可以把模型使用过程分为三大类:输入提示,调用模型,输出解析,这三块形成一个整体,在langchain中被称为Model I/O
- 提示模板:使用模型的第一个环节是把提示信息输入到模型中,你可以创建LangChain模板,根据实际需求动态选择不同的输入,针对特定的任务和应用调整输入。
- 语言模型:LangChain允许你通过通用接口来调用语言模型。这意味着无论你要使用的是哪种语言模型,都可以通过同一种方式进行调用,这样就提高了灵活性和便利性。
- 输出解析:LangChain还提供了从模型输出中提取信息的功能。通过输出解析器,你可以精确地从模型的输出中获取需要的信息,而不需要处理冗余或不相关的数据,更重要的是还可以把大模型给回的非结构化文本,转换成程序可以处理的结构化数据。
提示模板具体原则:基于模型清晰清楚的提示,让模型慢慢思考。 如下
# 导入LangChain中的提示模板
from langchain.prompts import PromptTemplate
# 创建原始模板
template = """您是一位专业的鲜花店文案撰写员。\n
对于售价为 {price} 元的 {flower_name} ,您能提供一个吸引人的简短描述吗? """
# 根据原始模板创建LangChain提示模板
prompt = PromptTemplate.from_template(template)
# 打印LangChain提示模板的内容
print(prompt)
运用langchain中PromptTemplate的from_template将一个原始的模板字符串转化为一个更丰富、更方便操作的PromptTemplate对象。
语言模型
langchain支持的模型有三大类:大语言模型(LLM),聊天模型,文本嵌入模型(embedding Model)
使用langchain能更方便切换使用不同模型,不需要修改相关代码
关于huggingface
huggingface有许多开源模型使用(国内ban不太方便) langchain中huggingfacehub方法通过api访问huggingface.co从而获得你需要使用的模型,国内ban了huggingface,访问超时无法连接,没法直接通过API访问。
这么好的网站不能直接放弃(看到有老哥分享直接通过API调用,但是老哥省流还没发出来,哈哈哈)
- 把模型手动下载云端空间内,本地加载模型的方式跑 (我比较菜没能成功下载到云端)
- 通过镜像网站下载至本地,本地动用模型(hf-mirror.com )
import os
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
from transformers import pipeline
pipe = pipeline(model="google/flan-t5-large")
output = pipe("I have a problem with my iphone that needs to be resolved asap!")
print(output[0]['generated_text'])
- 据传可以在unity里面加url(额,别人方法没试过,大概率可行)
emmm好像有点问题,只能输出简单的字符串相接,没搞明白是模型问题还是方法问题,初步估计是模型问题,具体还有待深究。
输出解析
LangChain提供的解析模型输出的功能,能更容易地从模型输出中获取结构化的信息。
langchain中的输出解释器可以将笼统的语言转成清晰的数据结构,通过StructuredOutputParser.from_response_schemas方法创建了一个输出解析器。
# 导入结构化输出解析器和ResponseSchema
from langchain.output_parsers import StructuredOutputParser, ResponseSchema
# 定义我们想要接收的响应模式
response_schemas = [ ResponseSchema(name="description", description="鲜花的描述文案"),
ResponseSchema(name="reason", description="问什么要这样写这个文案") ]
# 创建输出解析器
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
# 获取格式指示
format_instructions = output_parser.get_format_instructions()
# 根据原始模板创建提示,同时在提示中加入输出解析器的说明
prompt = PromptTemplate.from_template(prompt_template,
partial_variables={"format_instructions": format_instructions})
根据原始字符串和输出解释器创建的新的提示模板,再通过新的模板生成模型的输入,得到的模型输出结构将尽最大可能遵循我们的指示,便于输出解析器进行解析。
总结时刻
LangChain提供了模块化的提示管理,使开发者能更灵活地构建复杂的提示,并轻松调整模型输出格式,提高开发效率。LangChain支持多种LLM和工具的无缝集成,使得开发者可以方便地在不同模型间切换或添加功能模块。
通过 format_instructions,模型生成的响应会遵循开发者定义的格式结构。可以通过打印 partial_variables 中加入的提示内容来验证,通常会看到提示中明确要求输出特定的结构化格式,例如指定为JSON对象的属性或键值结构。
使用了输出解析器和 format_instructions,仍然不能完全保证输出符合预期的格式。这是因为模型输出依赖于其训练数据和对提示的理解。可以精细化 format_instructions 的描述,提高模型理解提示的准确性。在LangChain中利用回调或循环,检测到格式错误时,自动重新调用模型。