【AI学习笔记】LangChain使用通义千问构建LLM应用

LangChain简介

LangChain 是一个用于开发由大型语言模型 (LLMs) 驱动的应用程序的框架。它简化了应用程序的开发流程,通过LangChain我们可以调用各个LLM大模型构建我们的应用。

langchain安装

pip install langchain

 

langsmith

LangSmith是评估大模型能力好坏的评估工具,能够量化评估基于大模型的系统的效果。它允许您调试、测试、评估和监控基于任何 LLM 框架构建的链和智能代理,并无缝集成 LangChain(用于构建 LLM 的首选开源框架)。 注册地址:LangSmith 然后创建API KEY

【AI学习笔记】LangChain使用通义千问构建LLM应用_第1张图片

 

【AI学习笔记】LangChain使用通义千问构建LLM应用_第2张图片

通义千问

很多教程使用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, 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 服务都配有一个简单的 内置用户界面,用于配置和调用应用,支持流式输出并可查看中间步骤。

 【AI学习笔记】LangChain使用通义千问构建LLM应用_第3张图片

客户端client.py

现在让我们设置一个客户端,以便以编程方式与我们的服务进行交互。我们可以使用 langserve.RemoteRunnable 轻松做到这一点。 使用这个,我们可以像在客户端运行一样与服务的链进行交互。

from langserve import RemoteRunnable

remote_chain = RemoteRunnable("http://localhost:8000/chain/")
result = remote_chain.invoke({"language": "chinese", "text": "hi"})
print(result)

 

 

 

 

 

 

 

你可能感兴趣的:(学习,笔记,langchain,人工智能,ai,agi)