什么是Langchain

Langchain是一款提供给用户与大模型之间快捷沟通的代理框架,其核心设计思想就是整合各大模型厂商的接口,给用户提供一个快捷入口能快速实现自己的agent。

核心组件

  • agent:Langchain的核心部分,所有的操作都围绕agent展开,并且对外提供一个统一 apicreate_agent()来快捷创建。内部包含toolsmemorymodelmessagesmiddleware等其他核心组件
  • tools:由 Langchain 提供装饰器,对某个具体函数抽象成一个工具供大模型使用。大模型本身不直接调用工具,只拥有可以调用工具的功能
  • memory:记忆组件,通过同一个 session_id 来维持多轮对话的记忆
  • model:对外整合国内外大部分厂商,提供一个抽象层的modle 给用户使用
  • messages:Langchain 中的消息格式,一共四种:AIMessage、ToolMessage、SystemMessage、HumanMessage,分别代表四种角色的输入和输出
  • middleware:Langchain 中最为核心的功能,抛弃以往的 LECL 和 LLMChain,采用中间件形式完成动态模型切换、动态提示词修改、agent 环绕日志,model 环绕日志及修改以及PII 身份验证,会话摘要总结等等一系列功能(还没列举完)
  • 其他功能:stream 流式输出、structoutput 格式化输出等等

环境准备

在学习 Langchain 之前,希望你有 Python 的编程知识,至少能看懂 print("hello world")是什么意思,以及知道 conda 和虚拟环境。

除了 Python 环境外,你还需要有一个合适的编辑器,例如:vscode、cursor、pycharm 等等,以及希望你对大模型有一个基本的概念和知道如何编写一个正常的提示词

希望你给大模型的提问是这样:(正例)
你是一个 xx 助手,可以用专业术语回答用户问题,在遇到不清楚的问题时可以友好的告诉用户这部分知识正在学习中
而不是这样:(反例)
我想要完成这个功能,你给我完成

你可以选择以下几种方式来准备一个会话的大模型:

  1. Ollama 本地部署
  2. 百炼开放平台获取 base_url 和 api_key
  3. 智谱 AI 获取 base_url 和 api_key
  4. DeepSeek 开放平台获取 base_url 和 api_key

除了以上四种,你还可以选择其他方式,例如:vllm 部署、讯飞星火、火山大模型、豆包、OpenAI 等等

Langchain 自 1.0 开始,官方推荐 Python 版本为 3.10 以上,但是又不建议太新,所以你可以选择指定版本 3.11 或者 3.12 ,采用conda 命令快捷安装:

conda create -n langchain python=3.11

conda activate langchain

教程以百炼平台获取 api_key和 base_url 为主,并且采用 qwen-flash 模型,该模型特点:回复快,token 消耗少,支持 Function calling

快速入门

在项目根目录下创建.env文件,填入你的 api_key 和 base_url

DASHSCOPE_API_KEY=sk-xxxxxxx
DASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1

然后创建一个 src 目录(不是包结构),在 src 目录下创建一个文件main.py,此时你的项目结构应该是这样:

your_project/src/main.py 和 your_project/.env

安装 Langchain

pip install langchain
目前安装的最新版本应该是 1.1.6 左右

导入需要的包

from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
import os
from dotenv import load_dotenv
from langchain_core.messages import HumanMessage

load_dotenv()

初始化一个模型

model = init_chat_model(
    model="qwen-flash",
    model_provider="openai",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url=os.getenv("DASHSCOPE_BASE_URL"),
)

创建一个 agent

agent = create_agent(
    model=model,
    system_prompt="""
    你是一个城市旅游智慧助手,善于用优美的语气给用户讲解各大景点的特色
    """
)

调用 agent

response = agent.invoke({
    "messages":[
        HumanMessage(content="请给我推荐一个景点")
    ]
})

response['messages'][-1].pretty_print()

不出意外,你将能看到以下输出:

================================== Ai Message ==================================

当然可以~让我为您推荐一个藏在江南烟雨里的诗意之地——**苏州园林·拙政园**。

清晨的拙政园,薄雾如纱,轻轻拂过亭台楼阁。一池碧水倒映着飞檐翘角,曲桥蜿蜒,仿佛一幅徐徐展开的水墨长卷。漫步其中,一步一景:听雨轩前细雨敲荷,远香堂畔荷风送香,小飞虹的倒影在水中摇曳生姿。每一扇花窗都是一幅画框,框住四季流转的温柔。

这里不仅是建筑与自然的完美融合,更藏着文人雅士的闲情逸致。当你倚栏而立,看一片落叶随水流去,仿佛听见了明代才子文徵明笔下的低语。

若你愿暂别喧嚣,不妨来此寻一处静谧,在假山叠石间邂逅时光的轻叹,让心,也如这园中的一缕清风,自在悠然。

至此,恭喜你完成了 Langchain1.0 的入门,也完成了你的第一个 agent 搭建。

Langsmith 部署

Langchain 官方提供了一种 playground,用于给开发者演示,从接收到用户输入,到中间的 Tool 使用,再到 agent 执行和 model 的运行最终输出结果的全流程,你需要额外安装一个依赖:

pip install --upgrade "langgraph-cli[inmem]"

安装完成后,你需要打开LangSmith 的网站获取到一个 api_key(建议挂上梯子):
LangSmith
在左侧TabBar 找到 Api Keys 菜单,然后点击右上角创建,这个 api_key 是免费的,将你的 api_key 粘贴到上方的 .env文件中,名字命名为LANGSMITH_API_KEY,此时你的.env文件中应该有以下三个变量:

DASHSCOPE_API_KEY=sk-xxx
DASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
LANGSMITH_API_KEY=lsv2_pt_xxxx

然后,在项目根目录下创建文件langgraph.json,这个文件和你的 .env是同级目录,然后拷贝下方代码,此时你的目录应该是这样

my-app/
├── src
│   └── main.py
├── .env
└── langgraph.json
{
  "dependencies": ["."],
  "graphs": {
    "agent": "./src/main.py:agent"
  },
  "env": ".env"
}

里面最重要的两个部分:“env” 代表读取哪个 .env文件,"agent"代表从哪个目录下找哪个 py 文件中的哪个变量,所以相当于是 找到 src目录下的 main.py 里面的 agent 命名

准备好上面条件后,即可在控制台,切换到你的项目根目录下运行:

langgraph dev

静静等待,然后控制台会输出一个网址:
在这里插入图片描述
复制到浏览器打开后,你就能看到这个界面:
在这里插入图片描述
上方的 Graph 功能代表你的 agent 是从__start__ 到 你的 model 再到 __end__,切换到 Chat 后,你可以给你的 agent 提问。

到这里一篇简易的入门教程就完成了,后续更新各大核心组件的作用与使用方法

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐