langchain笔记(6)

173 阅读4分钟

一,语言模型****

1. Langchain支持的三大模型

1. 大语言模型(LLM)  ,也叫Text Model,这些模型将文本字符串作为输入,并返回文本字符串作为输出。Open AI的text-davinci-003、Facebook的LLaMA、ANTHROPIC的Claude,都是典型的LLM。

2. 聊天模型(Chat Model) ,主要代表Open AI的ChatGPT系列模型。这些模型通常由语言模型支持,但它们的 API 更加结构化。具体来说,这些模型将聊天消息列表作为输入,并返回聊天消息。

3. 文本嵌入模型(Embedding Model) ,这些模型将文本作为输入并返回浮点数列表,也就是Embedding。而文本嵌入模型如OpenAI的text-embedding-ada-002,我们之前已经见过了。文本嵌入模型负责把文档存入向量数据库,和我们这里探讨的提示工程关系不大。

 

2. 调用语言模型

 # 设置OpenAI API Key

 import os os.environ["OPENAI_API_KEY"] = '你的Open AI API Key'

 # 导入LangChain中的OpenAI模型接口

 from langchain_openai import OpenAI

 # 创建模型实例

 model = OpenAI(model_name='gpt-3.5-turbo-instruct')

 # 输入提示

 input = prompt.format(flower_name=["玫瑰"], price='50')

 # 得到模型的输出

 output = model.invoke(input)

 # 打印输出内容

 print(output)

 

3. 在该案例下利用langchain的优势:

我们只需要定义一次模板,就可以用它来生成各种不同的提示。对比单纯使用 f-string 来格式化文本,这种方法更加简洁,也更容易维护。而LangChain在提示模板中,还整合了output_parser、template_format 以及是否需要validate_template等功能。what’s more,我们还可以很方便地把程序切换到不同的模型,而不需要修改任何提示相关的代码。

二,输出解析

  

 

 

 

2024.11.11

提示工程(上):用少样本FewShotTemplate和ExampleSelector创建应景文案

 

一,提示的结构

  指令(Instuction) 告诉模型这个任务大概要做什么、怎么做,比如如何使用提供的外部信息、如何处理查询以及如何构造输出。这通常是一个提示模板中比较固定的部分。一个常见用例是告诉模型“你是一个有用的XX助手”,这会让他更认真地对待自己的角色。

上下文(Context) 则充当模型的额外知识来源。这些信息可以手动插入到提示中,通过矢量数据库检索得来,或通过其他方式(如调用API、计算器等工具)拉入。一个常见的用例时是把从向量数据库查询到的知识作为上下文传递给模型。

提示输入(Prompt Input) 通常就是具体的问题或者需要大模型做的具体事情,这个部分和“指令”部分其实也可以合二为一。但是拆分出来成为一个独立的组件,就更加结构化,便于复用模板。这通常是作为变量,在调用模型之前传递给提示模板,以形成具体的提示。

输出指示器(Output Indicator) 标记​​要生成的文本的开始。这就像我们小时候的数学考卷,先写一个“解”,就代表你要开始答题了。如果生成 Python 代码,可以使用 “import” 向模型表明它必须开始编写 Python 代码(因为大多数 Python 脚本以import开头)。这部分在我们和ChatGPT对话时往往是可有可无的,当然LangChain中的代理在构建提示模板时,经常性的会用一个“Thought:”(思考)作为引导词,指示模型开始输出自己的推理(Reasoning)。

 

 

 

 

二,langchain提示模版的类型

  

1. 使用PromptTemplate(简单易用)

  from langchain import PromptTemplatetemplate = """\

你是业务咨询顾问。

你给一个销售{product}的电商公司,起一个好的名字?

"""

prompt = PromptTemplate.from_template(template)

print(prompt.format(product="鲜花"))

输出:

你是业务咨询顾问。你给一个销售鲜花的电商公司,起一个好的名字?

 

2. ChatPromptTemplate(简单易用)

 输入:

  # 导入聊天消息类模板

 from langchain.prompts import (     ChatPromptTemplate,

     SystemMessagePromptTemplate,

     HumanMessagePromptTemplate, )

 # 模板的构建

 template="你是一位专业顾问,负责为专注于{product}的公司起名。"

 system_message_prompt = SystemMessagePromptTemplate.from_template(template)

 human_template="公司主打产品是{product_detail}。"

 human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)

 prompt_template = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])

 # 格式化提示消息生成提示

 prompt = prompt_template.format_prompt(product="鲜花装饰", product_detail="创新的鲜花设计。").to_messages()

 # 下面调用模型,把提示传入模型,生成结果

 import os os.environ["OPENAI_API_KEY"] = '你的OpenAI Key'

 from langchain.chat_models import ChatOpenAI

 chat = ChatOpenAI()

 result = chat(prompt)

 print(result)

输出:

content='1. 花语创意\n2. 花韵设计\n3. 花艺创新\n4. 花漾装饰\n5. 花语装点\n6. 花翩翩\n7. 花语之美\n8. 花馥馥\n9. 花语时尚\n10. 花之魅力' additional_kwargs={} example=False