目录
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刀的免费使用额度。感觉是可以简单得自己玩玩试试。