
技术分享1 分钟阅读
LangChain使用模式说明和使用场景
1. 基础LLM调用示例
llm = ChatOpenAI(model="gpt-4o-mini",
openai_api_key='sXXXXXX',
openai_api_base='https://XXX/v1',
temperature=0)
response = llm.invoke('请讲一个笑话')
response.content
解释:
创建了一个ChatOpenAI实例,配置了模型名称、API密钥和基础URL
temperature=0表示输出确定性最高,创造性最低invoke方法发送请求并获取响应response.content包含模型生成的文本使用场景:
简单的文本生成任务
不需要工具调用的基础问答
快速原型开发
2. 工具调用Agent示例
from langchain_core.tools import tool
from langchain.agents import create_openai_tools_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate
# 定义工具@tool
def get_weather(city: str):
"""获取指定城市的天气信息"""
# 实际实现会调用天气APIreturn f"{city}的天气是晴天,25℃"
tools = [get_weather]
# 构建提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个智能助手,请根据用户需求选择合适的工具"),
("user", "{input}"),
("placeholder", "{agent_scratchpad}"),# 必须加上这一行
])
agent = create_openai_tools_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
response = agent_executor.invoke({"input": "上海今天天气怎么样?"})
print(response["output"])
解释:
使用
@tool装饰器定义可调用的工具函数agent_scratchpad是Agent思考过程的占位符Agent会自动判断何时需要调用工具
verbose=True会打印详细的执行过程使用场景:
需要结合外部数据或API的任务
动态决定是否需要工具调用的场景
复杂问题分解执行
3. 工作流状态图示例
from langgraph.graph import StateGraph, END, START
from typing import TypedDict, Optional
class State(TypedDict):
joke: Optional[str]
quality: Optional[int]
def generate_joke(state: State):
return {"joke": "为什么鸡过马路?为了到另一边去!"}
def improve_joke(state: State):
return {"joke": f"{state['joke']} (好吧,这个笑话不太好笑)"}
def polish_joke(state: State):
return {"joke": f"精炼版:{state['joke']}"}
def check_punchline(state: State):
if "另一边" in state["joke"]:
return "Pass"
return "Fail"
# Build workflow
workflow = StateGraph(State)
# Add nodes
workflow.add_node("generate_joke", generate_joke)
workflow.add_node("improve_joke", improve_joke)
workflow.add_node("polish_joke", polish_joke)
# Add edges
workflow.add_edge(START, "generate_joke")
workflow.add_conditional_edges(
"generate_joke", check_punchline, {"Fail": "improve_joke", "Pass": END}
)
workflow.add_edge("improve_joke", "polish_joke")
workflow.add_edge("polish_joke", END)
# Compile
chain = workflow.compile()
# Execute
result = chain.invoke({})
print(result["joke"])
解释:
定义了状态类
State来跟踪工作流状态每个节点是一个处理函数,接收和修改状态
check_punchline是条件判断函数工作流支持条件分支和线性流程
使用场景:
多步骤处理流程
需要条件分支的任务
内容生成和迭代优化
复杂业务逻辑编排
4. 工具绑定示例
from langchain_core.tools import tool
@tool
def analyze_joke_quality(joke: str):
"""分析笑话的质量,返回1-10的评分"""
return len(joke) // 5# 简单示例逻辑@tool
def get_weather_info(city: str):
"""获取城市天气信息"""
return f"{city}: 晴天,25℃"
# 将工具绑定到LLM
tools = [analyze_joke_quality, get_weather_info]
llm_with_tools = llm.bind_tools(tools)
# 使用绑定工具的LLM
messages = [
("system", "你是一个幽默助手"),
("user", "讲个笑话并评估它的质量")
]
response = llm_with_tools.invoke(messages)
print(response.content)
# 如果有工具调用
if response.tool_calls:
for call in response.tool_calls:
print(f"需要调用工具: {call['name']}")
print(f"参数: {call['args']}")
解释:
bind_tools让LLM知道可用的工具LLM会自动判断何时需要调用工具
响应中可能包含工具调用请求,但是不会调用需要自己判断处理调用
需要后续处理工具调用的结果
使用场景:
需要LLM主动决定工具调用的场景
工具参数需要LLM动态生成的场景
减少手动工具调用判断逻辑
综合比较
[table]
这些示例展示了从简单到复杂的LangChain使用模式,您可以根据具体需求选择合适的模式。
有关使用上的问题,欢迎您在底部评论区留言,一起交流~
读者评论
评论会同步写入该文在 Notion 中的页面底部(与正文同页,便于管理)。
暂无评论,欢迎抢沙发。