在大模型应用开发中,如何让AI不仅能理解问题,还能调用工具、执行复杂工作流?本期但问智能团队独创LangGraph&Langchain系列公开课,带你走进AI工作流的实战世界!

🌤️ 天气预报播音员:当AI学会使用工具

图片

想象一下,一个能实时查询天气并以生动播报方式回答的AI助手:

用户:北京今天的天气怎么样?

AI:哎呀,我正坐在北京的窗边,外面阴沉沉的,像一层灰蒙蒙的棉被盖住了天空...(基于真实天气数据生成)

这是大模型调取了该城市对应的天气数据,包括温度、风速、湿度等空气质量指数,再基于这些精准数据,以天气预报员的口吻进行生活化的语言总结并输出。那么,它是怎么结合工具来实现的呢?

🚀核心技术:工具调用与工作流编排

图片

第一步:创建天气预报工具


python
from langchain.tools import tool
@tool
defget_weather(city:str):
"""
获取指定城市的天气信息
""" 
# 调用第三方天气API
api_key ="your_api_key"
url =f"https://api.weatherapi.com/v1/current.json?key={api_key}&q={city}"
  
# 获取温度、湿度、风速、空气质量等数据
response = requests.get(url)
data = response.json()
  
return f"""
 {city}天气报告: 
-温度:{data['current']['temp_c']}°C 
-湿度:{data['current']['humidity']}% 
-风速:{data['current']['wind_kph']} km/h 
-天气状况:{data['current']['condition']['text']}   
- 空气质量指数:...
"""

第二步:构建智能工作流

python
# 创建两个核心节点
graph =StateGraph(WeatherState)
# 节点1:大模型决策节点
def model_node(state: WeatherState): 
"""判断是否需要调用天气工具"""
llm_with_tools = llm.bind_tools([get_weather])
response = llm_with_tools.invoke(state["messages"]) 
return{"messages":[response]}

# 节点2:工具执行节点
def tool_node(state: WeatherState):
 """执行天气查询工具"""
last_message = state["messages"][-1]
  # 提取工具调用信息
tool_calls = last_message.tool_calls 
if tool_calls:
   for tool_call in tool_calls:
       if tool_call["name"]=="get_weather": 
          city = tool_call["args"]["city"]
          weather_info = get_weather.invoke({"city": city}) 
          return{"messages":[ToolMessage(weather_info)]}

# 节点3:报告生成节点
def report_node(state: WeatherState): 
    """生成播报风格的天气报告"""
    prompt ="""你是一位亲切的天气预报播音员,请用亲身体验的方式描述以下天气数据..."""
    response = llm.invoke(prompt +str(state["messages"][-1].content))
    return{"messages":[response]}

第三步:设计路由逻辑

python
# 条件边:决定工作流走向
def route_after_model(state: WeatherState):
    """根据模型输出决定下一步"""
    last_message =state["messages"][-1]
 
    if hasattr(last_message,"tool_calls")and last_message.tool_calls:
       return"use_tool"# 需要调用工具
    return"end"# 直接结束
    
# 构建完整工作流
graph.add_node("model", model_node)
graph.add_node("tool", tool_node)
graph.add_node("report", report_node)

graph.add_conditional_edges(
      "model", 
      route_after_model,
      {
           "use_tool":"tool",
           "end": END 
       }
)
graph.add_edge("tool","report")
graph.add_edge("report", END)

🎯 测试用例生成系统:AI赋能软件测试

图片

更精彩的是,同样的技术可以应用于软件测试领域,打造自动化测试用例生成系统:

四节点工作流设计

1. 编写测试用例节点

2. AI评审节点

3. 格式化节点

4. 保存到Excel节点

python
# 测试用例评审逻辑
defreview_test_cases(state: TestState):
 """AI评审测试用例"""
review_prompt =f"""
 你是一位资深的测试评审专家,请评审以下测试用例:
 {state['test_cases']}
 
 评审维度:
 1.完整性(是否覆盖所有需求)
2. 清晰性(步骤是否明确)
3. 可执行性
4. 边界情况覆盖
 
 输出格式:
 -评审结果:通过/不通过
 -改进建议:...
 -需要重写的用例:...
"""
 
response = llm.invoke(review_prompt)
 
 # 记录评审次数
state["review_count"]+=1
 
 return{"review_result": response,"review_count": state["review_count"]}

智能路由:评审失败则重新生成

python
defroute_after_review(state: TestState):
 """根据评审结果决定下一步"""
 if state["review_result"]=="通过"or state["review_count"]>=3:
return"format_cases"  # 评审通过或达到最大次数
 return"rewrite_cases"  # 需要重新编写
graph.add_conditional_edges(
 "review",
route_after_review,
 {
"format_cases":"format",
"rewrite_cases":"write_cases"  # 回到编写节点
 }
)

📚核心知识点总结

图片

1.工具绑定机制

·大模型本身不知道天气数据

·通过bind_tools()将工具能力"赋予"模型

·模型学会在适当时机调用工具

2.条件路由设计

·基于模型输出动态决定工作流走向

·实现"智能决策"能力

·支持复杂业务逻辑编排

3.节点化架构

·每个节点专注单一功能

·易于维护和扩展

·支持并行执行和错误处理

4.状态管理

·在工作流中传递和修改状态

·支持多次迭代和循环

·保持上下文一致性

🚀从理论到实践

图片

这些项目不仅展示了LangGraph的强大能力,更提供了可落地的解决方案:

1.天气预报播音员可扩展为:

o智能客服系统

o数据查询助手

o个性化推荐引擎

2.测试用例系统可发展为:

o全流程测试自动化平台

o需求分析到用例生成一体化

o智能缺陷预测系统

无论你是开发者还是测试工程师,掌握AI工作流编排技术都将成为未来的核心竞争力。从简单的工具调用到复杂的业务流转,LangGraph为你提供了一站式解决方案。

让我们一起探索AI应用开发的无尽可能

📞 支持与反馈
维护团队: 北京慧测·杭州但问智能技术团队​​​​
Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐