AI框架之langchain

官方文档

简介

LangChain 是一个开源的 Python 库,旨在简化大语言模型(LLM)在应用程序中的使用和集成。它提供了一种结构化的方法来构建基于 LLM 的应用程序,并解决了许多常见的开发挑战。

LangChain 的核心组件

代理(Agents)

代理是 LangChain 中最强大的概念之一。代理可以感知环境、制定计划并采取行动,以完成复杂的任务。开发人员可以创建自定义的代理,让它们具有特定的能力和行为。代理可以用于构建聊天机器人、虚拟助手等应用程序。

提示(Prompts)

LangChain 提供了一种结构化的方法来设计提示,以获得更好的 LLM 输出。提示模板可以包含占位符,开发人员可以在运行时填充这些占位符。这使得提示更加灵活和可重复使用。

记忆(Memory)

LangChain 支持为代理或应用程序添加记忆功能。记忆可以存储对话历史、任务状态或其他上下文信息,并在未来的交互中使用。这有助于构建更连贯和上下文相关的应用程序。

文档(Documents)

LangChain 提供了处理和管理文档的抽象,包括加载、查询和嵌入文档。这使得开发人员可以更轻松地将 LLM 应用于各种类型的文本数据,如知识库、API 文档等。

工具(Tools)

LangChain 允许开发人员为代理添加外部功能,如搜索、计算等。这使得代理可以执行更复杂的任务,并与真实世界的服务进行交互。

链(Chains)

链是 LangChain 中的另一个关键概念。它提供了一种方法来组合和编排多个 LLM 任务,以构建更复杂的应用程序流程。开发人员可以创建自定义的链,以实现特定的业务逻辑。

LangChain 还提供了许多其他有用的功能,如模块化设计、可插拔组件、丰富的文档和示例代码。这使得开发人员可以快速构建基于 LLM 的应用程序,并专注于应用程序的核心功能,而不是重复解决常见的开发挑战。

常见用法

问答系统

LangChain 可以用于构建基于 LLM 的问答系统。开发人员可以使用 Agents、Prompts 和 Memory 等组件,建立一个能够回答各种问题的智能助手。


from langchain.agents import initialize_agent, AgentType
from langchain.llms import OpenAI
from langchain.tools import GoogleSearchAPIWrapperllm = OpenAI(temperature=0)
search = GoogleSearchAPIWrapper()agent = initialize_agent([search], llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
result = agent.run("什么是人工智能?")
print(result)

文档问答

LangChain 可以帮助开发人员构建基于文档的问答系统。开发人员可以使用 Documents、VectorStores 和 Chains 等组件,将 LLM 与文档知识库集成,为用户提供定制的问答体验。


from langchain.document_loaders import TextLoader
from langchain.vectorstores import Chroma
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.chains import RetrievalQA# 加载文档
loader = TextLoader('document.txt')
documents = loader.load()# 创建向量存储
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(documents, embeddings)# 构建问答链
qa = RetrievalQA.from_llm(llm=OpenAI(), retriever=vectorstore.as_retriever())
result = qa.run("文档中提到了什么?")
print(result)

任务执行代理

LangChain 可以用于构建能够自主完成复杂任务的代理。开发人员可以使用 Agents、Tools 和 Memory 等组件,让代理感知环境,制定计划并采取行动。


from langchain.agents import initialize_agent, AgentType
from langchain.llms import OpenAI
from langchain.tools import PythonREPLTool, BashToolllm = OpenAI(temperature=0)
tools = [PythonREPLTool(),BashTool()
]agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
result = agent.run("请用Python计算1+1的结果,然后用bash命令打印出来。")
print(result)

对话式应用程序

LangChain 可以用于构建基于对话的应用程序,如聊天机器人或虚拟助手。开发人员可以使用 Agents、Memory 和 Prompts 等组件,让应用程序能够记忆上下文,并与用户进行自然语言交互。


from langchain.agents import initialize_agent, AgentType
from langchain.llms import OpenAI
from langchain.memory import ConversationBufferMemoryllm = OpenAI(temperature=0.9)
memory = ConversationBufferMemory(memory_key="chat_history")agent = initialize_agent([search], llm, agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION, memory=memory, verbose=True)print("你好!我是您的虚拟助手。我们聊聊天吧。")
while True:user_input = input("你: ")if user_input.lower() == "quit":breakresult = agent.run(user_input)print("助手: " + result)

常见组合

Language Models (LLMs)

最常见的是 GPT-3、GPT-J、GPT-NeoX 等大型预训练语言模型。LangChain 提供了对这些模型的统一访问接口。
开发人员可以将 LangChain 与自己训练的定制化 LLMs 集成使用。

Retrieval Systems

LangChain 可以与各种信息检索系统(如 Elasticsearch、Pinecone、Weaviate 等)集成,以提供更强大的问答和信息查询能力。
这些检索系统可以帮助 LangChain 应用程序快速访问相关的知识和数据。

Knowledge Bases

LangChain 可以与知识库(如 Notion、Confluence、Google Drive 等)集成,以获取结构化的知识数据。
这些知识库中的信息可以用于增强 LangChain 应用程序的理解和推理能力。

Databases

LangChain 可以与关系型数据库(如 PostgreSQL、MySQL)或文档型数据库(如 MongoDB、Couchbase)集成,以访问应用程序所需的结构化数据。
这些数据可以用于支持 LangChain 应用程序的知识推理和问答功能。

Web APIs

LangChain 可以与各种 Web API(如 OpenWeatherMap、NewsAPI 等)集成,以获取外部数据源的信息。
这些API提供的数据可以丰富 LangChain 应用程序的知识和功能。

langchain 与NLP的结合

import os
from langchain.agents import AgentType, initialize_agent
from langchain.chains import ConversationalRetrievalChain
from langchain.embeddings.hugging_face import HuggingFaceEmbeddings
from langchain.llms.hugging_face import HuggingFaceLLM
from langchain.memory import ConversationBufferMemory
from langchain.prompts import PromptTemplate
from langchain.vectorstores import Chroma# 加载 Hugging Face 预训练模型
llm = HuggingFaceLLM(model_name="gpt-j-6b")
embeddings = HuggingFaceEmbeddings(model_name="all-mpnet-base-v2")# 创建 Chroma 向量存储
persist_directory = "chroma_data"
os.makedirs(persist_directory, exist_ok=True)
vectorstore = Chroma(persist_directory=persist_directory, embedding_function=embeddings)# 创建会话内存
memory = ConversationBufferMemory(memory_key="chat_history")# 创建问答链
qa_chain = ConversationalRetrievalChain.from_llm(llm=llm,retriever=vectorstore.as_retriever(),qa_prompt=PromptTemplate(template="你的问题是: {question}\n你的背景是: {chat_history}",input_variables=["question", "chat_history"]),result_key="result"
)# 创建智能代理
agent = initialize_agent(tools=[qa_chain],llm=llm,agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,verbose=True,memory=memory
)# 开始对话
agent.run("你好,我能问你几个问题吗?")

在这个示例中,我们使用了以下 LangChain 和 NLP 技术:

HuggingFaceLLM

我们使用了 Hugging Face 提供的 GPT-J-6B 预训练模型作为语言模型,以提供高质量的自然语言生成能力。

HuggingFaceEmbeddings

我们使用了 Hugging Face 的 all-mpnet-base-v2 模型来计算文本的向量表示,为向量存储做准备。

Chroma

我们使用 Chroma 向量存储来保存和查询知识库信息,支持高效的语义检索。

ConversationBufferMemory

我们使用会话内存来记录对话历史,让代理能够根据上下文做出更好的响应。

ConversationalRetrievalChain

我们创建了一个可以进行对话式问答的检索链,利用向量存储快速找到相关信息。

initialize_agent

我们使用 LangChain 的智能代理功能,让代理能够感知环境、制定计划并执行操作,实现更加自然的交互体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/29459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以CMDB为基础构建DevOps平台体系

在当今数字化转型的浪潮中,企业IT运维模式正从传统的资产管理向现代化的资源管理转变。配置管理数据库(CMDB)作为IT运维的核心组成部分,其在DevOps平台中的重要性愈加凸显。通过国信证券和招商银行的实际案例,我们将详…

编程牛人验证码怎么输入:深度剖析与策略指导

编程牛人验证码怎么输入:深度剖析与策略指导 在数字时代的浪潮中,编程牛人们时常面临着各种技术挑战,其中之一便是验证码的输入问题。验证码作为一种安全验证机制,旨在防止自动化脚本或机器人的恶意行为。但对于编程高手而言&…

YOLOv8改进 | 注意力机制 | 用于增强小目标感受野的RFEM

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡 专栏目录 :《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40+篇内容,内含各种Head检测头、损失函数Loss、Backbone、Neck、NMS等创新点改进——点击即可跳转 近年来,基于深度学习的人脸检测算法取得了…

css 文字下划线 text-decoration

背景: 在某些时候需要给文字添加特殊样式。使用 text-decoration: underline; 来为段落文字添加下划线。也有其它文本装饰样式,例如: none:无装饰(去掉装饰)overline:上划线line-through&…

《珊瑚岛》是一款什么类型的游戏 苹果电脑如何玩到《珊瑚岛》

在众多电子游戏中,有些游戏因其独特的游戏体验和丰富的内容而脱颖而出,《珊瑚岛》便是其中之一。在游戏中你将离开宝京前往珊瑚岛,种植农作物、饲养动物、和岛民成为朋友。您不仅可以振兴该岛小镇,还可以保护和修复周围的珊瑚礁。…

C# OpenCV 部署RecRecNet广角图像畸变矫正

C# OpenCV 部署RecRecNet广角图像畸变矫正 目录 说明 效果 模型信息 项目 代码 下载 说明 ICCV2023 - RecRecNet: Rectangling Rectified Wide-Angle Images by Thin-Plate Spline Model and DoF-based Curriculum Learning 参考: https://github.com/Kang…

CleanMyMac中文版2024破解完美版本下载链接

CleanMyMac中文版,是一款功能强大的系统优化软件。它能够帮助你清理垃圾文件、卸载无用应用、优化内存使用等,让你的电脑运行更加流畅稳定。 CleanMyMac中文版具有智能扫描功能,能够自动识别电脑上的垃圾文件和冗余数据。它能够快速扫描整个…

IPython 使用技巧整理

IPython 是一个增强的 Python 交互式 shell,提供了许多实用的功能和特性,使得 Python 编程和数据科学工作变得更加便捷和高效。以下是一些 IPython 的使用技巧整理: 1. 自动补全和查询 Tab 补全:在 IPython 中,你可以…

【MongoDB 新搭档 Kafka】

对于做过数据处理,使用过消息队列的小伙伴 ,Kafka可以算是老朋友了,但是最近一个场景下,新的用法,让其变为了MongoDB的新搭档。 开始 从一个问题开始,熟悉MongoDB的小伙伴,可能使用过changeSt…

Java的三个接口Comparable,Comparator,Cloneable(浅拷贝与深拷贝)

Comparable 当我们要进行对象的比较的时候&#xff0c;我们是不能直接用>、< 这些符号直接进行比较的。 由于这是引用类型变量也是自定义类型变量&#xff0c;直接进行比较的时候&#xff0c;我们是通过对象的地址进行比较的&#xff0c;我们可以使用、! 进行两个对象的…

解决 pdf.js 出现 TypeError: key.split(...).at is not a function 报错问题

问题 使用pdf.js v2版本部分机型出现 TypeError: key.split(…).at is not a function 报错 解决 参考 https://github.com/wojtekmaj/react-pdf/issues/1465 方式一&#xff08;推荐&#xff09; import core-js/features/array/at;方式二 (解决了部分机型浏览器问题) if …

Spring Cloud 专题-前言篇(1)

引言 随着微服务架构的兴起&#xff0c;Spring Cloud 作为一套基于 Spring Boot 实现的云应用开发工具集&#xff0c;为开发者提供了在分布式系统&#xff08;如配置管理、服务发现、断路器、智能路由、微代理、控制总线等&#xff09;中快速构建一些常见模式的能力。本篇文档…

2024年大韩民国最佳品牌大赏 彭雨凡荣获“海外邀请特别奖”

14日&#xff0c;“2024年大韩民国最佳品牌大赏-韩流演艺大赏”颁奖典礼在韩国首尔永登浦区汝矣岛洞国会议员会馆第2会议室举办。 演员彭雨凡荣获“海外邀请特别奖”。 据悉&#xff0c;由大韩民国最佳品牌协会和世宗大王国民委员会&#xff08;理事长 LEE YUNTAE&#xff09…

关于IOMMU问题的扩展

关联CSDN&#xff1a; Steam Deck OLED WLAN下载速率过低问题的排查和解决-CSDN博客 前言 如前所述&#xff0c;Steam Deck OLED WLAN速率低问题和IOMMU有一定的关系&#xff0c;这里我们对IOMMU为什么会对速率有影响进行一个较深入的理解。 对于IOMMU我相信大家通过网上的…

模板引擎与 XSS 防御

在 View 层&#xff0c;可以解决 XSS 问题。在本书的“跨站脚本攻击”一章中&#xff0c;阐述了“输入检查” 与“输出编码”这两种方法在 XSS 防御效果上的差异。XSS 攻击是在用户的浏览器上执行的&#xff0c; 其形成过程则是在服务器端页面渲染时&#xff0c;注入了恶意的 H…

Android中的Audio系统框架分析(一)

概述 Audio系统是Android 平台重要的组成部分&#xff0c;我们将从以下几个方面来讲解&#xff1a; 一Audio基础知识讲解 二、Android系统中Audio框架 Audio基础知识讲解 我们大家知道声音是由物体振动产生的声波。是通过介质&#xff08;空气或固体、液体&#xff09;传播并…

CrossOver Games For Mac官方下载_2024电脑最新版软件安装包下载

CrossOver Pro For Mac是由codewaver公司开发的类虚拟机软件&#xff0c;目的是使linux和Mac OS X操作系统和window系统兼容。CrossOver Pro For Mac能够直接在Mac上运行Windows软件与游戏&#xff0c;而不需虚拟机&#xff0c;功能是非常强大的&#xff0c;值得大家下载使用。…

Linux系统基本知识----1

1.什么是Linux中的权限&#xff0c;并举例说明。 ****Linux权限是操作系统用来控制特定用户或用户组可以对文件或目录执行的操作的一种机制。例如&#xff0c;chmod 755 filename 命令会设置filename文件的权限&#xff0c;使得拥有者可以读/写/执行&#xff0c;而组用户和其他…

Android Audio实战——声道信息回调(五)

在前面的 AudioTrack 构造中,我们传入了音频的声道信息,这一节我们就来详细介绍一下声道的配置信息。 一、声道介绍 音频中的声道配置从单声道到双声道(立体声)、再到多声道系统(如5.1和7.1),代表了声音录制和回放技术的发展,旨在提供越来越丰富和沉浸式的听觉体验。 …

在Spring Boot中使用Sa-Token实现路径拦截和特定接口放行

在Spring Boot中使用Sa-Token实现路径拦截和特定接口放行 很喜欢的一段话&#xff1a;别想太多&#xff0c;好好生活&#xff0c;也许日子过着过着就会有答案&#xff0c;努力走着走着就会有温柔的着落。 春在路上&#xff0c;花在枝上&#xff0c;所有的美好都在路上&#xff…