llamaIndex 如何动态创建 Agent

flowchart TB
A[广州数据]
B[上海数据]
C[深圳数据]
D[广州查询工具QueryEngineTool]
E[上海查询工具QueryEngineTool]
F[深圳查询工具QueryEngineTool]
G[文档查询选择工具get_tools]
H[生成prompt工具create_system_prompt]
I[创建代理工具create_agent]
J[最终代理builder_agent]
K[查询回答]
A--->D
B--->E
C--->F
D--->G
E--->G
F--->G
H--->J
G--->J
I--->J
J--->K

流程汇总

1. 把 QueryEngine 转为工具使用,并使用 tool_retriever. Retrieve 选择工具

在这个脚本中,首先构建了针对不同城市(广州、深圳、上海)的查询引擎,这些引擎被封装为工具(QueryEngineTool),并存储在 tool_dict 字典中。通过定义一个检索器 tool_retriever 并调用 tool_retriever.retrieve(task) 方法来选择与当前任务最相关的工具。这样可以确保在面对不同查询时,能够动态地从现有的工具集中选取合适的查询引擎进行信息检索。

2. 首先创建 prompt,然后选择 QueryEngine 工具创建 Agent

为了构建一个能够解决特定任务的代理(agent),首先需要生成一个系统提示(system prompt)。这一步通过调用 create_system_prompt 函数来完成。随后使用这个系统提示以及从 tool_retriever.retrieve(task) 选取的相关工具,利用 ReActAgent.from_tools 方法创建最终的代理。这种方法能够确保在每次面对新的查询任务时都能够动态生成和调整系统提示及工具集。

3. 嵌套 Agent 的使用

脚本中展示了如何构建一个多级代理(嵌套 agent)。首先通过一系列步骤创建了一个顶层代理(builder_agent),它负责生成和管理其他具体的代理。这种设计允许在高层实现逻辑控制,同时利用具体执行层(如 QueryEngineTool)来处理细节任务。这样的结构可以提高系统的灵活性和可扩展性。

4. 嵌套的 Agent 带来流程不稳定,输出不如直接 RAG 靠谱

虽然多级代理(嵌套 agent)提供了一种灵活的方式来构建复杂的任务解决系统,但在实际应用中可能会遇到一些挑战。例如,在某些情况下,顶层代理可能不能准确地判断出最适合当前任务的具体工具集或策略,这可能导致生成的系统提示不够精确或者查询结果偏离预期目标。此外,这种结构也可能增加代码复杂性和维护难度。
相比之下,直接使用 RAG(Retrieval-Augmented Generation)方法在处理信息检索和回答问题时更为直接有效,因为它可以直接基于现有文档进行上下文依赖的信息提取与融合生成,通常能提供更稳定且高质量的输出结果。

1
2
3
4
5
6
7
from llama_index.core import Settings
from llama_index.llms.ollama import Ollama
from llama_index.embeddings.ollama import OllamaEmbedding
base_url='http://localhost:11434'
llm = Ollama(model="qwen2.5:latest", request_timeout=360.0,base_url=base_url)
Settings.llm = llm
Settings.embed_model = OllamaEmbedding(model_name="quentinz/bge-large-zh-v1.5:latest",base_url=base_url)

获取数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 利用https://baike.deno.dev/获取百度百科查询地址
import re
import requests
from bs4 import BeautifulSoup
def get_html(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = requests.get(url, headers=headers)
# 检查响应状态码
if response.status_code == 200:
return response
else:
print(f"请求失败,状态码:{response.status_code}")
return None
def build_md_from_html(html,save_path):
soup = BeautifulSoup(html, 'html.parser')
md_content=''
# 获取summary部分
md_content+='# 概览\n'
summary_div= soup.find_all('div', class_='J-summary') # 替换为实际的数据选择器
summary_paragraphs = summary_div[0].find_all('div', {'data-tag': 'paragraph'})
for paragraph in summary_paragraphs:
text = paragraph.get_text(strip=True)
text=re.sub(r'\[[1-9][0-9]*\]','',text)
md_content+=text+'\n\n'
# 获取内容部分
content_div = soup.find_all('div', class_='J-lemma-content') # 替换为实际的数据选择器
paragraphs = content_div[0].find_all('div', {'data-tag': ['paragraph','header']})
for paragraph in paragraphs:
data_tag=paragraph['data-tag']
text = paragraph.get_text(strip=True)
if data_tag=='header':
text=text.replace('播报编辑','')
data_level=int(paragraph['data-level'])
text='#'*data_level+' '+text+'\n'
else:
text=re.sub(r'\[[1-9][0-9]*\]','',text)
text+='\n\n'
md_content+=text
# 将结果写入文件
with open(save_path, 'w', encoding='utf-8') as file:
file.write(md_content)
cities = ["广州", "深圳", "上海"]

每个文件构建查询引擎

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from llama_index.core import SimpleDirectoryReader
city_docs = {}
for city in cities:
city_docs[city] = SimpleDirectoryReader(
input_files=[f"../../data/citys/{city}.md"]
).load_data()

from llama_index.core import VectorStoreIndex
from llama_index.core.tools import QueryEngineTool,ToolMetadata
tool_dict = {}
for city in cities:
index=VectorStoreIndex.from_documents(documents=city_docs[city])
query_engine=index.as_query_engine()
tool=QueryEngineTool(
query_engine=query_engine,
metadata=ToolMetadata(
name=city,
description=(f"关于{city}问题的回答助手")))
tool_dict[city]=tool

Prompt-> 选择查询工具 -> 创建 Agent 进行增强生成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
from llama_index.core.objects import ObjectIndex
tool_index=ObjectIndex.from_objects(
list(tool_dict.values()),
index_cls=VectorStoreIndex
)
tool_retriever=tool_index.as_retriever(similarity_top_k=1)

from llama_index.core.llms import ChatMessage
from llama_index.core import ChatPromptTemplate
from llama_index.core.agent import ReActAgent
from typing import List
from llama_index.core.agent import FunctionCallingAgent
GEN_SYS_PROMPT_STR = """\
Task information is given below.
Given the task, please generate a system prompt for an bot to solve this task:
{task} \
"""
gen_sys_prompt_messages = [
ChatMessage(
role="system",
content="You are helping to build a system prompt for another bot.",
),
ChatMessage(role="user", content=GEN_SYS_PROMPT_STR),
]
GEN_SYS_PROMPT_TMPL = ChatPromptTemplate(gen_sys_prompt_messages)
agent_cache = {}
def create_system_prompt(task: str)-> str:
"""Create system prompt for another agent given an input task."""
fmt_messages = GEN_SYS_PROMPT_TMPL.format_messages(task=task)
response = llm.chat(fmt_messages)
return response.message.content
def get_tools(task: str) -> List[str]:
"""Get the set of relevant tools to use given an input task."""
subset_tools = tool_retriever.retrieve(task)
tool_names= [t.metadata.name for t in subset_tools]
return tool_names
def create_agent(system_prompt: str, tool_names: List[str]) -> str:
''' Create an agent given a system prompt and an input set of tools
system_prompt : prompt created by create_system_prompt
tool_names : tools can only choice 广州 上海 or 深圳
'''
try:
# print('tool_names',tool_names)
# get the list of tools
input_tools = [tool_dict[tn] for tn in tool_names]
agent = ReActAgent.from_tools(input_tools, verbose=True)
agent_cache["agent"] = agent
return_msg = "Agent created successfully."
except Exception as e:
return_msg = f"An error occurred when building an agent. Here is the error: {repr(e)}"
return return_msg

from llama_index.core.tools import FunctionTool
system_prompt_tool = FunctionTool.from_defaults(fn=create_system_prompt)
get_tools_tool = FunctionTool.from_defaults(fn=get_tools)
create_agent_tool = FunctionTool.from_defaults(fn=create_agent)

创建汇总 Agent

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
GPT_BUILDER_SYS_STR = """\
You are helping to construct an agent given a user-specified task.
You should generally use the tools in this order to build the agent.
1) Create system prompt tool: to create the system prompt for the agent.
2) Get tools tool: to fetch the candidate set of tools to use.
3) Create agent tool: to create the final agent.
"""
prefix_msgs = [ChatMessage(role="system", content=GPT_BUILDER_SYS_STR)]
builder_agent = FunctionCallingAgent.from_tools(
tools=[system_prompt_tool, get_tools_tool, create_agent_tool],
prefix_messages=prefix_msgs,
verbose=True
)

response=builder_agent.query("创建一个代理,告诉我关于广州的事情")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
> Running step ea 222 b 84-cd 51-4 cb 1-8905-e 25 b 338 ee 64 d. Step input: 创建一个代理,告诉我关于广州的事情
Added user message to memory: 创建一个代理,告诉我关于广州的事情
=== Calling Function ===
Calling function: create_system_prompt with args: {"task": "\u 63 d 0\u 4 f 9 b\u 5173\u 4 e 8 e\u 5 e 7 f\u 5 dde\u 7684\u 4 fe 1\u 606 f"}
=== Function Output ===
以下是为解决此任务生成的系统提示:
\```
您需要为某个机器人编写对话脚本,使其能够提供关于广州的相关信息。下面是具体的指示和指南。
【目标】:生成一段对话,内容是关于广州市的基本信息,包括但不限于地理位置、著名景点、文化特色等。
【对话示例框架】:
1. 用户提问或表达兴趣。
2. 机器人基于预设的信息库进行回答。
3. 可以根据用户进一步的询问提供更详细的信息。
【提示要点】:
- 地理位置:位于中国南部,广东省省会城市。
- 著名景点:珠江夜游、白云山、广州塔(小蛮腰)、陈家祠等。
- 文化特色:广府文化、早茶文化、粤菜特色等。
- 其他相关信息:人口数量、面积大小、著名历史事件或人物等。
【示例对话】:
用户:我想了解一些关于广州的信息。
机器人:当然可以!广州位于中国南部的广东省,是省会城市。这里有许多著名的景点和美食。比如珠江夜游非常受欢迎,还有白云山和广州塔(小蛮腰)等。另外,广州还是广府文化的发源地之一,您可以品尝到地道的早茶和粤菜。
用户:广州有什么特别的文化传统吗?
机器人:广州拥有丰富多样的文化特色,例如早茶文化、广东音乐等。特别是早茶文化,在广州非常流行,许多老店提供正宗的粤式点心。
\```
Running step 88119 ea 0-335 b-4 d 54-a 6 e 1-6 efb 19 fdb 1 fe. Step input: None
=== Calling Function ===
Calling function: get_tools with args: {"task": "\u 63 d 0\u 4 f 9 b\u 5173\u 4 e 8 e\u 5 e 7 f\u 5 dde\u 7684\u 4 fe 1\u 606 f"}
=== Function Output ===
['广州']
> Running step 5 c 4204 c 4-4127-4 c 0 d-9 ca 5-4885 e 3732121. Step input: None
=== Calling Function ===
Calling function: create_agent with args: {"system_prompt": ..., "tool_names": ["\u 5 e 7 f\u 5 dde"]}
=== Function Output ===
Agent created successfully.
> Running step c 52 f 75 f 1-f 75 b-434 e-b 9 ae-2 eaa 316677 a 0. Step input: None
=== LLM Response ===
Great! The agent has been created successfully. When interacting with the user, it will provide information about Guangzhou based on the system prompt provided.
Here is an example of how a conversation might go:
**User:** 我想了解一些关于广州的信息。
**Agent:** 当然可以!广州位于中国南部的广东省,是省会城市。这里有许多著名的景点和美食。比如珠江夜游非常受欢迎,还有白云山和广州塔(小蛮腰)等。另外,广州还是广府文化的发源地之一,您可以品尝到地道的早茶和粤菜。
**User:** 广州有什么特别的文化传统吗?
**Agent:** 广州拥有丰富多样的文化特色,例如早茶文化、广东音乐等。特别是早茶文化,在广州非常流行,许多老店提供正宗的粤式点心。
Feel free to test the agent with more questions or scenarios about Guangzhou!
1
agent_cache["agent"].query('广州所有的4A级旅游景点')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
> Running step b 2 a 18 ce 0-648 a-41 ae-8271-f 1 b 92 b 781 d 8 b. Step input: 广州所有的 4 A 级旅游景点
Thought: 我需要使用广州工具来获取广州所有 4 A 级的旅游景点信息。
Action: 广州
Action Input: {'input': '广州 4 A 级旅游景点'}
Observation: 广州的 4 A 级旅游景点包括:
1. 中山纪念堂 - 越秀区东风中路 259 号
2. 莲花山旅游区 - 番禺区石楼镇西门路 18 号
3. 宝墨园 - 番禺区沙湾镇紫坭村
4. 西汉南越王博物馆 - 广州市解放北路 867 号
5. 黄花岗公园 - 广州市先烈中路 79 号
6. 越秀公园 - 广州市解放北路 988 号
7. 碧水湾温泉度假村 - 从化流溪温泉旅游度假区(良口)
8. 华南植物园 - 广州市天河区天源路 1190 号
9. 广州动物园 - 广州市先烈中路 120 号
10. 正佳广场商贸旅游区 - 广州市天河路 228 号
> Running step 0 e 0 c 0 f 06-7719-40 ed-8 dc 5-0 dac 9 a 370137. Step input: None
Thought: 我可以使用获取到的信息来回答用户的问题,我将用中文作答。
Answer: 广州的 4 A 级旅游景点包括:中山纪念堂(地址:越秀区东风中路 259 号)、莲花山旅游区(地址:番禺区石楼镇西门路 18 号)、宝墨园(地址:番禺区沙湾镇紫坭村)、西汉南越王博物馆(地址:广州市解放北路 867 号)、黄花岗公园(地址:广州市先烈中路 79 号)、越秀公园(地址:广州市解放北路 988 号)、碧水湾温泉度假村(地址:从化流溪温泉旅游度假区,良口镇)、华南植物园(地址:广州市天河区天源路 1190 号)、广州动物园(地址:广州市先烈中路 120 号)和正佳广场商贸旅游区(地址:广州市天河路 228 号)。
Response (response='广州的 4 A 级旅游景点包括:中山纪念堂(地址:越秀区东风中路 259 号)、莲花山旅游区(地址:番禺区石楼镇西门路 18 号)、宝墨园(地址:番禺区沙湾镇紫坭村)、西汉南越王博物馆(地址:广州市解放北路 867 号)、黄花岗公园(地址:广州市先烈中路 79 号)、越秀公园(地址:广州市解放北路 988 号)、碧水湾温泉度假村(地址:从化流溪温泉旅游度假区,良口镇)、华南植物园(地址:广州市天河区天源路 1190 号)、广州动物园(地址:广州市先烈中路 120 号)和正佳广场商贸旅游区(地址:广州市天河路 228 号)。', source_nodes=[NodeWithScore (node=TextNode (id_='fb 7 ee 9 fe-07 a 0-49 dc-84 e 3-02 c 298396473', embedding=None, metadata={'file_path': '..\\..\\data\\citys\\广州. Md', 'file_name': '广州. Md', 'file_size': 166691, 'creation_date': '2024-12-26', 'last_modified_date': '2024-12-26'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo (node_id='03 b 5365 f-9 a 5 f-4 ef 7-8 ed 7-9147 ed 60 f 78 b', node_type='4', metadata={'file_path': '..\\..\\data\\citys\\广州. Md', 'file_name': '广州. Md', 'file_size': 166691, 'creation_date': '2024-12-26', 'last_modified_date': '2024-12-26'}, hash='3637 de 55 c 2 f 1 c 306 b 79 c 1032 e 6 c 8 f 3791 a 8 a 3836 acf 30 f 65 f 8 f 9 ebff 0116 e 09 c'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo (node_id='e 088 bf 6 b-b 4 e 1-4 d 7 c-85 e 9-0 eb 2553944 e 2', node_type='1', metadata={'file_path': '..\\..\\data\\citys\\广州. Md', 'file_name': '广州. Md', 'file_size': 166691, 'creation_date': '2024-12-26', 'last_modified_date': '2024-12-26'}, hash='82 d 78 d 94 c 0737 d 7 c 7257 d 3 fb 162 febbd 8 acfaa 3 b 404 eb 6 a 72 b 2 b 9 a 2238 ce 738 e')}, metadata_template='{key}: {value}', metadata_separator='\n', text='2023 年,广州市接待过夜旅游者 5544.97 万人次,比上年增长 45.0%。其中,入境旅游者 377.41 万人次,增长 1.4 倍;境内旅游者 5167.55 万人次,增长 40.8%。在入境旅游人数中,外国人 131.58 万人次,增长 2.6 倍;香港、澳门和台湾同胞 245.83 万人次,增长 1.1 倍。文旅消费总额 3309.49 亿元,增长 47.3%。入境文旅消费 26.79 亿美元,增长 1.5 倍。\r\n\r\nA 级类别\r\n\r\n 所在区\r\n\r\n 名称\r\n\r\n 详细地址\r\n\r\n 5 A\r\n\r\n 番禺\r\n\r\n 长隆旅游度假区\r\n\r\n 广州市番禺区迎宾路\r\n\r\n 5 A\r\n\r\n 白云\r\n\r\n 白云山风景名胜区\r\n\r\n 广州市广园中路\r\n\r\n 4 A\r\n\r\n 越秀\r\n\r\n 中山纪念堂\r\n\r\n 广州市东风中路 259 号\r\n\r\n 4 A\r\n\r\n 番禺\r\n\r\n 莲花山旅游区\r\n\r\n 广州市番禺区石楼镇西门路 18 号\r\n\r\n 4 A\r\n\r\n 番禺\r\n\r\n 宝墨园\r\n\r\n 广州市番禺区沙湾镇紫坭村\r\n\r\n 4 A\r\n\r\n 越秀\r\n\r\n 西汉南越王博物馆\r\n\r\n 广州市解放北路 867\r\n\r\n 4 A\r\n\r\n 越秀\r\n\r\n 黄花岗公园\r\n\r\n 广州市先烈中路 79 号\r\n\r\n 4 A\r\n\r\n 越秀\r\n\r\n 越秀公园\r\n\r\n 广州市解放北路 988 号\r\n\r\n 4 A\r\n\r\n 从化\r\n\r\n 碧水湾温泉度假村\r\n\r\n 广州市从化流溪温泉旅游度假区(良口)\r\n\r\n 4 A\r\n\r\n 越秀\r\n\r\n 广州动物园\r\n\r\n 广州市先烈中路 120 号\r\n\r\n 4 A\r\n\r\n 天河\r\n\r\n 华南植物园\r\n\r\n 广州市天河区天源路 1190 号\r\n\r\n 4 A\r\n\r\n 越秀\r\n\r\n 广州烈士陵园\r\n\r\n 广州市中山二路 92 号\r\n\r\n 4 A\r\n\r\n 荔湾\r\n\r\n 陈家祠\r\n\r\n 广州市中山七路恩龙里 34 号\r\n\r\n 4 A\r\n\r\n 番禺\r\n\r\n 广东科学中心\r\n\r\n 广州市大学城西六路 168 号\r\n\r\n 4 A\r\n\r\n 花都\r\n\r\n 九龙湖旅游度假区\r\n\r\n 广州市花都区花东镇九龙湖社区\r\n\r\n 4 A\r\n\r\n 黄埔\r\n\r\n 南海神庙\r\n\r\n 广州市黄埔区庙头旭日街 22 号\r\n\r\n 4 A\r\n\r\n 花都\r\n\r\n 石头记矿物园\r\n\r\n 广州市花都区珠宝城大观路 1 号\r\n\r\n 4 A\r\n\r\n 天河\r\n\r\n 正佳广场商贸旅游区\r\n\r\n 广州市天河路 228 号\r\n\r\n 参考资料:', mimetype='text/plain', start_char_idx=232, end_char_idx=1142, metadata_seperator='\n', text_template='{metadata_str}\n\n{content}'), score=0.7582903864531836), NodeWithScore (node=TextNode (id_='9 d 6 e 7956-0 e 1 c-487 f-b 778-5 e 48156 c 8 c 33', embedding=None, metadata={'file_path': '..\\..\\data\\citys\\广州. Md', 'file_name': '广州. Md', 'file_size': 166691, 'creation_date': '2024-12-26', 'last_modified_date': '2024-12-26'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo (node_id='9 a 14 f 03 c-7 c 65-4989-bc 21-a 2 bb 7 aa 574 f 1', node_type='4', metadata={'file_path': '..\\..\\data\\citys\\广州. Md', 'file_name': '广州. Md', 'file_size': 166691, 'creation_date': '2024-12-26', 'last_modified_date': '2024-12-26'}, hash='47945 b 59 d 236758 c 066 de 48 a 3 edab 94 accbf 5 bc 90 b 0 d 540 f 632064 aa 58 f 1 db 6 c'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo (node_id='c 87 dbdfa-6 e 15-46 e 1-86 e 3-83 c 4134857 e 8', node_type='1', metadata={}, hash='c 06 c 9360 a 7 ec 5618 c 230 b 7 d 8863 e 2251 d 3 b 198 b 65 e 14363 e 608 c 4 d 51 cfd 40 af 3')}, metadata_template='{key}: {value}', metadata_separator='\n', text='重要景点\n 分类\r\n\r\n 名称\r\n\r\n 人文历史\r\n\r\n 陈家祠\r\n\r\n 宝墨园\r\n\r\n 沙面\r\n\r\n 岭南印象园\r\n\r\n 西汉南越王博物馆\r\n\r\n 南越国宫署遗址\r\n\r\n 越秀公园\r\n\r\n 沙湾古镇\r\n\r\n 黄埔古港\r\n\r\n 广东省博物馆\r\n\r\n 余荫山房\r\n\r\n 十三行博物馆\r\n\r\n 粤剧艺术博物馆\r\n\r\n 广州民俗博物馆\r\n\r\n 荔枝湾\r\n\r\n 荔湾博物馆\r\n\r\n 骆秉章光禄大夫家庙\r\n\r\n 邓世昌纪念馆\r\n\r\n 广州艺术博物院\r\n\r\n 广东美术馆\r\n\r\n 锦纶会馆\r\n\r\n 万木草堂\r\n\r\n 粤海关大楼\r\n\r\n 庐江书院\r\n\r\n 詹天佑故居\r\n\r\n 塱头古村\r\n\r\n 玉岩书院\r\n\r\n 洪秀全故居\r\n\r\n 宗教古迹\r\n\r\n 石室圣心大教堂\r\n\r\n 南海神庙\r\n\r\n 广州大佛寺\r\n\r\n 光孝寺\r\n\r\n 五仙观\r\n\r\n 三元宫\r\n\r\n 六榕寺\r\n\r\n 华林寺\r\n\r\n 圆玄道观\r\n\r\n 南沙天后宫\r\n\r\n 仁威庙\r\n\r\n 广州城隍庙\r\n\r\n 海幢寺\r\n\r\n 怀圣寺\r\n\r\n 黄大仙祠\r\n\r\n-\r\n\r\n 革命历史\r\n\r\n 黄埔军校\r\n\r\n 黄花岗七十二烈士墓园\r\n\r\n 广州起义烈士陵园\r\n\r\n 中山纪念堂\r\n\r\n 孙中山大元帅府\r\n\r\n 中华全国总工会旧址\r\n\r\n 三元里抗英斗争旧址\r\n\r\n 农民运动讲习所旧址\r\n\r\n 广州公社旧址\r\n\r\n 十九路军淞沪抗日阵亡将士陵园\r\n\r\n 中共“三大”会址\r\n\r\n-\r\n\r\n 自然风光\r\n\r\n 白云山\r\n\r\n 广州抽水蓄能电站度假区\r\n\r\n 南沙湿地公园\r\n\r\n 白水寨风景名胜区\r\n\r\n 碧水湾温泉度假村\r\n\r\n 海珠湖国家湿地公园\r\n\r\n 九龙湖度假区\r\n\r\n 芙蓉嶂风景区\r\n\r\n 石门国家森林公园\r\n\r\n 流溪河国家森林公园\r\n\r\n 莲花山旅游区\r\n\r\n 天鹿湖森林公园\r\n\r\n 黄埔丹水坑风景区\r\n\r\n 七星岗古海岸遗址科学公园\r\n\r\n 香雪公园\r\n\r\n 帽峰山森林公园\r\n\r\n 主题公园', mimetype='text/plain', start_char_idx=2, end_char_idx=750, metadata_seperator='\n', text_template='{metadata_str}\n\n{content}'), score=0.6915303394085558)], metadata=None)
1
2
3
# 直接使用RAG
response=tool_dict['广州'].query_engine.query('广州所有的4A级旅游景点')
print(response.response)
1
2
3
4
5
6
7
8
9
10
11
12
广州的 4 A 级旅游景点包括:
1. 番禺长隆旅游度假区
2. 白云山风景名胜区
3. 莲花山旅游区
4. 宝墨园
5. 西汉南越王博物馆
6. 黄花岗公园
7. 越秀公园
8. 碧水湾温泉度假村
9. 华南植物园
10. 广州动物园
11. 正佳广场商贸旅游区
1
agent_cache["agent"].query('广州的民间手工艺有哪些?')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
> Running step 96 a 66369-191 e-442 c-bbb 8-a 9 f 92 c 885 a 9 a. Step input: 广州的民间手工艺有哪些?
Thought: 我需要使用工具来获取关于广州民间手工艺的信息。
Action: 广州
Action Input: {'input': '广州的民间手工艺有哪些?'}
Observation: 广州的民间手工艺包括广绣、广彩、玉雕和木雕。这些传统工艺各具特色:
- 广绣是珠三角地区的刺绣工艺总称,与潮州刺绣合称为粤绣,是中国四大名绣之一。
- 广彩是一种釉上彩瓷,又称广州织金彩瓷,色彩鲜艳,具有浓厚的岭南地方特色和中西合璧的艺术风格。
- 玉雕是以玉石为材料进行雕刻的传统工艺,技艺精湛,作品精美。
- 木雕以酸枝木、紫檀木等木材为主料,制作出各种精美的工艺品。
> Running step 9 a 3586 da-8 f 52-4 a 7 a-86 bb-623 cb 92 b 4 ee 6. Step input: None
Thought: 我可以回答这个问题了。
Answer: 广州的民间手工艺包括广绣、广彩、玉雕和木雕。其中:
1. 广绣是珠三角地区的刺绣工艺总称,与潮州刺绣合称为粤绣,是中国四大名绣之一。
2. 广彩是一种釉上彩瓷,又称广州织金彩瓷,色彩鲜艳,具有浓厚的岭南地方特色和中西合璧的艺术风格。
3. 玉雕是以玉石为材料进行雕刻的传统工艺,技艺精湛,作品精美。
4. 木雕以酸枝木、紫檀木等木材为主料,制作出各种精美的工艺品。
Response (response='广州的民间手工艺包括广绣、广彩、玉雕和木雕。其中:\n\n 1. 广绣是珠三角地区的刺绣工艺总称,与潮州刺绣合称为粤绣,是中国四大名绣之一。\n 2. 广彩是一种釉上彩瓷,又称广州织金彩瓷,色彩鲜艳,具有浓厚的岭南地方特色和中西合璧的艺术风格。\n 3. 玉雕是以玉石为材料进行雕刻的传统工艺,技艺精湛,作品精美。\n 4. 木雕以酸枝木、紫檀木等木材为主料,制作出各种精美的工艺品。', source_nodes=[NodeWithScore (node=TextNode (id_='71 c 6 a 1 af-f 1 ce-4 a 0 a-88 a 4-dc 5 bf 5609 e 3 a', embedding=None, metadata={'file_path': '..\\..\\data\\citys\\广州. Md', 'file_name': '广州. Md', 'file_size': 166691, 'creation_date': '2024-12-26', 'last_modified_date': '2024-12-26'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo (node_id='8 e 451 c 75-002 a-45 e 9-96 c 9-eb 7 dcca 0 c 629', node_type='4', metadata={'file_path': '..\\..\\data\\citys\\广州. Md', 'file_name': '广州. Md', 'file_size': 166691, 'creation_date': '2024-12-26', 'last_modified_date': '2024-12-26'}, hash='613 a 2625 bca 44 f 4 d 741 ae 906 e 167 a 1 fdcea 5 a 04 a 508 c 291173 a 9840 a 81932117'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo (node_id='eab 8 b 4 ee-3150-49 ad-a 359-df 8 f 848 f 6 b 20', node_type='1', metadata={'file_path': '..\\..\\data\\citys\\广州. Md', 'file_name': '广州. Md', 'file_size': 166691, 'creation_date': '2024-12-26', 'last_modified_date': '2024-12-26'}, hash='e 49 a 61322 f 48 cc 67 c 24 d 2 f 5 a 9752729 ae 2136 b 825 e 122 d 052 dc 3 fad 21 c 5 b 25 f 8')}, metadata_template='{key}: {value}', metadata_separator='\n', text='广木作与京木作、苏木作并列为中国家具三大流派。\r\n\r\n 木雕\r\n\r\n 牙雕\r\n\r\n 牙雕是以象牙为原材料进行雕刻的传统手工技艺。广州象牙雕刻,又称广州牙雕,是以象牙为原料进行雕刻的传统民间手工技艺,产品以镂空、透深的雕刻技艺闻名于世,以牙球、画舫、人物、微刻书画为代表。2006 年 5 月 10 日,广州牙雕入选广东省第一批非遗名录;同月 20 日,广州象牙雕刻入选第一批国家级非遗名录。\r\n\r\n 牙雕\r\n\r\n 剪纸\r\n\r\n 广州剪纸艺术是广东剪纸的重要代表,有着近 500 年的历史。剪纸被誉为指尖上的艺术,是中国传统文化的一大瑰宝,有着悠久的历史和广泛的群众基础,是各种民俗活动的重要组成部分。\r\n\r\n 剪纸', mimetype='text/plain', start_char_idx=658, end_char_idx=949, metadata_seperator='\n', text_template='{metadata_str}\n\n{content}'), score=0.6114093577949807), NodeWithScore (node=TextNode (id_='eab 8 b 4 ee-3150-49 ad-a 359-df 8 f 848 f 6 b 20', embedding=None, metadata={'file_path': '..\\..\\data\\citys\\广州. Md', 'file_name': '广州. Md', 'file_size': 166691, 'creation_date': '2024-12-26', 'last_modified_date': '2024-12-26'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo (node_id='8 e 451 c 75-002 a-45 e 9-96 c 9-eb 7 dcca 0 c 629', node_type='4', metadata={'file_path': '..\\..\\data\\citys\\广州. Md', 'file_name': '广州. Md', 'file_size': 166691, 'creation_date': '2024-12-26', 'last_modified_date': '2024-12-26'}, hash='613 a 2625 bca 44 f 4 d 741 ae 906 e 167 a 1 fdcea 5 a 04 a 508 c 291173 a 9840 a 81932117'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo (node_id='71 c 6 a 1 af-f 1 ce-4 a 0 a-88 a 4-dc 5 bf 5609 e 3 a', node_type='1', metadata={}, hash='ea 3 f 3 aeec 61 ab 5740138 b 9 f 1 fe 50 fbf 02 c 756 ec 9 f 58590 eae 1 e 17161252 ace 68')}, metadata_template='{key}: {value}', metadata_separator='\n', text='民间手工艺\n 传统工艺“三雕一彩一绣”中广绣为中国“四大名绣”之一;广彩从清代开始就行销海外;广式木雕、牙雕、玉雕则以雕刻中的镂空、透深技法闻名。\r\n\r\n 名称\r\n\r\n 介绍\r\n\r\n 图片\r\n\r\n 广绣\r\n\r\n 广绣是珠三角民间刺绣工艺的总称,以构图饱满,形象传神,纹理清晰,色泽富丽,针法多样,善于变化的艺术特色而闻名。广绣与潮州刺绣合称粤绣,与湘绣、蜀绣和苏绣并称中国四大名绣。广绣最早的文字记载可上溯至唐永贞元年(公元 805 年),历史上广州丝织业行业会馆锦纶会馆位于荔湾区。\r\n\r\n 广绣\r\n\r\n 广彩\r\n\r\n 广彩的全称是“广州织金彩瓷”,是广州特有的一种釉上彩瓷,是以销往外国为主要目的而制作的瓷器,初创于清朝康熙年间,成熟于乾隆、嘉庆时期。广彩瓷器色彩鲜艳、构图繁密、金碧辉煌,具有浓郁的岭南地方特色和中西合璧的艺术风格。\r\n\r\n 广彩\r\n\r\n 玉雕\r\n\r\n 玉雕,一种加工雕琢玉石的传统工艺,即手艺精湛的工艺师根据不同玉料的天然颜色和自然形状,反复设计、精心琢磨,将玉石雕刻成精美工艺品。2008 年,玉雕入选第二批国家级非物质文化遗产名录。\r\n\r\n 玉雕\r\n\r\n 木雕\r\n\r\n 广州木雕以雕工精细而闻名,其所用木料主要是酸枝木、紫檀木、樟木、柚木、坤甸木、花梨木等。制成品包括红木雕刻家具、樟木箱、红木小件、红木宫灯、建筑装饰木雕等。\r\n\r\n 荔湾区的木雕业在明代已兴起,清代最具盛名。明代至清初,文昌北路一带开设了数十家酸枝木器作坊。清代雍正至乾隆年间,一批木雕艺人被皇帝召入宫中养心殿造办处,制作御用硬木器具,世称“广木作”。广木作与京木作、苏木作并列为中国家具三大流派。\r\n\r\n 木雕\r\n\r\n 牙雕\r\n\r\n 牙雕是以象牙为原材料进行雕刻的传统手工技艺。广州象牙雕刻,又称广州牙雕,是以象牙为原料进行雕刻的传统民间手工技艺,产品以镂空、透深的雕刻技艺闻名于世,以牙球、画舫、人物、微刻书画为代表。', mimetype='text/plain', start_char_idx=2, end_char_idx=790, metadata_seperator='\n', text_template='{metadata_str}\n\n{content}'), score=0.5578619538607528)], metadata=None)
1
2
3
# 直接使用RAG
response=tool_dict['广州'].query_engine.query('广州的民间手工艺有哪些?')
print(response.response)
1
2
3
4
5
广州的民间手工艺主要包括广绣、广彩、玉雕和木雕等。这些传统工艺各具特色:
- 广绣:作为珠三角民间刺绣工艺的总称,以其构图饱满、形象传神、纹理清晰、色泽富丽以及针法多样而著称,是中国四大名绣之一。
- 广彩:全称为“广州织金彩瓷”,是一种以销往外国为主要目的的瓷器,色彩鲜艳、构图繁密、金碧辉煌,具有浓郁的地方特色和中西合璧的艺术风格。
- 玉雕:加工雕琢玉石的传统工艺,根据不同玉料的特点进行设计与琢磨,制作成精美工艺品。
- 木雕:广州木雕以雕工精细著称,常用酸枝木、紫檀木等材料,制成家具、樟木箱等多种成品。