Agent开发:LangChain1.0快速入门(一)

本期与各位看官分享如何基于LangChain1.0开发Agent。如上一期的介绍,在LangChain1.0中, langchain包的重心围绕Agent这一抽象概念展开,提供了create_agent这一统一的Agent创建高级接口。作为入门,我们先看一个基础的Agent开发例子。

python 复制代码
from langchain.chat_models import init_chat_model
from langchain.agents import create_agent
from config import api_key, api_base

# 模型接入
def init_model():
    model = init_chat_model(
        api_key = api_key,
        base_url = api_base,
        model = "Qwen/Qwen3-8B",
        model_provider = "openai",
        temperature = 0.7,
    )
    return model

# 工具定义
def get_weather(city: str) -> str:
    """获取指定城市的天气"""
    return f"{city} 的天气是晴朗的"

# 模型初始化
model = init_model()
# 创建Agent
agent = create_agent(
    model=model,
    tools=[get_weather],
    system_prompt="你是一个智能个人助理",
)
input = {"messages": [{"role": "user", "content": "北京天气如何?"}]}
# 运行Agent
resp = agent.invoke(input)
print(resp['messages'][-1].content)

从这个简单的例子我们看到,仅仅通过create_agent这个接口,我们就可以实现一个简单的Agent。这对开发者来说太友好了。事实上,create_agent接口可以通过传入各种参数,实现各种Agent功能的拓展。下面我们对create_agent接口进行进一步详细的解析。

一、create_agent接口参数

create_agent参数列表如下:

python 复制代码
    model: str | BaseChatModel,
    tools: Sequence[BaseTool | Callable | dict[str, Any]] | None = None,
    *,
    system_prompt: str | None = None,
    middleware: Sequence[AgentMiddleware[AgentState[ResponseT], ContextT]] = (),
    response_format: ResponseFormat[ResponseT] | type[ResponseT] | None = None,
    state_schema: type[AgentState[ResponseT]] | None = None,
    context_schema: type[ContextT] | None = None,
    checkpointer: Checkpointer | None = None,
    store: BaseStore | None = None,
    interrupt_before: list[str] | None = None,
    interrupt_after: list[str] | None = None,
    debug: bool = False,
    name: str | None = None,
    cache: BaseCache | None = None,

1、model(模型)

智能体依赖的对话模型,类型为字符串或者BaseChatModel。可以是有一个标识大模型的字符串,如"openai:gpt-4";也可以是一个chat model实例,如langchain_openai.ChatOpenAI 或者 通过init_chat_model接口自定义的chat model实例。

2、tools(工具集)

一个可供大模型调用的工具列表,列表元素类型为BaseTool,Callable或者字典。

3、system_prompt(系统提示词)

可选参数,参数类型为字符串。系统提示词被转换为一个langchain.messages.SystemMessage实例添加到消息列表的开始位置。

4、middleware(中间件)

一个应用于Agent的中间件实例列表。中间件可在不同阶段拦截并修改智能体的行为。后续我们会详细介绍中间件的使用。

5、response_format(响应格式)

可选配置项,用于格式化输出。可以是ToolStrategy, ProviderStrategy, 或者Pydantic的模型类。若提供相关配置,智能体将在对话流程中处理结构化输出。原始模式会根据模型能力,通过合适的策略进行封装。

6、state_schema(状态元信息)

一个可选的 TypedDict 模式,用于扩展 AgentState。

如果提供了该模式,它将替代 AgentState 作为基础模式,与中间件状态模式进行合并。这使得用户无需创建自定义中间件,就能添加自定义状态字段。通常情况下,建议通过中间件使用 state_schema 扩展,以确保相关扩展的作用域与对应的钩子 / 工具保持一致。

该模式必须是 AgentState[ResponseT] 的子类。

7、context_schema(上下文元信息)

可选项,运行时上下文的元信息。

8、checkpointer(检查点)

可选项,检查点存储对象。

9、store(存储)

可选项,用于夸线程存储持久化数据。

10、interrupt_before

可选项,一个节点名称列表,在节点运行前被打断。若你希望在执行某个操作前添加用户确认或其他中断流程的步骤,此功能会非常实用。

11、interrupt_after

可选项,一个节点列表,在节点运行结束后被打断。若你希望直接返回输出结果,或对输出结果执行额外处理,此功能会非常实用。

12、debug

是否为图执行启用详细日志记录。启用后,会在智能体运行期间打印关于每个节点执行、状态更新及状态转换的详细信息。此功能对于调试中间件行为和理解智能体执行流程非常实用。

13、name

可选项,CompiledStateGraph的名称。当将智能体图作为子图节点添加到另一个图中时,此名称会被自动使用 ------ 这在构建多智能体系统时尤其有用。

14、cache

可选项,一个BaseCache实例,用于启用图执行的缓存功能。

二、create_agent接口返回类型

一个已编译的 StateGraph(状态图),可用于对话交互场景。

智能体节点会(在应用系统提示词后)结合消息列表调用语言模型。若生成的 [AIMessage][langchain.messages.AIMessage](AI 消息)中包含 tool_calls(工具调用指令),则该状态图会进而调用工具。工具节点会执行这些工具,并将工具响应以 [ToolMessage][langchain.messages.ToolMessage](工具消息)对象的形式添加至消息列表。随后,智能体节点会再次调用语言模型。此过程会重复进行,直至响应中不再包含 tool_calls(工具调用指令)为止。最终,智能体将返回完整的消息列表。

三、智能体调用

你可以通过向智能体的状态(State)传递更新来调用智能体。所有智能体的状态中都包含一系列消息;若要调用智能体,只需传递一条新消息即可:

python 复制代码
result = agent.invoke(
    {"messages": [{"role": "user", "content": "北京天气如何?"}]}
)

如需从智能体获取流式步骤和 / 或流式令牌(token),请参考流式处理指南(streaming guide)。

除此之外,该智能体遵循 LangGraph 图 API(LangGraph Graph API)规范,并支持所有相关关联方法。

四、总结

本期我们了解了LangChain1.0基本Agent的开发,并详细了解了create_agent接口。 这些是我们基于LangChain1.0开发Agent的MVP知识点。

相关推荐
安思派Anspire7 小时前
构建一个自主深度思考的RAG管道以解决复杂查询--创建多阶段检索漏斗(5)
aigc·openai·agent
CV实验室7 小时前
CV论文速递: 覆盖医学影像分析、视频理解与生成、3D场景理解与定位等方向! (10.27-10.31)
人工智能·计算机视觉·3d·音视频
飞哥数智坊7 小时前
MiniMax 是谁?为什么 M2 一出,大家又沸腾了?
人工智能
leafff1237 小时前
AI研究:轻量模型和专用模型在算力优化上的差异对游戏制作的效率和质量有何影响?
人工智能·游戏
吃鱼不卡次7 小时前
RT-DETR解码模块(Decoder)
人工智能·深度学习·cross attention·rt-detr·匈牙利匹配·self attention·对比去噪训练
zhan1145147 小时前
解析平面卷积/pytorch的nn.Conv2d的计算步骤,in_channels与out_channels如何计算而来
人工智能·pytorch·深度学习·cnn·卷积神经网络
Juchecar7 小时前
假设人类能用光波沟通……
人工智能
K姐研究社7 小时前
AipexBase怎么用?AI 原生BaaS平台一句话做后端开发
人工智能
IT_陈寒7 小时前
SpringBoot 3.2新特性实战:这5个隐藏功能让开发效率翻倍🚀
前端·人工智能·后端