当前位置: 首页 > news >正文

LangChain+LLM实战---LangChain中的6大核心模块

模型(Models)

  • LLMs

大型语言模型,将文本字符串作为输入,并返回文本字符串作为输出。

  • 聊天模型

聊天模型通常由语言模型支持,但它们的API更加结构化。这些模型将聊天消息列表作为输入,并返回聊天消息。

  • 文本嵌入模型

文本嵌入模型将文本作为输入,并返回一个浮点数列表,常见的嵌入集成:OpenAI。

LLM从语言模型中获取预测,LangChain最基本的构建块是对某些输入调用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))

提示工程(Prompts)

提示模板(PromptTemplate):管理LLM的提示

from langchain.prompts import PromptTemplateprompt = 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?

链(Chains)

  • 在多步骤的工作流中组合LLM和提示
  • 在LangChain中,链是由链组成的,可以是LLM这样的原始链,也可以是其他链。
  • 最核心的链类型是LLMChain,它由PromptTemplateLLM组成。
  • 接受用户输入,使用 PromptTemplate 对其进行格式化,然后将格式化后的响应传递给LLM
from langchain.prompts import PromptTemplate
from langchain.llms import OpenAIllm = OpenAI(temperature=0.9)
prompt = PromptTemplate(input_variables=["product"],template="What is a good name for a company that makes {product}?",
)

现在可以创建一个简单的链,它接受用户输入,用它格式化提示符,然后将它发送到 LLM:

from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)chain.run("colorful socks")
# -> '\n\nSocktastic!'

代理(Agents)

基于用户输入的动态调用链,通常链运行在一个预先确定的顺序,但是代理使用LLM来确定要执行哪些操作以及按照什么顺序执行。操作可以使用工具并观察其输出,也可以返回给用户。

代理相关基本概念:

  • 工具(tools):执行特定任务的功能。可以是:Google 搜索、数据库查找、Python REPL、其他链等。工具的接口目前是一个函数,预计将有一个字符串作为输入,一个字符串作为输出。
  • 大语言模型(LLM):为代理提供动力的语言模型。
  • 代理(agents):要使用的代理,是引用支持代理类的字符串。

安装SerpAPI Python包:pip install google-search-results

设置适当的环境变量:import osos.environ["SERPAPI_API_KEY"] = "..."

from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import OpenAI# First, let's load the language model we're going to use to control the agent.
llm = OpenAI(temperature=0)# Next, let's load some tools to use. Note that the `llm-math` tool uses an LLM, so we need to pass that in.
tools = load_tools(["serpapi", "llm-math"], llm=llm)# Finally, let's initialize an agent with the tools, the language model, and the type of agent we want to use.
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)# Now let's test it out!
agent.run("What was the high temperature in SF yesterday in Fahrenheit? What is that number raised to the .023 power?")

记忆存储(Memory)

向链和代理添加状态:

  • 通常所有工具和代理都是无状态的。
  • 如果链或代理具有某种“内存”概念,以便它可以记住关于其以前的交互的信息,这样它就可以利用这些消息的上下文来进行更好的对话,这是一种“短期记忆”。
  • 如果链条/代理随着时间的推移记住关键信息,这将是一种形式的“长期记忆”。
  • LangChain提供了链(ConversationChain)和两种不同类型的内存来完成操作。

默认情况下,ConversationChain有个简单的内存类型,它记住所有以前的输入/输出,并将它们添加到传递的上下文中,(设置verbose=True,可以看到提示符)。

from langchain import OpenAI, ConversationChain
llm = OpenAI(temperature=0)
conversation = ConversationChain(llm=llm, verbose=True)
output = conversation.predict(input="Hi there!")
print(output)output = conversation.predict(input="I'm doing well! Just having a conversation with an AI.")
print(output)

索引(Indexes)

  • 索引是指构造文档的方法,以便LLM可以最好地与它们交互。此模块包含用于处理文档的实用工具函数、不同类型的索引,以及在链中使用这些索引的示例。
  • 在链中使用索引的最常见方式是“检索”步骤。接受用户的查询并返回最相关的文档。索引可以用于检索之外的其他事情,检索可以使用索引之外的其他逻辑来查找相关文档。
  • 大多数时候,谈论索引和检索时,谈论的是索引和检索非结构化数据,如文本文档。
  • LangChain支持的主要索引和检索类型目前主要集中在向量数据库上。
  • 文档加载器(Document Loaders),文档加载程序,如何从各种源加载文档。
from langchain.document_loaders.csv_loader import CSVLoaderloader = CSVLoader(file_path='./example_data/mlb_teams_2012.csv')
data = loader.load()
  • 文本分割器(Text Splitters),文字分割器,关于分割文本的抽象和实现的概述。
from langchain.text_splitter import CharacterTextSplitter
text_splitter = CharacterTextSplitter(        separator = "  ",chunk_size = 1000,chunk_overlap  = 200,length_function = len,
)texts = text_splitter.create_documents([state_of_the_union])
  • 向量存储(Vectorstores),概述Vector Stores和LangChain提供的许多集成。
import os
import getpassos.environ['OPENAI_API_KEY'] = getpass.getpass('OpenAI API Key:')from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Milvus
from langchain.document_loaders import TextLoaderfrom langchain.document_loaders import TextLoader
loader = TextLoader('../../../state_of_the_union.txt')
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)embeddings = OpenAIEmbeddings()vector_db = Milvus.from_documents(docs,embeddings,connection_args={"host": "127.0.0.1", "port": "19530"},
)docs = vector_db.similarity_search(query)
  • 检索器(Retrievers),检索器概述和LangChain提供的实现。
from langchain.retrievers import ChatGPTPluginRetrieverretriever = ChatGPTPluginRetriever(url="http://0.0.0.0:8000", bearer_token="foo")
retriever.get_relevant_documents("alice's phone number")
http://www.lryc.cn/news/210747.html

相关文章:

  • 【Android】Android Framework系列---CarPower电源管理
  • io测试【FPGA】
  • vue项目中页面跳转传参的方法
  • 论文速递 TMC 2023 | RoSeFi: 一种利用商用WiFi设备进行稳健的久坐行为监测系统
  • Day 12 python学习笔记
  • DBA笔记(1)
  • C++设计模式_15_Proxy 代理模式
  • Go学习第十四章——Gin请求与响应
  • 【多线程面试题十】、说一说notify()、notifyAll()的区别
  • 【Element UI】解决 el-button 禁用状态下,el-tooltip 提示不生效问题
  • C++单元测试GoogleTest和GoogleMock十分钟快速上手(gtestgmock)
  • Starknet的去中心化路线图
  • python基础语法(十二)
  • 【开源】基于SpringBoot的农村物流配送系统的设计和实现
  • 【2024秋招】2023-9-16 贝壳后端开发一面
  • BI是什么?想要了解BI需要从哪些方面入手?
  • 软件测试---等价类划分(功能测试)
  • javascript原生态xhr上传多个图片,可预览和修改上传图片为固定尺寸比例,防恶意代码,加后端php处理图片
  • 【Java】Map集合中常用方法
  • 方太描画未来厨房的模样
  • ELASTICO-A Secure Sharding Protocol For Open Blockchains
  • 【数据结构】Map和Set
  • Python Flask
  • 时序预测 | Python实现ARIMA-LSTM差分自回归移动平均模型结合长短期记忆神经网络时间序列预测
  • Redis快速上手篇八(redission完善分布式锁)
  • Dataset文件下载以及使用,以nuswide为例
  • ZYNQ连载02-开发环境
  • 前端 :用HTML和css制作一个小米官网的静态页面
  • modelsim仿真报错:vlog-2388 ‘scl‘ already declared in this scope
  • C#中通过BeginInvoke()和EndInvoke()来实现异步