西安网站建设成功建设怎样建立公众号
2026/6/20 13:26:24 网站建设 项目流程
西安网站建设成功建设,怎样建立公众号,合肥网站定制开发公司,多语言外贸网站开发工具#xff08;Tools#xff09; 扩展了 智能体#xff08;Agents#xff09; 的能力#xff0c;使其能够获取实时数据、执行代码、查询外部数据库#xff0c;并在现实世界中执行操作。 在底层#xff0c;工具本质上是具有明确定义输入和输出的可调用函数#xff0c;…工具Tools 扩展了 智能体Agents 的能力使其能够获取实时数据、执行代码、查询外部数据库并在现实世界中执行操作。在底层工具本质上是具有明确定义输入和输出的可调用函数这些函数会被传递给 聊天模型Chat Model。模型会根据对话上下文决定是否调用某个工具并确定应传入哪些参数。关于模型如何处理工具调用的详细说明请参阅 工具调用Tool Calling。创建工具基础工具定义创建工具最简单的方式是使用 tool 装饰器。默认情况下函数的文档字符串docstring会作为工具的描述帮助模型理解何时应使用该工具fromlangchain.toolsimporttooltooldefsearch_database(query:str,limit:int10)-str:在客户数据库中搜索匹配指定查询条件的记录。 Args: query: 要搜索的关键词 limit: 返回结果的最大数量 returnf找到{limit}条关于 {query} 的结果类型提示Type hints是必需的因为它们定义了工具的输入结构input schema。文档字符串应简洁且信息丰富以帮助模型准确理解工具的用途。服务端工具调用Server-side tool use某些聊天模型例如 OpenAI、Anthropic 和 Gemini支持 内置工具built-in tools这些工具在服务端执行例如网络搜索或代码解释器。请查阅 提供商概览Provider Overview了解如何在你使用的具体聊天模型中启用这些功能。自定义工具属性自定义工具名称默认情况下工具名称取自函数名。如果需要更具描述性的名称可以显式指定tool(web_search)# 自定义名称defsearch(query:str)-str:在网络上搜索信息。returnf搜索结果{query}print(search.name)# 输出: web_search自定义工具描述你可以覆盖自动生成的工具描述为模型提供更清晰的使用指引tool(calculator,description执行算术运算。遇到任何数学问题都应使用此工具。)defcalc(expression:str)-str:计算数学表达式。returnstr(eval(expression))高级输入结构定义对于复杂输入可以使用 Pydantic 模型或 JSON Schema 进行定义Pydantic 模型frompydanticimportBaseModel,FieldfromtypingimportLiteralclassWeatherInput(BaseModel):Input for weather queries.location:strField(descriptionCity name or coordinates)units:Literal[celsius,fahrenheit]Field(defaultcelsius,descriptionTemperature unit preference)include_forecast:boolField(defaultFalse,descriptionInclude 5-day forecast)tool(args_schemaWeatherInput)defget_weather(location:str,units:strcelsius,include_forecast:boolFalse)-str:Get current weather and optional forecast.temp22ifunitscelsiuselse72resultfCurrent weather in{location}:{temp}degrees{units[0].upper()}ifinclude_forecast:result\nNext 5 days: SunnyreturnresultJSON Schemaweather_schema{type:object,properties:{location:{type:string},units:{type:string},include_forecast:{type:boolean}},required:[location,units,include_forecast]}tool(args_schemaweather_schema)defget_weather(location:str,units:strcelsius,include_forecast:boolFalse)-str:Get current weather and optional forecast.temp22ifunitscelsiuselse72resultfCurrent weather in{location}:{temp}degrees{units[0].upper()}ifinclude_forecast:result\nNext 5 days: Sunnyreturnresult保留参数名以下参数名已被系统保留不能用作工具参数否则会导致运行时错误参数名用途说明config保留用于内部向工具传递 RunnableConfigruntime保留用于 ToolRuntime 参数用于访问状态、上下文、存储等若需访问运行时信息请使用 ToolRuntime 参数而不是自行定义名为 config 或 runtime 的参数。访问上下文Accessing Context为什么这很重要当工具能够访问智能体状态、运行时上下文和长期记忆时其能力最为强大。这使得工具能做出上下文感知的决策、个性化响应并在多轮对话中保持信息一致性。运行时上下文Runtime Context允许你在运行时将依赖项如数据库连接、用户 ID 或配置注入工具从而提升工具的可测试性和复用性。通过 ToolRuntime 参数工具可以访问以下运行时信息State状态在执行过程中流动的可变数据如消息列表、计数器、自定义字段Context上下文不可变的配置信息如用户 ID、会话详情或应用特定配置Store存储跨会话的持久化长期记忆Stream Writer流写入器在工具执行过程中流式输出自定义更新Config配置当前执行的 RunnableConfigTool Call ID工具调用 ID当前工具调用的唯一标识符ToolRuntime使用 ToolRuntime 可以在一个参数中统一访问所有运行时信息。只需在工具函数签名中添加 runtime: ToolRuntime系统会自动注入该参数而不会暴露给大语言模型LLM。ToolRuntime是一个统一参数为工具提供对状态、上下文、存储、流写入、配置和工具调用 ID 的访问能力。它取代了旧版中分散使用的InjectedState、InjectedStore、get_runtime和InjectedToolCallId等注解。运行时会自动为你提供这些能力无需显式传递参数或依赖全局状态。访问状态State工具可通过 ToolRuntime 访问当前图graph的状态fromlangchain.toolsimporttool,ToolRuntime# 访问当前对话状态tooldefsummarize_conversation(runtime:ToolRuntime)-str:总结当前对话内容。messagesruntime.state[messages]human_msgssum(1forminmessagesifm.__class__.__name__HumanMessage)ai_msgssum(1forminmessagesifm.__class__.__name__AIMessage)tool_msgssum(1forminmessagesifm.__class__.__name__ToolMessage)returnf对话包含{human_msgs}条用户消息、{ai_msgs}条 AI 回复和{tool_msgs}条工具结果# 访问自定义状态字段tooldefget_user_preference(pref_name:str,runtime:ToolRuntime# ToolRuntime 对模型不可见)-str:获取用户的某项偏好设置。preferencesruntime.state.get(user_preferences,{})returnpreferences.get(pref_name,未设置)runtime参数对模型是隐藏的。以上例中模型在工具 Schema 中仅看到pref_name不会看到runtime。更新状态Updating State使用 Command 可更新智能体状态或控制图的执行流程fromlanggraph.typesimportCommandfromlangchain.messagesimportRemoveMessagefromlanggraph.graph.messageimportREMOVE_ALL_MESSAGESfromlangchain.toolsimporttool,ToolRuntime# 清空对话历史tooldefclear_conversation()-Command:清空对话历史。returnCommand(update{messages:[RemoveMessage(idREMOVE_ALL_MESSAGES)],})# 更新用户姓名tooldefupdate_user_name(new_name:str,runtime:ToolRuntime)-Command:更新用户姓名。returnCommand(update{user_name:new_name})上下文Context通过 runtime.context 可访问不可变的配置和上下文数据如用户 ID、会话信息或应用配置fromdataclassesimportdataclassfromlangchain_openaiimportChatOpenAIfromlangchain.agentsimportcreate_agentfromlangchain.toolsimporttool,ToolRuntime USER_DATABASE{user123:{name:Alice Johnson,account_type:Premium,balance:5000,email:aliceexample.com},user456:{name:Bob Smith,account_type:Standard,balance:1200,email:bobexample.com}}dataclassclassUserContext:user_id:strtooldefget_account_info(runtime:ToolRuntime[UserContext])-str:获取当前用户的账户信息。user_idruntime.context.user_idifuser_idinUSER_DATABASE:userUSER_DATABASE[user_id]returnf账户持有人{user[name]}\n类型{user[account_type]}\n余额${user[balance]}return用户未找到modelChatOpenAI(modelgpt-4o)agentcreate_agent(model,tools[get_account_info],context_schemaUserContext,system_prompt你是一名金融助手。)resultagent.invoke({messages:[{role:user,content:我的当前余额是多少}]},contextUserContext(user_iduser123))记忆Memory / Store通过 runtime.store 可访问跨会话的持久化数据。存储Store允许你保存和检索用户或应用级别的长期信息fromtypingimportAnyfromlanggraph.store.memoryimportInMemoryStorefromlangchain.agentsimportcreate_agentfromlangchain.toolsimporttool,ToolRuntime# 读取用户信息tooldefget_user_info(user_id:str,runtime:ToolRuntime)-str:查询用户信息。storeruntime.store user_infostore.get((users,),user_id)returnstr(user_info.value)ifuser_infoelse未知用户# 保存用户信息tooldefsave_user_info(user_id:str,user_info:dict[str,Any],runtime:ToolRuntime)-str:保存用户信息。storeruntime.store store.put((users,),user_id,user_info)return用户信息保存成功。storeInMemoryStore()agentcreate_agent(model,tools[get_user_info,save_user_info],storestore)# 第一次会话保存用户信息agent.invoke({messages:[{role:user,content:保存以下用户信息userid: abc123, name: Foo, age: 25, email: foolangchain.dev}]})# 第二次会话读取用户信息agent.invoke({messages:[{role:user,content:获取 ID 为 abc123 的用户信息}]})# 输出示例# - 姓名Foo# - 年龄25# - 邮箱foolangchain.dev流写入器Stream Writer通过 runtime.stream_writer工具可在执行过程中流式输出自定义更新适用于向用户提供实时反馈fromlangchain.toolsimporttool,ToolRuntimetooldefget_weather(city:str,runtime:ToolRuntime)-str:获取指定城市的天气。writerruntime.stream_writer# 在执行过程中流式输出进度writer(f正在查询城市{city}的数据...)writer(f已获取{city}的天气数据)returnf{city}永远阳光明媚若在工具中使用runtime.stream_writer则必须在 LangGraph 的执行上下文中调用该工具。更多详情请参阅 流式处理Streaming。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询