LangChain 是一个用于开发由大型语言模型 (LLMs) 驱动的应用程序的框架。它简化了应用程序的开发流程,通过LangChain我们可以调用各个LLM大模型构建我们的应用。
pip install langchain
LangSmith是评估大模型能力好坏的评估工具,能够量化评估基于大模型的系统的效果。它允许您调试、测试、评估和监控基于任何 LLM 框架构建的链和智能代理,并无缝集成 LangChain(用于构建 LLM 的首选开源框架)。 注册地址:LangSmith 然后创建API KEY
很多教程使用LangChain都是调用的OpenAI,但是使用OpenAI需要使用魔法,比较麻烦,所以这里我直接使用国内的通义千问。 安装
pip install --upgrade --quiet langchain-community dashscope
注册并配置API_KEY,具体配置参照:获取APP ID和Workspace ID_大模型服务平台百炼(Model Studio)-阿里云帮助中心
import os
from langchain_community.llms import Tongyi
from langchain_core.messages import HumanMessage, SystemMessage
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "" # 此处为langsmith的API KEY
os.environ["DASHSCOPE_API_KEY"] = "" # 此处为通义千问的API KEY
# 使用语言模型 通义千问
llm = Tongyi()
messages = [
SystemMessage(content="Translate the following from English into chinese."),
HumanMessage(content="hi!"),
]
print(llm.invoke(messages))
模型的响应是一个AIMessage。这包含一个字符串响应以及关于响应的其他元数据。我们通常可能只想处理字符串响应。我们可以通过使用简单的输出解析器来解析出这个响应。
import os
from langchain_community.llms import Tongyi
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.output_parsers import StrOutputParser
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = ""
os.environ["DASHSCOPE_API_KEY"] = ""
# 输出解析器
llm = Tongyi()
parser = StrOutputParser()
messages = [
SystemMessage(content="Translate the following from English into chinese."),
HumanMessage(content="I am fine!"),
]
# | 运算符在 LangChain 中用于将两个元素组合在一起。
chain = llm | parser
print(chain.invoke(messages))
现在我们直接将消息列表传递给语言模型。这些消息列表来自哪里?通常,它是由用户输入和应用逻辑的组合构建而成的。这个应用逻辑通常会将原始用户输入转换为准备传递给语言模型的消息列表。常见的转换包括添加系统消息或使用用户输入格式化模板。 PromptTemplate 是 LangChain 中的一个概念,旨在帮助进行这种转换。它们接收原始用户输入并返回准备传递给语言模型的数据(提示)。
import os
from langchain_community.llms import Tongyi
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = ""
os.environ["DASHSCOPE_API_KEY"] = ""
llm = Tongyi()
parser = StrOutputParser()
# 1.创建一个字符串,我们将格式化为系统消息
system_template = "Translate the following into {language}:"
# 2.创建 PromptTemplate。这将是 system_template 和一个更简单的模板的组合,用于放置要翻译的文本
prompt_template = ChatPromptTemplate.from_messages(
[("system", system_template), ("user", "{text}")]
)
chain = prompt_template | llm | parser
result = chain.invoke({"language": "chinese", "text": "hello world"})
print(result)
现在我们已经构建了一个应用程序,我们需要提供服务。可以使用LangServe, LangServe 帮助开发者将 LangChain 链部署为 REST API。您不需要使用 LangServe 来使用 LangChain,但在本指南中,我们将展示如何使用 LangServe 部署您的应用。安装如下:
pip install "langserve[all]"
服务器serve.py
import os
from fastapi import FastAPI
from langchain_community.llms import Tongyi
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langserve import add_routes
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = ""
os.environ["DASHSCOPE_API_KEY"] = ""
llm = Tongyi()
parser = StrOutputParser()
system_template = "Translate the following into {language}:"
prompt_template = ChatPromptTemplate.from_messages(
[("system", system_template), ("user", "{text}")]
)
chain = prompt_template | llm | parser
app = FastAPI(
title="LangChain Server",
version="1.0",
description="A simple API server using LangChain's Runnable interfaces",
)
add_routes(
app,
chain,
path="/chain",
)
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="localhost", port=8000)
运行
python serve.py
每个 LangServe 服务都配有一个简单的 内置用户界面,用于配置和调用应用,支持流式输出并可查看中间步骤。
现在让我们设置一个客户端,以便以编程方式与我们的服务进行交互。我们可以使用 langserve.RemoteRunnable 轻松做到这一点。 使用这个,我们可以像在客户端运行一样与服务的链进行交互。
from langserve import RemoteRunnable
remote_chain = RemoteRunnable("http://localhost:8000/chain/")
result = remote_chain.invoke({"language": "chinese", "text": "hi"})
print(result)