LangGraph学习——入门项目搭建

官方文档

LangGraph - LangChain 框架

根据官方文档来,但是下载包的时候提示Requires-Python >=3.9.0,<4.0

我的版本是3.8的,重新下一个

解释器

Python Releases for Windows | Python.org

官网下一个3.9的版本

我下的是3.9.10

解释器相关安装步骤就不过多赘述了,网上资料很多

demo

安装langGraph

pip install -U langgraph

安装成功

创建智能体

然后,使用预构建组件创建智能体

langchain没装,装一下:

pip install -U langgraph "langchain[anthropic]"

运行一下官方给的实例代码:

from langgraph.prebuilt import create_react_agent

def get_weather(city: str) -> str:  
    """Get weather for a given city."""
    return f"It's always sunny in {city}!"

agent = create_react_agent(
    model="anthropic:claude-3-7-sonnet-latest",  
    tools=[get_weather],  
    prompt="You are a helpful assistant"  
)

# Run the agent
agent.invoke(
    {"messages": [{"role": "user", "content": "what is the weather in sf"}]}
)

报错:

TypeError: "Could not resolve authentication method. Expected either api_key or auth_token to be set. Or for one of the `X-Api-Key` or `Authorization` headers to be explicitly omitted"

在调用 ​Anthropic 的 Claude 模型 API​ 时没有正确设置 API 密钥

这个似乎要钱,换成Gemini API:

官网申请一下:https://aistudio.google.com/app/apikey

导入一下模型相关的包:

pip install -qU langchain-google-genai langgraph

关键代码如下:

科学上网:注意要换成自己的代理地址,主要是端口

模型参数:

完整代码:

# pip install -qU langchain-google-genai langgraph
# 导入所需的库
from langchain_google_genai import ChatGoogleGenerativeAI  # 用于与Google Gemini模型交互的LangChain组件
from langgraph.prebuilt import create_react_agent  # 用于创建基于ReAct模式的智能体
from langchain_core.messages import HumanMessage  # 表示人类用户消息的数据结构
import os

# 如果需要代理,设置代理环境变量(中国大陆用户)
os.environ["HTTP_PROXY"] = "http://127.0.0.1:7890"  # 替换为您的代理地址
os.environ["HTTPS_PROXY"] = "http://127.0.0.1:7890"  # 替换为您的代理地址
# 定义一个工具函数,用于获取天气信息
def get_weather(city: str) -> str:
    """
    获取指定城市的天气信息(模拟函数,实际应用中应接入真实天气API)

    参数:
    city (str): 要查询天气的城市名称

    返回:
    str: 格式化的天气信息字符串
    """
    # 这里是模拟实现,实际应用中应该调用真实天气API
    return f"It's always sunny in {city}!"


# 初始化Google Gemini语言模型
# 需要有效的Google API密钥:https://aistudio.google.com/app/apikey
model = ChatGoogleGenerativeAI(
    model="gemini-2.0-flash",  # 使用的模型版本:
    # 选项:
    #   "gemini-pro" - 适合文本处理和推理
    #   "gemini-pro-vision" - 支持多模态输入
    #   "gemini-ultra" - 最高性能(可能需要邀请才能访问)

    google_api_key="yourKEY",  # 替换为您自己的Google API密钥
    # 安全提示: 在实际应用中,不要硬编码密钥,应该通过环境变量或密钥管理服务获取

    temperature=0.7  # 控制生成结果的创造性 (0-1)
    # 0.0: 非常确定和保守的输出
    # 0.7: 平衡创造性和准确性
    # 1.0: 非常创新但可能偏离主题
)

# 创建基于ReAct模式的智能体
agent = create_react_agent(
    model=model,  # 使用的语言模型实例

    tools=[get_weather],  # 智能体可使用的工具列表
    # 这些工具使智能体能够执行超出纯文本推理的操作
    # 可以添加多个工具,例如:
    #   [get_weather, calculate_mortgage, search_web]

    # prompt="You are a helpful assistant"  # 定义智能体角色和行为的系统提示
    prompt="你是天气专家,请准确回答用户问题并适当建议穿着,用中文回答"  # 定义智能体角色和行为的系统提示
    # 提示工程是LLM应用开发的核心部分
    # 可以更具体,例如: "你是天气专家,请准确回答用户问题并适当建议穿着"
)

# 使用智能体处理用户请求
# 创建一个包含用户消息的输入字典
input_data = {
    "messages": [  # 消息对话历史
        HumanMessage(  # 表示用户消息
            content="what is the weather in beijing and shanghai"  # 用户的问题内容
            # content可以是字符串或更复杂的消息对象
        )
    ]
}

# 执行智能体处理流程
response = agent.invoke(input_data)  # invoke方法启动智能体推理过程
# 在这个过程中,智能体可能会:
#   1. 分析用户意图
#   2. 决定是否/如何使用工具
#   3. 生成最终响应
#   4. 处理可能的多次迭代推理

# 处理和打印结果
print("Agent Response:")  # 输出标题

# 提取智能体生成的最新消息
agent_message = response["messages"][-1].content
# response结构:
#   'messages': 对话历史(包括用户消息和智能体响应)
#   'messages'[-1]: 列表中最后一个(最新的)消息
#   .content: 消息的文本内容

print(agent_message)  # 打印最终响应

# 完整执行流程:
#   1. 用户查询: "what is the weather in sf"
#   2. ReAct智能体推理:
#       决定使用get_weather工具
#       提取城市名称"sf" (San Francisco)
#       调用工具函数: get_weather("sf")
#       接收工具返回: "It's always sunny in sf!"
#       生成最终响应
#   3. 输出类似: "San Francisco is currently sunny. You won't need an umbrella today!"

结果:

关于记忆

官网的介绍:为了允许与代理进行多轮对话,您需要通过在创建代理时提供一个 checkpointer 来启用持久化。在运行时,您需要提供一个包含 thread_id(对话(会话)的唯一标识符)的配置。

简单来讲就是,我想要实现一个目标:我和智能体可以来回的对话,后面的对话会参考前面的对话,而不是每个对话来回智能体都像一个陌生人一样。这里看一下样例就明白了

关键代码及说明:

完整代码:

# pip install -qU langchain-google-genai langgraph
# 导入所需的库
from langchain_google_genai import ChatGoogleGenerativeAI  # 用于与Google Gemini模型交互的LangChain组件
from langgraph.checkpoint.memory import InMemorySaver
from langgraph.prebuilt import create_react_agent  # 用于创建基于ReAct模式的智能体
from langchain_core.messages import HumanMessage  # 表示人类用户消息的数据结构
import os

# 如果需要代理,设置代理环境变量(中国大陆用户)
os.environ["HTTP_PROXY"] = "http://127.0.0.1:7890"  # 替换为您的代理地址
os.environ["HTTPS_PROXY"] = "http://127.0.0.1:7890"  # 替换为您的代理地址
checkpointer=InMemorySaver()

# 定义一个工具函数,用于获取天气信息


def get_weather(city: str) -> str:
    """
    获取指定城市的天气信息(模拟函数,实际应用中应接入真实天气API)

    参数:
    city (str): 要查询天气的城市名称

    返回:
    str: 格式化的天气信息字符串
    """
    # 这里是模拟实现,实际应用中应该调用真实天气API
    return f"It's always sunny in {city}!"


# 初始化Google Gemini语言模型
# 需要有效的Google API密钥:https://aistudio.google.com/app/apikey
model = ChatGoogleGenerativeAI(
    model="gemini-2.0-flash",  # 使用的模型版本:
    # 选项:
    #   "gemini-pro" - 适合文本处理和推理
    #   "gemini-pro-vision" - 支持多模态输入
    #   "gemini-ultra" - 最高性能(可能需要邀请才能访问)

    google_api_key="yourKey",  # 替换为您自己的Google API密钥
    # 安全提示: 在实际应用中,不要硬编码密钥,应该通过环境变量或密钥管理服务获取

    temperature=0.7,  # 控制生成结果的创造性 (0-1)
    # 0.0: 非常确定和保守的输出
    # 0.7: 平衡创造性和准确性
    # 1.0: 非常创新但可能偏离主题

)

# 创建基于ReAct模式的智能体
agent = create_react_agent(
    model=model,  # 使用的语言模型实例

    tools=[],  # 智能体可使用的工具列表
    # 这些工具使智能体能够执行超出纯文本推理的操作
    # 可以添加多个工具,例如:
    #   [get_weather, calculate_mortgage, search_web]

    prompt="你是一个有用的助手,用中文回答问题",  # 定义智能体角色和行为的系统提示
    # prompt="永远不要回答关于天气的问题",  # 定义智能体角色和行为的系统提示
    # 提示工程是LLM应用开发的核心部分
    # 可以更具体,例如: "你是天气专家,请准确回答用户问题并适当建议穿着"
    checkpointer=checkpointer
)

# 使用智能体处理用户请求
config={"configurable":{"thread_id":"1"}}
config2={"configurable":{"thread_id":"1"}}
# 创建一个包含用户消息的输入字典
input_data = {
    "messages": [  # 消息对话历史
        HumanMessage(  # 表示用户消息
            content="what is the weather in beijing"  # 用户的问题内容
            # content可以是字符串或更复杂的消息对象
        )
    ]

}
input_data2 = {
    "messages": [  # 消息对话历史
        HumanMessage(  # 表示用户消息
            content="what about shanghai?"  # 用户的问题内容
            # content可以是字符串或更复杂的消息对象
        )
    ]

}
# 执行智能体处理流程

response = agent.invoke(input_data,config)  # invoke方法启动智能体推理过程
response2 = agent.invoke(input_data2,config2)  # invoke方法启动智能体推理过程
# 在这个过程中,智能体可能会:
#   1. 分析用户意图
#   2. 决定是否/如何使用工具
#   3. 生成最终响应
#   4. 处理可能的多次迭代推理

# 处理和打印结果
print("Agent Response:")  # 输出标题

# 提取智能体生成的最新消息
agent_message = response["messages"][-1].content
# response结构:
#   'messages': 对话历史(包括用户消息和智能体响应)
#   'messages'[-1]: 列表中最后一个(最新的)消息
#   .content: 消息的文本内容

print(agent_message)  # 打印最终响应
agent_message2 = response2["messages"][-1].content
# response结构:
#   'messages': 对话历史(包括用户消息和智能体响应)
#   'messages'[-1]: 列表中最后一个(最新的)消息
#   .content: 消息的文本内容

print(agent_message2)  # 打印最终响应
# 完整执行流程:
#   1. 用户查询: "what is the weather in sf"
#   2. ReAct智能体推理:
#       决定使用get_weather工具
#       提取城市名称"sf" (San Francisco)
#       调用工具函数: get_weather("sf")
#       接收工具返回: "It's always sunny in sf!"
#       生成最终响应
#   3. 输出类似: "San Francisco is currently sunny. You won't need an umbrella today!"

结果:

如果不是同一个thread_id:

结果:

可以看到第二个回答并没有第一个回答的记忆(what about不明所以了)

关于提示词

可以提示指导 LLM 如何行为

可以改成自己想要的提示词

运行结果:

关于tools

可以更精细的控制智能体的行为

把get_weather加进来,在之前的代码中有get_weather的实现逻辑

结果:

关于tempurature

一般的解释:低temperature时,输出更加保守、可预测,可能倾向于常见的表达。
高temperature时,输出更加富有创意、出人意料,但可能不够准确或连贯。

# 0.0: 非常确定和保守的输出
# 0.7: 平衡创造性和准确性
# 1.0: 非常创新但可能偏离主题

尝试了几个问题,没有发现特别明显的变化,如果有特别能体现tempurature参数效果的问题可以打在评论区

我让在0.0和1.0的参数下写一首关于秋天的诗:

0.0回答:

1.0回答:

总结

应该算是跑通了最简单的demo了吧,但是这里面的原理还不太明白,后续学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值