当前位置: 首页 > news >正文

LangGraph--Agent常见的模式1(增强型,提示链)

智能体的常见模式一般和框架无关,我们也可以自己写代码实现,但是使用框架可以更好、更快的实现这些模式,而且数据流容易观察,下面就开始

增强型 LLM

#llm
from langchain_deepseek import ChatDeepSeek
import osllm = ChatDeepSeek(model="deepseek-chat",api_key=DEEPSEEK_API_KEY,#base_url="https://api.deepseek.com",#temperature=0.0
)

 

# 结构化输出
from pydantic import BaseModel, Field
class SearchQuery(BaseModel):search_query: str=Field(None, description="优化的网络搜索查询")justification:str = Field(None,justification="为什么这个查询与用户的请求相关")# 为LLM增加结构化输出的模式
structured_llm = llm.with_structured_output(SearchQuery)
# 调用增强型语言模型
output = structured_llm.invoke("Calcium CT 评分和高胆固醇有什么关系?中文回答")
print(output.search_query)
print(output.justification)
Calcium CT score 和高胆固醇 关系
查找关于冠状动脉钙化评分(Calcium CT score)与高胆固醇之间关系的科学研究和医学资料。
# 定义工具
def multiply(a:int,b:int)->int:return a*b
# 增强LLM(大型语言模型)的工具
llm_with_tools = llm.bind_tools([multiply])
# 触发大语言模型调用工具
msg = llm_with_tools.invoke("5乘6等于多少?")
#msg.tool_calls
print(msg.tool_calls)

[{'name': 'multiply', 'args': {'a': 5, 'b': 6}, 'id': 'call_0_bab7595e-99ef-40a5-8463-03bb77dfb58a', 'type': 'tool_call'}]

提示链

将任务分解为多个LLM调用具有益处。

from typing_extensions import TypedDict
# 定义Graph的状态
class State(TypedDict):topic:str           # 笑话主题joke:str            # 笑话improved_joke:str   # 提升后的笑话final_joke:str      # 最终笑话# 定义生成笑话节点
def generate_joke(state:State):""" 第一个大模型调用生成初始笑话"""msg = llm.invoke(f"写一个关于{state["topic"]}的简短笑话")return {"joke":msg.content}def improve_joke(state:State):"""第二个大模型提升笑话"""msg = llm.invoke(f"通过增加文字游戏使这个笑话更幽默: {state["joke"]}")return {"imporved_joke":  msg.content}def final_joke(state:State):"""第三个模型完成最终笑话"""msg = llm.invoke(f"给这个笑话增加一个令人惊讶的转折:{state[improve_joke]}")return {"final_joke": msg.content}# 条件边函数,用于检查笑话是否有笑点
def check_punchline(state:State):"""检查笑话是否有笑点的门函数"""# 简单核对即可,笑话是否饱和"?" 或者"!"if "?" in state["joke"] or "!" in state["joke"]:return "Pass"return "Fail"
from langgraph.graph import StateGraph, START,END
from IPython.display import Image, display# 构建工作流
workflow = StateGraph(State)# 添加节点
workflow.add_node("generate_joke",generate_joke)
workflow.add_node("improve_joke",improve_joke)
workflow.add_node("sucess_joke",final_joke)# 为节点添加边
workflow.add_edge(START, "generate_joke")
workflow.add_conditional_edges("generate_joke",check_punchline,{"Pass":"improve_joke","Fail":END})
workflow.add_edge("improve_joke","sucess_joke")
workflow.add_edge("sucess_joke",END)chain = workflow.compile()
display(Image(chain.get_graph().draw_mermaid_png()))

state = chain.invoke({"topic":"狗"})
print("Initial joke:")
print(state["joke"])
print("\n--- --- ---\n")
if "improved_joke" in state:print("Improved joke:")print(state["improved_joke"])print("\n--- --- ---\n")print("Final joke:")print(state["sucess_joke"])
else:print("Joke failed quality gate - no punchline detected!")
Initial joke:
当然!这里有一个关于狗狗的简短笑话:---**主人**:我的狗真是个天才!我教它“装死”,它一学就会!  
**朋友**:哇,怎么做到的?  
**主人**:简单,我举起玩具枪“砰”一声,它就躺下了。  
**朋友**:那……后来呢?  
**主人**:后来它把我家沙发咬烂了,因为“复活”没教。  (笑点:狗狗只学了一半技能,结果“戏精”附体😂)  --- 需要更冷或更可爱的版本吗? 😄--- --- ---Joke failed quality gate - no punchline detected!

相关文章:

  • 高效开发REST API:Django REST Framework序列化器深度指南
  • macbook配置vscode连接腾讯云服务器
  • springboot测试类原理
  • 掌握这些 Python 函数,让你的代码更简洁优雅
  • 《深度剖析:SCSS中混入(Mixin)为浏览器前缀赋能》
  • Photoshop矢量蒙版全教程
  • Spark核心概念与DAG执行原理笔记
  • 中国风系列简约淡雅通用PPT模版分享
  • Spring Boot 实训项目 - 图书信息网站
  • 鸿蒙Next仓颉语言开发实战教程:设置页面
  • 【系统设计【2】】粗略估算
  • @SpringBootTest 详解
  • langChainv0.3学习笔记(中级篇)
  • 基于PPSO与BP神经网络回归模型的特征选择实战(Python实现)
  • AndroidStudio下载的SDK没有tool目录,或者想要使用uiautomatorviewer工具
  • Java网络编程深度解析
  • 实战指南:部署MinerU多模态文档解析API与Dify深度集成(实现解析PDF/JPG/PNG)
  • 大模型<闲谈>
  • 以太网交换机交换表的建立
  • 234. 回文链表
  • 日本网站风格/长沙互联网网站建设
  • wordpress 设置不生效/seo综合查询网站源码
  • 做网站时怎么更改区域内的图片/2021最新免费的推广引流软件
  • 品牌建设 凝心/360优化大师历史版本
  • 为什么都用java做网站/爱链网中可以进行链接买卖
  • 西安专业网站开发公司/查指数