Easy-langent的学习笔记
chapter 1 环境配置和demo测试
当前的主流的智能体架构有Dify、Coze、n8n、AutoGen、LangChain、CrewA等。
智能体(Agent)是一个能够感知环境、自主决策并采取行动以实现特定目标的智能实体或系统。简单来说,能够通过设计其工作流和利用可用工具,代表用户或其他系统自主执行任务的系统或程序。
1、目标驱动:不再是被动执行指令,而是能主动分析、规划和调整策略,分步骤来实现
2、多工具协作:可以同时使用多种外部工具和平台,实现复杂任务
3、持续学习:通过不断的实践和反馈(维护任务状态、对话上下文、中间结果,甚至长期记忆),不断优化自身性能
LangChain与LangGraph
LangChain:链式的节点关系,可以完成一些简单的任务。简单任务可以拆分成一个链上若干个简单节点任务。
LangGraph:图(网状)的节点关系,这个比链要复杂,但是正是结构复杂对应能实现的功能也就复杂。
环境配置
环境
WSL(Ubuntu 22.04)
python 3.12.0
通过uv完成配置的:
安装uv
pip install uv
配置环境
cd ./easy-langent
uv init
uv add langchain langchain-openai langgraph langchain-community ipykernel
在文件.env中配置api密钥
API_KEY="YOUR_API_KEY"
BASE_URL="YOUR_BASE_URL
demo测试
LangChain代码
功能:调用模型,生成一段“AI学习建议”
# 1. 导入模块
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
# 2. 加载 .env 环境变量
load_dotenv()
# 3. 配置 API Key
API_KEY = os.getenv("API_KEY")
BASE_URL = os.getenv("BASE_URL")
if not API_KEY:
raise ValueError("未检测到 API_KEY,请检查 .env 文件是否配置正确")
# 4. 初始化大模型
llm = ChatOpenAI(
api_key=API_KEY,
base_url=BASE_URL,
model="……", # 注意:根据你使用的模型修改名称!!!! 后面章节不再继续说明
temperature=0.3
)
# 5. 构造 Prompt(教学阶段用字符串更直观)
prompt = "请写一段50字左右的 AI 学习建议,语言简洁、实用,适合初学者。"
# 6. 调用模型
response = llm.invoke(prompt)
# 7. 输出结果
print("生成的学习建议:")
print(response.content)
运行结果

LangGraph代码
功能:实现一个简单的“两步工作流”——第一步生成学习建议,第二步对建议进行精简。
# 1. 导入需要的模块
import os
from langchain_openai import ChatOpenAI
from langgraph.graph import StateGraph, START, END
from typing import TypedDict
from dotenv import load_dotenv
# 2. 加载API密钥
load_dotenv()
# 3. 配置 API Key
API_KEY = os.getenv("API_KEY")
BASE_URL = os.getenv("BASE_URL")
if not API_KEY:
raise ValueError("未检测到 API_KEY,请检查 .env 文件是否配置正确")
# 4. 初始化大模型(和LangChain案例一样)
llm = ChatOpenAI(
api_key=API_KEY,
base_url=BASE_URL,
model="……", # 注意:根据你使用的模型修改名称!!!! 后面章节不再继续说明
temperature=0.3
)
# 5. 定义 State
class WorkflowState(TypedDict, total=False):
user_role: str # 存储用户角色
original_advice: str # 存储原始学习建议
simplified_advice: str # 存储精简后的建议
# 6. 定义节点
def generate_advice(state: WorkflowState):
prompt = f"给{state['user_role']}写一段50字左右的 AI 学习建议。"
result = llm.invoke(prompt)
return {"original_advice": result.content}
def simplify_advice(state: WorkflowState):
prompt = f"把下面的学习建议精简到30字以内:{state['original_advice']}"
result = llm.invoke(prompt)
return {"simplified_advice": result.content}
# 7. 构建工作流
workflow = StateGraph(WorkflowState)
workflow.add_node("generate", generate_advice)
workflow.add_node("simplify", simplify_advice)
workflow.add_edge(START, "generate")
workflow.add_edge("generate", "simplify")
workflow.add_edge("simplify", END)
app = workflow.compile()
# 8. 执行
result = app.invoke({"user_role": "高校学生"})
# 9. 输出
print("原始学习建议:")
print(result["original_advice"])
print("\n精简后学习建议:")
print(result["simplified_advice"])
运行结果

简单改进
可以在demo上修改prompt,可以换内容,也可改成输入的,这样就是一个没有记忆的问答机器人
LangGraph上的节点流程是START-"generate"-"simplify"-END,可以加几个节点测试