AI大模型langgraph入门
LangGraph 是一个用于构建和操作语言图(Language Graph)的开源工具库,旨在帮助开发者更高效地处理自然语言处理(NLP)任务。语言图是一种将文本数据表示为图结构的方法,其中节点可以是单词、短语或句子,而边则表示它们之间的关系。通过将文本转化为图结构,LangGraph 使得复杂的语言模式和分析任务变得更加直观和可操作。
·
LangGraph 是一个用于构建和操作语言图(Language Graph)的开源工具库,旨在帮助开发者更高效地处理自然语言处理(NLP)任务。语言图是一种将文本数据表示为图结构的方法,其中节点可以是单词、短语或句子,而边则表示它们之间的关系。通过将文本转化为图结构,LangGraph 使得复杂的语言模式和分析任务变得更加直观和可操作。本文尽量以最简单的demo展示其各种功能,开箱即用,详细使用以及其他功能可参照官网
目录
简单的示例
定义两个节点,节点1负责回答用户提问,节点2负责将节点1的答案翻译成英文
效果图:

from langgraph.graph import StateGraph
from langchain_openai import ChatOpenAI
from typing_extensions import TypedDict, Optional
from langgraph.graph import START, END
# 定义输入的模式
class InputState(TypedDict):
question: str
llm_answer: Optional[str] # 表示 answer 可以是 str 类型,也可以是 None
# 定义输出的模式
class OutputState(TypedDict):
answer: str
# 将 InputState 和 OutputState 这两个 TypedDict 类型合并成一个更全面的字典类型。
class OverallState(InputState, OutputState):
pass
from dotenv import load_dotenv
import os
load_dotenv()
api_key = os.getenv('ZHIPU_API_KEY')
base_url = os.getenv('ZHIPU_BASE_URL')
# 添加节点
def first_answer_node(state: InputState):
messages = [
("human", state["question"])
]
llm = ChatOpenAI(api_key=api_key, base_url=base_url, temperature=0, model='glm-4')
response = llm.invoke(messages)
return {"llm_answer": response.content}
def transform_node(state: InputState):
messages = [
{'role': 'system', "content": "你是一个翻译机器人,负责将用户的输入的内容翻译成英文进行输出"},
{'role': 'user', "content": '用户输入的内容为:/n' + state["llm_answer"]}
]
llm = ChatOpenAI(api_key=api_key, base_url=base_url, temperature=0, model='glm-4')
response = llm.invoke(messages)
return {"answer": response.content}
# 明确指定它的输入和输出数据的结构或模式
builder = StateGraph(OverallState, input=InputState, output=OutputState)
# 添加节点
builder.add_node("first_answer_node", first_answer_node)
builder.add_node("transform_node", transform_node)
# 添加边
builder.add_edge(START, "first_answer_node")
builder.add_edge("first_answer_node", "transform_node")
builder.add_edge("transform_node", END)
# 编译图
graph = builder.compile()
# 查看图结构
image_bytes = graph.get_graph(xray=True).draw_mermaid_png()
from PIL import Image
from io import BytesIO
image = Image.open(BytesIO(image_bytes))
image.save("output.png")
final_answer = graph.invoke({"question":"你好,请你详细的介绍一下你自己"})
print(final_answer["answer"])
router路由代理
根据不同的条件,路由到不同的节点,效果:

from langgraph.graph import StateGraph, END
from langgraph.graph import StateGraph
def node_start(state):
return {"x": state["x"] + 1}
def node_b(state):
return {"x": state["x"] - 2}
def node_c(state):
return {"x": state["x"] + 1}
def routing_function(state):
if state["x"] == 10:
return True
else:
return False
# 简单的将输入输出定义为一个dict
builder = StateGraph(dict)
builder.add_node("node_start", node_start)
builder.add_node("node_b", node_b)
builder.add_node("node_c", node_c)
builder.set_entry_point("node_start")
# b、c都可能是end
builder.add_edge("node_b", END)
builder.add_edge("node_c", END)
# 构建节点之间的边-路由节点
builder.add_conditional_edges("node_start", routing_function, {True: "node_b", False: "node_c"})
graph = builder.compile()
image_bytes = graph.get_graph(xray=True).draw_mermaid_png()
from PIL import Image
from io import BytesIO
image = Image.open(BytesIO(image_bytes))
image.save("output.png")
工具代理
大模型判断需要的工具,填充tool_calls信息,传递给toolNode
from langchain.tools import tool
@tool
def query_weather(city):
"""Call to get the current weather."""
if city.lower() in ["beijing", '北京']:
return city + "的温度是16度,天气晴朗。"
elif city.lower() in ["shanghai", '上海']:
return city + "的温度是20度,小雨转晴。"
elif city.lower() in ["Hangzhou", '杭州']:
return city + "的温度是10度,部分多云。"
else:
return "不好意思,并未查询到具体的天气信息。"
@tool
def fetch_real_time_info(query):
"""Get real-time Internet information"""
return query + '''有限公司成立于2021年9月1日,企业地址位于北京市北京经济技术开发区,
是一家以从事汽车制造业为主的企业。雷军担任法定代表人、执行董事、经理。'''
from langgraph.prebuilt import ToolNode
tools = [query_weather, fetch_real_time_info]
tool_node = ToolNode(tools)
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
import os
load_dotenv()
api_key = os.getenv('ZHIPU_API_KEY')
base_url = os.getenv('ZHIPU_BASE_URL')
llm = ChatOpenAI(api_key=api_key, base_url=base_url, model='glm-4')
model_with_tools = llm.bind_tools(tools)
# LLM判断需要的工具,填充tool_calls信息,传递给toolNode
res = tool_node.invoke({"messages": [model_with_tools.invoke("小米汽车的最新消息")]})
print(res)
res = tool_node.invoke({"messages": [model_with_tools.invoke("beijing的天气")]})
print(res)
agent代理-react
效果图

import random
from langchain.tools import tool
@tool
def query_weather(city):
"""
调用天气 API 查询指定位置的天气信息
:param city: 要查询天气的城市,城市名称需要是英文,如London、Beijing
:return: 天气信息字符串信息
"""
res = city + "的温度是" + str(random.randint(0, 35)) + "度,天气晴朗,东南风" + str(random.randint(0, 12)) + "级。"
print("query_weather-----------" + res)
return res
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
import os
load_dotenv()
api_key = os.getenv('ZHIPU_API_KEY')
base_url = os.getenv('ZHIPU_BASE_URL')
llm = ChatOpenAI(api_key=api_key, base_url=base_url, model='glm-4')
from langgraph.prebuilt import create_react_agent
tools = [query_weather]
graph = create_react_agent(llm, tools=tools)
from PIL import Image
from io import BytesIO
image_bytes = graph.get_graph(xray=True).draw_mermaid_png()
image = Image.open(BytesIO(image_bytes))
image.save("output.png")
finan_response = graph.invoke({"messages":["你好"]})
print(finan_response['messages'][-1].content)
finan_response = graph.invoke({"messages":["北京和上海的温度相差多少"]})
print(finan_response['messages'][-1].content)
多代理
待补充
人机交互
待补充
更多推荐
所有评论(0)