零基础搭建 OpenClaw:TaoToken 统一 Key 接入本地 AI 智能体自然语言操控电脑实战(含安装包)
2026/9/28 6:09:51
解决LLM的局限性:大语言模型存在“幻觉”问题(生成虚假信息),且无法直接访问实时数据或执行具体
操作
扩展能力边界:通过工具集成,Agent可以获得计算、API访问,数据库查询等实际能力
模块化设计:将不同功能封装为独立工具,便于维护和复用
将普通Python函数转换为LangChain工具
自动生成JSON Schema,描述工具的输入参数和功能
fromlangchain.toolsimporttool@tooldefmultiply(a:int,b:int)->int:'''两个数的乘积'''#docstring(文档字符串)returna*bprint(multiply.name)print(multiply.description)print(multiply.args)print(multiply.args_schema.model_json_schema())multiply 两个数的乘积 {'a': {'title': 'A', 'type': 'integer'}, 'b': {'title': 'B', 'type': 'integer'}} {'description': '两个数的乘积', 'properties': {'a': {'title': 'A', 'type': 'integer'}, 'b': {'title': 'B', 'type': 'integer'}}, 'required': ['a', 'b'], 'title': 'multiply', 'type': 'object'}importrequestsdefget_weather(city:str)->str:''' 调用实时天气API,返回温度及天气状况 参数: city:城市名称,如:'北京' '''url="https://eolink.o.apispace.com/456456/weather/v001/now"payload={"areacode":"101010100"}headers={"X-APISpace-Token":"ove3f6z5sp4pnav9ljs2w6ra33b7hdvk"}response=requests.request("GET",url,params=payload,headers=headers)return(response.text)get_weather('北京')'{"status":0,"result":{"location":{"areacode":"101010100","name":"北京","country":"中国","path":"北京,北京市,北京市,中国"},"realtime":{"text":"晴","code":"00","temp":25.0,"feels_like":25,"rh":57,"wind_class":"1级","wind_speed":1.3,"wind_dir":"南风","wind_angle":199,"prec":0.0,"prec_time":"2026-09-21 19:00:00","clouds":0,"vis":18400,"pressure":1012,"dew":15,"uv":0,"weight":5,"brief":"略显闷热","detail":"略微偏热,适当穿得清凉些"},"last_update":"2026-09-21 19:34"}}'#获取城市编码importpandasaspd city_df=pd.read_csv("city.csv")defget_city_code(city_name:str)->int:''' 获取城市编码 '''#优先匹配区县match=city_df[city_df['district']==city_name]ifnotmatch.empty:returnmatch.iloc[0]['areacode/城市ID']match=city_df[city_df['city']==city_name]ifnotmatch.empty:returnmatch.iloc[0]['areacode/城市ID']match=city_df[city_df['city'].str.contains(city_name,na=False)]ifnotmatch.empty:returnmatch.iloc[0]['areacode/城市ID']return101010100#默认北京importrequestsfromlangchain.toolsimporttool@tooldefget_weather(city:str)->str:''' 调用实时天气API,返回温度及天气状况 参数: city:城市名称,如:'北京' '''url="https://eolink.o.apispace.com/456456/weather/v001/now"city_code=get_city_code(city)payload={"areacode":city_code}headers={"X-APISpace-Token":"ove3f6z5sp4pnav9ljs2w6ra33b7hdvk"}response=requests.request("GET",url,params=payload,headers=headers)data=response.json()temp=data.get('result').get('realtime').get('temp')wd=data.get('result').get('realtime').get('text')returnf'天气:{wd},温度:{temp}℃'result=get_weather.invoke({"city":"哈尔滨"})print(result)天气:晴,温度:10.6℃key='2d50c6c36eb846c7abc30c9da80ff523.xSIeJYw8qoaKIBLc'fromlangchain_community.chat_modelsimportChatZhipuAIimportos os.environ["ZHIPUAI_API_KEY"]=key chat=ChatZhipuAI(model="glm-4",temperature=0.5,#模型温度,值在0-1之间,值越小随机性越低)C:\Users\Jasmine\AppData\Local\Temp\ipykernel_31572\1315615643.py:3: DeprecationWarning: `langchain-community` is being sunset and is no longer actively maintained. See https://github.com/langchain-ai/langchain-community/issues/674 for details and migration guidance toward standalone integration packages. from langchain_community.chat_models import ChatZhipuAIfromlangchain.agentsimportcreate_agent#创建工具对象tools=[get_weather]agent=create_agent(model=chat,tools=tools,system_prompt="""你是一个天气查询助手。 当用户询问天气时,调用 get_weather 工具查询实时天气。请使用中文回答,并简洁说明天气状况和温度。""")response=agent.invoke({"messages":[{"role":"user","content":"今天北京天气如何?"}]})print(response["messages"][-1].content)今天北京的天气是晴天,温度为23.9℃。天气很不错呢!importre#正则表达式模块,从字符串中按照某种规则寻找内容@tooldefmultiply(input_str:str)->int:'''两个数的乘积, args: input_str:输入的字符串,格式为a*b returns:int '''#docstring(文档字符串)match=re.findall(r'\d+',input_str)#在字符串中寻找所有符合正则表达式的内容re.findall(正则表达式, 字符串)#\d:一个数字 +:前面的内容出现一次或者多次iflen(match)==2:a,b=map(int,match)#map函数将列表中的元素依次传递给int,转为int类型returna*bfromlangchain.agentsimportcreate_agent#创建工具对象tools=[get_weather,multiply]agent=create_agent(model=chat,tools=tools,system_prompt="""你是一个智能助手。 1. 当用户询问天气时,调用 get_weather 工具查询实时天气。 2. 当用户需要计算两个数的乘积时,调用 multiply 工具。 3. 如果问题不需要使用工具,就直接回答用户。 4. 请使用中文回答。""")test_inputs=["今天北京天气如何?","2x3等于几?","帮我修修电脑"]forquestionintest_inputs:print("用户:",question)response=agent.invoke({"messages":[{"role":"user","content":question}]})print("Agent:",response["messages"][-1].content)用户: 今天北京天气如何? Agent: 今天北京天气晴朗,温度为23.7℃,是个不错的天气呢! 用户: 2x3等于几? Agent: 2乘以3等于6。 用户: 帮我修修电脑 Agent: 我理解您需要帮助修理电脑,但我目前可以使用的工具只能查询天气和进行数学计算,无法直接帮助您修理电脑。 不过我可以为您提供一些常见的电脑故障排查建议: **常见问题及解决方法:** 1. **电脑无法开机** - 检查电源连接 - 尝试更换电源线 - 检查电源按钮是否正常 2. **电脑运行缓慢** - 关闭不必要的程序 - 清理磁盘空间 - 重启电脑 - 检查是否有病毒 3. **网络连接问题** - 重启路由器 - 检查网络线缆连接 - 更新网卡驱动 4. **蓝屏死机** - 记录错误代码 - 检查最近安装的软件或驱动 - 运行系统诊断 如果您能告诉我具体的电脑问题,我可以提供更有针对性的建议。如果问题比较复杂,建议您联系专业的电脑维修人员。