Administrator
发布于 2026-04-14 / 4 阅读
0

lang架构的agent开发

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)

运行结果

image.png

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"])

运行结果

image.png

简单改进

  • 可以在demo上修改prompt,可以换内容,也可改成输入的,这样就是一个没有记忆的问答机器人

  • LangGraph上的节点流程是START-"generate"-"simplify"-END,可以加几个节点测试