|
|
@@ -2,10 +2,13 @@
|
|
|
"cells": [
|
|
|
{
|
|
|
"cell_type": "code",
|
|
|
- "execution_count": null,
|
|
|
"id": "938b2e36-f95c-4b0f-8770-335c6bb5bc0e",
|
|
|
- "metadata": {},
|
|
|
- "outputs": [],
|
|
|
+ "metadata": {
|
|
|
+ "ExecuteTime": {
|
|
|
+ "end_time": "2026-01-14T15:56:53.621032679Z",
|
|
|
+ "start_time": "2026-01-14T15:56:53.608893241Z"
|
|
|
+ }
|
|
|
+ },
|
|
|
"source": [
|
|
|
"import requests\n",
|
|
|
"import os\n",
|
|
|
@@ -36,29 +39,27 @@
|
|
|
"# 行动格式:\n",
|
|
|
"你的回答必须严格遵循以下格式。首先是你的思考过程,然后是你要执行的具体行动,每次回复只输出一对Thought-Action:\n",
|
|
|
"Thought: [这里是你的思考过程和下一步计划]\n",
|
|
|
- "Action: [这里是你要调用的工具,格式为 function_name(arg_name=\"arg_value\")]\n",
|
|
|
+ "Action: 你决定采取的行动,必须是以下格式之一:\n",
|
|
|
+ "- `function_name(arg_name=\"arg_value\")`:调用一个可用工具。\n",
|
|
|
+ "- `Finish[最终答案]`:当你认为已经获得最终答案时。\n",
|
|
|
+ "- 当你收集到足够的信息,能够回答用户的最终问题时,你必须在Action:字段后使用 Finish[最终答案] 来输出最终答案。\n",
|
|
|
"\n",
|
|
|
- "# 任务完成:\n",
|
|
|
- "当你收集到足够的信息,能够回答用户的最终问题时,你必须在`Action:`字段后使用 `finish(answer=\"...\")` 来输出最终答案。\n",
|
|
|
"\n",
|
|
|
"请开始吧!\n",
|
|
|
"\"\"\""
|
|
|
- ]
|
|
|
+ ],
|
|
|
+ "outputs": [],
|
|
|
+ "execution_count": 8
|
|
|
},
|
|
|
{
|
|
|
"cell_type": "code",
|
|
|
- "execution_count": 2,
|
|
|
"id": "66d9d404-3c95-42f2-8975-436769b3cb87",
|
|
|
- "metadata": {},
|
|
|
- "outputs": [
|
|
|
- {
|
|
|
- "name": "stdout",
|
|
|
- "output_type": "stream",
|
|
|
- "text": [
|
|
|
- "✅ 工具函数定义完成!\n"
|
|
|
- ]
|
|
|
+ "metadata": {
|
|
|
+ "ExecuteTime": {
|
|
|
+ "end_time": "2026-01-14T15:56:54.595070634Z",
|
|
|
+ "start_time": "2026-01-14T15:56:54.532054736Z"
|
|
|
}
|
|
|
- ],
|
|
|
+ },
|
|
|
"source": [
|
|
|
"def get_weather(city: str) -> str:\n",
|
|
|
" \"\"\"\n",
|
|
|
@@ -132,22 +133,27 @@
|
|
|
" \"get_attraction\": get_attraction,\n",
|
|
|
"}\n",
|
|
|
"print(\"✅ 工具函数定义完成!\")"
|
|
|
- ]
|
|
|
- },
|
|
|
- {
|
|
|
- "cell_type": "code",
|
|
|
- "execution_count": 3,
|
|
|
- "id": "e953fee4-9e3c-4e34-bf48-4ea002c3bb92",
|
|
|
- "metadata": {},
|
|
|
+ ],
|
|
|
"outputs": [
|
|
|
{
|
|
|
"name": "stdout",
|
|
|
"output_type": "stream",
|
|
|
"text": [
|
|
|
- "✅ 智能助手类定义完成!\n"
|
|
|
+ "✅ 工具函数定义完成!\n"
|
|
|
]
|
|
|
}
|
|
|
],
|
|
|
+ "execution_count": 9
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "cell_type": "code",
|
|
|
+ "id": "e953fee4-9e3c-4e34-bf48-4ea002c3bb92",
|
|
|
+ "metadata": {
|
|
|
+ "ExecuteTime": {
|
|
|
+ "end_time": "2026-01-14T15:56:55.726641969Z",
|
|
|
+ "start_time": "2026-01-14T15:56:55.671146801Z"
|
|
|
+ }
|
|
|
+ },
|
|
|
"source": [
|
|
|
"class OpenAICompatibleClient:\n",
|
|
|
" \"\"\"\n",
|
|
|
@@ -205,23 +211,29 @@
|
|
|
" \"\"\"添加观察结果到历史\"\"\"\n",
|
|
|
" self.prompt_history.append(f\"Observation: {observation}\")\n",
|
|
|
"print(\"✅ 智能助手类定义完成!\")"
|
|
|
- ]
|
|
|
- },
|
|
|
- {
|
|
|
- "cell_type": "code",
|
|
|
- "execution_count": 4,
|
|
|
- "id": "ab5d3142-c119-46ad-a7a1-ec1aa2e79435",
|
|
|
- "metadata": {},
|
|
|
+ ],
|
|
|
"outputs": [
|
|
|
{
|
|
|
"name": "stdout",
|
|
|
"output_type": "stream",
|
|
|
"text": [
|
|
|
- "✅ 显示函数定义完成!\n"
|
|
|
+ "✅ 智能助手类定义完成!\n"
|
|
|
]
|
|
|
}
|
|
|
],
|
|
|
+ "execution_count": 10
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "cell_type": "code",
|
|
|
+ "id": "ab5d3142-c119-46ad-a7a1-ec1aa2e79435",
|
|
|
+ "metadata": {
|
|
|
+ "ExecuteTime": {
|
|
|
+ "end_time": "2026-01-14T15:56:56.670907293Z",
|
|
|
+ "start_time": "2026-01-14T15:56:56.608751066Z"
|
|
|
+ }
|
|
|
+ },
|
|
|
"source": [
|
|
|
+ "\n",
|
|
|
"def display_conversation(history):\n",
|
|
|
" \"\"\"美观地显示对话历史\"\"\"\n",
|
|
|
" print(\"\\n\" + \"=\"*60)\n",
|
|
|
@@ -244,8 +256,8 @@
|
|
|
"\n",
|
|
|
"def parse_action(action_str):\n",
|
|
|
" \"\"\"解析行动字符串\"\"\"\n",
|
|
|
- " if action_str.startswith(\"finish\"):\n",
|
|
|
- " match = re.search(r'finish\\(answer=\"(.*)\"\\)', action_str)\n",
|
|
|
+ " if action_str.startswith(\"Finish\"):\n",
|
|
|
+ " match = re.match(r\"\\w+\\[(.*)\\]\", action_str)\n",
|
|
|
" if match:\n",
|
|
|
" return \"finish\", {\"answer\": match.group(1)}\n",
|
|
|
" return \"finish\", {\"answer\": \"任务完成\"}\n",
|
|
|
@@ -264,14 +276,27 @@
|
|
|
" \n",
|
|
|
" return tool_name, kwargs\n",
|
|
|
"print(\"✅ 显示函数定义完成!\")"
|
|
|
- ]
|
|
|
+ ],
|
|
|
+ "outputs": [
|
|
|
+ {
|
|
|
+ "name": "stdout",
|
|
|
+ "output_type": "stream",
|
|
|
+ "text": [
|
|
|
+ "✅ 显示函数定义完成!\n"
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "execution_count": 11
|
|
|
},
|
|
|
{
|
|
|
"cell_type": "code",
|
|
|
- "execution_count": null,
|
|
|
"id": "cc543309-fe16-44a9-9735-bce828b9c7ad",
|
|
|
- "metadata": {},
|
|
|
- "outputs": [],
|
|
|
+ "metadata": {
|
|
|
+ "ExecuteTime": {
|
|
|
+ "end_time": "2026-01-14T15:56:57.497421849Z",
|
|
|
+ "start_time": "2026-01-14T15:56:57.463244826Z"
|
|
|
+ }
|
|
|
+ },
|
|
|
"source": [
|
|
|
"def run_assistant(user_input, max_iterations=5, display=True):\n",
|
|
|
" \"\"\"\n",
|
|
|
@@ -350,13 +375,41 @@
|
|
|
" print(f\"⏰ 达到最大循环次数: {timeout_answer}\")\n",
|
|
|
" \n",
|
|
|
" return timeout_answer, assistant.prompt_history"
|
|
|
- ]
|
|
|
+ ],
|
|
|
+ "outputs": [],
|
|
|
+ "execution_count": 12
|
|
|
},
|
|
|
{
|
|
|
"cell_type": "code",
|
|
|
- "execution_count": 6,
|
|
|
"id": "3f6e44eb-ff3d-4060-b4c2-ea3e139bf307",
|
|
|
- "metadata": {},
|
|
|
+ "metadata": {
|
|
|
+ "ExecuteTime": {
|
|
|
+ "end_time": "2026-01-14T15:57:56.198306041Z",
|
|
|
+ "start_time": "2026-01-14T15:56:58.506429375Z"
|
|
|
+ }
|
|
|
+ },
|
|
|
+ "source": [
|
|
|
+ "# 测试示例\n",
|
|
|
+ "def test_basic_example():\n",
|
|
|
+ " \"\"\"测试北京天气+景点推荐的示例\"\"\"\n",
|
|
|
+ " print(\"🚀 开始测试北京天气+景点推荐示例\")\n",
|
|
|
+ " user_input = \"你好,请帮我查询一下今天北京的天气,然后根据天气推荐一个合适的旅游景点。\"\n",
|
|
|
+ " \n",
|
|
|
+ " final_answer, history = run_assistant(user_input, display=True)\n",
|
|
|
+ " \n",
|
|
|
+ " print(\"\\n\" + \"=\"*60)\n",
|
|
|
+ " print(\"📊 测试完成!\")\n",
|
|
|
+ " print(\"=\"*60)\n",
|
|
|
+ " print(f\"最终答案: {final_answer}\")\n",
|
|
|
+ " \n",
|
|
|
+ " # 显示完整对话历史\n",
|
|
|
+ " display_conversation(history)\n",
|
|
|
+ " \n",
|
|
|
+ " return final_answer, history\n",
|
|
|
+ "\n",
|
|
|
+ "# 运行测试示例\n",
|
|
|
+ "final_answer, history = test_basic_example()"
|
|
|
+ ],
|
|
|
"outputs": [
|
|
|
{
|
|
|
"name": "stdout",
|
|
|
@@ -370,38 +423,37 @@
|
|
|
"正在调用大语言模型...\n",
|
|
|
"大语言模型响应成功。\n",
|
|
|
"🤖 模型输出:\n",
|
|
|
- "Thought: 用户希望查询今天北京的天气情况,然后基于该天气推荐一个合适的旅游景点。我的第一步是获取北京的实时天气信息,以便了解当前的天气状况。执行查询天气的操作。\n",
|
|
|
- "\n",
|
|
|
+ "Thought: 我将先查询今天北京的实时天气,然后根据天气选择合适的景点并给出推荐。\n",
|
|
|
"Action: get_weather(city=\"北京\")\n",
|
|
|
"🛠️ 调用工具: get_weather({'city': '北京'})\n",
|
|
|
- "📊 观察结果: 北京当前天气:Clear,气温9摄氏度\n",
|
|
|
+ "📊 观察结果: 北京当前天气:Clear,气温-1摄氏度\n",
|
|
|
"==================================================\n",
|
|
|
"\n",
|
|
|
"🔄 循环 2/5\n",
|
|
|
"正在调用大语言模型...\n",
|
|
|
"大语言模型响应成功。\n",
|
|
|
"🤖 模型输出:\n",
|
|
|
- "Thought: 我已经获得了北京当前的天气信息:晴天,气温9摄氏度。接下来的步骤是根据这个天气条件推荐一个合适的旅游景点。晴天通常适合户外活动,这将影响我的选择。接下来,我将调用工具获取推荐的旅游景点。 \n",
|
|
|
+ "Thought: 现在北京天气为晴朗且气温-1°C,适合观光但需保暖;接下来根据晴天条件从景点中筛选一个合适的推荐。\n",
|
|
|
"\n",
|
|
|
"Action: get_attraction(city=\"北京\", weather=\"Clear\")\n",
|
|
|
"🛠️ 调用工具: get_attraction({'city': '北京', 'weather': 'Clear'})\n",
|
|
|
- "📊 观察结果: 在晴天,北京的长城(如八达岭)和故宫是最值得去的景点。晴天下,这些地方的景色最美,游览最舒适。\n",
|
|
|
+ "📊 观察结果: In clear weather, Beijing's top attractions include the Forbidden City, the Great Wall at Mutianyu, and the Summer Palace. Plan for at least three days to explore major sites.\n",
|
|
|
"==================================================\n",
|
|
|
"\n",
|
|
|
"🔄 循环 3/5\n",
|
|
|
"正在调用大语言模型...\n",
|
|
|
"大语言模型响应成功。\n",
|
|
|
"🤖 模型输出:\n",
|
|
|
- "Thought: 我已经获得了关于北京当前天气的信息,并找到了两个适合在晴天游览的旅游景点。长城和故宫都是著名的地标性景点,特别在晴天时更是吸引游客。接下来,我准备输出最终的推荐答案。\n",
|
|
|
+ "Thought: 我将基于当前天气信息,选择一个在 Beijing 今天适合的景点并给出简要理由和出行提示。\n",
|
|
|
"\n",
|
|
|
- "Action: finish(answer=\"今天北京的天气晴,气温9摄氏度。推荐您去长城(如八达岭)或故宫游览,这两个景点在这样的天气下非常适合。\")\n",
|
|
|
+ "Action: Finish[今天北京的天气是晴(Clear),气温约-1°C。基于当前天气,推荐的景点是颐和园(Summer Palace)。原因:晴朗但寒冷的日子,颐和园的广阔园林和昆明湖景观非常适合观光,且园区内有多处室外赏景点与室内亭榭可提供避寒休憩点。穿着方面请穿厚外套、带帽子和手套,鞋子建议防滑防水。出行建议:尽量乘坐地铁等公共交通前往,出发前可查看开放时间和路线信息。若更倾向室内参观,故宫等室内空间也同样值得一看。]\n",
|
|
|
"🎉 任务完成!\n",
|
|
|
- "📋 最终答案: 今天北京的天气晴,气温9摄氏度。推荐您去长城(如八达岭)或故宫游览,这两个景点在这样的天气下非常适合。\n",
|
|
|
+ "📋 最终答案: 今天北京的天气是晴(Clear),气温约-1°C。基于当前天气,推荐的景点是颐和园(Summer Palace)。原因:晴朗但寒冷的日子,颐和园的广阔园林和昆明湖景观非常适合观光,且园区内有多处室外赏景点与室内亭榭可提供避寒休憩点。穿着方面请穿厚外套、带帽子和手套,鞋子建议防滑防水。出行建议:尽量乘坐地铁等公共交通前往,出发前可查看开放时间和路线信息。若更倾向室内参观,故宫等室内空间也同样值得一看。\n",
|
|
|
"\n",
|
|
|
"============================================================\n",
|
|
|
"📊 测试完成!\n",
|
|
|
"============================================================\n",
|
|
|
- "最终答案: 今天北京的天气晴,气温9摄氏度。推荐您去长城(如八达岭)或故宫游览,这两个景点在这样的天气下非常适合。\n",
|
|
|
+ "最终答案: 今天北京的天气是晴(Clear),气温约-1°C。基于当前天气,推荐的景点是颐和园(Summer Palace)。原因:晴朗但寒冷的日子,颐和园的广阔园林和昆明湖景观非常适合观光,且园区内有多处室外赏景点与室内亭榭可提供避寒休憩点。穿着方面请穿厚外套、带帽子和手套,鞋子建议防滑防水。出行建议:尽量乘坐地铁等公共交通前往,出发前可查看开放时间和路线信息。若更倾向室内参观,故宫等室内空间也同样值得一看。\n",
|
|
|
"\n",
|
|
|
"============================================================\n",
|
|
|
"📝 对话历史\n",
|
|
|
@@ -409,53 +461,34 @@
|
|
|
"\n",
|
|
|
"👤 用户 [1]: 你好,请帮我查询一下今天北京的天气,然后根据天气推荐一个合适的旅游景点。\n",
|
|
|
"\n",
|
|
|
- "🤔 思考 [2]: 用户希望查询今天北京的天气情况,然后基于该天气推荐一个合适的旅游景点。我的第一步是获取北京的实时天气信息,以便了解当前的天气状况。执行查询天气的操作。\n",
|
|
|
- "\n",
|
|
|
+ "🤔 思考 [2]: 我将先查询今天北京的实时天气,然后根据天气选择合适的景点并给出推荐。\n",
|
|
|
"Action: get_weather(city=\"北京\")\n",
|
|
|
- "📊 观察 [3]: 北京当前天气:Clear,气温9摄氏度\n",
|
|
|
+ "📊 观察 [3]: 北京当前天气:Clear,气温-1摄氏度\n",
|
|
|
"\n",
|
|
|
- "🤔 思考 [4]: 我已经获得了北京当前的天气信息:晴天,气温9摄氏度。接下来的步骤是根据这个天气条件推荐一个合适的旅游景点。晴天通常适合户外活动,这将影响我的选择。接下来,我将调用工具获取推荐的旅游景点。 \n",
|
|
|
+ "🤔 思考 [4]: 现在北京天气为晴朗且气温-1°C,适合观光但需保暖;接下来根据晴天条件从景点中筛选一个合适的推荐。\n",
|
|
|
"\n",
|
|
|
"Action: get_attraction(city=\"北京\", weather=\"Clear\")\n",
|
|
|
- "📊 观察 [5]: 在晴天,北京的长城(如八达岭)和故宫是最值得去的景点。晴天下,这些地方的景色最美,游览最舒适。\n",
|
|
|
+ "📊 观察 [5]: In clear weather, Beijing's top attractions include the Forbidden City, the Great Wall at Mutianyu, and the Summer Palace. Plan for at least three days to explore major sites.\n",
|
|
|
"\n",
|
|
|
- "🤔 思考 [6]: 我已经获得了关于北京当前天气的信息,并找到了两个适合在晴天游览的旅游景点。长城和故宫都是著名的地标性景点,特别在晴天时更是吸引游客。接下来,我准备输出最终的推荐答案。\n",
|
|
|
+ "🤔 思考 [6]: 我将基于当前天气信息,选择一个在 Beijing 今天适合的景点并给出简要理由和出行提示。\n",
|
|
|
"\n",
|
|
|
- "Action: finish(answer=\"今天北京的天气晴,气温9摄氏度。推荐您去长城(如八达岭)或故宫游览,这两个景点在这样的天气下非常适合。\")\n",
|
|
|
+ "Action: Finish[今天北京的天气是晴(Clear),气温约-1°C。基于当前天气,推荐的景点是颐和园(Summer Palace)。原因:晴朗但寒冷的日子,颐和园的广阔园林和昆明湖景观非常适合观光,且园区内有多处室外赏景点与室内亭榭可提供避寒休憩点。穿着方面请穿厚外套、带帽子和手套,鞋子建议防滑防水。出行建议:尽量乘坐地铁等公共交通前往,出发前可查看开放时间和路线信息。若更倾向室内参观,故宫等室内空间也同样值得一看。]\n",
|
|
|
"============================================================\n",
|
|
|
"\n"
|
|
|
]
|
|
|
}
|
|
|
],
|
|
|
- "source": [
|
|
|
- "# 测试示例\n",
|
|
|
- "def test_basic_example():\n",
|
|
|
- " \"\"\"测试北京天气+景点推荐的示例\"\"\"\n",
|
|
|
- " print(\"🚀 开始测试北京天气+景点推荐示例\")\n",
|
|
|
- " user_input = \"你好,请帮我查询一下今天北京的天气,然后根据天气推荐一个合适的旅游景点。\"\n",
|
|
|
- " \n",
|
|
|
- " final_answer, history = run_assistant(user_input, display=True)\n",
|
|
|
- " \n",
|
|
|
- " print(\"\\n\" + \"=\"*60)\n",
|
|
|
- " print(\"📊 测试完成!\")\n",
|
|
|
- " print(\"=\"*60)\n",
|
|
|
- " print(f\"最终答案: {final_answer}\")\n",
|
|
|
- " \n",
|
|
|
- " # 显示完整对话历史\n",
|
|
|
- " display_conversation(history)\n",
|
|
|
- " \n",
|
|
|
- " return final_answer, history\n",
|
|
|
- "\n",
|
|
|
- "# 运行测试示例\n",
|
|
|
- "final_answer, history = test_basic_example()"
|
|
|
- ]
|
|
|
+ "execution_count": 13
|
|
|
},
|
|
|
{
|
|
|
"cell_type": "code",
|
|
|
- "execution_count": 7,
|
|
|
"id": "68c735c1-eb3e-40e7-8b70-2be941798187",
|
|
|
- "metadata": {},
|
|
|
- "outputs": [],
|
|
|
+ "metadata": {
|
|
|
+ "ExecuteTime": {
|
|
|
+ "end_time": "2026-01-14T15:58:30.343440202Z",
|
|
|
+ "start_time": "2026-01-14T15:58:30.317379757Z"
|
|
|
+ }
|
|
|
+ },
|
|
|
"source": [
|
|
|
"def interactive_travel_assistant():\n",
|
|
|
" \"\"\"\n",
|
|
|
@@ -501,13 +534,41 @@
|
|
|
" print(f\"🚀 快速测试: {user_input}\")\n",
|
|
|
" final_answer, _ = run_assistant(user_input, display=True)\n",
|
|
|
" return final_answer"
|
|
|
- ]
|
|
|
+ ],
|
|
|
+ "outputs": [],
|
|
|
+ "execution_count": 14
|
|
|
},
|
|
|
{
|
|
|
"cell_type": "code",
|
|
|
- "execution_count": 8,
|
|
|
"id": "bc58c911-8502-4cf5-aa3f-a9f57a94b679",
|
|
|
- "metadata": {},
|
|
|
+ "metadata": {
|
|
|
+ "ExecuteTime": {
|
|
|
+ "end_time": "2026-01-14T16:02:32.575540116Z",
|
|
|
+ "start_time": "2026-01-14T16:00:39.668510589Z"
|
|
|
+ }
|
|
|
+ },
|
|
|
+ "source": [
|
|
|
+ "# 主启动入口\n",
|
|
|
+ "if __name__ == \"__main__\":\n",
|
|
|
+ " # 可以选择直接运行测试示例\n",
|
|
|
+ " print(\"选择运行模式:\")\n",
|
|
|
+ " print(\"1. 运行测试示例 (北京)\")\n",
|
|
|
+ " print(\"2. 交互模式\")\n",
|
|
|
+ " print(\"3. 快速测试其他城市\")\n",
|
|
|
+ " \n",
|
|
|
+ " choice = input(\"请输入选择 (1/2/3): \").strip()\n",
|
|
|
+ " \n",
|
|
|
+ " if choice == \"1\":\n",
|
|
|
+ " test_basic_example()\n",
|
|
|
+ " elif choice == \"2\":\n",
|
|
|
+ " interactive_travel_assistant()\n",
|
|
|
+ " elif choice == \"3\":\n",
|
|
|
+ " city = input(\"请输入要测试的城市: \").strip() or \"上海\"\n",
|
|
|
+ " quick_test(city)\n",
|
|
|
+ " else:\n",
|
|
|
+ " print(\"无效选择,运行测试示例...\")\n",
|
|
|
+ " test_basic_example()"
|
|
|
+ ],
|
|
|
"outputs": [
|
|
|
{
|
|
|
"name": "stdout",
|
|
|
@@ -516,78 +577,53 @@
|
|
|
"选择运行模式:\n",
|
|
|
"1. 运行测试示例 (北京)\n",
|
|
|
"2. 交互模式\n",
|
|
|
- "3. 快速测试其他城市\n"
|
|
|
- ]
|
|
|
- },
|
|
|
- {
|
|
|
- "name": "stdout",
|
|
|
- "output_type": "stream",
|
|
|
- "text": [
|
|
|
- "请输入选择 (1/2/3): 3\n",
|
|
|
- "请输入要测试的城市: 伦敦\n"
|
|
|
- ]
|
|
|
- },
|
|
|
- {
|
|
|
- "name": "stdout",
|
|
|
- "output_type": "stream",
|
|
|
- "text": [
|
|
|
- "🚀 快速测试: 请帮我查询伦敦的天气,并推荐适合的旅游景点\n",
|
|
|
- "👤 用户输入: 请帮我查询伦敦的天气,并推荐适合的旅游景点\n",
|
|
|
+ "3. 快速测试其他城市\n",
|
|
|
+ "🚀 快速测试: 请帮我查询广州的天气,并推荐适合的旅游景点\n",
|
|
|
+ "👤 用户输入: 请帮我查询广州的天气,并推荐适合的旅游景点\n",
|
|
|
"==================================================\n",
|
|
|
"\n",
|
|
|
"🔄 循环 1/5\n",
|
|
|
"正在调用大语言模型...\n",
|
|
|
"大语言模型响应成功。\n",
|
|
|
"🤖 模型输出:\n",
|
|
|
- "Thought: 我需要先查询伦敦的实时天气,这样才能根据天气情况推荐合适的旅游景点。接下来,我将调用天气查询工具获取伦敦的天气信息。 \n",
|
|
|
- "Action: get_weather(city=\"伦敦\")\n",
|
|
|
- "🛠️ 调用工具: get_weather({'city': '伦敦'})\n",
|
|
|
- "📊 观察结果: 伦敦当前天气:Partly cloudy,气温16摄氏度\n",
|
|
|
+ "Thought: Plan to fetch Guangzhou的天气信息作为第一步,然后根据天气来筛选推荐的景点。 \n",
|
|
|
+ "Action: get_weather(city=\"广州\")\n",
|
|
|
+ "🛠️ 调用工具: get_weather({'city': '广州'})\n",
|
|
|
+ "📊 观察结果: 广州当前天气:Clear,气温15摄氏度\n",
|
|
|
"==================================================\n",
|
|
|
"\n",
|
|
|
"🔄 循环 2/5\n",
|
|
|
"正在调用大语言模型...\n",
|
|
|
"大语言模型响应成功。\n",
|
|
|
"🤖 模型输出:\n",
|
|
|
- "Thought: 现在我已经查询到了伦敦的实时天气情况:部分多云,气温为16摄氏度。接下来,我将根据这个天气情况推荐适合在伦敦游玩的旅游景点。 \n",
|
|
|
- "Action: get_attraction(city=\"伦敦\", weather=\"Partly cloudy\")\n",
|
|
|
- "🛠️ 调用工具: get_attraction({'city': '伦敦', 'weather': 'Partly cloudy'})\n",
|
|
|
- "📊 观察结果: 在伦敦多云天气下,伦敦眼是最值得去的景点。它提供了伟大的城市景观。此外,博物馆和画廊也适合参观。\n",
|
|
|
+ "Thought: Guangzhou当前天气为Clear,适合户外活动。我将基于晴天的条件获取推荐的景点列表。 \n",
|
|
|
+ "Action: get_attraction(city=\"广州\", weather=\"Clear\")\n",
|
|
|
+ "🛠️ 调用工具: get_attraction({'city': '广州', 'weather': 'Clear'})\n",
|
|
|
+ "📊 观察结果: 在广州天气晴朗时,最值得去的旅游景点是越秀公园和广州塔。这些地方风景优美,适合观光和休闲。\n",
|
|
|
"==================================================\n",
|
|
|
"\n",
|
|
|
"🔄 循环 3/5\n",
|
|
|
"正在调用大语言模型...\n",
|
|
|
"大语言模型响应成功。\n",
|
|
|
"🤖 模型输出:\n",
|
|
|
- "Thought: 我已经获取了伦敦的天气情况和适合的旅游景点推荐。当前天气为部分多云,推荐旅游景点为伦敦眼,同时博物馆和画廊也非常适合在这种天气下参观。最终我将整合这些信息并给出用户的建议。 \n",
|
|
|
- "Action: finish(answer=\"伦敦当前天气为部分多云,气温16摄氏度。根据天气情况,推荐您去伦敦眼欣赏城市景观,此外博物馆和画廊也是很好的选择。\")\n",
|
|
|
+ "Thought: 计划基于广州晴天条件提供景点推荐,先查询符合晴天的景点。\n",
|
|
|
+ "Action: get_attraction(city=\"广州\", weather=\"Clear\")\n",
|
|
|
+ "🛠️ 调用工具: get_attraction({'city': '广州', 'weather': 'Clear'})\n",
|
|
|
+ "📊 观察结果: 在广州天气晴朗时,最值得去的旅游景点是越秀公园和广州塔。这些地方风景优美,适合观光和休闲。\n",
|
|
|
+ "==================================================\n",
|
|
|
+ "\n",
|
|
|
+ "🔄 循环 4/5\n",
|
|
|
+ "正在调用大语言模型...\n",
|
|
|
+ "大语言模型响应成功。\n",
|
|
|
+ "🤖 模型输出:\n",
|
|
|
+ "Thought: 我不能提供内部推理过程,但会直接给出结果。 \n",
|
|
|
+ "Action: Finish[广州天气:晴朗,气温15°C。推荐景点:越秀公园、广州塔。]\n",
|
|
|
"🎉 任务完成!\n",
|
|
|
- "📋 最终答案: 伦敦当前天气为部分多云,气温16摄氏度。根据天气情况,推荐您去伦敦眼欣赏城市景观,此外博物馆和画廊也是很好的选择。\n"
|
|
|
+ "📋 最终答案: 广州天气:晴朗,气温15°C。推荐景点:越秀公园、广州塔。\n"
|
|
|
]
|
|
|
}
|
|
|
],
|
|
|
- "source": [
|
|
|
- "# 主启动入口\n",
|
|
|
- "if __name__ == \"__main__\":\n",
|
|
|
- " # 可以选择直接运行测试示例\n",
|
|
|
- " print(\"选择运行模式:\")\n",
|
|
|
- " print(\"1. 运行测试示例 (北京)\")\n",
|
|
|
- " print(\"2. 交互模式\")\n",
|
|
|
- " print(\"3. 快速测试其他城市\")\n",
|
|
|
- " \n",
|
|
|
- " choice = input(\"请输入选择 (1/2/3): \").strip()\n",
|
|
|
- " \n",
|
|
|
- " if choice == \"1\":\n",
|
|
|
- " test_basic_example()\n",
|
|
|
- " elif choice == \"2\":\n",
|
|
|
- " interactive_travel_assistant()\n",
|
|
|
- " elif choice == \"3\":\n",
|
|
|
- " city = input(\"请输入要测试的城市: \").strip() or \"上海\"\n",
|
|
|
- " quick_test(city)\n",
|
|
|
- " else:\n",
|
|
|
- " print(\"无效选择,运行测试示例...\")\n",
|
|
|
- " test_basic_example()"
|
|
|
- ]
|
|
|
+ "execution_count": 17
|
|
|
},
|
|
|
{
|
|
|
"cell_type": "code",
|