LangChain-常用场景

AI能输出结构化数据

让模型按照 Pydantic 模型输出结构化数据,解决自由文本难以程序化处理的问题

例:从简历文本中提取结构化信息

structured_output_demo.py 复制代码
import os
from typing import List, Optional
from pydantic import BaseModel, Field
from langchain_openai import ChatOpenAI


# 用Pydantic定义简历的数据模型
class Resume(BaseModel):
    name: str = Field(description="姓名")
    phone: Optional[str] = Field(default=None, description="电话")
    email: Optional[str] = Field(default=None, description="邮箱")
    skills: List[str] = Field(default_factory=list, description="技能")


# 初始化模型
model = ChatOpenAI(
    model="qwen3.5-plus",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    temperature=0.1  # 输出会更稳定、更偏向确定性回答
)

# 绑定结构化输出
structured_model = model.with_structured_output(Resume, include_raw=True)  # include_raw=True:同时返回解析后的对象和原始输出

# 系统提示词
system_prompt = "你是一个简历提取助手,请从简历文本中提取信息,并以JSON格式返回。使用以下英文键名:name(姓名)、phone(电话)、email(邮箱)、skills(技能列表)。"

# 简历测试数据
resume_text = """
姓名:Steven Wong
电话:17640118430
邮箱:844541199@qq.com
技能:精通Java、Python的安装与卸载,精通Office...
"""

# 拼接系统提示到和简历测试数据
input_with_prompt = system_prompt + "\n\n" + resume_text

# 执行提取并打印结果
result = structured_model.invoke(input_with_prompt)
if result.get("parsed"):
    parsed_result = result["parsed"]  # 原始Pydantic对象
    print(f"提取成功:{parsed_result}")
    print(f"姓名:{parsed_result.name}")
    print(f"电话:{parsed_result.phone}")
    print(f"邮箱:{parsed_result.email}")
    print(f"技能:{','.join(parsed_result.skills)}")
else:
    print("提取失败", {result.get('raw')}, {result.get('parsing_error')})

运行脚本

复制代码
python structured_output_demo.py
ini 复制代码
提取成功:name='Steven Wong' phone='17640118430' email='844541199@qq.com' skills=['精通 Java、Python 的安装与卸载', '精通 Office...']
姓名:Steven Wong
电话:17640118430
邮箱:844541199@qq.com
技能:精通 Java、Python 的安装与卸载,精通 Office...

聊天机器人能记住上次聊啥

通过 InMemorySaver 实现带短记忆的聊天机器人,让模型记住当前会话的上下文

例:构建一个带短记忆的简单聊天机器人

复制代码
pip install langgraph
inmemorysaver_demo.py 复制代码
import os
from langchain_openai import ChatOpenAI
from langchain.agents import create_agent
from langgraph.checkpoint.memory import InMemorySaver

# 初始化模型
model = ChatOpenAI(
    model="qwen3.5-plus",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

# 初始化记忆存储
checkpointer = InMemorySaver()

# 创建带记忆功能的智能体
agent = create_agent(
    model=model,
    tools=[],
    system_prompt="你是一个乐于助人的助手 请始终使用中文回答 如果不知道答案,请直接说"我不知道",不要编造",
    checkpointer=checkpointer
)

# 使用同一个 thread_id 保持会话
config = {"configurable": {"thread_id": "user_123"}}

# 第一轮对话
response1 = agent.invoke({"messages": [("user", "我叫蔡徐坤,喜欢唱,跳,rap,篮球")]}, config=config)
print("助手:", response1["messages"][-1].content)

# 第二轮对话
response2 = agent.invoke({"messages": [("user", "我是谁?我喜欢什么?")]}, config=config)
print("助手:", response2["messages"][-1].content)
复制代码
助手: 你好蔡徐坤,很高兴认识你!唱、跳、rap 和篮球都是很棒的爱好,看来你充满活力。请问有什么我可以帮你的吗?
助手: 根据你刚才的介绍,你是蔡徐坤,你喜欢唱、跳、rap 和篮球。
  • 关键点说明

    • thread_id 的作用:

      • 框架根据该 ID 区分不同用户或不同会话
      • 相同 ID 共享历史
    • 历史消息自动注入:

      • 开发者无需手动拼接历史
      • create_agent 内部会从 checkpointer 读取历史并加入提示词
    • 清除历史:

      • 只需更换新的 thread_id 即可开始全新会话

AI调用工具并上网搜答案

定义自定义搜索工具,集成 Tavily 联网搜索 API,让 Agent 自主决定何时调用工具获取实时信息

  • 准备工作:获取 Tavily API Key

    • 访问 tavily.com 注册账号

    • 登录后进入后,创建并复制 API Key

    • 将 API Key 配置到环境变量 TAVILY_API_KEY

    • 虚拟环境激活环境变量

      ini 复制代码
      $env:TAVILY_API_KEY = '你的Tavily API Key'
  • 安装依赖

    复制代码
    pip install tavily-python

例:构建支持联网搜索的 Agent

tool_agent_demo.py 复制代码
import os
from tavily import TavilyClient
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
from langchain.agents import create_agent

# 初始化Tavily客户端
tavily_client = TavilyClient(api_key=os.getenv("TAVILY_API_KEY"))


# 定义搜索工具
@tool
def search_web(query: str) -> str:
    """搜索互联网获取实时信息,参数query是搜索关键词。当用户需要最新的天气、新闻、最新事件等时使用此工具。"""
    try:
        result = tavily_client.search(query, max_results=3)
        summaries = [item["content"] for item in result.get("results", [])]
        return "\n".join(summaries) if summaries else "未找到相关信息"
    except Exception as e:
        print(f"搜索失败:{str(e)}")


# 初始化模型
model = ChatOpenAI(
    model="qwen3.5-plus",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    temperature=0.3
)

# 创建智能体
agent = create_agent(
    model=model,
    tools=[search_web],
    system_prompt="你是一个乐于助人的助手,可以搜索互联网获取实时信息。当用户询问天气、新闻、最新事件时,请使用search_web工具。"
)

# 测试
if __name__ == "__main__":
    response = agent.invoke({"messages": [("user", "今天沈阳天气怎么样?")]})
    print("助手:", response["messages"][-1].content)

运行脚本

复制代码
python tool_agent_demo.py
markdown 复制代码
助手: 根据最新天气信息,今天(2026年10月20日,周二)沈阳的天气情况如下:

## 🌤️ 当前天气
- **天气状况**:晴
- **气温**:6℃(体感2℃)
- **风向风力**:北风4级
- **湿度**:98%
- **空气质量**:优(AQI 31)
- **日出/日落**:06:05 / 16:55

## ⚠️ 预警信息
**大风蓝色预警**:预计今天6时到20时,沈阳市和平区、沈河区、铁西区、皇姑区、大东区、于洪区等区域偏北风4到5级,阵风7到8级。请注意出行安全,加固临时搭建物,防范高空坠物风险。

## 📋 生活建议
| 指数 | 等级 | 建议 |
|------|------|------|
| 穿衣 | 较冷 | 建议着厚外套加毛衣,年老体弱者宜穿大衣、呢外套 |
| 感冒 | 极易发 | 温差大、风力强,注意增减衣服 |
| 紫外线 | 中等 | 建议涂擦SPF>15的防晒霜 |
| 洗车 | 较不宜 | 风力较大,洗车后易蒙尘 |
| 运动 | 较适宜 | 推荐室内运动 |
| 过敏 | 极不易发 | 可放心外出 |

**温馨提示**:今天风力较大,外出请注意防风保暖,照顾好老人和小孩!
  • 关键点说明

    • 工具描述的重要性:

      • @tool 装饰器会自动将函数的 docstring 作为工具描述
      • 模型根据描述决定是否调用该工具
    • 工具参数类型:

      • 使用类型注解

        • 如 query: str,框架会自动生成参数 schema
    • 错误处理:

      • 工具内部应捕获异常并返回友好的错误信息
      • 否则 Agent 可能崩溃
    • Agent 决策过程:

      • 当用户问题与工具描述匹配时,Agent 会先输出工具调用请求
      • 框架执行工具后,模型再根据工具结果生成最终答案
相关推荐
阿里云大数据AI技术2 小时前
云栖实录|从数据闭环到模型闭环,阿里云全栈方案助力多模态AI走向生产
人工智能·agent
阿里云云原生2 小时前
AgentTeams Dashboard:统一管理团队、项目与资产
云原生·agent
七牛云行业应用2 小时前
Codex接MCP完整教程:从官方文档服务器到HTTP、STDIO与OAuth配置(2026年10月)
人工智能·ai·agent·ai编程
王中阳Go3 小时前
面到 harness 架构就卡住的人,多半是做过但没这么叫过
架构·go·agent
用户1100549461194 小时前
同一个发文任务,截图流 vs Playwright MCP vs 语义树:我把 token 和失败次数算给你看
agent
Databend4 小时前
Databend 8-9 月双月报:物化视图、数据共享与数据血缘能力升级
大数据·数据分析·agent
Databend4 小时前
周年庆结束了,湖仓为什么还在高消费?
大数据·数据库·agent
刘 大 望5 小时前
Agent 的规划与执行范式:Plan-Execute-Replan 与 ReAct
java·python·ai·chatgpt·langchain·ai编程
张张123y5 小时前
后端第十二课:Agent 开发(让大模型从“会答“升级到“会做“)
前端·大模型·llm·agent·rag