本节完成 LangChain 1.0 的第一个可运行闭环:安装依赖、配置密钥、初始化模型、发送消息、创建 Agent,并分别体验同步、批量、异步和流式调用。
1. 环境准备
推荐在虚拟环境中安装 LangChain 1.x:
python-mvenv .venvsource.venv/bin/activate pipinstall-Ulangchain langgraph langchain-openai确认版本:
importlangchainimportlanggraphprint(langchain.__version__)print(langgraph.__version__)如果使用 OpenAI 兼容模型服务,还需要设置密钥和服务地址:
importos API_KEY=os.getenv("OPENAI_API_KEY")BASE_URL=os.getenv("OPENAI_BASE_URL")ifnotAPI_KEY:raiseRuntimeError("请先配置 OPENAI_API_KEY")2. 1.0 的统一模型入口
fromlangchain.chat_modelsimportinit_chat_model model=init_chat_model("Qwen/Qwen3-8B",model_provider="openai",base_url=BASE_URL,api_key=API_KEY,temperature=0.2,max_tokens=1024,)init_chat_model()的价值在于统一不同模型供应商的初始化方式。业务层继续调用invoke()、stream()或ainvoke(),更换模型时通常只需要修改配置。
3. 最简单的模型调用
response=model.invoke("请用三句话介绍 LangChain 1.0")print(type(response))print(response.content)返回值通常是AIMessage,文本位于response.content,同时还可能包含:
response_metadata:模型、结束原因、请求信息;usage_metadata:输入、输出及总 Token 数;tool_calls:模型请求调用的工具;id:本次消息标识。
4. 使用消息对象
fromlangchain_core.messagesimportSystemMessage,HumanMessage messages=[SystemMessage(content="你是一名耐心的 Python 教师。"),HumanMessage(content="请解释什么是装饰器。"),]response=model.invoke(messages)print(response.content)消息对象比拼接字符串更可靠,因为它明确区分角色,并能容纳工具消息、多模态内容和元数据。
5. 批量、异步与流式调用
5.1 批量调用
questions=["什么是 RAG?","什么是 Agent?","什么是 LangGraph?",]responses=model.batch(questions)foriteminresponses:print(item.content)batch()适合离线处理多个输入,但仍应关注供应商的并发和限流规则。
5.2 异步调用
importasyncioasyncdefmain():response=awaitmodel.ainvoke("解释 LangChain 1.0")print(response.content)asyncio.run(main())Web 服务中应优先使用异步方法,避免模型请求期间阻塞工作线程。
5.3 流式调用
forchunkinmodel.stream("写一段关于 Agent 的简短介绍"):ifchunk.content:print(chunk.content,end="",flush=True)流式输出不会降低总生成时间,但能显著改善用户看到首个 Token 的等待体验。
6. 创建第一个 Agent
fromlangchain.agentsimportcreate_agent agent=create_agent(model=model,tools=[],system_prompt="你是一个严谨、简洁的中文助手。",)result=agent.invoke({"messages":[{"role":"user","content":"LangChain 和 LangGraph 是什么关系?"}]})print(result["messages"][-1].content)Agent 的输入与输出都是状态字典。messages中不仅保存用户消息与模型回答,后续还会保存工具请求和工具结果。
7. 从 Chain 转向 Graph
| 维度 | 旧版常见写法 | 1.0 推荐方式 |
|---|---|---|
| Agent 创建 | Agent + Executor 多步组合 | create_agent() |
| 执行状态 | 调用链内部维护 | 显式 State |
| 扩展能力 | Callback、Hook | Middleware |
| 复杂流程 | 嵌套 Chain | LangGraph |
| 调用入口 | 多种.run()/.call() | invoke()/stream() |
8. 常见问题
8.1 401 或鉴权失败
检查 API Key、Base URL 和模型供应商是否匹配,不要在地址末尾重复拼接/v1。
8.2 模型名不存在
模型名由供应商决定。OpenAI 兼容协议并不意味着所有供应商都支持相同模型名。
8.3 返回值不能直接打印
模型返回的是消息对象,应读取.content;Agent 返回状态字典,应读取result["messages"][-1].content。
8.4 Notebook 中异步报错
Notebook 已运行事件循环时,可直接使用:
response=awaitmodel.ainvoke("你好")9. 本节小结
最小闭环只有三步:初始化模型 → 使用统一消息格式 → 通过模型或 Agent 执行。掌握这个闭环后,工具、记忆、RAG 和 Middleware 都是在同一状态模型上继续扩展。
视频:BV1xwVr6FEh4,P34,时长 17:17。