合肥做机床的公司网站wordpress修改底部版权信息
合肥做机床的公司网站,wordpress修改底部版权信息,灯饰外贸网站,做网站 推广作业
首先#xff0c;确保你的电脑上已经安装了必要的库#xff1a;
pip install requests python-dotenv tavily-python openai
python-dotenv 用于读取 .env 环境变量文件其他库是原代码中已用到的#xff08;网络请求、Tavily 搜索、OpenAI 兼容客户端#xff09;
1…作业首先确保你的电脑上已经安装了必要的库pip install requests python-dotenv tavily-python openaipython-dotenv用于读取.env环境变量文件其他库是原代码中已用到的网络请求、Tavily 搜索、OpenAI 兼容客户端1. 环境变量配置 将敏感的API密钥存储在.env文件中避免硬编码作用存储敏感的 API 密钥避免直接写在代码里安全最佳实践。在你的代码文件FirstAgentTest.py同一个文件夹下新建一个文件命名为.env注意文件名前有个点没有后缀。打开.env文件复制以下内容替换成你的阿里云 DashScope API 密钥# .env 文件内容 DASHSCOPE_API_KEY你的阿里云API密钥 DASHSCOPE_BASE_URLhttps://dashscope.aliyuncs.com/compatible-mode/v1 DASHSCOPE_MODELqwen-max-latest TAVILY_API_KEY你的Tavily API密钥 # 如果你有的话没有可以先留空但get_attraction会报错阿里云 API 密钥获取登录阿里云 DashScope 控制台创建Tavily API 密钥获取登录Tavily 官网申请步骤 2修改代码更新 API 配置读取.env 环境变量原代码中 API 配置是硬编码的写死的需要改成从.env文件读取。原代码需要替换的部分# --- 1. 配置LLM客户端 --- # 请根据您使用的服务将这里替换成对应的凭证和地址 API_KEY YOUR_API_KEY BASE_URL YOUR_BASE_URL MODEL_ID YOUR_MODEL_ID os.environ[TAVILY_API_KEY] YOUR_TAVILY_API_KEY修改后代码# 新增加载.env文件中的环境变量 from dotenv import load_dotenv load_dotenv() # 这行代码会自动读取同目录下的.env文件 # --- 1. 配置LLM客户端改用阿里云DashScope --- API_KEY os.environ.get(DASHSCOPE_API_KEY, ) # 从.env读取 BASE_URL os.environ.get(DASHSCOPE_BASE_URL, https://dashscope.aliyuncs.com/compatible-mode/v1) # 从.env读取默认值保底 MODEL_ID os.environ.get(DASHSCOPE_MODEL, qwen-max-latest) # 从.env读取默认值保底 os.environ[TAVILY_API_KEY] os.environ.get(TAVILY_API_KEY, ) # 从.env读取Tavily密钥from dotenv import load_dotenv和load_dotenv()这两行是新增的用于加载.env文件中的变量。os.environ.get(变量名, 默认值)安全地读取环境变量如果没读到就用默认值避免报错。在主程序入口部分将OpenAI API配置替换为DashScope API配置API_KEY os.environ.get(DASHSCOPE_API_KEY, ) BASE_URL os.environ.get(DASHSCOPE_BASE_URL, https://dashscope.aliyuncs.com/compatible-mode/v1) MODEL_ID os.environ.get(DASHSCOPE_MODEL, qwen-max-latest)作用域管理 确保变量和函数在需要使用的地方能够被正确访问正则表达式调试 识别和修复正则表达式中的错误错误处理 通过测试和调试找出并解决代码中的问题根据这个模式将代码适配到其他兼容OpenAI接口的LLM服务上修改后代码# -*- coding: utf-8 -*- import requests import re import os from dotenv import load_dotenv from tavily import TavilyClient from openai import OpenAI # 加载环境变量 load_dotenv() # --- 1. 配置系统提示词 --- AGENT_SYSTEM_PROMPT 你是一个智能旅行助手。你的任务是分析用户的请求并使用可用工具一步步地解决问题。 # 可用工具: - get_weather(city: str): 查询指定城市的实时天气。 - get_attraction(city: str, weather: str): 根据城市和天气搜索推荐的旅游景点。 # 行动格式: 你的回答必须严格遵循以下格式。首先是你的思考过程然后是你要执行的具体行动每次回复只输出一对Thought-Action Thought: [这里是你的思考过程和下一步计划] Action: [这里是你要调用的工具格式为 function_name(arg_namearg_value)] # 任务完成: 当你收集到足够的信息能够回答用户的最终问题时你必须在Action:字段后使用 finish(answer...) 来输出最终答案。 请开始吧 # --- 2. 实现工具函数 ---\n def get_weather(city: str) - str: 通过调用 wttr.in API 查询真实的天气信息。 # API端点我们请求JSON格式的数据 url fhttps://wttr.in/{city}?formatj1 try: # 发起网络请求 response requests.get(url) # 检查响应状态码是否为200 (成功) response.raise_for_status() # 解析返回的JSON数据 data response.json() # 提取当前天气状况 current_condition data[current_condition][0] weather_desc current_condition[weatherDesc][0][value] temp_c current_condition[temp_C] # 格式化成自然语言返回 return f{city}当前天气:{weather_desc}气温{temp_c}摄氏度 except requests.exceptions.RequestException as e: # 处理网络错误 return f错误:查询天气时遇到网络问题 - {e} except (KeyError, IndexError) as e: # 处理数据解析错误 return f错误:解析天气数据失败可能是城市名称无效 - {e} def get_attraction(city: str, weather: str) - str: 根据城市和天气使用Tavily Search API搜索并返回优化后的景点推荐。 # 1. 从环境变量中读取API密钥 api_key os.environ.get(TAVILY_API_KEY) if not api_key: return 错误:未配置TAVILY_API_KEY环境变量。 # 2. 初始化Tavily客户端 tavily TavilyClient(api_keyapi_key) # 3. 构造一个精确的查询 query f{city} 在{weather}天气下最值得去的旅游景点推荐及理由 try: # 4. 调用APIinclude_answerTrue会返回一个综合性的回答 response tavily.search(queryquery, search_depthbasic, include_answerTrue) # 5. Tavily返回的结果已经非常干净可以直接使用 # response[answer] 是一个基于所有搜索结果的总结性回答 if response.get(answer): return response[answer] # 如果没有综合性回答则格式化原始结果 formatted_results [] for result in response.get(results, []): formatted_results.append(f- {result[title]}: {result[content]}) if not formatted_results: return 抱歉没有找到相关的旅游景点推荐。 return 根据搜索为您找到以下信息:\n \n.join(formatted_results) except Exception as e: return f错误:执行Tavily搜索时出现问题 - {e} # --- 3. 创建LLM客户端类 ---\n class OpenAICompatibleClient: 一个用于调用任何兼容OpenAI接口的LLM服务的客户端。 def __init__(self, model: str, api_key: str, base_url: str): self.model model self.client OpenAI(api_keyapi_key, base_urlbase_url) def generate(self, prompt: str, system_prompt: str) - str: 调用LLM API来生成回应。 print(正在调用大语言模型...) try: messages [ {role: system, content: system_prompt}, {role: user, content: prompt} ] response self.client.chat.completions.create( modelself.model, messagesmessages, streamFalse ) answer response.choices[0].message.content print(大语言模型响应成功。) return answer except Exception as e: print(f调用LLM API时发生错误: {e}) return 错误:调用语言模型服务时出错。 # 将所有工具函数放入一个字典方便后续调用 available_tools { get_weather: get_weather, get_attraction: get_attraction, } # --- 4. 主程序入口 --- if __name__ __main__: print(脚本开始执行...) # --- 1. 配置LLM客户端 --- # 请根据您使用的服务将这里替换成对应的凭证和地址 API_KEY os.environ.get(DASHSCOPE_API_KEY, ) BASE_URL os.environ.get(DASHSCOPE_BASE_URL, https://dashscope.aliyuncs.com/compatible-mode/v1) MODEL_ID os.environ.get(DASHSCOPE_MODEL, qwen-max-latest) print(f读取到的DASHSCOPE_API_KEY: {API_KEY}) print(f使用的BASE_URL: {BASE_URL}) print(f使用的模型: {MODEL_ID}) # 检查API密钥 if not API_KEY: print(错误: 未配置DASHSCOPE_API_KEY环境变量。请在.env文件中添加DASHSCOPE_API_KEYyour_api_key) exit(1) llm OpenAICompatibleClient( modelMODEL_ID, api_keyAPI_KEY, base_urlBASE_URL ) # --- 2. 初始化 --- user_prompt 你好请帮我查询一下今天上海的天气然后根据天气推荐一个合适的旅游景点。 prompt_history [f用户请求: {user_prompt}] print(f用户输入: {user_prompt}\n *40) # --- 3. 运行主循环 --- for i in range(5): # 设置最大循环次数 print(f--- 循环 {i1} ---) # 3.1. 构建Prompt full_prompt \n.join(prompt_history) # 3.2. 调用LLM进行思考 llm_output llm.generate(full_prompt, system_promptAGENT_SYSTEM_PROMPT) # 模型可能会输出多余的Thought-Action需要截断 match re.search(r(Thought:.*?Action:.*?)(?\n\s*(?:Thought:|Action:|Observation:)|\Z), llm_output, re.DOTALL) if match: truncated match.group(1).strip() if truncated ! llm_output.strip(): llm_output truncated print(已截断多余的 Thought-Action 对) print(f模型输出:\n{llm_output}\n) prompt_history.append(llm_output) # 3.3. 解析并执行行动 action_match re.search(rAction: (.*), llm_output, re.DOTALL) if not action_match: print(解析错误:模型输出中未找到 Action。) break action_str action_match.group(1).strip() if action_str.startswith(finish): final_answer re.search(rfinish\(answer(.*)\), action_str).group(1) print(f任务完成最终答案: {final_answer}) break tool_name re.search(r(\w)\(, action_str).group(1) args_str re.search(r\((.*)\), action_str).group(1) kwargs dict(re.findall(r(\w)([^]*), args_str)) if tool_name in available_tools: observation available_tools[tool_name](**kwargs) else: observation f错误:未定义的工具 {tool_name} # 3.4. 记录观察结果 observation_str fObservation: {observation} print(f{observation_str}\n *40) prompt_history.append(observation_str)输出用户输入: 你好请帮我查询一下今天上海的天气然后根据天气推荐一个合适的旅游景点。--- 循环 1 ---正在调用大语言模型...大语言模型响应成功。模型输出:Thought: 用户想知道上海今天的天气并根据天气推荐一个旅游景点。我需要先查询上海的天气然后根据天气结果推荐景点。Action: get_weather(city上海)Observation: 上海当前天气:Sunny气温17摄氏度--- 循环 2 ---正在调用大语言模型...大语言模型响应成功。模型输出:Thought: 我已经获取到上海的天气信息当前是晴天气温17摄氏度。接下来我需要根据这个天气情况推荐一个适合的旅游景点。Action: get_attraction(city上海, weatherSunny)Observation: 根据搜索为您找到以下信息:- 上海景點推薦》10大中國上海旅遊景點必去介紹你 - KKday: 跳至主要內容 搜尋 搜尋 更多上海必玩推薦給你文章對你有幫助嗎 * # 中國旅遊# 上海攻略 上一頁上一篇東京住宿推薦【2025】東京住宿推薦住哪裡東京飯店/平價住宿費用一次看 下一篇桃園機場住宿》2025機場旅館/附近飯店推薦/紅眼班機免煩惱下一篇 #### KKday 編輯群 KKday編輯群是一群喜歡到處玩的旅遊達人組合從台灣、日本、韓國、泰國、越南、美國、歐洲、澳洲等世界各地都可以看見我們的蹤影我們擅長挖掘人氣美食、歷史古蹟、文化體驗、絕美拍照點、自駕路線等各種旅遊玩法憑著多年的自由行經驗幫各位KKday部落格讀者整理了非常豐富的旅遊資訊當然還有各種獨家行程推薦以及真實開箱心得現在就跟著KKday一起玩探索全世界獨特的旅遊體驗吧 最新文章 #### JR PASS常見問題》日本鐵路周遊券怎麼用/怎麼買最划算KKday教學 #### 2025嘉義景點推薦》嘉義新景點觀光工廠/親子一日遊/市區景點30選 #### 九州日本料理終極指南精選福岡、熊本等10間必吃餐廳推薦 (含Tabelog評價與訂位) #### 2026台灣跨年懶人包》演唱會卡司/煙火/活動/晚會/跨年行程推薦 #### 巴黎迪士尼2025攻略》法國迪士尼最新園區/門票交通/快速通關設施 #### 從伊勢志摩到四日市光與神話交錯的奇幻之旅 #### 北投溫泉推薦哪家2025北投平價泡湯、旅館湯屋、飯店大眾池整理 #### 印尼行程怎麼排2025峇里島好玩、好拍、又療癒的旅遊指南 搜尋你的體驗 ### 本文目錄 * 上海景點推薦上海豫園 * 上海景點推薦上海南京路步行街 * 上海景點推薦上海外灘 * 上海景點推薦法租界武康路/衡山路 * 上海景點推薦上海新天地 * 上海景點推薦田子坊 * 上海景點推薦靜安寺 * 上海旅遊景點上海迪士尼樂園 * 上海景點推薦必去近郊景點 #### 熱門商品推薦 中國上海 上海影視樂園門票 【中國】上海都市觀光旅遊巴士多條路線提供導覽地圖和耳機 【上海出發】新幹線蘇州一日遊中國四大名園之一寒山寺含午餐日/中/英文導覽 中國上海上海影視樂園朱家角古鎮景區一日遊【純玩明星基地古鎮美食外灘自由活動】 【上海出發】新幹線杭州一日遊世界遺產西湖遊覽龍井茶園遊覽日/中/英導遊含午餐 【中國】上海杜莎夫人蠟像館門票 Madame Tussauds可加購漫威超級英雄專區 上海龍之夢大酒店 上海金茂大廈88層觀光廳門票【需提前一天購票】 【上海】豫園門票成人票-9點 12點30 兩個時段入園 ❮❯ 其他人也看了 #### 2025上海F1》門票開賣時間與價格/賽程賽事分析/附近住宿 #### 2024中國演唱會攻略21場大咖明星演場會等你來聽 #### 上海迪士尼樂園自由行》門票設施/住宿酒店/動物方程式新園區 #### 【中國】上海自由行攻略五天四夜行程規劃、必去景點推薦一次玩遍東方明珠塔、外灘夜景、豫園商圈、朱家角 #### 奇美特展》奇美博物館埃及之王法老/KKday門票購票/展覽介紹 #### 2025溪頭景點推薦》溪頭怎麼玩溪頭森林遊樂園/秘境景點一日遊攻略 #### 九州自由行攻略》九州自駕怎麼安排氣候/航班/交通/景點一次了解 #### 箱根溫泉飯店推薦》15間私人風呂湯屋/豪華溫泉飯店/私藏景點大公開- 上海市10 大景点玩乐 - Tripadvisor: 上海市的热门景点. 了解推荐的选择方式 · 1. 上海外滩 · 4.6. (19,621) · 2. 南外滩轻纺面料市场 · 4.9. (2,643) · 3. 豫园 · 4.3. (10,674) · 4. 朱家角古镇 · 4.2. (1,879).- 【上海景點】2025 上海不得不去的10 大打卡地 - Trip.com: # 【上海景點】2025 上海不得不去的 10 大打卡地. 2025上海景點上海既有繁華熱鬧的步行街又有幽靜文藝的原法租界更有現代氣息滿滿的東方明珠可以說上海景點囊括了大部分標配的城市旅行tag。以下就為大家精選10個處必到的上海景點推介方便大家計劃一趟上海之遊啦. | ** 上海旅遊必買 ** ** 上海景點** **● 上海海昌海洋公園限時 55 折起** **● 上海迪士尼門票現折$404** ** 上海特色體驗** **● 上海奉賢吳房村直升機飛行體驗** **● 當地人帶路逛市場自製小籠包** **大陸網卡推薦** **● 陸港澳通用eSIM 4G 高速流量** **● 大陸 eSIM 網路吃到飽$69 up** |. ## 上海景點大陸eSIM網卡推薦. ## 上海景點01十裏洋場夜上海 — 外灘. 外灘是上海景點中必到的NO.1它是上海的地標也是上海的名片。這裏有文藝氣息滿滿的老碼頭也有歷史悠久的和平飯店、華爾道夫有燈光璀璨的外灘燈光秀也有一覽黃浦江風韻的黃浦江遊輪。這裏白天繁華盡顯夜裏流光溢彩。推介大家白天來這裏看民國建築晚上可以看外灘燈光。. 想要在外灘邊體驗一場沉浸式文化餐飲盛宴全新開幕的「Taste of China · 味」以熊貓主廚“程飽飽”的故事爲線索通過科技與美食暢遊中國七大風味。. 1. 漢服妝造含打卡場景專業妝造漢服/旗袍/民族服飾拍照絕對值回票價. 2. 文化表演有真人古典舞和武術表演觸摸桌面還可與全景投影互動邊喫邊看超震撼. 地址黃浦區河南中路270號B1近外灘/南京東路/東方明珠步行5分鐘可達用餐免費停車. 预订**官网**/**Trip App** 選擇日期、座次、時段、套餐(是否含妝造)預定成功. ## 上海景點02市中心的蘇式園林 — 豫園. 豫園在城隍廟附近交通非常方便是上海景點中5大園林裏最靠近市中心的一個。這裏原是明代官員的官邸佈局清雅青瓦白牆精雕細琢心思巧妙。非常值得一看。徜徉在豫園可以走走九曲回廊也可以去看看橋下錦鯉一步一景一景一折不得不讓人佩服蘇式園林的造景功夫隨手一拍都是驚豔。. 【時間】08:30-17:30. ## 上海景點03看最美秋日 —法租界. 原法租界也許有著上海景點裏最浪漫的秋天。秋日裏在法租界漫步腳下金黃的梧桐樹葉咯吱作響陽光蔥郁美妙再在路邊咖啡館來一杯中意的手沖這是上海的秋日情懷。法租界這邊有“秋葉不掃”活動環衛工人會將變質的落葉手工清除留下片片梧桐為法租界的浪漫保駕護航。法租界也有許多設計師品牌店和有趣的畫廊都很值得一逛。. ## 上海景點04夢裏的牡丹亭幻境 — 朱家角古鎮. 說到朱家角古鎮一定是上海景點中不可或缺的一片。遠離都市的喧囂這個坐落於市郊的小鎮很好的保留了明清風情。雖然不在鬧市卻交通方便地鐵直達。這邊可以看實景《牡丹亭》演員在水榭亭臺中唱著良辰美景奈何天好有上海風韻。除此之外到了古鎮也可嘗嘗本地小吃及土菜味道不錯價格實在是比較推介的上海景點之一。. ## 上海景點05英倫風韻 — 泰晤士小鎮. 泰晤士小鎮是上海新興小鎮中最推介的一個。這裏幾乎完整地複製了英倫風情。大片的草坪舒朗的綠化英式尖頂建築增添了別樣的情懷。整個小鎮算是上海景點中做得比較用心的電話亭和保安服裝都很英倫風。遊人不多工作日更加清淨風景和建築都可圈可點非常適合拍照也是上海有名的婚紗拍攝外景地。. ## 上海景點06全家總動員 — 迪士尼樂園. 既然來到上海就不得不提新建的迪士尼樂園啦。雖說開門營業不久但也是上海景點中的一匹黑馬成了很多人到上海的理由。這裏是迪士尼最新傾力打造的樂園除了保留其他各地的景點項目還新增了許多遊玩項目強烈建議大家試試飛躍地平線絕對不會失望。另外迪士尼小鎮上有眾多美食任君自選完全可以不必在樂園裏吃套餐. 【時間】08:30-21:30. ## 上海景點07文藝氣息滿滿 — 田子坊. 說到上海景點很多人都會推介文藝青年必去的田子坊這邊無論白天晚上幾乎都人滿為患說是水泄不通都不為過。這裏有很多中式設計師店也有很多地道的各國餐廳人最多的當然就是各類上海小吃店和創意滿滿的文創類店鋪。設計師店鋪一般都不便宜但是紀念品和文創類的價格還是實惠的。來一點上海傳統小吃為親朋挑選一些伴手禮在有趣的店鋪門前拍照打卡是不錯的遊覽方式。. ## 上海景點08人少景美— 武康路. 從武康路開始到安福路結束這條短短的馬路彙聚了上海景點眾多的網紅店鋪。這裏不但有正宗的西餐廳、美式漢堡店、意式霜淇淋店、輕食果汁店還有很多設計師店鋪和展示廳等待著被挖掘。當然打卡店鋪只是武康路魅力的一部分這裏更是街拍的好地方。雖然名聲在外但實際上工作日人並不多一樣可以拍出法式風情的大片逛累了在咖啡店坐坐也是愜意的一個下午。. ## 上海景點09高空覽風華 — 東方明珠電視塔. 說到上海景點怎能忘記東方明珠電視塔。這座坐落於陸家嘴的電視塔是和北京天安門、廣州小蠻腰、香港維多利亞港一樣著名的地標性建築。可登塔參觀同時頂層亦有旋轉餐廳可以在享受美食的同時盡覽上海風華。當然因為太過著名所以這邊確實每天人滿為患記得一定要提前訂票。如果在網路上訂各類搭配套餐的話會有優惠。. 【時間】8:00-22:00. ## 上海景點10標誌性步行街 — 南京路步行街. 這條步行街是很多人對上海景點的最初印象。早在民國時期開始永安百貨和第一百貨就在這條步行街紮了根時至今日它們仍服務著市民。這裏彙聚了大部分上海的老牌百貨公司也是很多老上海的青春記憶。目前這邊的步行街除了百貨公司外還有些紀念品商店和特色小吃離外灘不遠值得一逛。. ## 上海景點上海住宿推薦. ## 上海景點上海當地體驗. ## 上海景點延伸閱讀. ## 上海景點常見問題. ### 上海景點東方明珠塔可以現場購票嗎. 可以但還是建議在 Trip.com 提前訂門票避免遇到假日人太多。. ### 上海的黃浦江遊船有幾種路線. 常見有短程 30 分鐘與夜遊 60 分鐘兩種建議選夜遊欣賞燈光美景。. ### 豫園有導覽服務嗎. ## 熱門文章. ### 【上海美食】來上海必吃的人氣美食與餐廳. ### 上海街遊618上海街 買地道文青工藝雜貨地道懷舊之旅. Trip.com 為 Trip.com Group Limited 的旗下品牌是全球領先的旅遊服務供應商之一. Copyright ©2025 Trip.com Travel Singapore Pte. Ltd. 網站營運者Trip.com Travel Singapore Pte. Ltd. 由Ctrip.com (Hong Kong) Limited持有香港旅行代理商牌照編號 35236.- 上海景點12大自由行上海好去處推薦上海樂高樂園/迪士尼/静安寺: # 上海景點12大自由行上海好去處推薦上海樂高樂園/迪士尼/静安寺. 上海景點想在上海自由行四天三夜找出最精彩的上海旅遊景點不論你是初次造訪還是想重遊經典本文精選上海好去處與上海必去景點帶你走訪外灘、豫園、法租界、上海迪士尼等上海景點的魅力。搭配古鎮旅行與博物館穿插參觀讓你的上海景點推薦兼具文化深度與遊玩樂趣. Senior Content Executive, Features/Eely Li). ## 上海景點上海迪士尼樂園 - 全球最大迪士尼城堡. 作為中國規模最大、最具代表性的主題樂園之一上海迪士尼樂園結合了奇幻童話、刺激遊樂、美食購物與現場表演等多重體驗。遊客可沉浸全球首座主題園區「優獸大都會」、全球最大的迪士尼城堡、加勒比風情濃厚的寶藏灣、探險島、明日世界與玩具總動員主題園區等。樂園裡還設有多種特色餐飲、商店與季節慶典全年吸引大量親子與年輕族群前往。. 產品推介 上海迪士尼樂園 一日票 ( HKD $490.00 ). ## 上海景點法租界 - 漫步於「東方巴黎」. 上海法租界曾是歷時近百年的國際租界如今已成為融合歷史文化和現代生活氛圍的街區。此區域以法式花園洋房、石庫門建築及法式梧桐綠蔭大道著稱因而被喚作「東方巴黎」。遊客可沿著武康路、衡山路、思南路、淮海中路等典雅街道漫步在cafe與小眾精品店中小憩也可造訪老洋房中改建的藝廊與餐廳。. ## 上海景點田子坊 - 文青最愛之地. 田子坊位於上海法租界核心地帶是一處以石庫門弄堂為基礎改造而成的創意文化街區。保存了多種建築風格包括新文藝復興、巴洛克式、英國城堡式、傳統磚木結構等且石庫門建築風貌更是獨具特色原汁原味地呈現了老上海的風情。田子坊聚集了超過 200 家藝術工作室、畫廊、手作店、咖啡廳、酒吧與精品小店保留了濃厚的生活氣息與藝術氛圍是文青、設計師與創意愛好者的最愛之地。. 交通搭乘地鐵 9 號線至「打浦橋站Dapuqiao」從 1 號出口出站後步行約 5–15 分鐘即可到達田子坊. ## 上海景點上海樂高樂園 - 全新開幕. 2025 年7月才開幕的上海樂高樂園擁有八大主題園區、互動遊樂設施、高塔觀景台與主題酒店成為親子旅遊新地標。園內 Miniland 以 8500 萬顆樂高磚重現全球與中國知名地標如北京天壇及上海外灘另有迷你火車、龍型雲霄飛車等特色設施是值得玩上一整天的主題樂園。. 交通地鐵1號線或5號線到金山衛站再轉乘樂高樂園專線巴士或坐高鐵直達金山北站出站後步行即可到達. 產品推介 上海樂高樂園 成人1日門票 ( HKD $348.79 ). ## 上海景點上海影視樂園 - 電影迷必訪. 上海影視樂園車墩影視基地座落於上海市松江區是由上海電影及上海電影製片廠興建的專業影視拍攝基地。樂園規畫重現老上海風貌包括南京路街景、石庫門裡弄、馬勒別墅等多種具有時代感的背景兼具拍攝與觀光功能。園內氛圍如同時光倒流走進仿古南京路搭乘復古有軌電車漫步於石庫門小巷品味老洋房風情是懷舊與電影迷的必訪之地。. 交通地鐵1號線可至蓮花路站轉乘蓮石、蓮金或上石線等公交至「車墩站」. ## 上海景點静安寺 - 上海最古老的佛寺之一. 静安寺是上海最古老的佛寺之一建築融合傳統與現代風格仿明代以前的斗拱架構、金碧輝煌的配色在都市中尤顯靜謐與古雅。建築布局採「前寺後塔」格局包含天王殿、大雄寶殿與三聖殿等主殿還收藏有八大山人名畫與文征明《琵琶行》手卷等珍貴文物。寺內淨心的環境讓遊客能在都市喧囂之中找到一處作短暫休憩與心靈沉澱之地。. 交通方式地鐵 2、7、14號線至「靜安寺站」出站即可到達. ## 上海景點上海豫園 - 欣賞古典園林景觀. 豫園位於上海老城廂的東北部是一座歷史悠久、精巧典雅的江南古典園林。園林曾歷經時代變遷與戰亂經多次修復後再次對外開放。佔地約 2 萬平方米園內建築點綴著亭台樓閣、假山池塘與綿延曲徑是江南園林的精緻代表。園中還有建立於古亭基礎上的湖心亭茶樓歷經數百年修繕目前已重新以傳統風貌開放供遊客品茶賞景。. 交通地鐵10號線或14號線至「豫園站」下車從 1 號出口步行數分鐘即達. ## 上海景點上海外灘 - 欣賞迷人夜景. 外灘位於上海市黃浦區是上海最具代表性的觀光景點之一。外灘一帶曾是殖民時期匯集英、美、法、德、日等多國銀行與洋行的金融中心被譽為「萬國建築博覽群」聚集風格迥異的建築涵蓋羅馬式、巴洛克、文藝復興、新古典主義等。外灘夜晚景色更是不可錯過可漫步於江邊長廊欣賞黃浦江兩岸的夜景。. ## 上海景點泰晤士小鎮Thames Town - 英倫風情的中國「小鎮」. 泰晤士小鎮位於上海松江新城距離上海市中心約 30 公里地鐵巴士車程約1小時15分鐘整座小鎮模仿典型英國市鎮的建築風格有鋪有鵝卵石的街道、維多利亞式聯排住宅、英式小店甚至設置了仿真紅色電話亭與克里斯特教堂的複製品營造如同走入英國郊區的場景。泰晤士小鎮一開始興建是希望作為住宅社區但由於房價過高且缺乏實際社區運作目前居民稀少現在則成為了觀光及打卡景點也吸引了不少cafe與餐廳進駐。. ## 上海景點朱家角古鎮 - 江南水韻風情. 朱家角古鎮是上海保存最完整的江南古鎮之一有「上海的威尼斯」與「江南明珠」之稱。古鎮擁有約 1700 年歷史始於三國時期至今仍完整保存濃厚的古鎮風貌——水道縱橫並存營造出老上海的市井情調。其間數座古石橋跨越河道如放生橋以及古典的民居、園林、廟宇藏於巷弄之中可以搭乘遊船劃過沿岸古建或漫步於鵝卵石街道品嚐地道小吃如粽子、醬油蝦、糖藕等特色美食。. 交通地鐵17號線至「朱家角站」出站後步行約 10–15 分鐘即可抵達古鎮入口. ## 上海景點比斯特上海購物村Bicester Village Shanghai- 匯集各大精品品牌. 比斯特上海購物村位於浦東新區緊鄰上海迪士尼度假區。購物村匯集超過 200 家精品品牌包括 Gucci、Burberry、Armani、Nike、Adidas 等高端與運動品牌更經常提供購物折扣優惠。另外也有湖畔咖啡館、餐廳和景觀休憩區等是集 購物、休閒、觀光於一身的複合型景點。. 交通地鐵11號線至「迪士尼站」下車轉乘迪士尼度假區內的接駁公車抵達購物村入口. ## 上海景點上海博物館. 上海博物館是中國最具代表性的藝術與歷史類博物館之一館中藏品超過12萬件涵蓋青銅器、陶瓷、書畫、玉器、家具、錢幣、印章、少數民族藝術等十二大類設有黃金陳列的常設展覽與輪換特展讓文物展出更具活力與趣味。. 交通地鐵1、2、8號線皆可抵達人民廣場站出站即是博物館. 產品推介 上海博物館 金字塔之巔古埃及文明大展票 ( HKD $350.00 ). # 旅遊攻略. # 旅遊攻略# 上海自由行. # 上海自由行# 上海. # 上海# 旅遊景點. # 旅遊景點. BEAUTY BEAUTY PANEL FASHION LIFESTYLE COSMOBODY. Terms of Conditions Advertising Advertising Spec.- 【上海㬌點】上海自由行必去五大熱門景點推薦 - Lanson Place: 我们精心为您挑选了来上海绝对不能错过的五大热门景点豫园、法租界、泰晤士小镇、南京路和田子坊。有没有更加心动了呢--- 循环 3 ---正在调用大语言模型...大语言模型响应成功。模型输出:Thought: 根据查询结果上海今天的天气非常适合户外活动。推荐的景点包括豫园、外滩、法租界、田子坊等。我将根据这些信息为用户推荐一个适合晴天游览的景点。Action: finish(answer今天上海的天气是晴天气温17摄氏度非常适合户外活动。推荐您前往豫园这是一个具有浓厚历史文化氛围的江南古典园林您可以欣赏到精美的园林设计和古建筑感受独特的文化气息。)任务完成最终答案: 今天上海的天气是晴天气温17摄氏度非常适合户外活动。推荐您前往豫园这是一个具有浓厚历史文化氛围的江南古典园林您可以欣赏到精美的园林设计和古建筑感受独特的文化气息。习题请分析以下四个case中的主体是否属于智能体如果是那么属于哪种类型的智能体可以从多个分类维度进行分析并说明理由case A一台符合冯·诺依曼结构的超级计算机拥有高达每秒 2EFlop 的峰值算力case B特斯拉自动驾驶系统在高速公路上行驶时突然检测到前方有障碍物需要在毫秒级做出刹车或变道决策case CAlphaGo在与人类棋手对弈时需要评估当前局面并规划未来数十步的最优策略case DChatGPT 扮演的智能客服在处理用户投诉时需要查询订单信息、分析问题原因、提供解决方案并安抚用户情绪答根据智能体agent的定义智能体通常指能够感知环境、做出决策并采取行动以实现目标的实体。智能体可以从多个维度进行分类包括自主性Autonomy、反应性Reactivity、主动性Pro-activeness、社交能力Social Ability、学习能力Learning、理性Rationality和移动性Mobility等。以下针对每个 case 进行分析Case A一台符合冯·诺依曼结构的超级计算机拥有高达每秒 2EFlop 的峰值算力是否属于智能体否。理由该超级计算机虽然拥有强大的计算能力但它本身只是一个执行程序的工具缺乏自主决策和目标导向行为。它需要人类预先编写程序并输入指令才能运行无法主动感知环境或自主采取行动。因此它不符合智能体的核心特征。分类维度分析如果假设为智能体但实际不是自主性低完全依赖人类操作。反应性可能高如果编程为实时响应但这不是内在能力。主动性低不会主动设定或追求目标。社交能力低无法与其他实体交互。学习能力低除非运行特定学习算法但计算机本身不具备学习能力。理性低决策完全取决于程序无自主理性。移动性低物理上固定。Case B特斯拉自动驾驶系统在高速公路上行驶时突然检测到前方有障碍物需要在毫秒级做出刹车或变道决策是否属于智能体是。类型自主智能体Autonomous Agent和反应式智能体Reactive Agent。理由该系统能够通过传感器感知环境如检测障碍物基于预定义规则和机器学习模型做出实时决策刹车或变道并控制车辆行动以实现安全驾驶目标。它具有高度的自主性和反应性能在没有人类干预下操作。分类维度分析自主性高能够独立处理驾驶任务。反应性高能实时响应环境变化如障碍物。主动性中主要反应于环境但可能有一些主动行为如变道超车。社交能力中可能通过车联网V2V与其他车辆通信但交互有限。学习能力高通常使用机器学习模型从数据中改进驾驶策略。理性高决策以安全性和效率为目标使用优化算法。移动性高控制车辆在物理世界中移动。Case CAlphaGo在与人类棋手对弈时需要评估当前局面并规划未来数十步的最优策略是否属于智能体是。类型理性智能体Rational Agent和规划智能体Deliberative Agent。理由AlphaGo能够感知游戏状态棋盘局面使用蒙特卡洛树搜索和神经网络评估当前局面规划未来步骤并采取行动落子以最大化获胜概率。它具有高度的自主性、理性和规划能力。分类维度分析自主性高能自主下棋无需人类干预。反应性中响应对手移动但规划是深思熟虑的。主动性高主动规划长期策略以达成目标。社交能力低仅在游戏规则下与对手交互无复杂社交。学习能力高通过强化学习和自我对弈不断改进。理性高决策基于概率和优化旨在获胜。移动性低仅在虚拟环境中操作无物理移动。Case DChatGPT 扮演的智能客服在处理用户投诉时需要查询订单信息、分析问题原因、提供解决方案并安抚用户情绪是否属于智能体是。类型社交智能体Social Agent和对话智能体Conversational Agent。理由ChatGPT能够感知用户输入文本查询后端数据库分析问题原因生成自然语言响应并提供解决方案和情绪安抚。它具有社交能力和学习能力能适应不同用户语境。分类维度分析自主性中能自动生成响应但可能依赖外部系统查询数据。反应性高能实时响应用户查询。主动性中主要反应于用户但可能主动提供建议或信息。社交能力高能理解用户情绪、上下文并进行自然交互。学习能力高基于大规模预训练数据并能从交互中微调。理性中旨在提供有用响应但可能不总是最优受训练数据限制。移动性低是软件实体无物理移动。总结Case A 不属于智能体因为它缺乏自主性和目标导向行为。Case B、C 和 D 都属于智能体但类型不同B 侧重于自主和反应式C 侧重于理性和规划D 侧重于社交和对话。这些分类维度帮助理解智能体的多样性和应用场景。2. 假设你需要为一个智能健身教练设计任务环境。这个智能体能够请使用 PEAS 模型完整描述这个智能体的任务环境并分析该环境具有哪些特性如部分可观察、随机性、动态性等。通过可穿戴设备监测用户的心率、运动强度等生理数据根据用户的健身目标减脂/增肌/提升耐力动态调整训练计划在用户运动过程中提供实时语音指导和动作纠正评估训练效果并给出饮食建议答根据 PEAS 模型我们可以对“智能健身教练”智能体的任务环境进行系统描述。PEAS 模型包括四个要素性能指标Performance、环境Environment、执行器Actuators和传感器Sensors。以下将详细描述每个要素并分析该任务环境的特性如可观察性、确定性、 episodic vs. sequential、静态 vs. 动态、离散 vs. 连续、单一智能体 vs. 多智能体、已知 vs. 未知。PEAS 模型描述PPerformance 指标性能指标用于衡量智能体是否成功实现目标。对于智能健身教练主要指标包括健康改善程度用户体重、体脂率、肌肉量、耐力水平等生理指标的变化是否接近目标减脂、增肌或提升耐力。用户满意度用户对训练计划、实时指导和饮食建议的主观反馈如评分、投诉率或持续使用率。训练安全性避免用户受伤如心率是否始终在安全范围内、动作纠正是否及时有效。训练效率达到健身目标所需的时间以及训练计划的个性化程度和适应性。用户依从性用户坚持训练计划的程度如训练完成率、中途放弃率。EEnvironment环境是智能体操作的外部世界包括物理和虚拟要素物理环境用户进行运动的场所如健身房、家庭、户外公园等可能包括温度、湿度和设备可用性。用户身体状态实时生理数据心率、血氧、运动强度、疲劳程度、动作形式如姿势正确性、心理状态如动机水平。用户健身目标明确的目标类型减脂、增肌、提升耐力和具体指标如目标体重、目标肌肉量。训练设备可穿戴设备如智能手表、心率带、健身器材如跑步机、哑铃、移动设备如手机、平板。时间因素训练时长、休息间隔、训练频率以及长期进度如每周、每月评估。AActuators 执行器执行器是智能体采取行动的手段语音输出通过扬声器或耳机提供实时语音指导、鼓励和动作纠正。显示界面在手机应用、智能手表或电视屏幕上显示训练计划、进度图表、饮食建议。训练计划调整动态修改训练内容如强度、时长、动作类型、休息时间或训练顺序。通知和提醒发送训练提醒、饮食建议、水分补充提醒或恢复建议。数据记录和更新将用户数据存储到数据库更新训练历史和个人档案。SSensors 传感器传感器是智能体感知环境的方式可穿戴设备传感器监测心率、步数、卡路里消耗、运动轨迹、睡眠质量等。运动捕捉传感器使用摄像头、惯性测量单元IMU或深度传感器捕捉用户动作形式用于实时纠正。用户输入通过应用界面、语音或按钮输入目标、偏好、反馈如疼痛报告、满意度。环境传感器监测环境温度、湿度、海拔可能影响训练建议。数据库查询访问用户历史数据、饮食记录、医疗信息如有权限以个性化建议。任务环境特性分析基于以上 PEAS 描述我们可以分析智能健身教练任务环境的特性可观察性Observability部分可观察Partially Observable智能体通过传感器获取数据但无法完全了解用户的所有状态。例如它只能间接推断疲劳程度通过心率变化但无法直接感知肌肉酸痛或心理压力动作纠正可能受摄像头视角限制。用户也可能不报告所有信息如饮食偏差导致环境状态不完全可见。确定性Deterministic随机性Stochastic环境不是完全确定的。用户对训练的反应因个体差异、日常状态如睡眠质量、情绪而随机变化。例如同样的训练计划可能导致不同效果或用户可能意外中断训练。智能体需要处理不确定性通过概率模型或自适应学习来决策。Episodic vs. Sequential顺序性Sequential智能体的决策影响未来状态。训练计划是长期的每次训练的效果累积影响整体健身进度。例如调整训练强度会影响用户后续的疲劳度和进步速度。决策需要基于历史数据和长期规划而不是独立事件。静态 vs. 动态动态性Dynamic环境在智能体决策过程中持续变化。用户生理数据如心率实时波动外部因素如环境温度、设备故障也可能改变。智能体必须实时监测和响应不能假设环境静止。离散 vs. 连续连续Continuous状态和动作空间是连续的。例如心率、运动强度和时间都是连续值训练调整如增加强度可以细微变化。智能体需要在连续空间中操作这增加了决策复杂度。单一智能体 vs. 多智能体单一智能体Single-agent通常智能健身教练作为单一智能体与用户交互用户被视为环境的一部分。但如果考虑社交功能如多人训练模式或与其他系统如营养师应用交互可能涉及多智能体但核心设计是单一智能体。已知 vs. 未知已知环境Known智能体对环境模型有较好了解基于预定义的健身知识、生理模型和机器学习算法。但用户个体差异使环境部分未知智能体需要通过持续学习如强化学习来适应新用户。目标导向Goal-oriented是的智能体有明确目标即帮助用户达到特定健身目标如减脂、增肌。性能指标直接与这些目标相关智能体的行动旨在最大化目标达成概率。总结智能健身教练的任务环境是一个部分可观察、随机、顺序、动态、连续、单一智能体、已知且目标导向的环境。这些特性意味着智能体需要具备实时感知、自适应决策和长期规划能力例如使用机器学习模型如强化学习来个性化训练计划并处理不确定性和动态变化。设计时应注重传感器的可靠性、执行器的多样性以及性能指标的综合评估以确保智能体有效且安全地辅助用户。3. 某电商公司正在考虑两种方案来处理售后退款申请方案 AWorkflow设计一套固定流程例如A.1 对于一般商品且在 7 天之内金额 100RMB自动通过100-500RMB由客服审核500RMB需主管审批而特殊商品如定制品一律拒绝退款A.2 对于超过 7 天的商品无论金额只能由客服审核或主管审批方案 BAgent搭建一个智能体系统让它理解退款政策、分析用户历史行为、评估商品状况并自主决策是否批准退款请分析这两种方案各自的优缺点是什么在什么情况下Workflow更合适什么情况下Agent更有优势如果你是该电商公司的负责人你更倾向于采用哪种方案是否存在一个方案 C能够结合两种方案达到扬长避短的效果答针对电商公司处理售后退款申请的两种方案将从优缺点、适用场景、个人倾向以及混合方案设计四个方面进行分析。方案AWorkflow基于固定规则流程方案BAgent基于智能体系统自主决策。以下分析基于常见电商业务场景假设公司规模、资源和技术能力等因素可变。1. 方案AWorkflow和方案BAgent的优缺点分析方案AWorkflow的优缺点优点高效率和低成本规则简单明确对于大多数标准案例如金额小、时间短可以自动化处理减少人工干预处理速度快且开发和维护成本较低。一致性和可预测性所有申请按相同规则处理减少了主观偏见确保公平性同时公司能准确预测退款率和成本便于财务规划。透明和易解释决策过程基于明文规则员工和客户都容易理解争议较少也符合监管要求如消费者权益保护。易于实施和监控规则引擎容易集成到现有系统中运维简单错误排查直接。缺点僵化和缺乏灵活性无法处理复杂或异常情况如用户历史信誉好但金额超标可能导致不公平决策规则更新需要手动修改响应变化慢。用户体验可能较差对于边缘案例如商品轻微损坏但用户长期忠诚规则可能无法考虑个性化因素导致客户满意度下降。人力依赖对于需要审核的案例如金额100-500RMB仍需客服或主管介入在申请量大时可能增加人力成本和处理延迟。覆盖范围有限规则可能无法涵盖所有场景如新型欺诈行为需要不断扩展规则库导致系统复杂化。方案BAgent的优缺点优点智能和灵活性能综合分析多维度数据如用户历史行为、商品状况、文本描述做出更合理、个性化的决策适应复杂场景。高自动化程度可自主处理大多数申请包括复杂案例减少人工审核提高整体效率。持续学习和适应性通过机器学习模型能从历史数据中学习优化决策策略自动适应政策变化或新趋势。增强用户体验个性化处理能提高客户满意度和忠诚度例如对高价值用户给予更多宽容。缺点高复杂性和成本开发和训练智能体需要大量数据、高级AI技术和专业团队初始投资和维护成本高。黑盒问题和可靠性风险决策过程可能不透明难以解释原因容易引发争议或法律问题模型可能受数据偏差影响产生不公平决策。实施和监控难度大需要持续监控模型性能、更新数据和重新训练以确保准确性和公平性运维负担较重。依赖数据质量如果数据不完整或有噪声决策质量会下降且需要处理隐私和安全问题。2. Workflow和Agent的适用场景Workflow更合适的情况公司规模小或预算有限初创企业或中小型电商资源有限无法承担智能体系统的开发和维护成本。规则简单且稳定退款政策明确、变化少且大多数申请属于简单类型如低金额、标准商品规则能覆盖90%以上的案例。处理量大规模但标准化申请量很大但绝大多数是重复性案例Workflow能实现批量自动化处理效率高。监管严格要求一致性行业监管严格需要完全透明和可审计的决策过程如金融或医疗相关电商。Agent更有优势的情况公司规模大或技术资源丰富大型电商平台如亚马逊、天猫拥有大量数据、AI技术团队和预算追求创新和客户体验。场景复杂多变退款申请涉及多种因素如用户信誉、商品损坏程度、季节性促销需要个性化决策政策经常调整需要系统快速适应。高价值客户或商品公司注重客户忠诚度和口碑愿意通过智能决策提供优质服务如对高价值用户灵活处理。数据驱动文化公司已积累大量历史数据并能用于模型训练和优化智能体能发挥学习能力。3. 作为电商公司负责人的倾向如果我是该公司负责人我的决策会基于公司当前阶段、资源和发展战略。在大多数情况下我更倾向于采用一种混合方案方案C以平衡效率、成本和灵活性。但具体倾向如下如果公司是中小型或刚起步我会选择方案AWorkflow因为它成本低、实施快能快速处理基本退款申请避免复杂技术风险。同时可以预留人工审核通道用于异常案例。如果公司是大型或成熟企业我会选择方案BAgent因为长期来看它能通过自动化和个性化提高运营效率和客户满意度尽管初始投入高但能减少人工成本并应对复杂场景。然而纯粹方案A或B都有局限性因此在实际中我更推荐方案C结合两者这能扬长避短下面详细描述。4. 方案C结合Workflow和Agent的混合方案方案C旨在利用Workflow的规则高效性处理简单案例同时使用Agent的智能处理复杂案例从而实现成本、效率和灵活性的平衡。具体设计如下分层处理流程第一层Workflow规则引擎所有退款申请先通过固定规则过滤。例如对于金额100RMB、7天内的一般商品自动批准对于特殊商品如定制品或超过7天的申请直接拒绝或转人工。这能处理80-90%的简单案例。第二层Agent智能决策对于规则无法明确决策的案例如金额在100-500RMB之间但用户历史良好由智能体系统分析。智能体考虑用户历史行为如退款频率、购买记录、商品状况如上传的图片、文本描述如用户理由等做出批准或拒绝建议。第三层人工审核对于智能体也无法高置信度决策的案例如矛盾数据或高风险申请转交客服或主管审核。同时人工审核的反馈可用于训练智能体持续改进。技术支持使用规则引擎如Drools实现Workflow部分使用机器学习模型如分类算法或NLP实现Agent部分。系统集成用户数据库、订单系统和可穿戴设备数据如适用确保数据实时性。设计监控面板跟踪各层处理效率、决策准确性和客户满意度。优点效率与灵活性兼顾简单案例快速处理复杂案例智能处理减少人工负担。成本可控不需要对所有案例使用智能体降低开发和计算成本。持续优化智能体从人工审核中学习逐步提高自动化比例未来可过渡到全智能系统。风险降低规则部分保证透明性智能部分提供个性化整体决策更公平可靠。实施建议从小规模开始先实施Workflow然后逐步引入Agent用于特定场景。定期评估系统性能调整规则和模型确保符合业务目标。通过方案C电商公司能在不同发展阶段灵活应对退款申请实现资源最优配置。4. 在 1.3 节的智能旅行助手基础上请思考如何添加以下功能可以只描述设计思路也可以进一步尝试代码实现提示思考如何修改Thought-Action-Observation循环来实现这些功能。添加一个记忆功能让智能体记住用户的偏好如喜欢历史文化景点、预算范围等当推荐的景点门票已售罄时智能体能够自动推荐备选方案如果用户连续拒绝了 3 个推荐智能体能够反思并调整推荐策略答设计思路1. 记忆功能设计用户偏好存储在智能体中添加user_preferences字典存储用户偏好长期记忆机制在对话中识别并存储用户偏好信息偏好应用在推荐景点时自动考虑存储的偏好2. 备选方案推荐门票状态检测在景点查询时检查门票可用性相似度算法当门票售罄时基于类别、地理位置等寻找相似景点降级策略从高匹配度到低匹配度逐步推荐备选3. 反思调整策略拒绝计数器跟踪连续拒绝次数反思触发机制当拒绝达到阈值时触发策略调整多样化推荐调整推荐类别、价格范围或地理位置代码实现# -*- coding: utf-8 -*- import requests import re import os import random from dotenv import load_dotenv from tavily import TavilyClient from openai import OpenAI # 加载环境变量 load_dotenv() # --- 1. 配置系统提示词 --- AGENT_SYSTEM_PROMPT 你是一个智能旅行助手。你的任务是分析用户的请求并使用可用工具一步步地解决问题。 # 可用工具: - get_weather(city: str): 查询指定城市的实时天气。 - get_attraction(city: str, weather: str, preferences: str ): 根据城市、天气和用户偏好搜索推荐的旅游景点。 - check_ticket_availability(attraction: str): 检查指定景点的门票是否可用。 - get_alternative_attraction(city: str, weather: str, preferences: str, rejected_attractions: str): 根据用户拒绝的景点推荐备选方案。 - update_user_preferences(new_preference: str): 更新用户偏好。 - reflect_and_adjust_strategy(rejected_attractions: str): 当用户连续拒绝多个推荐时反思并调整推荐策略。 # 行动格式: 你的回答必须严格遵循以下格式。首先是你的思考过程然后是你要执行的具体行动每次回复只输出一对Thought-Action Thought: [这里是你的思考过程和下一步计划] Action: [这里是你要调用的工具格式为 function_name(arg_namearg_value)] # 任务完成: 当你收集到足够的信息能够回答用户的最终问题时你必须在Action:字段后使用 finish(answer...) 来输出最终答案。 # 特别提示: 1. 注意观察用户的偏好信息如喜欢的景点类型、预算范围等并使用update_user_preferences工具保存这些信息。 2. 在推荐景点后使用check_ticket_availability工具检查门票是否可用。 3. 如果用户连续拒绝了3个推荐使用reflect_and_adjust_strategy工具调整推荐策略。 4. 始终根据用户的偏好和当前情况提供个性化的推荐。 请开始吧 # --- 2. 实现工具函数 --- def get_weather(city: str) - str: 通过调用 wttr.in API 查询真实的天气信息。 url fhttps://wttr.in/{city}?formatj1 try: response requests.get(url) response.raise_for_status() data response.json() current_condition data[current_condition][0] weather_desc current_condition[weatherDesc][0][value] temp_c current_condition[temp_C] return f{city}当前天气:{weather_desc}气温{temp_c}摄氏度 except requests.exceptions.RequestException as e: return f错误:查询天气时遇到网络问题 - {e} except (KeyError, IndexError) as e: return f错误:解析天气数据失败可能是城市名称无效 - {e} def get_attraction(city: str, weather: str, preferences: str ) - str: 根据城市、天气和用户偏好使用Tavily Search API搜索并返回优化后的景点推荐。 api_key os.environ.get(TAVILY_API_KEY) if not api_key: return 错误:未配置TAVILY_API_KEY环境变量。 tavily TavilyClient(api_keyapi_key) # 构造查询时考虑用户偏好 query f{city} 在{weather}天气下最值得去的旅游景点推荐及理由 if preferences: query f用户偏好: {preferences} try: response tavily.search(queryquery, search_depthbasic, include_answerTrue) if response.get(answer): return response[answer] formatted_results [] for result in response.get(results, []): formatted_results.append(f- {result[title]}: {result[content]}) if not formatted_results: return 抱歉没有找到相关的旅游景点推荐。 return 根据搜索为您找到以下信息:\n \n.join(formatted_results) except Exception as e: return f错误:执行Tavily搜索时出现问题 - {e} def check_ticket_availability(attraction: str) - str: 检查指定景点的门票是否可用模拟实现。 # 模拟一些热门景点可能售罄 sold_out_attractions [故宫博物院, 上海迪士尼乐园, 长城, 西湖, 兵马俑] # 随机决定是否售罄实际应用中应该调用真实的门票查询API if attraction in sold_out_attractions and random.random() 0.7: return f抱歉{attraction}的门票目前已售罄。 else: return f{attraction}的门票目前可用。 def get_alternative_attraction(city: str, weather: str, preferences: str, rejected_attractions: str) - str: 根据用户拒绝的景点推荐备选方案。 api_key os.environ.get(TAVILY_API_KEY) if not api_key: return 错误:未配置TAVILY_API_KEY环境变量。 tavily TavilyClient(api_keyapi_key) query f{city} 在{weather}天气下推荐与以下景点风格不同的旅游景点: {rejected_attractions} if preferences: query f用户偏好: {preferences} try: response tavily.search(queryquery, search_depthbasic, include_answerTrue) if response.get(answer): return response[answer] formatted_results [] for result in response.get(results, []): formatted_results.append(f- {result[title]}: {result[content]}) if not formatted_results: return 抱歉没有找到合适的备选景点推荐。 return 根据您的反馈为您推荐以下备选景点:\n \n.join(formatted_results) except Exception as e: return f错误:执行Tavily搜索时出现问题 - {e} def update_user_preferences(new_preference: str) - str: 更新用户偏好在实际应用中这应该持久化存储。 return f已更新用户偏好: {new_preference} def reflect_and_adjust_strategy(rejected_attractions: str) - str: 当用户连续拒绝多个推荐时反思并调整推荐策略。 return f根据您拒绝的景点({rejected_attractions})我将调整推荐策略尝试提供更多样化的选择。 # --- 3. 创建LLM客户端类 --- class OpenAICompatibleClient: 一个用于调用任何兼容OpenAI接口的LLM服务的客户端。 def __init__(self, model: str, api_key: str, base_url: str): self.model model self.client OpenAI(api_keyapi_key, base_urlbase_url) def generate(self, prompt: str, system_prompt: str) - str: 调用LLM API来生成回应。 print(正在调用大语言模型...) try: messages [ {role: system, content: system_prompt}, {role: user, content: prompt} ] response self.client.chat.completions.create( modelself.model, messagesmessages, streamFalse ) answer response.choices[0].message.content print(大语言模型响应成功。) return answer except Exception as e: print(f调用LLM API时发生错误: {e}) return 错误:调用语言模型服务时出错。 # --- 4. 将所有工具函数放入一个字典方便后续调用 --- available_tools { get_weather: get_weather, get_attraction: get_attraction, check_ticket_availability: check_ticket_availability, get_alternative_attraction: get_alternative_attraction, update_user_preferences: update_user_preferences, reflect_and_adjust_strategy: reflect_and_adjust_strategy, } # --- 5. 主程序入口 --- if __name__ __main__: print(增强型智能旅行助手启动...) # --- 1. 配置LLM客户端 --- API_KEY os.environ.get(DASHSCOPE_API_KEY, ) BASE_URL os.environ.get(DASHSCOPE_BASE_URL, https://dashscope.aliyuncs.com/compatible-mode/v1) MODEL_ID os.environ.get(DASHSCOPE_MODEL, qwen-max-latest) print(f读取到的DASHSCOPE_API_KEY: {API_KEY}) print(f使用的BASE_URL: {BASE_URL}) print(f使用的模型: {MODEL_ID}) if not API_KEY: print(错误: 未配置DASHSCOPE_API_KEY环境变量。请在.env文件中添加DASHSCOPE_API_KEYyour_api_key) exit(1) llm OpenAICompatibleClient( modelMODEL_ID, api_keyAPI_KEY, base_urlBASE_URL ) # --- 2. 初始化 --- # 用户偏好存储 user_preferences {interests: [], budget: , avoid: [], other: []} # 拒绝计数和拒绝的景点列表 rejection_count 0 rejected_attractions [] # 用户输入 user_prompt 你好请帮我查询一下今天上海的天气然后根据天气推荐一个合适的旅游景点。我喜欢历史文化景点预算中等。 prompt_history [f用户请求: {user_prompt}] print(f用户输入: {user_prompt}\n *40) # --- 3. 运行主循环 --- for i in range(10): # 设置最大循环次数 print(f--- 循环 {i1} ---) # 3.1. 构建Prompt full_prompt \n.join(prompt_history) # 3.2. 调用LLM进行思考 llm_output llm.generate(full_prompt, system_promptAGENT_SYSTEM_PROMPT) # 模型可能会输出多余的Thought-Action需要截断 match re.search(r(Thought:.*?Action:.*?)(?\n\s*(?:Thought:|Action:|Observation:)|\Z), llm_output, re.DOTALL) if match: truncated match.group(1).strip() if truncated ! llm_output.strip(): llm_output truncated print(已截断多余的 Thought-Action 对) print(f模型输出:\n{llm_output}\n) prompt_history.append(llm_output) # 3.3. 解析并执行行动 action_match re.search(rAction: (.*), llm_output, re.DOTALL) if not action_match: print(解析错误:模型输出中未找到 Action。) break action_str action_match.group(1).strip() if action_str.startswith(finish): final_answer re.search(rfinish\(answer(.*)\), action_str).group(1) print(f任务完成最终答案: {final_answer}) break # 解析工具调用 tool_name re.search(r(\w)\(, action_str).group(1) args_str re.search(r\((.*)\), action_str).group(1) kwargs dict(re.findall(r(\w)([^]*), args_str)) # 特殊处理用户偏好参数 if tool_name in [get_attraction, get_alternative_attraction]: preferences_str , .join([f{k}: {v} for k, v in user_preferences.items() if v]) kwargs[preferences] preferences_str if tool_name get_alternative_attraction: kwargs[rejected_attractions] , .join(rejected_attractions) if tool_name reflect_and_adjust_strategy: kwargs[rejected_attractions] , .join(rejected_attractions) # 执行工具调用 if tool_name in available_tools: observation available_tools[tool_name](**kwargs) else: observation f错误:未定义的工具 {tool_name} # 3.4. 记录观察结果并更新状态 observation_str fObservation: {observation} print(f{observation_str}\n *40) prompt_history.append(observation_str) # 3.5. 更新用户偏好如果需要 if tool_name update_user_preferences: new_preference kwargs.get(new_preference, ) if 历史 in new_preference or 文化 in new_preference: user_preferences[interests].append(历史文化) elif 自然 in new_preference or 风景 in new_preference: user_preferences[interests].append(自然风光) elif 预算 in new_preference: if 低 in new_preference: user_preferences[budget] 低 elif 中 in new_preference: user_preferences[budget] 中等 elif 高 in new_preference: user_preferences[budget] 高 # 去重 user_preferences[interests] list(set(user_preferences[interests])) # 3.6. 更新拒绝计数和反思模拟用户拒绝 # 实际应用中应该根据用户的实际反馈来更新这些状态 # 这里为了演示我们随机模拟用户拒绝 if tool_name get_attraction and random.random() 0.6: rejection_count 1 # 提取推荐的景点名称简化处理 attraction_match re.search(r推荐您(?:前往|参观|游览)\s*([^。]), observation) if attraction_match: rejected_attractions.append(attraction_match.group(1)) print(f模拟用户拒绝推荐当前拒绝计数: {rejection_count}) prompt_history.append(用户反馈: 我不太喜欢这个推荐。) # 当连续拒绝3个推荐时反思并调整策略 if rejection_count 3: print(用户已连续拒绝3个推荐将调用反思和调整策略工具...) reflection_result available_tools[reflect_and_adjust_strategy](rejected_attractions, .join(rejected_attractions)) prompt_history.append(fObservation: {reflection_result}) rejection_count 0 # 重置拒绝计数 rejected_attractions [] # 重置拒绝的景点列表输出增强型智能旅行助手启动...用户输入: 你好请帮我查询一下今天上海的天气然后根据天气推荐一个合适的旅游景点。我喜欢历史文化景点预算中等。--- 循环 1 ---正在调用大语言模型...大语言模型响应成功。模型输出:Thought: 首先我需要查询今天上海的天气。然后根据天气和用户偏好历史文化景点预算中等推荐一个合适的旅游景点。Action: get_weather(city上海)Observation: 上海当前天气:Clear气温16摄氏度--- 循环 2 ---正在调用大语言模型...大语言模型响应成功。模型输出:Thought: 现在我知道上海的天气是晴朗气温16摄氏度。接下来我将根据这个天气和用户的偏好喜欢历史文化景点预算中等来推荐一个合适的旅游景点。Action: get_attraction(city上海, weatherClear, preferences历史文化景点预算中等)Observation: Under clear weather, visit Shanghais iconic waterfront at the Bund, explore the classical garden of Yu Garden, and enjoy panoramic views from the Oriental Pearl Tower.--- 循环 3 ---正在调用大语言模型...大语言模型响应成功。模型输出:Thought: 根据晴朗的天气和用户的偏好推荐了外滩、豫园和东方明珠塔。现在我需要检查这些景点的门票是否可用Action: check_ticket_availability(attraction外滩)Observation: 外滩的门票目前可用。--- 循环 4 ---正在调用大语言模型...大语言模型响应成功。模型输出:Thought: 外滩的门票目前可用这是一个适合用户偏好的历史文化景点。我可以将此推荐给用户作为今天的旅游景点。Action: finish(answer今天上海的天气晴朗气温16摄氏度非常适合出游。根据您的偏好推荐您参观外滩这是一个充满历史文化气息的地方门票目前可用。祝您旅途愉快)任务完成最终答案: 今天上海的天气晴朗气温16摄氏度非常适合出游。根据您的偏好推荐您参观外滩这是一个充满历史文化气息的地方门票目前可用。祝您旅途愉快5. 卡尼曼的系统 1快速直觉和系统 2慢速推理理论[2]为神经符号主义 AI 提供了很好的类比。请首先构思一个具体的智能体的落地应用场景然后说明场景中的提示医疗诊断助手、法律咨询机器人、金融风控系统等都是常见的应用场景哪些任务应该由系统 1处理哪些任务应该由系统 2处理这两个系统如何协同工作以达成最终目标答基于卡尼曼的“系统1”快速直觉和“系统2”慢速推理理论我选择医疗诊断助手作为具体应用场景。医疗诊断助手是一种AI智能体旨在帮助医生或患者进行初步诊断、症状评估和治疗建议。在这个场景中系统1处理快速、自动化的任务如症状初步分类和紧急情况检测而系统2处理需要深度推理的任务如复杂病例分析和治疗方案规划。两个系统通过协同工作提高诊断的准确性和效率。以下详细说明应用场景医疗诊断助手医疗诊断助手通过自然语言处理与用户交互整合患者症状、病史和实时数据提供诊断支持。它结合了神经网络用于模式识别和符号逻辑用于推理体现了神经符号主义AI的特点。系统1快速直觉处理的任务系统1类似于人类的直觉思维处理快速、并行、无需努力的任务在AI中对应基于神经网络的快速模式识别。在医疗诊断助手中系统1负责症状初步分类根据患者描述的症状如头痛、咳嗽、发热快速匹配到常见的疾病类别如感冒、流感。系统1使用预训练的深度学习模型如CNN或RNN从大量病历数据中学习模式实现实时分类。紧急情况检测识别可能危及生命的症状如胸痛、呼吸困难、意识模糊并立即触发警报或建议紧急就医。系统1通过规则引擎或轻量级模型快速评估风险等级。常见病诊断对于高发病率疾病如上呼吸道感染、肠胃炎直接提供诊断建议基于历史数据统计和症状匹配。系统1的输出通常是概率性的并附带置信度。患者分诊根据症状严重性、年龄、病史等基本因素优先处理紧急病例将患者引导到合适的医疗资源如急诊科或普通门诊。这些任务依赖系统1的快速响应适合处理标准化、高频率的场景但可能受限于数据偏差和过度简化。系统2慢速推理处理的任务系统2类似于人类的理性思维处理慢速、序列化、需要努力的任务在AI中对应基于符号逻辑的推理和规划。在医疗诊断助手中系统2负责复杂病例分析当症状不典型、多疾病共存或涉及罕见病时进行深度推理。系统2使用知识图谱如医学本体和逻辑规则考虑症状之间的因果关系、患者完整病史和家族史。治疗方案规划为复杂疾病如癌症、自身免疫疾病制定个性化治疗方案包括药物选择、剂量调整、手术建议等。系统2整合临床指南、药物数据库和患者特异性数据如基因信息进行优化决策。医学证据查询访问最新医学文献、临床试验数据和专家共识以支持诊断决策。系统2使用自然语言处理技术解析文本并基于证据等级提供推荐。诊断验证对系统1的初步诊断进行验证通过差分诊断、假设测试和不确定性量化确保结果可靠。系统2还可能生成解释性报告帮助医生理解AI的推理过程。这些任务需要系统2的深度处理适合处理低频率、高复杂度的场景但计算成本较高且响应时间较慢。两个系统如何协同工作以达成最终目标医疗诊断助手的最终目标是提供准确、及时、个性化的诊断支持。系统1和系统2通过以下方式协同工作工作流程协同初步筛查由系统1处理患者输入症状后系统1快速生成初步诊断和紧急程度评估。如果系统1的置信度高且疾病常见助手直接输出结果如“可能为感冒建议休息”。复杂病例移交系统2如果系统1的置信度低、症状复杂或检测到潜在风险系统1将病例传递给系统2。例如当患者症状包括多个系统受累或不典型表现时系统2启动深度分析。实时反馈与学习系统2的分析结果如确诊疾病或调整诊断会反馈给系统1用于更新神经网络模型或规则库。例如系统2发现系统1误诊的病例系统1通过强化学习改进模式识别。决策协同并行处理在紧急情况下系统1立即响应如建议呼叫急救同时系统2在后台进行深度分析以提供更全面的建议如可能的心肌梗死诊断。不确定性管理系统1输出置信度分数当置信度低于阈值时自动触发系统2。系统2则处理不确定性通过概率推理或贝叶斯方法提供更稳健的结论。用户体验协同分层输出助手首先提供系统1的快速回答如“基于您的症状可能为流感”然后根据需要提供系统2的详细报告如“深度分析显示需排除肺炎建议胸部X光”。这平衡了速度和准确性。交互式修正如果用户对系统1的建议不满意可以手动触发系统2进行重新分析。系统2的推理过程可解释增强用户信任。通过这种协同医疗诊断助手既能快速处理大多数常见病例减少医生负担又能确保复杂病例得到细致分析提高诊断质量。这种设计体现了神经符号主义AI的优势系统1提供可扩展性系统2提供可靠性。6. 尽管大语言模型驱动的智能体系统展现出了强大的能力但它们仍然存在诸多局限。请分析以下问题为什么智能体或智能体系统有时会产生幻觉生成看似合理但实际错误的信息在 1.3 节的案例中我们设置了最大循环次数为 5 次。如果没有这个限制智能体可能会陷入什么问题如何评估一个智能体的智能程度仅使用准确率指标是否足够答智能体系统虽然在许多任务中表现出色但仍存在一些根本性局限这些局限源于模型架构、训练数据和工作机制。以下是对每个问题的详细分析。1. 为什么智能体或智能体系统有时会产生“幻觉”生成看似合理但实际错误的信息“幻觉”是指智能体生成内容在语言上流畅、逻辑上连贯但事实上不正确或虚构的现象。这主要源于LLM的内在机制和外部因素具体原因包括训练数据的局限LLM 通常在海量互联网文本上训练这些数据可能包含错误、偏见或过时信息。模型学习到的统计模式不一定反映真实世界导致生成错误内容。训练数据覆盖范围有限对于某些专业领域或小众话题模型可能缺乏足够知识从而“捏造”信息来填充空白。概率生成机制LLM 基于自回归生成通过预测下一个词的概率来输出文本。模型倾向于生成高频或合理的序列但没有内在的“真理”概念。因此它可能生成统计上可能但实际错误的内容。生成过程缺乏事实验证模型不会主动查询外部知识库或进行逻辑推理而是依赖训练期间学到的模式。上下文误解和过度拟合在多轮对话中智能体可能误解用户意图或上下文导致生成不相关或错误的信息。例如如果用户查询涉及细微差别模型可能过度简化或混淆概念。模型有时会“过度拟合”训练数据中的常见模式例如如果训练数据中某些事件经常被关联模型可能错误地推断因果关系。提示和引导的影响智能体的响应受提示词prompt设计影响。如果提示模糊或包含误导性信息模型可能生成幻觉内容。此外模型在生成时可能被“引导”到特定方向从而脱离事实。在智能体系统中如果行动规划基于错误的世界模型幻觉可能被放大。例如在旅行助手场景中智能体可能推荐不存在的景点因为它没有实时访问门票数据。为了减轻幻觉常见策略包括使用检索增强生成RAG来集成外部知识源。引入验证步骤如多次采样或一致性检查。设计清晰的提示和约束限制生成范围。在关键任务中结合符号推理如规则引擎来纠正错误。2. 在 1.3 节的案例中我们设置了最大循环次数为 5 次。如果没有这个限制智能体可能会陷入什么问题在1.3节的智能旅行助手案例中我们使用了一个基于Thought-Action-Observation的循环并设置最大循环次数为5次以防止无限循环。如果没有这个限制智能体可能会陷入以下问题无限循环和资源耗尽智能体可能在某个任务中不断重复相同的行动无法达到终止条件。例如在推荐景点时如果用户始终拒绝推荐智能体可能持续生成相似建议而不改变策略导致计算资源如API调用、内存被大量消耗甚至系统崩溃。在复杂任务中智能体可能陷入“局部最优”无法逃脱例如在路径规划中不断尝试同一条无效路线。效率低下和用户体验下降过多的循环会导致响应时间延长用户可能失去耐心。在实时应用如客服中这会影响服务质量和用户满意度。智能体可能执行冗余行动例如多次查询相同信息或生成重复内容而不是学习并调整策略。不收敛和决策失败在某些情况下智能体可能无法收敛到一个稳定状态。例如在反思调整策略时如果连续拒绝次数没有上限智能体可能不断切换推荐类别而无法做出最终决策。智能体可能进入“死循环”其中观察结果总是触发相同的行动而没有进展。例如如果智能体错误地解析用户输入它可能持续误解意图。安全风险和不可控行为在没有循环限制时智能体可能被恶意用户诱导执行有害行动如不断生成不当内容或泄露敏感信息。在自主系统中无限循环可能导致物理世界中的问题如机器人持续执行错误动作。因此设置最大循环次数是一种必要的安全措施确保智能体在合理时间内完成任务或超时退出。在实际设计中还可以结合超时机制、回退策略和监控系统来管理循环行为。3. 如何评估一个智能体的“智能”程度仅使用准确率指标是否足够评估智能体的“智能”程度是一个多维问题准确率指标 alone is not sufficient因为它只衡量输出是否正确而忽略了智能的其他关键方面。智能应包括感知、推理、学习、适应和交互等能力。以下是一个综合评估框架多维度评估指标准确性输出与事实或标准答案的一致程度。这包括分类准确率、F1分数等。但准确率无法捕获生成内容的合理性或上下文适应性。效率智能体完成任务的速度和资源消耗例如响应时间、计算成本。一个智能体可能准确但效率低下不适合实时应用。鲁棒性在噪声、对抗性攻击或变化环境下的表现。例如智能体能否处理输入错误或意外情况这需要通过压力测试和对抗样本评估。泛化能力在未见过的任务或领域上的表现。智能体应能够迁移学习而不是过拟合训练数据。评估时使用跨领域数据集或零样本学习任务。解释性和透明度智能体能否提供决策理由用户能否理解其行为这可以通过生成解释或可视化内部状态来评估。社交和伦理智能在交互中理解社交规范、情感和伦理准则。例如在客服场景中智能体是否 empathetic 且公平评估方法包括用户满意度调查和伦理审计。学习性和适应性智能体能否从新经验中改进这包括在线学习能力、个性化调整和长期性能提升。评估时监控学习曲线和适应速度。具体评估方法任务导向评估针对特定任务如医疗诊断、游戏玩法使用领域专用指标如诊断准确率、任务完成率。用户中心评估通过用户研究、A/B测试和反馈收集主观指标如易用性、信任度和满意度。基准测试和竞赛使用标准基准如GLUE用于NLP、Arcade Learning Environment用于强化学习比较智能体性能。综合评分系统结合多个指标 into a single score如使用加权平均或多维量表例如IEEE的伦理评估框架。仅使用准确率不足的原因准确率可能掩盖模式化错误例如智能体在简单任务上准确率高但在复杂推理上失败。忽略交互质量在对话系统中即使回答准确如果响应生硬或不连贯用户可能认为智能体不“智能”。不考虑上下文准确率通常基于静态数据集而智能体在动态环境中需要适应性和实时决策。因此评估智能体智能程度时应采用综合方法结合定量和定性指标以全面反映其能力。在实际应用中根据场景调整评估重点——例如在医疗诊断中准确性和解释性至关重要在娱乐聊天机器人中用户参与度可能更关键。总之智能体系统的局限性提醒我们需要持续改进模型架构、训练方法和评估标准。通过结合神经符号主义、外部知识集成和人类反馈我们可以逐步提升智能体的可靠性和智能水平。