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 扩展,以确保相关扩展的作用域与对应的钩子 / 工具保持一致。

该模式必须是 AgentStateResponseT 的子类。

7、context_schema(上下文元信息)

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

8、checkpointer(检查点)

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

9、store(存储)

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

10、interrupt_before

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

11、interrupt_after

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

12、debug

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

13、name

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

14、cache

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

二、create_agent接口返回类型

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

智能体节点会(在应用系统提示词后)结合消息列表调用语言模型。若生成的 AIMessagelangchain.messages.AIMessage(AI 消息)中包含 tool_calls(工具调用指令),则该状态图会进而调用工具。工具节点会执行这些工具,并将工具响应以 ToolMessagelangchain.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知识点。

相关推荐
JJJennie7771 小时前
当AI开始学会欺骗
网络·人工智能
糖果店的幽灵1 小时前
大模型测评DeepEval快速入门-安全与通用指标详解
人工智能·安全·langgraph·大模型测评·deepeval
江畔柳前堤7 小时前
roLabelImg 详细安装教程
开发语言·人工智能·后端·云原生
阿里云大数据AI技术7 小时前
分链路差异化设计的DSP准实时数仓|钛动科技基于阿里云实时计算 Flink 版 + DLF Paimon + EMR Serverless StarRocks 的实践
人工智能·flink
陕西企来客7 小时前
2026年7月AI智能搜索曝光趋势研判
大数据·人工智能·机器学习·ai智能搜索曝光
阿里云大数据AI技术8 小时前
从算力到智能体,面向 Agentic AI 的基础设施演进
人工智能·agent
hangyuekejiGEO8 小时前
GEO技术服务选型指南
大数据·人工智能·python
阿里云大数据AI技术9 小时前
EMR Serverless Spark AI Function 的双维降本实践
人工智能·sql·spark
维基框架9 小时前
GitHub源码处理提速 一趟扫描反而更慢
人工智能·github
冬奇Lab9 小时前
代码库知识库系列(05):向量检索 vs 知识图谱——加了调用图并没有变更好
人工智能