【LangChain 0.3 - 1 - 常用组件】 + 可运行 Agent 实战
一、常用核心组件1. 聊天模型 ChatModelsfromlangchain_openaiimportChatOpenAI# 初始化大模型大脑llmChatOpenAI(modelgpt-3.5-turbo,api_keysk-xxxxxxxxxxxxxxxx,# 替换为自己的API Keytemperature0.1,# 数值越低回答越精准稳定max_tokens1024)# 简单调用测试fromlangchain_core.messagesimportHumanMessage respllm.invoke([HumanMessage(content你好)])print(resp.content)2. 提示词模板 ChatPromptTemplate用法 1基础对话模板最常用fromlangchain_core.promptsimportChatPromptTemplate# 定义带参数的对话模板promptChatPromptTemplate.from_messages([(system,你是{role}回答简洁专业不冗余),(user,{question})])# 填充参数生成标准消息messagesprompt.format_messages(role数学助手,question11等于几)# 模型调用respllm.invoke(messages)print(resp.content)用法 2带历史对话模板promptChatPromptTemplate.from_messages([(system,你是电商客服助手),(user,我的订单多久发货),(ai,您好请提供一下订单号~),(user,{user_input})])3. 链 Chains流水线fromlangchain_core.output_parsersimportStrOutputParser# 构建流水线模板 → 模型 → 文本解析chainprompt|llm|StrOutputParser()# 执行调用resultchain.invoke({role:数学助手,question:3*45等于几})print(result)4. 工具 Tools推荐tool 装饰器定义工具定义两个工具计算器带参数、查询当前日期无参数fromlangchain.toolsimporttoolfromdatetimeimportdatetime# 工具1数学计算器tooldefcalculator(expression:str)-str: 数学计算器支持加减乘除运算 :param expression: 数学表达式例如 102*3 :return: 计算结果 try:reseval(expression)returnf计算结果{expression}{res}exceptExceptionase:returnf计算失败{str(e)}# 工具2获取当前时间tooldefget_current_time()-str:获取当前系统日期与时间无需传入参数returnf当前时间{datetime.now().strftime(%Y-%m-%d %H:%M:%S)}# 工具集合Agent 调用tools[calculator,get_current_time]二、Agent 实战该案例未实现上下文持久化功能而点击跳转 - 【LangChain 0.3 - 2 - 上下文记忆持久化】实现了持久化。# LangChain 0.3 官方标准 Agent 示例 # 1. 导入依赖0.3 标准导入路径fromlangchain_openaiimportChatOpenAIfromlangchain_core.promptsimportChatPromptTemplate,MessagesPlaceholderfromlangchain.toolsimporttoolfromlangchain.agentsimportcreate_tool_calling_agent,AgentExecutorfromdatetimeimportdatetimeimportosfromdotenvimportload_dotenv load_dotenv()# 从 .env 文件读取# 2. 初始化大模型llmChatOpenAI(modelgpt-3.5-turbo,api_keyos.getenv(OPENAI_API_KEY),# 从环境变量获取密钥keytemperature0.1)# 3. 定义工具tooldefcalculator(expression:str)-str:数学计算器支持加减乘除输入表达式如 102*3try:returnf结果{expression}{eval(expression)}except:return表达式格式错误tooldefget_current_time()-str:获取当前日期时间无需参数returnf当前时间{datetime.now().strftime(%Y-%m-%d %H:%M:%S)}# 组装工具列表tools[calculator,get_current_time]# 4. Agent 专用提示词0.3 固定规范promptChatPromptTemplate.from_messages([(system, 你是智能助手严格按照以下规则执行 1. 常识类问题直接回答无需调用工具 2. 涉及数学计算 → 调用 calculator 工具 3. 询问当前时间 → 调用 get_current_time 工具 4. 工具返回结果后整理为自然语言回复用户 ),# 用户输入占位符(user,{input}),# Agent 思考过程占位符0.3 固定写法不可修改MessagesPlaceholder(variable_nameagent_scratchpad)])# 5. 创建 Agent0.3 官方函数agentcreate_tool_calling_agent(llm,tools,prompt)# 创建执行器agent_executorAgentExecutor(agentagent,toolstools,verboseTrue,# 开启调试日志查看思考调用过程max_iterations5,# 限制最大工具调用次数防止死循环handle_parsing_errorsTrue# 自动处理解析异常)# 6. 执行测试if__name____main__:# 测试1常识问题不调用工具print( 测试1常识问题 )try:res1agent_executor.invoke({input:什么是LangChain})print(回复,res1[output])exceptExceptionase:print(f执行出错{e})# 测试2数学计算调用计算器工具print( 测试2数学计算 )res2agent_executor.invoke({input:100 20*3 - 15/5 等于多少})print(回复,res2[output],\n)# 测试3查询时间调用时间工具print( 测试3查询时间 )res3agent_executor.invoke({input:现在的日期和时间是多少})print(回复,res3[output])
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2500117.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!