前言
本文将使用LangGraph搭建超级简单的智能体,我们使用阿里的通义千问作为我们的大模型API。
阿里相关的APIkey等,可以参考 如何通过OpenAI接口调用通义千问模型_大模型服务平台百炼(Model Studio)-阿里云帮助中心
环境
基础python的环境搭建,可参考上篇文章。下面安装下必须的依赖
bash
pip install requests
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="自己的key放到这里"
最简单的智能体
搭建一个直接解决问题的智能体,问题都是写死的,主要展示下langGraph的大模型使用流程
步骤
- 加载环境变量
- 创建大模型
- 定义工作流
- 调用工作流
- 输出答案
python
from dotenv import load_dotenv
import os
from langchain_openai import ChatOpenAI
from langgraph.graph import StateGraph, START, END, MessageGraph, MessagesState
# 1. 加载环境变量
load_dotenv()
base_url = os.getenv("BASE_URL")
openai_api_key = os.getenv("OPENAI_API_KEY")
model_name = "qwen-plus"
# 2. 创建大模型
model = ChatOpenAI(base_url=base_url, api_key=openai_api_key, model=model_name)
3. 定义工作流
def call_llm(state: MessagesState):
messages = state["messages"]
response = model.invoke(messages[-1].content)
return {"messages": [response]}
workflow = StateGraph(MessagesState)
workflow.add_node("call_llm", call_llm)
workflow.add_edge(START, "call_llm")
workflow.add_edge("call_llm", END)
4. 调用工作流
app = workflow.compile()
input_message = {"messages": [("human", "Kenya的首都是哪里?")]}
for chunk in app.stream(input_message, stream_mode="values"):
# 5. 输出答案
chunk["messages"][-1].pretty_print()
输出结果如下
bash
================================ Human Message =================================
Kenya的首都是哪里?
================================== Ai Message ==================================
Kenya(肯尼亚)的首都是 **内罗毕(Nairobi)**。
内罗毕是肯尼亚最大的城市,也是东非地区的重要经济、文化和交通中心。它位于肯尼亚中南部,海拔约1795米,气候宜人。内罗毕还
是许多国际组织和外交机构的所在地,比如联合国在非洲的最大办事处之一。
持续接收用户输入的智能体
上面的示例非常的简单,只是把一个固定的问题交给工作流,然后输出结果。下面我们增加下难度,可以不断的询问大模型,直到我们想结束对话
步骤
- 加载环境变量
- 创建大模型
- 定义工作流
- 获取用户输入后调用工作流
- 输出答案
python
# 一个简单的调用llm的对话示例
# 持续对话的能力
from dotenv import load_dotenv
import os
from langchain_openai import ChatOpenAI
from langgraph.graph import StateGraph, START, END, MessageGraph, MessagesState
# 1. 加载环境变量
load_dotenv()
base_url = os.getenv("BASE_URL")
openai_api_key = os.getenv("OPENAI_API_KEY")
model_name = "qwen-plus"
#2. 创建大模型
model = ChatOpenAI(base_url=base_url, api_key=openai_api_key, model=model_name)
3. 定义工作流
def call_llm(state: MessagesState):
messages = state["messages"]
response = model.invoke(messages[-1].content)
return {"messages": [response]}
workflow = StateGraph(MessagesState)
workflow.add_node("call_llm", call_llm)
workflow.add_edge(START, "call_llm")
workflow.add_edge("call_llm", END)
app = workflow.compile()
# 持续对话
def interact_with_agent():
while True:
# 4. 获取用户输入后调用工作流
user_input = input("You: ")
if user_input.lower() in ["exit", "quit", "q"]:
print("结束对话")
break
input_message = {"messages": [("human", user_input)]}
for chunk in app.stream(input_message, stream_mode="values"):
# 5. 输出答案
chunk["messages"][-1].pretty_print()
# 开始交互
interact_with_agent()
输出结果
bash
You: 你好,你是谁
================================ Human Message =================================
你好,你是谁
================================== Ai Message ==================================
你好!我是Qwen,是阿里巴巴集团旗下的通义实验室自主研发的超大规模语言模型。我可以帮助你回答问
题、创作文字,比如写故事、写公文、写邮件、写剧本、逻辑推理、编程等等,还能表达观点,玩游戏等
。有什么我可以帮你的吗?
You: 帮我计算1+1
================================ Human Message =================================
帮我计算1+1
================================== Ai Message ==================================
1 + 1 = 2
You: exit
结束对话