来,我们把LangChain了解一下

目录

LangChain简介

LangChain Experssion Language

常见API key申请


LangChain简介

最近要学的东西可太多了,好的,我们先来看看LangChain是什么东西,咱就是说开干吧:

pip install langchain

Get started吧:Get started | 🦜️🔗 Langchain:

LangChain is a framework for developing applications powered by language models. It enables applications that:

  • Are context-aware: connect a language model to sources of context (prompt instructions, few shot examples, content to ground its response in, etc.)
  • Reason: rely on a language model to reason (about how to answer based on provided context, what actions to take, etc.)

看起来呢,在这个框架里你可以搭建基于语言模型的有上下文感知能力且会一点推理的应用程序。这个框架呢,主要有以下四个部分构成:

  • LangChain Libraries:Python 和 JavaScript 库
  • LangChain Templates:一系列易于部署的参考架构,适用于各种任务
  • LangServe:用于将 LangChain 链部署为 REST API 的库(REST API也称为RESTful API,是遵循 REST 架构规范的应用编程接口API 或 Web API,支持与 RESTful Web 服务进行交互)
  • LangSmith:一个开发者平台,可调试、测试、评估和监控基于任何 LLM 框架构建的链,并与 LangChain 无缝集成

这些产品联通了整个应用程序生命周期:

  • 开发:在 LangChain/LangChain.js 中编写应用程序,使用模板作为参考开始运行。
  • 生产:使用 LangSmith 检查、测试和监控链,以便改进和部署。
  • 部署:使用 LangServe 将任何链转换为 API。

看一眼Model I/O图就大概知道这玩意儿的流程了:

用户的query可以以format的形式变成prompt去传递给大模型,然后预测阶段接LLM或ChatModel得到预测输出,结果进行parse后得到最后结构化的字符。

LangChain Experssion Language

大家直接看官网链接:LangChain Expression Language (LCEL) | 🦜️🔗 Langchain

大概就是用简单的LCEL语法来搭建prompt+LLM的chain。文章给了一个示例(openai需要参数openai_key,申请地址:https://platform.openai.com/api-keys):

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI# 定义prompt, template直接写出来了
prompt = ChatPromptTemplate.from_template("tell me a short joke about {topic}")# 定义model,用chatopenai模型,需要openai的api key
model = ChatOpenAI(openai_api_key='你的open_api_key')# 定义结果解析器
output_parser = StrOutputParser()# 定义prompt+LLM的chain
chain = prompt | model | output_parser# 通过invoke输入来运行定义好的chain
print(chain.invoke({"topic": "ice cream"}))

代码中的这个chain = prompt | model | output_parser,就是咱们的LCEL语法啦,原文是这么解释中间的个竖着的符号:

The | symbol is similar to a unix pipe operator, which chains together the different components feeds the output from one component as input into the next component.

In this chain the user input is passed to the prompt template, then the prompt template output is passed to the model, then the model output is passed to the output parser.

不同component之间的传递过程如下图所示:输入来了以后过prompt模版,然后输入到chatmodel里(也有LLM),然后得到的结果进行output parse转化成可以看懂的字符串的结果。

如果你不是仅仅让模型直接给你回复答案,而是需要从已有的文本数据里先做一步检索,并将检索到的结果作为模型的输入,那你请看以下官方代码:

from langchain_community.vectorstores import DocArrayInMemorySearch
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnableParallel, RunnablePassthrough
from langchain_openai.chat_models import ChatOpenAI
from langchain_openai.embeddings import OpenAIEmbeddings# 把文本存储为vector
# 用openaiembeddings来进行embedding的转化
vectorstore = DocArrayInMemorySearch.from_texts(["harrison worked at kensho", "bears like to eat honey"],embedding=OpenAIEmbeddings(openai_api_key='你的open_api_key'),
)
# 设置一个retriever来完成对已经存储好的vector进行检索
retriever = vectorstore.as_retriever()# prompt的template定义
template = """Answer the question based only on the following context:
{context}Question: {question}
"""# 根据自定义的template定义prompt类
prompt = ChatPromptTemplate.from_template(template)# 加载chatopenai模型
# 需要输入api的key
model = ChatOpenAI(openai_api_key='your api key')# 定义结果输出的parser
output_parser = StrOutputParser()# context是根据用户question检索得到的结果
# question通过RunnablePassthrough()函数传递
setup_and_retrieval = RunnableParallel({"context": retriever, "question": RunnablePassthrough()}
)# 定义chain
chain = setup_and_retrieval | prompt | model | output_parser# 用户输入问题
print(chain.invoke("where did harrison work?"))

不同component的结果传递步骤如下图所示:

那么component有哪些类型呢?可见下表:

常见API key申请

✅ gpt系列,需要参数openai_api_key,申请地址:https://platform.openai.com/api-keys

记得Create new secret key以后需要把你的key在别的地方存一下,因为不会再能展示给你看了。

✅ anthropic也就是前几天发的Claude系列,需要参数anthropic_api_key,申请地址:App unavailable \ Anthropic

同样的记得Create key以后需要把你的key在别的地方存一下,因为不会再能展示给你看了!!!重要的事情说了两遍了。

✅ 这个key的申请,在国内的小伙伴或多或少需要翻墙之类的。目前这两家LLM都给了每个月5刀的免费使用额度。感觉是可以简单得自己玩玩试试。

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

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

相关文章

C语言——递归题

对于递归问题,我们一定要想清楚递归的结束条件,每个递归的结束条件,就是思考这个问题的起始点。 题目1: 思路:当k1时,任何数的1次方都是原数,此时返回n,这就是递归的结束条件&#…

Vue3 + antv/x6 实现流程图

新建流程图 // AddDag.vue <template><div class"content-main"><div class"tool-container"><div click"undo" class"command" title"后退"><Icon icon"ant-design:undo-outlined" /…

深耕版本控制、代码质量与安全等领域,龙智荣获“Perforce 2023年度合作伙伴”奖项

在近日举行的Perforce 2024合作伙伴峰会上&#xff0c;龙智被评选为“Perforce 2023年度合作伙伴”。这一奖项不仅是对龙智在中国市场开拓中的进取精神与丰硕成果的高度认可&#xff0c;也是Perforce公司对于龙智持续创新精神及专业技术与服务的表彰。 自2012年成为Perforce中…

PyCharm无代码提示解决

PyCharm无代码提示解决方法 在使用PyCharm工具时&#xff0c;调用方法却无法进行提示&#xff0c;针对PyCharm无代码提示整理下解决方案 1、Python内置语法无智能提示 复现&#xff1a;我这里以urllib库读取网页内容为例&#xff0c;在通过urlopen(&#xff09;之后调用getur…

强烈推荐—GpuMall智算云实例网盘操作详解

实例网盘为实例的 /gm-fs 目录&#xff0c;该目录为实例同一个数据中心的分布式存储&#xff0c;对于较大的文件或者压缩文件有着出色的读写性能&#xff0c;实例网盘不受实例删除/释放影响&#xff0c;采用分布式冗余存储&#xff0c;数据安全性较高&#xff0c;强烈建议使用网…

jvm八股

文章目录 运行时数据区域Java堆对象创建对象的内存布局对象的访问定位句柄直接指针 GC判断对象是否已死引用计数算法可达性分析算法 引用的类别垃圾收集算法分代收集理论标记清除算法标记复制算法标记整理算法 实现细节并发的可达性分析 垃圾收集器serial收集器ParNew收集器Par…

go语言基础 -- 文件操作

基础的文件操作方法 go里面的文件操作封装在os包里面的File结构体中&#xff0c;要用的时候最好去查下官方文档&#xff0c;这里介绍下基本的文件操作。 打开关闭文件 import("os" ) func main() {// Open返回*File指针&#xff0c;后续的操作都通过*File对象操作…

VUE学习第三篇----VUE实例

1、当一个 Vue 实例被创建时&#xff0c;它将 data 对象中的所有的 property 加入到 Vue 的响应式系统中。当这些 property 的值发生改变时&#xff0c;视图将会产生“响应”&#xff0c;即匹配更新为新的值。 html网页文件如下所示&#xff1a; <html> <head> &…

SpringCloudAlibaba 网关gateway整合sentinel日志默认路径修改

SpringCloudAlibaba 网关gateway整合sentinel 实现网关限流熔断 问题提出 今天运维突然告诉我 在服务器上内存满了 原因是nacos日志高达3G,然后将日志文件发给我看了一下之后才发现是gateway整合sentinel使用了默认日志地址导致日志生成地址直接存在与根路径下而且一下存在多…

论文学习——基于注意力预测策略的动态多目标优化合作差分进化论

论文题目&#xff1a;Cooperative Differential Evolution With an Attention-Based Prediction Strategy for Dynamic Multiobjective Optimization 基于注意力预测策略的动态多目标优化合作差分进化论&#xff08;Xiao-Fang Liu , Member, IEEE, Jun Zhang, Fellow, IEEE, a…

【大厂AI课学习笔记NO.74】人工智能产业技术架构

包括基础层、技术层和应用层。 人工智能的产业技术架构是一个多层次、多维度的复杂系统&#xff0c;它涵盖了从基础硬件和软件设施到高级算法和应用技术的全过程。这个架构通常可以分为三个主要层次&#xff1a;基础层、技术层和应用层。下面我将详细论述这三个层次及其细分内…

rancher是什么

Rancher Labs是制作Rancher的公司。Rancher Labs成立于2014年&#xff0c;是一家专注于企业级容器管理软件的公司。它的产品设计旨在简化在分布式环境中部署和管理容器的过程&#xff0c;帮助企业轻松地采用容器技术和Kubernetes。Rancher Labs提供的Rancher平台支持Docker容器…