淘宝联盟链接的网站怎么做,做卖东西的网站,广州软件开发培训机构有哪些,中英网站建立智能体的常见模式一般和框架无关#xff0c;我们也可以自己写代码实现#xff0c;但是使用框架可以更好、更快的实现这些模式#xff0c;而且数据流容易观察#xff0c;下面就开始
增强型 LLM #llm
from langchain_deepseek import ChatDeepSeek
import osllm ChatDeepSe…智能体的常见模式一般和框架无关我们也可以自己写代码实现但是使用框架可以更好、更快的实现这些模式而且数据流容易观察下面就开始
增强型 LLM #llm
from langchain_deepseek import ChatDeepSeek
import osllm ChatDeepSeek(modeldeepseek-chat,api_keyDEEPSEEK_API_KEY,#base_urlhttps://api.deepseek.com,#temperature0.0
) # 结构化输出
from pydantic import BaseModel, Field
class SearchQuery(BaseModel):search_query: strField(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 Passreturn 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!