ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

【LLM】Langchain框架开发应用总结

【LLM】Langchain框架开发应用总结 Langchain 常用组件以及包含的子模块常用组件OpenAI langchain-openai Downloads per month PyPI - Latest version[AzureChatOpenAI,AzureOpenAI,AzureOpenAIEmbeddings,ChatOpenAI,OpenAI,OpenAIEmbeddings,__all__,__builtins__,__cached__,__doc__,__file__,__loader__,__name__,__package__,__path__,__spec__,chat_models,custom_tool,data,embeddings,llms,tools]tools1. 直接是函数的形式只能由Agent自主决策调用# 工具定义defget_weather(city:str)-str:获取指定城市的实时天气信息 模拟天气数据实际项目中调用天气 API 这个工具可以查询中国主要城市的天气情况包括温度、天气状况和空气质量。 Args: city: 城市名称支持北京、上海、成都等 Returns: 包含天气详情的字符串 weather_database{北京:{condition:晴天,temp_range:15-25°C,aqi:优,humidity:45%,wind:东南风2级,suggestion:适合户外活动,icon:☀️},上海:{condition:多云,temp_range:18-28°C,aqi:良,humidity:65%,wind:东风3级,suggestion:空气质量良好,icon:⛅},成都:{condition:多云,temp_range:16-24°C,aqi:中,humidity:75%,wind:无持续风向1级,suggestion:空气质量一般,icon:⛅}}ifcitynotinweather_database:returnf❌ 抱歉暂时无法查询{city}的天气信息。\n支持的城市北京、上海、成都dataweather_database[city]resultf{data[icon]}{city}天气预报 ━━━━━━━━━━━━━━━━━━━━━━ • 天气状况{data[condition]}• 温度范围{data[temp_range]}• 空气质量{data[aqi]}• 湿度{data[humidity]}• 风力{data[wind]}• 建议{data[suggestion]}━━━━━━━━━━━━━━━━━━━━━━ 数据更新时间{datetime.now().strftime(%Y-%m-%d %H:%M)}returnresult.strip()# 在agent中传入工具a_gentcreate_agent(modelllm,#agentAgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,#verboseTrue,toolstools,system_prompt你是一个周内助手能自动分析输入需求自动调用对应工具精准查询并按优好的方式返回回答。,)inputs{messages:[{role:user,content:成都现在的天气如何}]}resulta_gent.invoke(inputs)# 使用函数作为tool时只能使用agent自主调用final_messageresult[messages][-1]print(f查询结果{final_message.content})使用函数作为tool时只能使用agent自主调用2. 使用tool装饰器使用装饰器可以直接通过tools方法名通过.invoke(参数)调用fromlangchain_core.toolsimporttooltooldefget_current_time(timezone:strAsia/Shanghai)-str:获取当前时间和日期 Args: timezone: 时区默认为 Asia/Shanghai北京时间 Returns: 格式化的时间信息 nowdatetime.now()weekdays[一,二,三,四,五,六,日]weekdayweekdays[now.weekday()]resultf 当前时间信息 ━━━━━━━━━━━━━━━━━━━━━━ 日期{now.year}年{now.month}月{now.day}日 星期星期{weekday}⏰ 时间{now.strftime(%H:%M:%S)} 时区{timezone}━━━━━━━━━━━━━━━━━━━━━━ returnresult.strip()# tool装饰器方法测试resultget_current_time.invoke(北京)print(result)# 输出: 晴天25°C# 查看工具信息print(f工具名称:{get_current_time.name})print(f工具描述:{get_current_time.description})print(f参数结构:{get_current_time.args})3. 复杂的装饰器fromlangchain_core.toolsimporttoolfromtypingimportOptionaltooldefsearch_database(query:str,category:Optional[str]None)-str: 在数据库中搜索信息 Args: query: 搜索关键词 category: 可选的分类过滤器如科技、健康、教育 database{科技:[人工智能正在改变世界,5G技术的应用],健康:[健康饮食的重要性,运动与长寿的关系],教育:[在线学习的趋势,终身学习的价值]}results[]ifcategoryandcategoryindatabase:foritemindatabase[category]:ifquery.lower()initem.lower():results.append(f[{category}]{item})else:forcat,itemsindatabase.items():foriteminitems:ifquery.lower()initem.lower():results.append(f[{cat}]{item})ifresults:return找到以下结果:\n\n.join(results)else:returnf没有找到关于 {query} 的结果4. 需要更多参数控制时fromlangchain_core.toolsimportBaseToolfrompydanticimportBaseModel,FieldfromtypingimportType# 定义输入参数结构classCalculatorInput(BaseModel):left_number:intField(description运算符左侧数字如 1)operator:strField(description二目运算符如 /-/*/%)right_number:intField(description运算符右侧数字如 2)classCalculator2D(BaseTool):name:strtwo-dimensional operation calculatordescription:str执行二目数学计算args_schema:Type[BaseModel]CalculatorInputdef_run(self,left_number:int,operator:str,right_number:int)-str:同步执行try:expressionf{left_number}{operator}{right_number}resulteval(expression)returnf计算结果:{expression}{result}exceptExceptionase:returnf计算错误:{str(e)}asyncdef_arun(self,left_number:int,operator:str,right_number:int)-str:异步执行可选实现expressionf{left_number}{operator}{right_number}returnself._run(expression)# 使用calcCalculator2D()resultcalc.invoke({left_number:123,operator:,right_number:456})print(result)模型初始化方法from langchain_openai import ChatOpenAIllm ChatOpenAI(model“deepseek-chat”,api_keyos.environ.get(‘DEEPSEEK_API_KEY’),base_url“https://api.deepseek.com”,)from langchain.chat_models import init_chat_modelmodel init_chat_model(“claude-sonnet-4-5-20250929”,temperature0.5,timeout10,max_tokens1000)2025年12月草稿
返回列表