Langchain集成管理prompt功能详解

 更新时间:2023年03月29日 09:59:35   作者:AudreyXu  
这篇文章主要为大家介绍了Langchain集成管理prompt功能示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

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

以上就是Langchain集成管理prompt功能详解的详细内容,更多关于Langchain集成管理prompt的资料请关注脚本之家其它相关文章!

相关文章

  • 如何使用python把ppt转换成pdf

    如何使用python把ppt转换成pdf

    这篇文章主要介绍了如何使用python把ppt转换成pdf,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-06-06
  • pycharm实现在子类中添加一个父类没有的属性

    pycharm实现在子类中添加一个父类没有的属性

    这篇文章主要介绍了pycharm实现在子类中添加一个父类没有的属性,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • python实现双向链表原理

    python实现双向链表原理

    这篇文章主要为大家详细介绍了python实现双向链表原理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 基于Python快速处理PDF表格数据

    基于Python快速处理PDF表格数据

    这篇文章主要介绍了基于Python快速处理PDF表格数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • python数据处理和数据清洗的示例详解

    python数据处理和数据清洗的示例详解

    数据清洗是指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等,数据清洗与处理的目的是提高数据的质量,提高实验结果的可靠度,本文给大家介绍了python数据处理和数据清洗的示例,需要的朋友可以参考下
    2024-08-08
  • 利用Python对哥德巴赫猜想进行检验和推理

    利用Python对哥德巴赫猜想进行检验和推理

    数学是一个奇妙的东西,对此,也衍生出了许多的悖论与猜想。这篇文章会对哥德巴赫猜想用编程语言进行检验和推理,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-12-12
  • Django ValuesQuerySet转json方式

    Django ValuesQuerySet转json方式

    这篇文章主要介绍了Django ValuesQuerySet转json方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python Bytes压缩新手速成

    Python Bytes压缩新手速成

    掌握Python Bytes压缩的秘诀,让你的数据轻装上阵!本指南将带你一探Bytes压缩的奥秘,告别臃肿的数据,快来发现如何让你的代码和应用在性能高速公路上驰骋吧!
    2023-12-12
  • Python中threading模块的Lock和RLock区别详解

    Python中threading模块的Lock和RLock区别详解

    这篇文章主要介绍了Python中threading模块的Lock和RLock区别详解,Lock锁是Python的原始锁,在锁定时不属于任何一个线程,在调用了 lock.acquire() 方法后,进入锁定状态,lock.release()方法可以解锁,底层是通过一个函数来实现的,需要的朋友可以参考下
    2023-09-09
  • python Prophet时间序列预测工具库使用功能探索

    python Prophet时间序列预测工具库使用功能探索

    Python Prophet是一个强大的时间序列预测工具,由Facebook开发,具有易用性和高度可定制性的特点,本文将深入介绍Python Prophet的基本概念、安装方法以及如何使用它进行时间序列预测,并提供丰富的示例代码来帮助大家入门
    2024-01-01

最新评论