langchain循序渐进之langchain 安装及使用

pip安装langchain

pip install langchain

安装langsmith(可选)

langsmith官方提示是用来观察大模型复杂调用情况,可选项。

[LangSmith]点击注册然后把秘钥填进去就行,这里我略过了

export LANGCHAIN_TRACING_V2="true"  
export LANGCHAIN_API_KEY="..."

体验langchain 几个过程

  • 构建一个简单的 LLM 链
  • 构建一个检索链
  • 构建一个能感知对话上线文的检索链
  • 构建一个包含智能体的检索链

试用一个简单的 LLM 链

安装langchain-openai

pip install langchain-openai

设置秘钥

export OPENAI_API_KEY="..."

使用前初始化

from langchain_openai import ChatOpenAIllm = ChatOpenAI()

一旦你已经安装并初始化了所选的大型语言模型(LLM),我们就可以尝试使用它了!让我们问它"LangSmith是什么"——这是训练数据中不存在的内容,所以它可能不会有很好的回答。

llm.invoke("how can langsmith help with testing?")

我们还可以使用prompt提示模板来引导它的响应。提示模板将原始用户输入转换为更适合大型语言模型(LLM)的输入。

from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([    ("system", "You are a world class technical documentation writer."),    ("user", "{input}")])

我们可以直接传递文档来自己运行这个流程:

from langchain_core.documents import Documentdocument_chain.invoke({"input": "how can langsmith help with testing?","context": [Document(page_content="langsmith can let you visualize test results")]
})

prompt和llm一起使用

from langchain_core.output_parsers import StrOutputParser  
output_parser = StrOutputParser()
// prompt 是提示,llm|output_parser将大语言模型输出的结构化chatmodel 变为字符串输出
chain = prompt | llm | output_parser
chain.invoke({"input": "how can langsmith help with testing?"})

目前整理如下,注意api_key要替换成自己的,并且有余额才行,无余额会报错

from langchain_openai import ChatOpenAIllm = ChatOpenAI()
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([("system", "You are a world class technical documentation writer."),("user", "{input}")
])
from langchain_core.output_parsers import StrOutputParseroutput_parser = StrOutputParser()
chain = prompt | llm | output_parser
result = chain.invoke({"input": "how can langsmith help with testing?"})
print(result)

我这里打印的结果是这样的(貌似每次输出都不一样啊,这里仅供参考)

Langsmith can help with testing in several ways:

  1. Automated Testing: Langsmith can be used to generate test data for automated testing scripts. By creating realistic and diverse test data, Langsmith can help ensure comprehensive test coverage.

  2. Performance Testing: Langsmith can generate large volumes of data to simulate real-world usage scenarios, allowing for performance testing of systems and applications under load.

  3. Data Validation: Langsmith can be used to validate the accuracy and integrity of data by generating test data sets that cover various edge cases and boundary conditions.

  4. Regression Testing: Langsmith can help streamline the testing process by quickly generating test data for regression testing, ensuring that new code changes do not introduce unexpected bugs or issues.

Overall, Langsmith can be a valuable tool for testing teams to improve the efficiency and effectiveness of their testing processes.

问题
注意chantgpt 需要有付费账号并有余额才行,否则会报错如下

openai.RateLimitError: Error code: 429 - {'error': {'message': 'You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: https://platform.openai.com/docs/guides/error-codes/api-errors.', 'type': 'insufficient_quota', 'param': None, 'code': 'insufficient_quota'}}

构建一个检索链 Retrieval Chain

为了恰当地回答原始问题(“langsmith如何帮助测试?”),我们需要为大型语言模型(LLM)提供额外的上下文。这可以通过检索来实现。当你有太多数据无法直接传递给LLM时,检索就很有用。然后,你可以使用检索器仅获取最相关的部分并将其传递进去。
在这个过程中,我们将从检索器中查找相关文档,然后将它们传递给提示。检索器可以由任何内容支持——SQL表、互联网等——但在这个例子中,我们将填充一个向量存储并使用它作为检索器。有关向量存储的更多信息,请参阅相关文档。
首先,我们需要加载我们想要索引的数据。为此,我们将使用WebBaseLoader。这需要安装BeautifulSoup:

pip install beautifulsoup4

之后我们可以导入并使用它

from langchain_community.document_loaders import WebBaseLoader
loader = WebBaseLoader("https://docs.smith.langchain.com/user_guide")
docs = loader.load()

接下来,我们需要将数据索引到向量存储中。这需要几个组件,即[embedding model]。

对于嵌入模型,我们再次提供通过API访问或运行本地模型的示例。 以openAI 为例

from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()

安装向量数据库

pip install faiss-cpu

有了向量数据库我们就可以构建索引了

from langchain_community.vectorstores import FAISS
from langchain_text_splitters import RecursiveCharacterTextSplittertext_splitter = RecursiveCharacterTextSplitter()
documents = text_splitter.split_documents(docs)
vector = FAISS.from_documents(documents, embeddings)

既然我们已经将数据索引到向量存储中,接下来我们将创建一个检索链。这个链将接受一个输入问题,查找相关文档,然后将这些文档与原始问题一起传递给大型语言模型(LLM),并请求它回答原始问题。

首先,让我们设置这个链,该链将接受一个问题以及检索到的文档,并生成一个答案。

from langchain.chains.combine_documents import create_stuff_documents_chainprompt = ChatPromptTemplate.from_template("""Answer the following question based only on the provided context:<context>
{context}
</context>Question: {input}""")from langchain_openai import ChatOpenAI
llm = ChatOpenAI()document_chain = create_stuff_documents_chain(llm, prompt)

然而,我们希望文档首先来自我们刚刚设置的检索器。这样,我们就可以使用检索器动态选择最相关的文档,并将这些文档传递给给定的问题。

from langchain.chains import create_retrieval_chainretriever = vector.as_retriever()
retrieval_chain = create_retrieval_chain(retriever, document_chain)

我们现在可以调用这个链。这将返回一个字典——大型语言模型(LLM)的响应位于“answer”键中。

response = retrieval_chain.invoke({"input": "how can langsmith help with testing?"})
print(response["answer"])# LangSmith offers several features that can help with testing:...

最终我这里打印的返回是这样的(貌似每次输出都不一样啊,这里仅供参考):

LangSmith can help with testing in several ways:

  1. Prototyping: LangSmith allows for quick experimentation between prompts, model types, retrieval strategies, and other parameters, enabling rapid understanding of how the model is performing and debugging where it is failing during the prototyping phase.

  2. Debugging: LangSmith tracing provides clear visibility and debugging information at each step of an LLM sequence, making it easier to identify and root-cause issues when things go wrong.

  3. Initial Test Set: Developers can create datasets and use them to run tests on their LLM applications. LangSmith also facilitates running custom evaluations to score test results.

  4. Comparison View: LangSmith offers a user-friendly comparison view for test runs to track and diagnose regressions in test scores across multiple revisions of an application.

  5. Playground: LangSmith provides a playground environment for rapid iteration and experimentation, allowing developers to quickly test out different prompts and models, and log every playground run in the system for future use.

  6. Beta Testing: LangSmith enables the collection of data on how LLM applications are performing in real-world scenarios, aiding in the curation of test cases to track regressions/improvements and the development of automatic evaluations.

  7. Capturing Feedback: Users can gather human feedback on the responses produced by their applications and attach feedback scores to logged traces, then filter on traces that have a specific feedback tag and score.

  8. Adding Runs to a Dataset: LangSmith enables the addition of runs as examples to datasets, expanding test coverage on real-world scenarios as the application progresses through the beta testing phase.

Overall, LangSmith supports testing by providing visibility, debugging tools, test creation and execution capabilities, comparison views, and environments for rapid iteration and experimentation.

构建一个能感知对话上下文的检索链

到目前为止,我们创建的链只能回答单个问题。人们正在构建的LLM应用程序的主要类型之一是聊天机器人。那么我们如何将这个链变成一个可以回答后续问题的链呢? 我们仍然可以使用 create_retrieval_chain 函数,但我们需要更改两件事:

  1. 检索方法现在不应该只适用于最近的输入,而应该考虑整个历史。
  2. 最终的LLM链同样应该考虑整个历史

更新检索器

为了更新检索,我们将创建一个新的链。这个链将接收最新的输入(input)和对话历史(chat_history),并使用LLM生成搜索查询。

from langchain.chains import create_history_aware_retriever
from langchain_core.prompts import MessagesPlaceholder
# First we need a prompt that we can pass into an LLM to generate this search query
prompt = ChatPromptTemplate.from_messages([MessagesPlaceholder(variable_name="chat_history"),("user", "{input}"),("user", "Given the above conversation, generate a search query to look up to get information relevant to the conversation")
])
retriever_chain = create_history_aware_retriever(llm, retriever, prompt)

试用一下更新后检索器的效果

from langchain_core.messages import HumanMessage, AIMessagechat_history = [HumanMessage(content="Can LangSmith help test my LLM applications?"), AIMessage(content="Yes!")]
retriever_chain.invoke({"chat_history": chat_history,"input": "Tell me how"
})

如果输出没问题,那么我们生成一个新的检索链

prompt = ChatPromptTemplate.from_messages([("system", "Answer the user's questions based on the below context:\n\n{context}"),MessagesPlaceholder(variable_name="chat_history"),("user", "{input}"),
])
document_chain = create_stuff_documents_chain(llm, prompt)retrieval_chain = create_retrieval_chain(retriever_chain, document_chain)

调用新的检索链

chat_history = [HumanMessage(content="Can LangSmith help test my LLM applications?"), AIMessage(content="Yes!")]
retrieval_chain.invoke({"chat_history": chat_history,"input": "Tell me how"
})

输出如下(貌似每次输出都不一样啊,这里仅供参考):

LangSmith can help test your LLM applications by providing features like creating datasets for test cases, running custom evaluations, offering comparison views for different configurations, providing a playground environment for rapid iteration and experimentation, supporting beta testing with feedback collection and annotation queues, enabling feedback scoring on logged traces, allowing annotation of traces with different criteria, adding runs to datasets for real-world scenario coverage, and offering monitoring, A/B testing, automations, and thread views for multi-turn interactions.

如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】模版初阶以及STL的简介

个人主页~ 模版及STL 一、模版初阶1、泛型编程2、函数模版&#xff08;1&#xff09;概念&#xff08;2&#xff09;函数模版格式&#xff08;3&#xff09;函数模版的原理&#xff08;4&#xff09;函数模版的实例化①显式实例化②隐式实例化 &#xff08;5&#xff09;模版参…

精益六西格玛项目赋能,石油机械龙头企业质量效率双提升!

​国内某石油机械制造龙头&#xff0c;迎接挑战&#xff0c;迈向卓越&#xff0c;携手张驰咨询&#xff0c;启动精益六西格玛项目&#xff0c;开启管理革新新篇章。 在国家政策调整和市场竞争日益激烈的背景下&#xff0c;作为国内石油机械产品制造领域的龙头企业&#xff0c;…

算法 —— LRU算法

算法 —— LRU算法 LRULRU算法的工作原理&#xff1a;实现方法&#xff1a;性能考虑&#xff1a; 模拟过程splice函数对于std::list和std::forward_list基本语法&#xff1a;功能描述&#xff1a; 示例&#xff1a;注意事项&#xff1a; 如果大家已经学习过了Cache的替换算法和…

Linux——Shell脚本和Nginx反向代理服务器

1. Linux中的shell脚本【了解】 1.1 什么是shell Shell是一个用C语言编写的程序&#xff0c;它是用户使用Linux的桥梁 Shell 既是一种命令语言&#xff0c;有是一种程序设计语言 Shell是指一种应用程序&#xff0c;这个应用程序提供了一个界面&#xff0c;用户通过这个界面访问…

开放式耳机2024哪家品牌比较好?2024年爆火开放式耳机推荐

很多小伙伴在后台私信我&#xff0c;滴滴我说&#xff0c;最近开放式耳机这么火&#xff0c;他也想要入手一台问问我&#xff0c;有哪些开放式耳机值得现在入手的&#xff0c;作为一个尽职尽业的数码博主&#xff0c;我本来是一个个回复的&#xff0c;但是私信没想到这么多&…

[C++初阶]list的模拟实现

一、对于list的源码的部分分析 1.分析构造函数 首先&#xff0c;我们一开始最先看到的就是这个结点的结构体&#xff0c;在这里我们可以注意到这是一个双向链表。有一个前驱指针&#xff0c;一个后继指针。然后在有一个存储数据的空间 其次它的迭代器是一个自定义类型&#x…

pyinstall 打包基于PyQt5和PaddleOCR的项目为.exe

简介&#xff1a; 最近做了一个小项目&#xff0c;是基于PyQt5和PaddleOCR的。需要将其打包为.exe&#xff0c;然后打包过程中遇到了很多问题&#xff0c;也看了很多教程&#xff0c;方法千奇百怪的&#xff0c;最后也是一步一步给试出来了。记录一下&#xff0c;防止以后忘记…

CSS基础学习之元素定位(6)

目录 1、定位类型 2、取值 2.1、static 2.2、relative 2.3、absolute 2.4、fixed 2.5、stickty 3、示例 3.1、相对定位(relative) 3.2、绝对定位&#xff08;absolute&#xff09; 3.3、固定定位&#xff08;fixed&#xff09; 3.4、粘性定位&#xff08;sticky&…

智慧互联新时代,Vatee万腾平台引领行业变革

在科技日新月异的今天&#xff0c;我们正步入一个前所未有的智慧互联新时代。这个时代&#xff0c;信息如潮水般涌来&#xff0c;数据成为新的石油&#xff0c;驱动着各行各业发生深刻变革。在这场变革的浪潮中&#xff0c;Vatee万腾平台以其卓越的智慧互联技术和前瞻性的战略布…

vue3前端开发-执行npm run dev提示报错怎么解决

vue3前端开发-执行npm run dev提示报错怎么解决&#xff01;今天在本地安装初始化了一个vue3的案例demo。但是当我执行npm run dev想启动它时报错了说&#xff0c;找不到dev。让我检查package.json文件是否包含dev。如下图所示&#xff1a; 实际上&#xff0c;不必惊慌&#xf…

2024全球和国内最常用的弱密码,有没有你的?

密码管理器NordPass分析了来自公开来源的超过4.3TB 的密码数据&#xff0c;找出了当前为止&#xff08;2024年&#xff09;最常用&#xff08;最脆弱&#xff09;的密码。 这些密码主要有下面这些特征&#xff1a; 简单且常用&#xff0c;万年弱密码&#xff0c;比如123456、a…

获利能力段部分特征值不更新,需要手动点派生才更新的问题

一、问题描述&#xff1a;销售订单修改某些特征值字段&#xff0c;保存后&#xff0c;获利能力段对应的字段值没更新。 比如&#xff1a;把销售订单销售组从Z09修改为Z04&#xff0c;保存后&#xff0c;获利能力段重的销售组还是旧值Z09。 1、修改销售组为Z04,然后保存 2、销售…

mac拆分pdf mac如何拆分pdf成多个文件

在数字化办公日益普及的今天&#xff0c;pdf文件因其良好的兼容性和便捷性&#xff0c;已经成为工作和学习中的重要文件格式。然而&#xff0c;有时候我们可能会遇到需要将一个大的pdf文件拆分成多个小文件的情况&#xff0c;以便于管一理和分享。本文将为您详细介绍两种简单易…

【BUG】已解决:java.lang.reflect.InvocationTargetException

已解决&#xff1a;java.lang.reflect.InvocationTargetException 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开发…

[word] word如何编写公式? #微信#知识分享

word如何编写公式&#xff1f; word如何编写公式&#xff1f;Word中数学公式是经常会使用到的&#xff0c;若是要在文档中录入一些复杂的公式&#xff0c;要怎么做呢&#xff1f;接下来小编就来给大家讲一讲具体操作&#xff0c;一起看过来吧&#xff01; 方法一&#xff1a;…

【机器学习】--过采样原理及代码详解

过采样&#xff08;Oversampling&#xff09;是一个在多个领域都有应用的技术&#xff0c;其具体含义和应用方法会根据领域的不同而有所差异。以下是对过采样技术的详细解析&#xff0c;主要从机器学习和信号处理两个领域进行阐述。 一、机器学习中的过采样 在机器学习中&…

完美的用户体验:如何设计一个直观和有效的网站导航?

APP的顶部导航栏对我们来说很熟悉。导航栏是UI设计中不可或缺的一部分&#xff0c;几乎每个页面都使用导航栏。虽然导航栏看起来很简单&#xff0c;不需要太多精力&#xff0c;但是设计一个与产品需求和客户目标高度匹配的导航栏并不是那么容易的。导航栏的设计标准有很多细节需…

JavaWeb服务器-Tomcat(Tomcat概述、Tomcat的下载、安装与卸载、启动与关闭、常见的问题)

Tomcat概述 Tomcat服务器软件是一个免费的开源的web应用服务器。是Apache软件基金会的一个核心项目。由Apache&#xff0c;Sun和其他一些公司及个人共同开发而成。 由于Tomcat只支持Servlet/JSP少量JavaEE规范&#xff0c;所以是一个开源免费的轻量级Web服务器。 JavaEE规范&…

JavaScript 中怎么看数据返回值

文章目录 前言console.log()1. 输出简单的文本2. 输出变量3. 输出表达式的结果4. 输出对象和数组5. 输出多个参数6. 使用模板字符串7. 输出错误信息 alert()基本用法使用场景注意事项 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 我只知道后端程序跑…

React学习笔记02-----React基本使用

一、React简介 想实现页面的局部刷新&#xff0c;而不是整个网页的刷新。AJAXDOM可以实现局部刷新 1.特点 &#xff08;1&#xff09;虚拟DOM 开发者通过React来操作原生DOM&#xff0c;从而构建页面。 React通过虚拟DOM来实现&#xff0c;可以解决DOM的兼容性问题&#x…