Langchain集成管理prompt功能详解
作者:AudreyXu 发布时间:2022-12-13 22:56:31
LangChain是什么 如何使用
经过了chatGPT,大家都知道了prompt-based learning,也明白了prompt在生成式模型的重要性。假设问答任务要用prompt A, 摘要生成任务要用prompt B,那么如何管理不同的prompt呢?
Langchain主要的功能就是集成管理prompt。
安装
pip install langchain
一、需要大语言模型
使用langchain需要使用一个大语言模型。这个模型可以用openai的gpt-turbo-3.5,也可以用Hugging face hub里面的大模型。
用这些大模型就需要调用他们的api,所以就要去这些网站生成相应的token。
二、LangChain的模块
LangChain提供了许多模块,可以用于构建语言模型应用程序。这些模块可以组合在一起创建更复杂的应用程序,也可以单独用于简单的应用程序。
LangChain主要有以下模块
1. LLM:从语言模型中输出预测结果
例子:基于公司产品生成公司名称
# 导入LLM包装器。
from langchain.llms import OpenAI
# 初始化包装器,temperature越高结果越随机
llm = OpenAI(temperature=0.9)
# 进行调用
text = "What would be a good company name for a company that makes colorful socks?"
print(llm(text))
2. Prompt Templates: 管理LLMs的Prompts
一般来说我们不会直接把输入给模型,而是将输入和一些别的句子连在一起,形成prompts之后给模型。
例如之前根据产品取名的用例,在实际服务中我们可能只想输入"socks",那么"What would be a good company name for a company that makes"就是我们的template。
from langchain.prompts import PromptTemplate
prompt = PromptTemplate(
input_variables=["product"],
template="What is a good name for a company that makes {product}?",
)
那么,对于模型来说,真正的输入就是
print(prompt.format(product="colorful socks"))
What is a good name for a company that makes colorful socks?
3. Chains:将LLMs和prompts结合起来
很容易想到,我们的模型有很多,prompts也有很多,那么需要把他们组装起来,这就是Chains做的事情。
一个Chain包含一个Template和一个模型。例如LLMChain,就包含一个PromptTemplate和一个LLM。
这样我们的例子就可以
from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI
llm = OpenAI(temperature=0.9)
prompt = PromptTemplate(
input_variables=["product"],
template="What is a good name for a company that makes {product}?",
)
我们可以创建一个LLMChain,然后将llm和prompt给chain。
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)
然后可以运行这个chain
chain.run("colorful socks")
Socktastic!'
4. Agents:基于用户输入动态地调用chains
关于Agents,需要理解以下的概念:
Tool:输入是一个string,输出是一个string,作用是做某个特定任务。这个任务可以是做搜索、查数据库或者Python REPL.
LLM:语言模型
Agent:要使用的代理。这应该是一个字符串,引用一个支持代理类。这里就是调用其他服务的API。
这里有一个例子。假设想知道Taylor Swift的男友是谁,并且求出他的年龄的3次方。
from langchain.agents import laod_tools
from langchain.agents import initialize_agent
from langchain.llms import OpenAI
import os
os.environ["OPENAI_API_KEY"] = "xxxxxxxx"
os.environ["SERPAPI_API_KEY"] ="yyyyyyyy"
# 导入llm模型
llm = OpenAI(temperature=0)
# 导入一些tools,这里倒入serpapi和llm-math
# SerpApi是一个付费提供搜索结果API的第三方服务提供商。它允许用户通过简单的API调用访问各种搜索引擎的搜索结果,包括Google、Bing、Yahoo、Yandex等。
# llm-math是langchain里面的能做数学计算的模块
tools = load_tools(["serpapi", "llm-math"], llm=llm)
# 初始化tools,models 和使用的agent
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)
# 输出结果
agent.run("Who isTaylor's boyfriend? What is his current age raised to the 3 power?")
输出
> Entering new AgentExecutor chain...
I need to find out who Taylor Swift's boyfriend is and then calculate his age raised to the 3 power.
Action: Search
Action Input: "Taylor Swift boyfriend"
Observation: Taylor Swift's romance with actor Joe Alwyn is her most serious yet secretive to date. Since 2016, their famously private relationship has ...
Thought: I need to find out Joe Alwyn's age.
Action: Search
Action Input: "Joe Alwyn age"
Observation: 32 years
Thought: I need to calculate 32 raised to the 3 power.
Action: Calculator
Action Input: 32^3
Observation: Answer: 32768
Thought: I now know the final answer.
Final Answer: Taylor Swift's boyfriend is Joe Alwyn and his current age raised to the 3 power is 32768.
分析这个输出可以知道,它的思路很清晰。
它的动作包括:
读题:Thought(理解题意)
执行:Action(做什么)、Action Input(输入是什么)、Observation(输出是什么)
总结:Final Answer(最终输出)
每一个输出之后紧跟着一个Thought,思考下一步做什么,如果发现任务全部完成就输出最终答案。
5. Memory
如果想做一个聊天机器人,那么要求机器人有短暂的记忆,记住对话的历史。
Langchain的ConversationChain就提供这样一个功能。
默认情况下,ConversationChain具有一种简单类型的内存,它会记住所有先前的输入/输出并将它们添加到传递的上下文中。
# ConversationChain用法
from langchain import OpenAI, ConversationChain
llm = OpenAI(temperature=0)
conversation = ConversationChain(llm=llm, verbose=True) # (将verbose设置为True,以便我们可以看到提示)
conversation.predict(input="Hi there!")
输出
> Entering new chain...
Prompt after formatting:
The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.Current conversation:
Human: Hi there!
AI:> Finished chain.
' Hello! How are you today?
遇到的错误
ImportError: cannot import name 'load_tools' from 'langchain.agents'
我用的是python3.7,然后将python版本升级到了3.9就解决了。
参考
https://langchain.readthedocs.io/en/latest/getting_started/getting_started.html
来源:https://www.cnblogs.com/AudreyXu/p/17233964.html


猜你喜欢
- 如下所示:public function a(){ return $this->belongsTo('App\Mo
- 本文实例为大家分享了vue+element实现图片上传及裁剪的具体代码,供大家参考,具体内容如下随便写的一个小demo 功能是没有任何问题
- 针对这种情况,人工智能自动SQL优化工具应运而生。现在我就向大家介绍这样一款工具:SQLTuning for SQL Server。1. S
- 实际工作中可能会有这样的场景:两个结构体(可能类型一样), 字段名和类型都一样, 想复制一个结构体的全部或者其中某几个字段的值到另一个(即m
- 1、善用拖放技术 我们在使用Dreamweaver编辑网页的时候,经常需要插入一些图象什么的,假设要插入的图象很多,按照常规方法来操作就显得
- 在caffe中,如果使用的是c++接口,均值文件默认为.binaryproto格式,而如果使用的是python接口,均值文件默认的是nump
- 最近想学习一些python数据分析的内容,就弄了个爬虫爬取了一些数据,并打算用Anaconda一套的工具(pandas, numpy, sc
- 本文实例讲述了Python实现翻转数组功能。分享给大家供大家参考,具体如下:题目描述给定一个长度为n的整数数组a,元素均不相同,问数组是否存
- 在继承的使用上,我们最早接触的是父类和子类的继承。不过Flask框架中的继承要简单一些,只要有一个原文件,便可以对其进行继承和修改的操作了。
- 本文实例讲述了Python决策树之基于信息增益的特征选择。分享给大家供大家参考,具体如下:基于信息增益的特征选取是一种广泛使用在决策树(de
- 遍历列表-for循环列表中存储的元素可能非常多,如果想一个一个的访问列表中的元素,可能是一件十分头疼的事。那有没有什么好的办法呢?当然有!使
- 一、系统要求电影售票系统程序,应具备以下几点功能:1.用户认证系统用户分为用户、管理员两个角色,系统可根据不同用户角色权限进入不同界面,所有
- 1.下载安装pyqt5工具包以及配置ui界面开发环境pip install PyQt5pip install PyQt5-tools2.点击
- 数组我们已经提到过,对象是无序数据的集合,而数组则是有序数据的集合,数组中的数据(元素)通过索引(从0开始)来访问,数组中的数据可以是任何的
- 双向RNN:bidirectional_dynamic_rnn()函数的使用详解先说下为什么要使用到双向RNN,在读一篇文章的时候,上文提到
- 开始安装Androidstudio 4.1克隆此项目git clone https://github.com/pytorch/android
- 上传组件封装需求分析在基于elementUI库做的商城后台管理中,需求最大的是商品管理表单这块,因为需要录入各种各样的商品图片信息。加上后台
- 如何制作一个文本文件编辑器?我们也来做一个:newdoc.asp<%@ Language=VBScript %&g
- 使用Northwind 数据库首先查询Employees表查询结果:city列里面只有5个城市使用ROW_NUMBER() OVER(PAR
- 以前没见过这个效果,滚动纵向滚动条看看效果就明白了这样的效果,广告商应该比较喜欢。<!DOCTYPE html PUBLIC &quo