Langgraph从新手到老师傅-1-入门篇

前言

嘿,朋友们!在这个科技飞速发展的时代,人工智能已经不再是科幻电影里的玩意儿,而是实实在在地走进了我们的生活。今天,我就要带大家来一场说干就干的实践之旅------用阿里云的千问大模型和langgraph框架,快速搭建一个能查询天气的小助手。别小看这个小项目,它可是大语言模型应用的入门课,适合初学者,也适合那些想在项目里快速用上大模型的"老司机"。接下来,就让我们一起开启这段有趣的旅程吧!

准备环境

创建一个虚拟环境并安装依赖

bash 复制代码
python -m venv .venv
.venv\Scripts\activate
pip install langgraph
pip install python-dotenv
pip install langchain_openai 

.env文件

bash 复制代码
BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
OPENAI_API_KEY="xxx"

快速启动示例

python 复制代码
from dotenv import load_dotenv

load_dotenv()

# 使用阿里云的model
# BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
import os
from langchain_openai import ChatOpenAI

aliyun_model = "qwen-max"
model = ChatOpenAI(
    base_url=os.getenv("BASE_URL"),
    api_key=os.getenv("OPENAI_API_KEY"),
    model=aliyun_model,
)

import random

# 定义工具
def get_weather(city: str) -> str:
    """获取指定城市的天气情况"""
    weather = random.choice(["晴天", "阴天", "雨天", "多云", "小雨"])
    temputure = random.randint(15, 35)
    # 使用随机的方式模拟天气,也可以使用外部api
    return f"{city}的天气: {weather},{temputure}摄氏度"

# 使用langgraph
# 创建agent
from langgraph.prebuilt import create_react_agent

prompt = "你是一个生活小助手"
tools = [get_weather]
agent = create_react_agent(model=model, prompt=prompt, tools=tools)

# 调用agent
messages = {"messages": [{"role": "user", "content": "上海天气怎么样"}]}
ai_reponse = agent.invoke(messages)["messages"][-1]
print(ai_reponse.content)  # 上海今天的天气是晴天,温度是33摄氏度

示例详解

环境变量加载

使用load_dotenv函数,加载.env中定义的值到当前运行时的环境中,可通过os.getenv获取相应的值

python 复制代码
from dotenv import load_dotenv

load_dotenv()

使用阿里云的千问作为大模型

由于一些原因,我们使用千问作为我们的大模型,也可以使用deepseek、Glm或者kimi等支持openAi兼容接口的大模型。只需要在.env文件中设置BASE_URL和OPENAI_API_KEY即可,我们此处使用的是千问的plus版本,一般适用性还不错,也可以使用qwen-turbo、qwen-max等模型。

大模型的调用使用的是langchain_openai中的ChatOpenAI,这个类封装了openAi的接口,我们只需要传入base_url、api_key和model等参数就能直接调用背后的大模型了,不用自己封装接口。

ChatOpenAI除了下面的base_url、api_key和model,还有很多的参数可以配置,可以打开ChatOpenAI的声明查看,下面列举一些常用的参数配置

  • base_url api地址
  • api_key 不用解释
  • model 模型名称
  • top_p 核采样,token采样概率,由于大模型会输出一组带概率权重的token,top_p表示累积概率,把概率权重从大到小递减排序,然后累加直到大于top_p,那么被累加进入的token,就是模型将要输出token的集合,这些概率权重会做归一化处理后,然后随机取一个token作为模型输出。相对的有一种更简单和容易理解的top_k的采样方法,就是从前k名中随机取,top_k采取的是固定窗口采样,top_p的窗口是动态的。
  • temperature 温度,用于控制模型输出的随机性,取值 0 - 1.0,值越小,随机性越低,值越大,随机性越高,输出内容越有创意(并非褒义
  • max_tokens 最大输出token数量,防止模型无限输出,控制最多输出的token数量
python 复制代码
# 使用阿里云的model
# BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
import os
from langchain_openai import ChatOpenAI

aliyun_model = "qwen-max"
model = ChatOpenAI(
    base_url=os.getenv("BASE_URL"),
    api_key=os.getenv("OPENAI_API_KEY"),
    model=aliyun_model,
)

定义工具

工具是给大模型来调用的函数,也是普通的python函数,get_weather用来获取一个城市的天气情况,真实情况应该是使用外部的api接口,我们简化了下直接随机天气和温度情况。

需要注意的是,输入参数和输出参数需要明确类型,最好使用有意义的单词。另外,一定需要方法文档,比如下面的"""获取指定城市的天气情况""" 这个解释,这个文档是给大模型使用的,大模型需要了解这个方法的作用

python 复制代码
import random

# 定义工具
def get_weather(city: str) -> str:
    """获取指定城市的天气情况"""
    weather = random.choice(["晴天", "阴天", "雨天", "多云", "小雨"])
    temputure = random.randint(15, 35)
    # 使用随机的方式模拟天气,也可以使用外部api
    return f"{city}的天气: {weather},{temputure}摄氏度"

创建agent

使用langgraph内建的create_react_agent方法来创建一个agent,参数需要模型、提示词和工具,关于agent具体的内容我们之后会更详细的介绍,这里先略过,只需要知道我们创建了一个agent即可

python 复制代码
# 创建agent
from langgraph.prebuilt import create_react_agent
prompt = "你是一个生活小助手"
tools = [get_weather]
agent = create_react_agent(model=model, prompt=prompt, tools=tools)

调用agent

创建好agent之后,我们就可以调用了,我们询问上海的天气,agent给出了一个回答

python 复制代码
# 调用agent
messages = {"messages": [{"role": "user", "content": "上海天气怎么样"}]}
ai_reponse = agent.invoke(messages)["messages"][-1]
print(ai_reponse.content)  # 上海今天的天气是晴天,温度是33摄氏度

总结

经过一番折腾,我们终于把这个查询天气的agent给搞定了。是不是感觉还挺有意思的?从搭建环境、加载环境变量,到定义工具、创建agent,每一步都充满了乐趣。虽然这个项目看起来简单,但它可是大语言模型应用的敲门砖。通过这个项目,你不仅学会了如何调用阿里云的千问大模型,还掌握了langgraph框架的基本用法。希望这个小项目能给你带来一些启发,让你在人工智能的道路上越走越远。下文见

相关推荐
boy快快长大14 小时前
【Spring AI】简单入门(一)
java·人工智能·spring
lxmyzzs14 小时前
【图像算法 - 28】基于YOLO与PyQt5的多路智能目标检测系统设计与实现
人工智能·算法·yolo·目标检测
golang学习记14 小时前
Qwen Code重大更新: 直接秒了GTP-5
人工智能
啃啃大瓜14 小时前
字符串
python
啊森要自信14 小时前
【 GUI自动化测试】GUI自动化测试(一) 环境安装与测试
开发语言·python·ui·单元测试·pytest
ygyqinghuan14 小时前
PyTorch 构建神经网络
人工智能·pytorch·神经网络
SmartBrain14 小时前
华为MindIE 推理引擎:架构解析
人工智能·华为·架构·推荐算法
love530love14 小时前
EPGF架构:Python开发的长效稳定之道
开发语言·ide·人工智能·windows·python·架构·pycharm
databook14 小时前
Manim实现涟漪扩散特效
后端·python·动效
曼曼青青草14 小时前
智能体介绍及搭建实战(智能运营)
大数据·数据库·人工智能