使用 HuggingFace Transformers Agent 构建AI代理检索增强生成 (RAG)

使用 HuggingFace Transformers Agent 构建AI代理检索增强生成 (RAG) img

Agentic RAG 与标准 RAG 工作流程

介绍

传统 RAG 设置

img

标准 RAG

大型语言模型 (LLM) 经过训练可以执行因果语言建模,可以处理各种任务,但它们通常在逻辑、计算和搜索等基本任务上遇到困难。当在它们表现不佳的领域提出问题时,它们通常无法生成我们期望的答案。这就是检索增强生成发挥作用的地方。

在传统的 RAG 设置中,用户查询通过基于语义的相似性搜索运行,该搜索从知识库中寻找最相关的块。然后将增强的上下文传递给 LLM 以合成响应,然后将最终答案呈现给用户。

但是如果提出的问题模棱两可、不太清楚或问法不当,会发生什么情况呢?在这种情况下,即使信息实际上存在于知识库中,RAG 管道也很可能产生幻觉。

这里 Agentic RAG 发挥作用,它能够分析 RAG 管道生成的响应。在这里,Agent 可以进行规划、分析和响应。

什么是 Agentic RAG?

简单来说,Agentic RAG =基于代理的 RAG 实现。

考虑 Agentic RAG 就像拥有一支专业研究人员团队为您服务,每个人都拥有独特的技能和专业知识,齐心协力满足您的信息需求。无论您需要比较不同文档的观点、探索特定文本的细节,还是整合来自多个摘要的见解,agentic RAG 代理都已做好充分准备,准确有效地执行任务。

img

代理机构 RAG

Agentic RAG 的主要功能和优势

  • **精心策划的问答系统:**Agentic RAG 将问答流程分解为可管理的步骤,从而简化了流程。它为每个任务分配合适的代理,并确保无缝协调以实现最佳结果。
  • **目标驱动:**这些代理能够理解和追求特定目标,从而实现更复杂、更有意义的互动。
  • **规划与推理:**该框架内的智能体拥有先进的规划和多步骤推理能力。它们可以设计有效的信息检索、分析和综合策略来解决复杂的问题。
  • **工具使用和适应性:**Agentic RAG 代理可以利用外部工具和资源,例如搜索引擎、数据库和专门的 API,来增强其信息收集和处理能力。
  • **情境感知:**Agentic RAG 系统会考虑当前情境、过去的交互和用户偏好,以做出明智的决策并采取适当的行动。
  • **不断学习:**这些智能代理旨在不断学习和发展。当它们遇到新的挑战和信息时,它们的知识库就会扩大,从而提高它们解决复杂问题的能力。
  • **灵活性和定制性:**Agentic RAG 框架提供了卓越的灵活性,允许定制以满足特定要求和领域。代理及其功能可以根据特定任务和信息环境进行定制。
  • **提高准确性和效率:**通过利用大型语言模型 (LLM) 和基于代理的系统的优势,与传统方法相比,Agentic RAG 在问答方面实现了更高的准确性和效率。
  • **开辟新的可能性:**这项技术为个性化助理、客户服务等各个领域的创新应用铺平了道路。

代理 RAG 与传统 RAG 之间的差异

img

任何来源

可用的不同 Agentic 框架:

  1. LangGraphLangGraph 是一个使用大型语言模型 (LLM) 构建有状态、多参与者应用程序的库,用于创建代理和多代理工作流
  2. AutoGen: AutoGen 是 Microsoft 的一个开源框架,旨在构建利用大型语言模型 (LLM) 的多代理应用程序。它提供了高级抽象,以促进创建复杂的工作流,其中多个代理可以协作、通信和共同执行任务。
  3. CrewAI: CrewAI 是一个开源框架,用于构建利用大型语言模型 (LLM) 的多智能体系统。它允许开发人员定义和配置多个智能体,每个智能体都有自己的角色、目标和背景故事,以协作完成复杂的任务。
  4. Transformers AgentTransformers Agent 是 Hugging Face 最近发布的一款工具,它能够创建能够通过自然语言交互执行各种任务的代理。它作为一个界面,允许用户利用 Hugging Face 平台上托管的各种工具和模型,从而促进文本生成、图像创建、音频处理等任务。

在我们的实施中,我们使用了使用 Transformers Agent 的 ReAct Agent。

什么是 ReAct 代理?

ReAct = 推理 + 法律硕士

升级到更高级别需要结合在复杂查询上迭代执行的推理和操作。本质上,这包括将路由、查询规划和工具使用组合到一个实体中。ReAct 代理能够处理顺序多部分查询,同时保持状态(在内存中)。该过程涉及以下步骤:

  1. 在接收到用户输入查询后,代理会确定要使用的适当工具(如有必要),并收集该工具所需的输入。
  2. 该工具通过必要的输入进行调用,并存储其输出。
  3. 然后,代理接收工具的历史记录,包括输入和输出,并根据这些信息确定后续的行动方案。
  4. 该过程不断重复,直到代理完成任务并响应用户。

img

任何来源

Transformers Agent 的主要特点:

  • **自然语言 API:**用户可以使用自然语言与代理交互,从而无需大量编程知识即可更轻松地定义任务。
  • **工具集成:**代理可以从精选的工具中进行选择来完成特定任务,类似于 LangChain 代理提供的功能。
  • 代理类型: Transformers Agent 包括不同类型的代理,例如:
  • **CodeAgent:**通过一次性生成并运行代码块来执行任务。
  • **ReactAgent:**以逐步的方式运行,允许更具交互性和迭代性的任务执行。
  • **多模式功能:**代理可以处理各种模式,使其能够跨文本、图像和音频执行任务。
  • **实验性 API:**作为一个实验性框架,Transformers Agent 可能会发生变化,并且其功能可能会随着时间的推移而发展。

应用:

Transformers Agent 专为广泛的自然语言处理任务而设计,包括:

  • 问答
  • 文本摘要
  • 图像生成
  • 语音转文本
  • 文本分类

对于希望自动化复杂工作流程并通过对话界面增强用户与 AI 交互的开发人员和研究人员来说,此工具特别有价值。

使用的技术堆栈:

  • Langchain:加载文档并对文档进行分块
  • Transformers: -构建 Agentic 系统
  • FAISS : 矢量商店
  • Groq:用于函数调用和 LLM 引擎
  • Colab:代码实现(cpu)

代码实现

安装所需的依赖项

!pip 安装"git+https://github.com/huggingface/transformers.git#egg=transformers[agents]"
 !pip 安装 langchain 
!pip 安装 langchain-community 
!pip 安装 sentence-transformers 
!pip 安装 faiss-cpu 
!pip 安装 groq 
!pip 安装 -qU langchain-groq 
!pip 安装 unstructured 
!pip 安装"unstructured[pdf]"
 !pip 安装 -U langchain-huggingface

导入所需的依赖项

导入pandas作为pd从transformers
导入数据集从langchain导入AutoTokenizer。docstore。document从langchain导入Document。text_splitter从langchain导入RecursiveCharacterTextSplitter。vectorstores从langchain_community导入FAISS。embeddings从langchain_community导入HuggingFaceEmbeddings。vectorstores。utils从tqdm导入DistanceStrategy从transformers导入tqdm。agents导入Tool 、HfEngine 、ReactJsonAgent从huggingface_hub导入InferenceClient
 
  
  
  
  
  

  
 

加载文档

导入操作系统
os.mkdir ( " DATA" ) #https : //www.researchgate.net/publication/233850271_Fibromyalgia_Syndrome_Etiology_Pathogenesis_Diagnosis_and_Treatment#来自langchain_community.document_loaders导入DirectoryLoader loader = DirectoryLoader ( '/content/DATA' , glob= " **/*.pdf" , show_progress= True ) docs = loader.load ( )


  

初始化文本分割器

#初始化文本分割器
tokenizer = AutoTokenizer . from_pretrained ( "thenlper/gte-small" ) 
text_splitter = RecursiveCharacterTextSplitter . from_huggingface_tokenizer ( 
    tokenizer, 
    chunk_size= 200 , 
    chunk_overlap= 20 , 
    add_start_index= True , 
    strip_whitespace= True , 
    Separators=[ "\n\n" , "\n" , "." , " " , "" ], 
)

拆分文档并删除重复项

#拆分文档并删除重复项logger.info
(“拆分文档......”)
docs_processed = [] 
unique_texts = {} 
for doc in  tqdm(docs):new_docs
     = text_splitter.split_documents ([doc])for new_doc in new_docs:if new_doc.page_content not in unique_texts:            unique_texts[new_doc.page_content ] = True             docs_processed.append ( new_doc)
     
         

初始化嵌入模型

从langchain_huggingface导入 HuggingFaceEmbeddings
 model_name = “thenlper/gte-small”
 model_kwargs = { 'device' : 'cpu' } 
encode_kwargs = { 'normalize_embeddings' : False } 
embedding_model = HuggingFaceEmbeddings ( 
    model_name=model_name, 
    model_kwargs=model_kwargs, 
    encode_kwargs=encode_kwargs 
)

建立索引并加载文本向量

#创建矢量数据库logger.info
 ( "正在创建矢量数据库..." ) vectordb = FAISS.from_documents (     documents=docs_processed, embedding =     embedding_model,     distance_strategy= DistanceStrategy.COSINE , )

创建检索工具

class  RetrieverTool(Tool):
    name = “retriever”
     description = “使用语义相似性,从知识库中检索一些与输入查询具有最接近嵌入的文档。”
     inputs = { 
        “query”:{ 
            “type”:“text”,
            “description”:“要执行的查询。这应该在语义上接近你的目标文档。使用肯定形式而不是问题。”,
        } 
    } 
    output_type = “text”

     def __init__(self,vectordb,**kwargs):
        super()。__ init__ ( **kwargs)
        self。vectordb = vectordb     def forward(self,query:str)-> str : assert         isinstance ( query,str),“你的搜索查询必须是字符串”         docs = self。vectordb。similarity_search (query             ,            k = 7,        )return “\ n已检索到的文档:\n” + “”。join(            [f “===== Document {str(i)} =====\n” + doc.page_content for i, doc in enumerate(docs)]         )#创建RetrieverTool的实例retriever_tool = RetrieverTool (vectordb )









         
  

为标准 RAG 初始化 LLM

从langchain_groq导入 ChatGroq
从google.colab导入 用户数据导入
操作系统操作系统
。environ [ “GROQ_API_KEY” ] = 用户数据。获取('GROQ_API_KEY')# llm = ChatGroq(模型    = “llama3-70b-8192”,    温度 = 0,    max_tokens = 2048,  )

初始化 Agent 的 LLM 引擎

从groq导入o s从typing导入 Groq从transformers.agents.llm_engine导入MessageRole、get_clean_message_list从 huggingface_hub 导入 InferenceClient openai_role_conversions = {MessageRole.TOOL_RESPONSE:MessageRole.USER,} class OpenAIEngine:def __init__ ( self , model_name = " llama3 - groq - 70b - 8192 -     tool - use - preview " ) : self.model_name = model_name         self.client = Groq         ( api_key = os.getenv             ( " GROQ_API_KEY " ) ,         )     def __call__ ( self, messages, stop_sequences=[]): messages         = get_clean_message_list (messages , role_conversions= openai_role_conversions ) response         = self.client.chat.completions .创建(模型            =self。model_name ,            消息=messages,            停止=stop_sequences,            温度= 0.5,            max_tokens= 2048         )返回响应。选择[ 0 ]。消息。内容

 
  
 


    



 
















        
llm_engine = OpenAIEngine()

创建代理

#创建代理 agent 
= ReactJsonAgent (tools=[retriever_tool], llm_engine=llm_engine, max_iterations= 4 , verbose= 2 )

调用代理的辅助函数

#运行代理的函数
def run_agentic_rag ( question : str) -> str : 
    advanced_question = f "" "使用知识库中包含的信息(您可以通过“检索器”工具访问这些信息),
对以下问题给出全面答案。
仅回答所提问题,回答应简洁且与问题相关。
如果找不到信息,请不要放弃,并尝试使用不同的参数再次调用检索器!
通过使用语义不同的查询多次调用检索器工具,确保完全涵盖问题。
您的查询不应是问题,而应是肯定形式的句子:例如,查询应该是“从 Hub bf16 权重加载模型”,而不是“如何从Hub bf16权重加载模型” 。 问题:{ question } " " " return agent.run ( enhanced_question) 




    
#示例用法
question = “描述纤维肌痛。”
 answer = run_agentic_rag (question) 
print (f “问题:{question}” ) 
print (f “答案:{answer}” ) 

#####响应#################### 
========新任务 ========
使用您可以通过“检索器”工具访问的知识库中包含的信息,对以下问题给出全面的答案。只回答所问的问题,回答应简洁且与问题相关。如果找不到信息,请不要放弃并尝试使用不同的参数再次调用您的检索器!通过使用语义不同的查询多次调用检索器工具,确保完全涵盖问题。您的查询不应该是问题,而应该是肯定形式的句子:例如,查询应该是“从 Hub bf16 权重加载模型”,而不是“如何从 Hub bf16 权重加载模型”。问题:描述纤维肌痛。系统提示如下:您是一位专家助手,可以使用JSON工具调用解决任何任务。您将被赋予一项任务,需要您尽力解决。为此,您被授予以下工具的访问权限:“retriever”、“final_answer”使用这些工具的方式是指定一个 json blob,以“ <end_action>”结尾。具体来说,这个json 应该有一个“action”键(要使用的工具的名称)和一个“ action_input”键(工具的输入)。$ ACTION_JSON_BLOB 应该只包含一个动作,不要返回多个动作的列表。它应该用json格式化。不要







 
 

 
 


  尝试转义特殊字符。这是有效$ACTION_JSON_BLOB的模板:{ “action”:$TOOL_NAME,“action_input”:$INPUT } } } }请确保 $INPUT 是适合您所用工具的字典格式,并且如果您可以找到正确的值,请不要将变量名作为输入。您应该始终使用以下格式:想法:您应该始终考虑采取一项行动。然后按如下方式使用该操作:操作:$ACTION_JSON_BLOB观察:操作的结果...(这个想法/行动/观察可以重复 N 次,您应该在需要时采取几个步骤。$ ACTION_JSON_BLOB一次只能使用一个操作。)您可以将上一个操作的结果用作下一个操作的输入。观察将始终是一个字符串:它可以表示一个文件,如“image_1.jpg”。然后,您可以将其用作下一个操作的输入。例如,您可以按如下方式执行操作:观察: “ image_1.jpg”想法:我需要转换上次观察中收到的图像,使其变为绿色。动作:{ “action”:“image_transformer”,“action_input”:{ “image”:“image_1.jpg” } } } } }要为任务提供最终答案,请使用带有“action”的操作 blob :“final_answer”工具。这是完成任务的唯一方法,否则您将陷入循环。所以你的最终输出应该是这样的:

  
  






 



 



 






  
  


 
动作:
{ 
  “action”:“final_answer”,
  “action_input”:{ “answer”:“在此处插入您的最终答案” } } 
} } } } }


以下是使用概念工具的几个示例:
---
任务: “生成此文档中年龄最大的人的图像。” 想法:我将逐步进行并使用以下工具:`document_qa` 查找文档中年龄

最大的人,然后使用` image_generator`根据答案生成图像。动作:{ “action” : “ document_qa ” ,“action_input”:{ “ document”:“document.pdf”,“question” : “提到的年龄最大的人是谁?” } ...动作:{ “action”:“image_generator”,“action_input”:{ “text”:“” 55岁加拿大男子John Doe的肖像。“ ” } } } } } } } } } } } }观察:“image.png”想法:我现在将返回生成的图像。动作:{ “action”:“final_answer”,“action_input”:“image.png” } } } ---任务:“以下运算的结果是什么:5 + 3 + 1294.678?”想法:我将使用 python 代码评估器来计算运算的结果,然后使用`final_answer`工具返回最终答案动作:{ “action”:“python_interpreter”,“action_input”:{ “code”:“5 + 3 + 1294.678” } } } } } } }观察:


  
  







  
     






  
  








    
    

1302.678

想法:现在我知道结果了,我现在就将其返回。
动作:
{ 
  “action”:“final_answer”,
  “action_input”:“1302.678”
 } } } 

---
任务:“哪个城市人口最多,广州还是上海?”

想法:我需要获取这两个城市的人口并进行比较:我将使用工具“搜索”来获取这两个城市的人口。
动作:
{ 
    “action”:“搜索”,
    “action_input”:“广州人口”
 } }
观察:[ ‘截至 2021 年,广州人口为 1500 万。’ ]


想法:现在 让我们使用工具“搜索”获取上海的人口。
动作:
{ 
    “action”:“搜索”,
    “action_input”:“上海人口” 
}
观察:' 2600万(2019年)'

想法:现在我知道上海的人口更多。让我们返回结果。
动作:
{ 
  “action”:“final_answer”,
  “action_input”:“上海”
 }


上面的例子使用了可能不存在的概念工具。您只能访问这些工具:

-检索器:使用语义相似性,从知识库中检索一些与输入查询具有最接近嵌入的文档。
    获取 输入:{ 'query':{ 'type':'text','description':'要执行的查询。这应该在语义上接近您的目标文档。使用肯定形式而不是问题。' }} 

- final_answer:为给定的问题提供最终答案。
    接受 输入:{ 'answer':{ 'type':'text','description': '问题的最终答案' }}

以下是您在解决任务时应始终遵循的规则:
1. 始终提供“思想:”序列和以<end_action>结尾的“动作:”序列,否则您将失败。2 .始终为工具使用正确的参数。切勿在“action_input”字段中使用变量名,而应使用值。3 .仅在需要时调用工具:如果不需要信息,请不要调用搜索代理,请尝试自己解决任务。4 .切勿使用完全相同的参数重复执行先前执行过的工具调用。现在开始!如果您正确解决了任务,您将获得1,000,000美元的奖励。=====新步骤 ===== =====使用最后一条消息调用LLM: ===== { 'role':<MessageRole.USER: 'user'>,'content':'任务:使用知识库中包含的信息(您可以通过 \'retriever\' 工具访问),\n对以下问题给出全面答案。\n仅回答所提问题,回答应简洁且与问题相关。\n如果找不到信息,请不要放弃,并尝试使用不同的参数再次调用您的检索器!\n通过使用语义不同的查询多次调用检索器工具,确保完全涵盖问题。\n您的查询不应该是问题,而应该是肯定形式的句子:例如,查询应该是“从 Hub bf16 权重加载模型”,而不是“如何从 Hub bf16 权重加载模型”。\n\n问题:\n描述纤维肌痛。 '} ===== LLM 的输出消息: =====
  
 
 

 


   


纤维肌痛是一种慢性疾病,其特征是广泛的肌肉疼痛、关节僵硬和疲劳。与纤维肌痛相关的疼痛通常感觉像钝痛或灼热感。它通常出现在身体的多个部位,可能是持续性的,也可能时有时无。纤维肌痛还会导致睡眠障碍、记忆问题和情绪变化。虽然纤维肌痛的确切病因尚不清楚,但据信它涉及影响大脑处理疼痛信号的遗传、环境和神经生物学因素的组合。纤维肌痛无法治愈,但各种治疗方法可以帮助控制症状。这些可能包括药物治疗、生活方式改变和替代疗法。
===== 提取操作 =====
列表索引超出范围
回溯(最近一次调用最后一次):
  文件“/usr/local/lib/python3.10/dist-packages/transformers/agents/agents.py”,第 471 行,在 extract_action 
    split[-2] 中,
IndexError:列表索引超出范围
错误:您的输出中未提供“Action:”标记。
您的输出:
纤维肌痛是一种慢性健康状况,其特征是广泛的肌肉疼痛、关节僵硬和疲劳。与纤维肌痛相关的疼痛通常感觉像钝痛或灼热感。它通常在身体的多个部位感觉到,可能是持续的,也可能时有时无。纤维肌痛还会导致睡眠障碍、记忆问题和情绪变化。虽然纤维肌痛的确切病因尚不清楚,但据信它涉及影响大脑处理疼痛信号的遗传、环境和神经生物学因素的组合。纤维肌痛无法治愈,但各种治疗方法可以帮助控制症状。这些治疗方法可能包括药物治疗、生活方式改变和替代疗法。
一定要包括一个以“行动:”开头的行动!
回溯(最近一次调用最后一次):
  文件“/usr/local/lib/python3.10/dist-packages/transformers/agents/agents.py”,第 471 行,在 extract_action 
    split[-2] 中,
IndexError:列表索引超出范围

在处理上述异常期间,发生了另一个异常:

回溯(最近一次调用最后一次):
  文件“/usr/local/lib/python3.10/dist-packages/transformers/agents/agents.py”,第 756 行,在 direct_run 
    step_logs = self.step()中
  文件“/usr/local/lib/python3.10/dist-packages/transformers/agents/agents.py”,第 919 行,在步骤
    rationale 中,action = self.extract_action(llm_output=llm_output, split_token="Action:")
  文件“/usr/local/lib/python3.10/dist-packages/transformers/agents/agents.py”,第 476 行,在 extract_action 中
    引发 AgentParsingError(
transformers.agents.agents.AgentParsingError:错误:您的输出中未提供“操作:”标记。
您的输出:
纤维肌痛是一种慢性健康状况,其特征是广泛的肌肉疼痛、关节僵硬和疲劳。与纤维肌痛相关的疼痛通常感觉像钝痛或灼热感。它通常在身体的多个部位都有感觉,可能是持续性的,也可能时有时无。纤维肌痛还会导致睡眠障碍、记忆问题和情绪变化。虽然纤维肌痛的确切病因尚不清楚,但据信它涉及影响大脑处理疼痛信号的遗传、环境和神经生物学因素的组合。纤维肌痛无法治愈,但各种治疗方法可以帮助控制症状。这些可能包括药物、生活方式改变和替代疗法。。
请务必包含一个以“操作:”开头的操作!
===== 新步骤 ===== 
===== 使用最后一条消息调用 LLM: ===== 
{'role': <MessageRole.TOOL_RESPONSE: 'tool-response'>, 'content': "[步骤 0 的输出] 错误:错误:您的输出中未提供“操作:”标记。\n您的输出:\n纤维肌痛是一种慢性健康状况,其特征是广泛的肌肉疼痛、关节僵硬和疲劳。与纤维肌痛相关的疼痛通常感觉像钝痛或灼热感。它通常在身体的多个部位感觉到,可能是持续的,也可能时有时无。纤维肌痛还会导致睡眠障碍、记忆问题和情绪变化。虽然纤维肌痛的确切病因尚不清楚,但据信它涉及影响大脑处理疼痛信号的遗传、环境和神经生物学因素的组合。纤维肌痛无法治愈,但各种治疗方法可以帮助控制症状。这些可能包括药物、生活方式变化和替代疗法。\n。务必包含一个以“操作:”开头的操作!\n现在让我们重试:注意不要重复之前的错误!如果您已重试多次,请尝试完全不同的方法。\n”} 
===== LLM 的输出消息: =====
操作:{ 
  “action”:“retriever”,
  “action_input”:
    “query”:“纤维肌痛是一种慢性健康状况,其特征是广泛的肌肉疼痛、关节僵硬和疲劳。与纤维肌痛相关的疼痛通常感觉像钝痛或灼热感。它通常在身体的多个部位感觉到,并且可以持续或可能时有时无。纤维肌痛还会导致睡眠障碍、记忆问题和情绪变化。虽然纤维肌痛的确切病因尚不清楚,但据信它涉及影响大脑处理疼痛信号的遗传、环境和神经生物学因素的组合。纤维肌痛无法治愈,但各种治疗方法可以帮助控制症状。这些可能包括药物治疗、生活方式的改变和替代疗法。” 
  } 
}

===== 提取动作 =====
调用工具:“retriever”,参数为:{“query”:“纤维肌痛是一种慢性健康状况,其特征是广泛的肌肉疼痛、关节僵硬和疲劳。与纤维肌痛相关的疼痛通常感觉像钝痛或灼热感。它通常在身体的多个部位感觉到,可能是持续的,也可能时有时无。纤维肌痛还会导致睡眠障碍、记忆问题和情绪变化。虽然纤维肌痛的确切病因尚不清楚,但据信它涉及影响大脑处理疼痛信号的遗传、环境和神经生物学因素的组合。纤维肌痛无法治愈,但各种治疗方法可以帮助控制症状。这些可能包括药物、生活方式改变和替代疗法。”}
检索到的文档:
===== 文档 0 =====
由于症状模糊且普遍,因此诊断很困难且经常被遗漏。尽管如此,几乎每位患者都会提到三种主要症状:疼痛、疲劳和睡眠障碍 [137, 138]。医生必须特别注意疼痛的特征:疼痛通常为弥漫性、多灶性、深度、疼痛或烧灼性。疼痛通常时重时轻,并且经常具有游走性。如果是这种情况,则应怀疑是纤维肌痛,因为这种疼痛通常不是由感兴趣区域的炎症或损伤引起的。评估其他症状也很重要,这些症状可能看似与纤维肌痛无关,例如体重波动、晨僵、肠易激疾病、认知障碍、头痛、不耐热和冷热、膀胱易激综合征、躁动腿和雷诺现象 [2]。===== 文档 1 =====
纤维肌痛综合征的主要特征是疼痛、疲劳和睡眠中断。纤维肌痛的病因尚不清楚:如果认为中枢敏化是主要机制,那么许多其他因素(遗传、免疫和激素)可能也起着重要作用。诊断通常是临床诊断(没有实验室异常),医生必须专注于疼痛及其特征。其他症状(例如雷诺氏现象、肠易激疾病和冷热不耐受)可能与此病症有关。必须进行仔细的鉴别诊断:纤维肌痛不是排除性诊断。自 1990 年以来,诊断主要基于 ACR 定义的两个主要诊断标准===== 文档 2 =====
请参阅此出版物的讨论、统计数据和作者简介:https://www.researchgate.net/publication/233850271

纤维肌痛综合征:病因、发病机制、诊断和治疗

文章,发表于《疼痛研究与治疗》·2012 年 11 月

DOI:10.1155/2012/426130 · 来源:PubMed

引用数 358

阅读量 19,012 

7 位作者,包括:

Enrico Bellato 

Eleonora Marini

都灵大学

医疗服务机构 加埃塔诺皮尼矫形学院

64 篇出版物 1,106 次引用

18 篇出版物 511 次引用

查看个人资料

查看个人资料===== 文档 3 ===== 
1. 简介

纤维肌痛是一种综合征,其特征是多个压痛点出现慢性广泛性疼痛、关节僵硬和全身症状(如情绪障碍、疲劳、认知功能障碍和失眠)[1–4],没有明确的潜在器质性疾病。尽管如此,它可能与特定疾病有关,如风湿病、精神或神经疾病、感染和糖尿病。

今天被定义为纤维肌痛的疾病早在 19 世纪就已被描述。 1904 年,Gowers [5] 创造了“纤维肌痛”一词,直到上个世纪七八十年代发现其病因与中枢神经系统有关,该术语才被使用。但 1950 年,Graham [6] 引入了现代===== 文件 4 ===== 
2.3。睡眠障碍。纤维肌痛患者经常抱怨睡眠障碍 [83],这可能与其发病机制有关 [1]。脑电图检查显示,睡眠的第四阶段是最受干扰的,直接后果应该是 GH 和胰岛素样生长因子 1 (IGF-1) 的缺乏 [84, 85]。鉴于这些激素参与肌肉微创伤修复,睡眠障碍可能会影响该组织的愈合 [86]。===== 文件 5 ===== 
.03; P = 0.03) 的纤维肌痛影响问卷 (FIQ) 和与疲劳 (F = 4.8; P = 0.003)、僵硬 (F = 11.7; P = 0.001) 和早晨疲劳 (F = 7.47; P = 0.009) 相关的 3 个子评分。===== 文件 6 ===== 
4. 治疗

纤维肌痛治疗的目标是减轻疼痛、增加恢复性睡眠并通过减少相关症状来改善身体机能 [150]。除纤维肌痛外,识别和治疗可能存在的所有疼痛源,如外周炎症或神经性疼痛源(例如,共病骨关节炎或神经性病变)或内脏疼痛(例如,共病肠易激综合征),是正确临床管理纤维肌痛的关键 [151]。

由于疼痛、抑郁和纤维肌痛的其他症状与遗传和环境原因有关,因此通常需要多方面的治疗方法,包括非药物疼痛管理策略和药物治疗 [152]。
===== 新步骤 ===== 
===== 用这最后一条消息呼叫 LLM: =====
{'role': <MessageRole.TOOL_RESPONSE: 'tool-response'>, 'content': '[步骤 1 的输出] 观察:\n检索到的文档:\n===== 文档 0 =====\n由于症状不明确且具有普遍性,因此诊断困难且经常漏诊。尽管如此,几乎每位患者都会提到三种主要症状:疼痛、疲劳和睡眠障碍 [137, 138]。特别是,医生必须调查疼痛的特征:它通常是弥漫性、多灶性、深度、疼痛或灼痛。它通常时重时轻,并且经常具有游走性。如果是这种情况,则应怀疑是纤维肌痛,因为这种疼痛通常不是由感兴趣区域的炎症或损伤引起的。评估其他症状也很重要,这些症状可能看似与纤维肌痛无关,例如体重波动、晨僵、肠易激疾病、认知障碍、头痛、怕热怕冷、膀胱易激综合征、躁动腿综合症和雷诺现象 [2]。===== 文档 1 =====\n纤维肌痛综合征的主要特征是疼痛、疲劳和睡眠中断。纤维肌痛的病因仍不清楚:如果认为中枢敏化是主要机制,那么许多其他因素(遗传、免疫和激素)可能也起着重要作用。诊断通常是临床性的(没有实验室异常),医生必须专注于疼痛及其特征。其他症状(例如雷诺现象、肠易激疾病和怕热怕冷)可能与这种疾病有关。必须进行仔细的鉴别诊断:纤维肌痛不是一种排除性诊断。自 1990 年以来,诊断主要基于 ACR 定义的两个主要诊断标准===== 文档 2 =====\n请参阅此出版物的讨论、统计数据和作者简介:https://www.researchgate.net/publication/233850271\n\n纤维肌痛综合征:病因、发病机制、诊断和治疗\n\n疼痛研究与治疗文章 · 2012 年 11 月\n\nDOI:10.1155/2012/426130 · 来源:PubMed\n\n引用 358\n\n阅读 19,012\n\n7 位作者,包括:\n\nEnrico Bellato\n\nEleonora Marini\n\n都灵大学\n\n加埃塔诺骨科学院Pini\n\n64 篇出版物 1,106 次引用\n\n18 篇出版物 511 次引用\n\n查看简介\n\n查看简介===== 文档 3 =====\n1. 简介\n\n纤维肌痛是一种综合征,其特征是多个压痛点出现慢性广泛性疼痛、关节僵硬和全身症状(例如情绪障碍、疲劳、认知功能障碍和失眠)[1–4],没有明确的潜在器质性疾病。然而,它可能与特定疾病有关,例如风湿病、精神或神经疾病、感染和糖尿病。\n\n如今被定义为纤维肌痛的疾病早在 19 世纪就已被描述。1904 年,Gowers [5] 创造了“纤维肌痛”一词,直到上个世纪七八十年代发现其病因与中枢神经系统有关,该术语才被使用。但 1950 年,Graham [6] 引入了现代===== 文件 4 =====\n2.3。睡眠障碍。纤维肌痛患者经常抱怨睡眠障碍 [83],这可能与其发病机制有关 [1]。脑电图检查显示,睡眠的第四阶段是最受干扰的,直接后果应该是 GH 和胰岛素样生长因子 1 (IGF-1) 的缺乏 [84, 85]。鉴于这些激素参与肌肉微创伤修复,睡眠障碍可能会影响该组织的愈合 [86]。===== 文件 5 =====\n.03; P = 0.03) 的纤维肌痛影响问卷 (FIQ) 和与疲劳 (F = 4.8; P = 0.003)、僵硬 (F = 11.7; P = 0.001) 和早晨疲劳 (F = 7.47; P = 0.009) 相关的 3 个子评分。===== 文件 6 =====\n4. 治疗\n\n纤维肌痛治疗的目标是减轻疼痛、增加恢复性睡眠并通过减少相关症状来改善身体机能 [150]。识别和治疗除纤维肌痛之外可能存在的所有疼痛源,例如外周炎症或神经性疼痛发生器(例如,共病骨关节炎或神经病理性病变)或内脏疼痛(例如,共病肠易激综合征),是正确临床管理纤维肌痛的关键 [151]。\n\n由于疼痛、抑郁和纤维肌痛的其他症状与遗传和环境原因有关,因此通常需要采用多方面的治疗方法,包括非药物疼痛管理策略和药物治疗 [152]。'}识别和治疗除纤维肌痛之外可能存在的所有疼痛源,例如外周炎症或神经性疼痛发生器(例如,共病骨关节炎或神经病理性病变)或内脏疼痛(例如,共病肠易激综合征),是正确临床管理纤维肌痛的关键 [151]。\n\n由于疼痛、抑郁和纤维肌痛的其他症状与遗传和环境原因有关,因此通常需要采用多方面的治疗方法,包括非药物疼痛管理策略和药物治疗 [152]。'}识别和治疗除纤维肌痛之外可能存在的所有疼痛源,例如外周炎症或神经性疼痛发生器(例如,共病骨关节炎或神经病理性病变)或内脏疼痛(例如,共病肠易激综合征),是正确临床管理纤维肌痛的关键 [151]。\n\n由于疼痛、抑郁和纤维肌痛的其他症状与遗传和环境原因有关,因此通常需要采用多方面的治疗方法,包括非药物疼痛管理策略和药物治疗 [152]。'}
===== LLM 的输出消息: =====
操作:{ 
  “action”:“final_answer”,
  “action_input”:{ 
    “answer”:“纤维肌痛是一种慢性健康状况,其特征是广泛的肌肉疼痛、关节僵硬和疲劳。与纤维肌痛相关的疼痛通常感觉像钝痛或灼热感。它通常在身体的多个部位感觉到,可能是持续的,也可能时有时无。纤维肌痛还会导致睡眠障碍、记忆问题和情绪变化。虽然纤维肌痛的确切病因尚不清楚,但据信它涉及影响大脑处理疼痛信号的遗传、环境和神经生物学因素的组合。纤维肌痛无法治愈,但各种治疗方法可以帮助控制症状。这些可能包括药物治疗、生活方式改变和替代疗法。” 
  } 
} 
===== 提取操作 =====
调用工具:'final_answer',参数为:{'answer':'纤维肌痛是一种慢性健康状况,其特征是广泛的肌肉疼痛、关节僵硬和疲劳。与纤维肌痛相关的疼痛常常感觉像钝痛或灼热感。它通常出现在身体的多个部位,可能是持续的,也可能时有时无。纤维肌痛还会导致睡眠障碍、记忆问题和情绪变化。虽然纤维肌痛的确切病因尚不清楚,但人们认为它涉及影响大脑处理疼痛信号方式的遗传、环境和神经生物学因素的组合。纤维肌痛无法治愈,但各种治疗方法可以帮助控制症状。这些可能包括药物治疗、生活方式改变和替代疗法。'}
问题:描述纤维肌痛。
答:纤维肌痛是一种慢性健康状况,其特征是广泛的肌肉疼痛、关节僵硬和疲劳。纤维肌痛引起的疼痛通常感觉像钝痛或灼热感。这种疼痛通常出现在身体的多个部位,可能是持续性的,也可能时有时无。纤维肌痛还会导致睡眠障碍、记忆问题和情绪变化。虽然纤维肌痛的确切病因尚不清楚,但据信它涉及影响大脑处理疼痛信号的遗传、环境和神经生物学因素的组合。纤维肌痛无法治愈,但各种治疗方法可以帮助控制症状。这些可能包括药物、生活方式改变和替代疗法。

Agentic RAG 生成的答案

纤维肌痛是一种慢性疾病,其特征是广泛的肌肉骨骼疼痛、疲劳和疼痛敏感性增强。它常常伴有睡眠障碍、记忆问题和情绪变化。确切病因尚不清楚,但据信它与疼痛处理和压力反应异常有关。目前尚无治愈方法,但治疗方案包括药物、生活方式改变和替代疗法,以控制症状并改善生活质量。

Agentic RAG 与标准 RAG 的比较

#标准 RAG 函数
def run_standard_rag ( question : str) -> str : 
    context = tries_tool (question) 

    prompt = f "" "给出下面的问题和支持文档,对问题给出全面的答案。
仅回答所提问题,回答应简洁且与问题相关。
相关时提供源文档的编号。

问题:
{question} 

{context} 
" ""
     messages = [{ "role" : "human" , "content" : prompt}] 

    response = llm.invoke ( messages) 

    return response.content
standard_answer = run_standard_rag (question) 
print (standard_answer) 

####### RESPONSE ##############
纤维肌痛是一种综合征,特征为多个压痛点出现慢性广泛性疼痛、关节僵硬,以及情绪障碍、疲劳、认知功能障碍和失眠等全身症状,而没有明确的潜在器质性疾病(文档 0)。这是一种复杂的疾病,通常难以诊断,特别是对于通常不处理这种疾病 的医生而言(文档3  )。纤维肌痛的病因尚不清楚,但据认为与中枢敏化以及遗传、免疫和激素因素有关(文档6 )。诊断通常是临床性的,没有实验室异常,医生必须专注于疼痛及其特征,同时考虑其他症状,如雷诺现象、肠易激疾病以及冷热不耐受(文档 6)。  

标准 RAG 生成的答案

纤维肌痛是一种综合征,其特征是多个压痛点出现慢性广泛性疼痛、关节僵硬以及情绪障碍、疲劳、认知功能障碍和失眠等全身症状,没有明确的潜在器质性疾病(文件 0)。这是一种复杂的疾病,通常很难诊断,尤其是对于通常不处理这种疾病的医生来说(文件 3)。纤维肌痛的病因尚不清楚,但据认为涉及中枢敏化以及遗传、免疫和激素因素(文件 6)。诊断通常是临床性的,没有实验室异常,医生必须专注于疼痛及其特征,并考虑其他症状,例如雷诺氏现象、肠易激疾病和冷热不耐受(文件 6)。

比较 Agentic RAG 和标准 RAG 的问题 2

#比较 Agentic  RAG和Standard  RAG
问题 = “描述纤维肌痛的病因和发病机制”
 agentic_answer = run_agentic_rag (问题) 
standard_answer = run_standard_rag (问题)
打印(“Agentic RAG 答案:”)
打印(agentic_answer)
Agentic  RAG 答案:纤维肌痛的
病因和发病机制 :纤维肌痛是一种慢性疼痛疾病,其特征是广泛的肌肉骨骼疼痛、疲劳和睡眠障碍。纤维肌痛的确切病因尚不完全清楚,但人们认为有几个因素导致了其发展。1 .遗传易感性:纤维肌痛往往在家族中遗传,表明有遗传因素。某些基因变异可能会增加患纤维肌痛的风险。2 .压力和创伤:压力性生活事件,如身体或情感创伤,会在某些人身上引发纤维肌痛。3 .感染:某些感染,如爱泼斯坦-巴尔病毒、莱姆病和细小病毒,在某些情况下与纤维肌痛的发病有关。4 .身体创伤:身体伤害,尤其是影响颈部和背部的伤害,会导致纤维肌痛。5.环境因素:接触毒素、睡眠质量差、缺乏身体活动也可能导致纤维肌痛的发展。发病机制:纤维肌痛的发病机制复杂,尚未完全了解。然而,有几种机制被认为在发挥作用:1.中枢敏化:纤维肌痛的特征是对疼痛的敏感性增加,这被认为是由于中枢神经系统疼痛处理机制的变化所致。2. 神经递质异常:调节疼痛和情绪的某些神经递质(如血清素和多巴胺)的失衡可能导致纤维肌痛。3. 睡眠障碍:长期睡眠不足会导致疼痛敏感性增加,并导致纤维肌痛症状。4. 肌肉异常:一些研究表明,纤维肌痛可能与肌肉代谢和功能异常有关。 



  

 

 

  

  





  







5. 应激反应:慢性应激可激活人体应激反应系统,导致皮质醇等应激激素分泌增加,从而加剧纤维肌痛症状。

总体而言,纤维肌痛是一种复杂的疾病,具有多种潜在病因和致病机制。需要进一步研究以充分了解潜在病因并开发有效的治疗方法。
打印(“\n标准 RAG 答案:”)
打印(standard_answer)
标准 RAG 答案:纤维肌痛的
病因和发病机制仍未完全了解,但据认为与多种因素有关,包括:*中枢和自主神经系统功能障碍(文件0 )*神经递质、激素和免疫系统失调(文件0)*遗传、免疫和激素因素(文件2)*中枢敏化,被认为是主要的相关机制(文件2)*外部压力源、精神方面和其他因素(文件0)*决定结果的多种因素之间的相互作用(文件3)纤维肌痛的确切病因仍不清楚,可能有多种因素导致了该病症的发展。需要进一步研究来探索这些相互作用,以更好地了解纤维肌痛的病因和发病机制。

  
 
 
 
 
 

因此,我们可以得出结论,Agentic RAG 制定了更好的响应

直接使用 HuggingFace Transformers 初始化 LLM Engine

!pip 安装 huggingface_hub
从huggingface_hub导入notebook_login 
notebook_login ()
#初始化语言模型引擎
hf_llm_engine = HfEngine ( "meta-llama/Meta-Llama-3-8B-Instruct" ) 
# 
#创建代理
agent = ReactJsonAgent (tools=[retriever_tool], llm_engine=hf_llm_engine, max_iterations= 4 , verbose= 2 ) 
# 
agentic_answer_hf = run_agentic_rag (question)

回复

========新任务 ========
使用您可以通过“检索器”工具访问的知识库中包含的信息,全面回答以下问题。只回答所问的问题,回答应简洁并与问题相关。如果找不到信息,不要放弃,尝试用不同的参数再次调用您的检索器!通过使用语义不同的查询多次调用检索器工具,确保完全涵盖问题。您的查询不应该是问题,而应该是肯定形式的句子:例如,查询应该是“从 Hub bf16 权重中加载模型”,而不是“如何从 bf16 中的 Hub 加载模型? ” 。问题:描述纤维肌痛的病因和发病机制系统提示如下:您是一位专家助手,可以使用JSON工具调用解决任何任务。您将被赋予一项任务,让您尽最大努力解决。为此,您被授予以下工具的访问权限:“retriever”、“final_answer”使用这些工具的方式是指定一个 json blob,以“<end_action>”结尾。具体来说,这个json应该有一个“action”键(要使用的工具的名称)和一个“action_input”键(工具的输入)。$ ACTION_JSON_BLOB 应该只包含一个动作,不要返回多个动作的列表。它应该以json 格式格式化。不要尝试转义特殊字符。下面是有效$ACTION_JSON_BLOB的模板:{ “ action”:$TOOL_NAME,“action_input” : $ INPUT







 
 

 
 


  

  
  
><end_action>

确保$INPUT 是适合您所用工具的正确格式的字典,并且如果您可以找到正确的值,请不要将变量名作为输入。您应该始终使用以下格式:想法:您应该始终考虑采取一项行动。然后按如下方式使用该行动:行动:$ACTION_JSON_BLOB观察:行动的结果...(这个想法/行动/观察可以重复 N 次,您应该在需要时采取几个步骤。$ ACTION_JSON_BLOB一次只能使用一个动作。)您可以将上一个动作的结果用作下一个动作的输入。观察将始终是一个字符串:它可以表示一个文件,如“image_1.jpg”。然后,您可以将其用作下一个动作的输入。例如,您可以按如下方式执行此操作:观察:“image_1.jpg”想法:我需要转换我在上一次观察中收到的图像以使其变为绿色。操作:{ “action”:“image_transformer”,“action_input”:{ “image”:“image_1.jpg” } } } } }要提供任务的最终答案,请使用带有“action”:“final_answer”工具的操作 blob。这是完成任务的唯一方法,否则您将陷入循环。因此,您的最终输出应如下所示:操作: { “ action”:“final_answer”,“action_input”:{ “answer”:“在此处插入您的最终答案” } } }此处



 



 



 






  
  


 


  
  



以下是使用概念工具的几个例子:
---
任务: “生成此文档中年龄最大的人的图像。”

想法:我将逐步进行并使用以下工具:`document_qa`查找文档中年龄最大的人,然后使用`image_generator`根据答案生成图像。动作:{ “action”:“document_qa”,“action_input”:{ “document”:“document.pdf”,“question”:“提到的年龄最大的人是谁?” } } } } } } } }观察:“文件中年龄最大的人是 John Doe,他是住在纽芬兰的 55 岁伐木工人。”想法:我现在将生成一张展示年龄最大的人的图像。动作:{ “action”:“image_generator”,“action_input”:{ “text”:“”住在加拿大的55岁男子John Doe的肖像。" " } ...我现在将其归还。动作:{ “action”:“final_answer”,“action_input”


  
  







  
     






  
  








    
    






  
  :“1302.678”
 } } 

---
任务:“哪个城市的人口最多,广州还是上海?”

想法:我需要获取两个城市的人口并进行比较:我将使用工具“搜索”来获取两个城市的人口。
动作:
{ 
    “action”:“搜索”,
    “action_input”:“广州人口”
 }
观察:[ ‘截至 2021 年,广州人口为 1500 万。’ ]


想法:现在 让我们使用工具“搜索”获取上海的人口。
动作:
{ 
    “action”:“搜索”,
    “action_input”:“上海人口” 
}
观察:“ 2600万(2019 年)”

想法:现在我知道上海的人口更多。让我们返回结果。
动作:
{ 
  “action”:“final_answer”,
  “action_input”:“上海”
 } }


上面的例子使用了可能不存在的概念工具。您只能访问这些工具:

-检索器:使用语义相似性,从知识库中检索一些与输入查询具有最接近嵌入的文档。
    接受 输入:{ 'query':{ 'type':'text','description':'要执行的查询。这应该在语义上接近您的目标文档。使用肯定形式而不是问题。' }} 

- final_answer:为给定的问题提供最终答案。
    接受 输入:{ 'answer':{ 'type':'text','description':以下是解决任务时应始终遵循的规则:1.始终提供“思考:”序列,以及


 'Action:'序列以<end_action>结尾,否则您将失败。2 
. 始终为工具使用正确的参数。 切勿在'action_input'字段中使用变量名,而应使用值。3 .仅在需要时调用工具:如果您不需要信息,请不要调用搜索代理,请尝试自己解决任务。4 .切勿使用完全相同的参数重复执行您之前执行过的工具调用。现在开始!如果您正确解决了任务,您将获得1,000,000美元的奖励。=====新步骤 ===== =====使用最后一条消息调用LLM: ===== { 'role':<MessageRole.USER: 'user'>,'content':'任务:使用知识库中包含的信息(您可以通过 \'retriever\' 工具访问这些信息),对以下问题给出全面答案。\n仅回答所提问题,回答应简洁且与问题相关。\n如果找不到信息,请不要放弃,并尝试使用不同的参数再次调用检索器!\n通过使用语义不同的查询多次调用检索器工具,确保完全涵盖问题。\n您的查询不应是问题,而应是肯定形式的句子:例如,查询应为“从 Hub bf16 权重加载模型”,而不是“如何从 Hub bf16 权重加载模型”。\n\n问题:\n描述纤维肌痛的病因和发病机制'} ===== 输出消息LLM 学位: =====想法:要回答这个问题,我将首先使用检索器工具从知识库中获取相关文档。动作:{   “action”:“retriever”,  “action_input”:{“query”:“type”:“text”, “description”:“纤维肌痛的病因和发病机制”}} } } } ===== 提取动作 =====调用工具:'retriever',参数:{'query':{'type':'text','description':'纤维肌痛的病因和发病机制'}}工具调用执行时出错:您的搜索查询必须是字符串。您只能在输入正确的情况下使用此工具。提醒一下,此工具的描述如下:
 
 

 


   
















- 检索器:使用语义相似性,从知识库中检索一些与输入查询具有最接近嵌入的文档。
    接受输入:{'query':{'type':'text','description':'要执行的查询。这应该在语义上接近您的目标文档。使用肯定形式,而不是问题。'}} 
Traceback(最近一次调用最后一次):
  文件“/usr/local/lib/python3.10/dist-packages/transformers/agents/agents.py”,第 503 行,在 execute_tool_call 中
    观察 = self.toolbox.tools[tool_name](**arguments)
  文件“/usr/local/lib/python3.10/dist-packages/transformers/agents/tools.py”,第 134 行,在 __call__ 中
    输出 = self.forward(*args, **kwargs)
  文件“<ipython-input-8-47e29b65c7a0>”,第 17 行,在 forward 中
    断言 isinstance(query, str),“您的搜索查询必须是字符串” 
AssertionError:您的搜索查询必须是字符串

在处理上述异常期间,发生了另一个异常:

Traceback(最近一次调用最后一次):
  文件“/usr/local/lib/python3.10/dist-packages/transformers/agents/agents.py”, 第 756 行, 在 direct_run 
    step_logs = self.step()
  文件“/usr/local/lib/python3.10/dist-packages/transformers/agents/agents.py”, 第 946 行, 在步骤
    观察 = self.execute_tool_call(tool_name,arguments)
  文件“/usr/local/lib/python3.10/dist-packages/transformers/agents/agents.py”, 第 506 行, 在 execute_tool_call 中
    引发 AgentExecutionError( 
transformers.agents.agents.AgentExecutionError: 工具调用执行时出错: 您的搜索查询必须是字符串
您只应在输入正确的情况下使用此工具。
提醒一下,此工具的描述如下:

- 检索器:使用语义相似性,从知识库中检索一些与输入查询具有最接近嵌入的文档。
    接受输入:{'query':{'type':'text','description':'要执行的查询。这在语义上应该接近您的目标文档。使用肯定形式而不是问题。'}} 
===== 新步骤 ===== 
===== 使用最后一条消息调用 LLM: =====
{'role':<MessageRole.TOOL_RESPONSE:'tool-response'>,'content':“[步骤 0 的输出] 错误:工具调用执行时出错:您的搜索查询必须是字符串\n您只能在输入正确的情况下使用此工具。\n提醒一下,此工具的描述如下:\n\n- 检索器:使用语义相似性,从知识库中检索一些与输入查询具有最接近嵌入的文档。\n 接受输入:{'query':{'type':'text','description':'要执行的查询。这应该在语义上接近您的目标文档。使用肯定形式而不是问题。'}}\n现在让我们重试:注意不要重复以前的错误!如果您已经重试多次,请尝试完全不同的方法。\n“} 
===== LLM 的输出消息: =====
想法:我将使用正确的输入格式重试上一个操作。

操作:
{ 
  “action”:“retriever”,
  “action_input”:{“query”:“type”:“text”,“description”:“纤维肌痛病因和发病机制”}} } } } } } } ===== 提取操作 =====
调用工具:'retriever',参数为:{'query':{'type':'text','description':'纤维肌痛病因和发病机制'}}工具调用执行时出错:您的搜索查询必须是字符串。您只能在输入正确的情况下使用此工具。提醒一下,此工具的描述如下:- 检索器:使用语义相似性,从知识库中检索一些与输入查询具有最接近嵌入的文档。    接受输入:{'query':{'type':'text','description':'要执行的查询。这应该在语义上接近您的目标文档。使用肯定形式,而不是问题。'}} Traceback(最近一次调用最后一次):  文件“/usr/local/lib/python3.10/dist-packages/transformers/agents/agents.py”,第 503 行,在 execute_tool_call 中    观察 = self.toolbox.tools[tool_name](**arguments)  文件“/usr/local/lib/python3.10/dist-packages/transformers/agents/tools.py”,第 134 行,在 __call__ 中    输出 = self.forward(*args, **kwargs)  文件“<ipython-input-8-47e29b65c7a0>”,第 17 行,在 forward 中    断言 isinstance(query, str),“您的搜索查询必须是字符串” AssertionError:您的搜索查询必须是字符串在处理上述异常期间,发生了另一个异常:Traceback(最近一次调用最后一次):  文件“/usr/local/lib/python3.10/dist-packages/transformers/agents/agents.py”,第 756 行,在 direct_run     step_logs = self.step()  文件“/usr/local/lib/python3.10/dist-packages/transformers/agents/agents.py”中,第 946 行,步骤    观察 = self.execute_tool_call(tool_name,arguments)


























  文件“/usr/local/lib/python3.10/dist-packages/transformers/agents/agents.py”,第 506 行,在 execute_tool_call 中
    引发 AgentExecutionError(
transformers.agents.agents.AgentExecutionError:工具调用执行时出错:您的搜索查询必须是字符串
您只应在输入正确的情况下使用此工具。
提醒一下,此工具的描述如下:

- 检索器:使用语义相似性,从知识库中检索一些与输入查询具有最接近嵌入的文档。
    接受输入:{'query':{'type':'text','description':'要执行的查询。这应该在语义上接近您的目标文档。使用肯定形式而不是问题。'}} 
===== 新步骤 ===== 
===== 使用此最后一条消息调用 LLM:===== 
{'role':<MessageRole.TOOL_RESPONSE: 'tool-response'>, 'content': “[步骤 1 的输出] 错误:工具调用执行时出错:您的搜索查询必须是字符串\n您只能在输入正确的情况下使用此工具。\n提醒一下,此工具的描述如下:\n\n- 检索器:使用语义相似性,从知识库中检索一些与输入查询具有最接近嵌入的文档。\n 接受输入:{'query':{'type':'text','description':'要执行的查询。这应该在语义上接近您的目标文档。使用肯定形式而不是问题。'}}\n现在让我们重试:注意不要重复以前的错误!如果您已重试多次,请尝试完全不同的方法。\n"} 
===== LLM 的输出消息: =====
想法:我将再次重试该操作,这次确保提供字符串输入。

操作:
{ 
  “action”:“retriever”,
  “action_input”:{“query”:“纤维肌痛病因和发病机制是一种复杂的现象”} } 
} 


===== 提取操作 =====
调用工具:'retriever',参数:{'query':'纤维肌痛病因和发病机制是一种复杂的现象'}
检索到的文件:
===== 文档 0 =====
请参阅此出版物的讨论、统计数据和作者个人资料:https://www.researchgate.net/publication/233850271

纤维肌痛综合征:病因、发病机制、诊断和治疗

文章《疼痛研究与治疗》·2012 年 11 月

DOI: 10.1155/2012/426130 · 来源:PubMed

引用数 358

阅读数 19,012 

7 位作者,包括:

Enrico Bellato 

Eleonora Marini 

Università degli Studi di Torino 

Azienda Ospedaliera Istituto Ortopedico Gaetano Pini 

64 出版物 1,106 引用

18 出版物 511 引用

查看简介

查看简介===== 文档 1 =====
2. 病因和发病机制

纤维肌痛的病因和发病机制仍未完全了解。似乎与中枢神经系统和自主神经系统功能障碍、神经递质、激素、免疫系统、外部压力源、精神方面等多种因素有关。===== 文档 2 =====
纤维肌痛综合征的主要特征是疼痛、疲劳和睡眠中断。纤维肌痛的病因仍不清楚:如果认为中枢敏化是主要机制,那么许多其他因素(遗传、免疫和激素)可能也起着重要作用。诊断通常是临床性的(没有实验室异常),医生必须专注于疼痛及其特征。这种疾病可能还伴有其他症状(例如雷诺现象、肠易激疾病和冷热不耐受)。必须进行仔细的鉴别诊断:纤维肌痛不是排除性诊断。自 1990 年以来,诊断主要基于 ACR 定义的两个主要诊断标准===== 文件 3 ===== 
1. 简介

纤维肌痛是一种综合征,特征为多个压痛点出现慢性广泛性疼痛、关节僵硬和全身症状(如情绪障碍、疲劳、认知功能障碍和失眠)[1–4],没有明确的潜在器质性疾病。尽管如此,纤维肌痛也可能与特定疾病有关,例如风湿性病变、精神或神经疾病、感染和糖尿病。

今天被定义为纤维肌痛的疾病早在十九世纪就已被描述。1904 年,Gowers [5] 创造了“纤维肌痛”一词,一直使用到上个世纪七八十年代,当时人们发现了其病因涉及中枢神经系统。但正是 Graham [6] 在 1950 年引入了现代===== 文件 4 ===== 
2010 年标准的一个隐含目标是促进对纤维肌痛病因的更严格研究 [10]。与所有复杂疾病一样,纤维肌痛的发病可归因于多种因素,这些因素以复杂的方式相互作用并决定结果。病因学研究需要探索这些相互作用,尽管经常未能做到这一点。这个问题既不是纤维肌痛研究的新问题,也不是纤维肌痛研究所特有的。在流行病学研究中,最强的研究设计可以说是

疼痛研究和治疗===== 文档 5 ===== 
18 份出版物 511 次引用

查看简介

查看简介

Filippo Castoldi 

Nicola Barbasetti

都灵大学

都灵大学

161 份出版物 2,834 次引用

4 份出版物 393 次引用

查看简介

查看简介

本页之后的所有内容均由 Enrico Bellato 于 2014 年 6 月 1 日上传。

用户已请求增强下载的文件。Hindawi 

Publishing Corporation 疼痛研究与治疗卷 2012,文章 ID 426130,17 页 doi:10.1155/2012/426130

评论文章 纤维肌痛综合征:病因、发病机制、诊断和治疗===== 文档 6 ===== 
5. 结论

纤维肌痛是一种复杂的综合征,通常难以诊断,特别是对于通常不处理这种疾病的医生而言。发病机制仍不完全清楚,但现代功能性神经影像技术为我们提供了有关中枢神经系统受累的重要数据。纤维肌痛不应被视为排除性诊断:最近发布的 ACR 2010 标准试图帮助我们不要被所有纤维肌痛的鉴别诊断所困惑。多学科方法是最佳方法,医生必须考虑药物(特别是抗抑郁药和神经调节抗癫痫药)和非药物治疗,如有氧运动和力量训练、水上运动和浴疗、认知行为疗法,以及新兴的大脑刺激技术。

参考文献
===== 新步骤 ===== 
===== 用最后一条消息呼叫 LLM: =====
{'role': <MessageRole.TOOL_RESPONSE: 'tool-response'>, 'content': '[步骤 2 的输出] 观察:\n检索到的文档:\n===== 文档 0 =====\n请参阅此出版物的讨论、统计数据和作者简介:https://www.researchgate.net/publication/233850271\n\n纤维肌痛综合征:病因、发病机制、诊断和治疗\n\n疼痛研究与治疗文章 · 2012 年 11 月\n\nDOI:10.1155/2012/426130 · 来源:PubMed\n\n引用 358\n\n阅读 19,012\n\n7 位作者,包括:\n\nEnrico Bellato\n\nEleonora Marini\n\nUniversità degli都灵大学\n\n加埃塔诺·皮尼矫形外科医院\n\n64 篇出版物 1,106 次引用\n\n18 篇出版物 511 次引用\n\n查看简介\n\n查看简介===== 文档 1 =====\n2. 病因和发病机制\n\n纤维肌痛的病因和发病机制尚未完全了解。中枢神经系统和自主神经系统功能障碍、神经递质、激素、免疫系统、外部压力源、精神方面等多种因素似乎与此有关。===== 文档 2 =====\n纤维肌痛综合征的主要特征是疼痛、疲劳和睡眠中断。纤维肌痛的病因尚不清楚:如果认为中枢敏化是主要机制,那么许多其他因素(遗传、免疫和激素)可能也起着重要作用。诊断通常是临床诊断(没有实验室异常),医生必须专注于疼痛及其特征。其他症状(例如雷诺现象、肠易激疾病和冷热不耐受)可能与此病症有关。必须进行仔细的鉴别诊断:纤维肌痛不是排除性诊断。自 1990 年以来,诊断主要基于 ACR 定义的两个主要诊断标准===== 文件 3 =====\n1。简介\n\n纤维肌痛是一种综合征,其特征是多个压痛点出现慢性广泛性疼痛、关节僵硬和全身症状(例如情绪障碍、疲劳、认知功能障碍和失眠)[1–4],没有明确的潜在器质性疾病。然而,它可能与特定疾病有关,例如风湿病、精神或神经疾病、感染和糖尿病。\n\n今天被定义为纤维肌痛的疾病早在 19 世纪就已被描述。1904 年,Gowers [5] 创造了“纤维肌痛”一词,该术语一直沿用到上世纪七八十年代,当时人们发现了一种涉及中枢神经系统的病因。但 Graham [6] 于 1950 年引入了现代===== 文件 4 =====\n2010 年标准的一个隐含目标是促进对纤维肌痛病因的更严格研究 [10]。与所有复杂疾病一样,纤维肌痛的发病可归因于多种因素,这些因素以复杂的方式相互作用并决定结果。病因学研究需要探索这些相互作用,尽管经常未能做到这一点。这个问题既不是新问题,也不是纤维肌痛研究所特有的。在流行病学研究中,最强的研究设计可以说是\n\n疼痛研究与治疗===== 文档 5 =====\n18 篇出版物 511 次引用\n\n查看简介\n\n查看简介\n\nFilippo Castoldi\n\nNicola Barbasetti\n\n都灵大学\n\n都灵大学\n\n161 篇出版物 2,834 次引用\n\n4 篇出版物 393 次引用\n\n查看简介\n\n查看简介\n\n本页之后的所有内容均由 Enrico Bellato 于 2014 年 6 月 1 日上传。\n\n用户已请求增强下载的文件。\n\nHindawi Publishing Corporation 疼痛研究与治疗卷 2012,文章 ID 426130,17 页 doi:10.1155/2012/426130\n\n评论文章纤维肌痛综合征:病因、发病机制、诊断和治疗=====文件 6 =====\n5. 结论\n\n纤维肌痛是一种复杂的综合征,通常难以诊断,尤其是对于通常不处理这种疾病的医生而言。发病机制仍不完全清楚,但现代功能性神经成像技术为我们提供了有关中枢神经系统受累的重要数据。纤维肌痛不应被视为排除性诊断:最近发布的 ACR 2010 标准试图帮助我们避免被纤维肌痛的所有鉴别诊断所混淆。多学科方法是最佳方法,医生必须同时考虑药物治疗(特别是抗抑郁药和神经调节抗癫痫药)和非药物治疗,如有氧运动和力量训练、水上运动和浴疗、认知行为疗法,以及新兴的大脑刺激技术。\n\n参考文献'}纤维肌痛不应被视为排除性诊断:最近发布的 ACR 2010 标准试图帮助我们避免被纤维肌痛的所有鉴别诊断所混淆。多学科方法是最佳方法,医生必须考虑药物(特别是抗抑郁药和神经调节抗癫痫药)和非药物治疗,如有氧运动和力量训练、水上运动和浴疗、认知行为疗法,以及新兴的脑刺激技术。\n\n参考文献'}纤维肌痛不应被视为排除性诊断:最近发布的 ACR 2010 标准试图帮助我们避免被纤维肌痛的所有鉴别诊断所混淆。多学科方法是最佳方法,医生必须考虑药物(特别是抗抑郁药和神经调节抗癫痫药)和非药物治疗,如有氧运动和力量训练、水上运动和浴疗、认知行为疗法,以及新兴的脑刺激技术。\n\n参考文献'}
===== LLM 的输出消息: =====
想法:现在我已经检索了相关文献,我将对其内容进行分析,以全面回答有关纤维肌痛的病因和发病机制的问题。

操作:
{ 
  “action”:“retriever”,
  “action_input”:{“query”:“纤维肌痛综合征:病因、发病机制、诊断和治疗”} } 
} }

观察:

===== 提取操作 =====
调用工具:“retriever”,参数为:{'query':“纤维肌痛综合征:病因、发病机制、诊断和治疗”}
检索到的文档:
===== 文档 0 =====
请参阅此出版物的讨论、统计数据和作者简介:https://www.researchgate.net/publication/233850271

纤维肌痛综合征:病因、发病机制、诊断和治疗

疼痛研究与治疗文章 · 2012 年 11 月

DOI:10.1155/2012/426130 · 来源:PubMed

引用 358

阅读19,012 

7 位作者,包括:

Enrico Bellato 

Eleonora Marini 

Università degli Studi di Torino 

Azienda Ospedaliera Istituto Ortopedico Gaetano Pini 

64 篇出版物 1,106 篇引用

18 篇出版物 511 篇引用

查看简介

查看简介===== 文档 1 ===== 
18 篇出版物 511 篇引用EE 配置文件

查看

配置文件

Filippo Castoldi 

Nicola Barbasetti 

Università degli Studi di Torino 

Università degli Studi di Torino 

161 出版物 2,834 引用

4 出版物 393 引用

查看配置文件

查看配置文件

本页后的所有内容均由 Enrico Bellato 于 2014 年 6 月 1 日上传。

用户已请求增强下载文件。Hindawi 

Publishing Corporation 疼痛研究与治疗卷 2012,文章 ID 426130,17 页 doi:10.1155/2012/426130

评论文章 纤维肌痛综合征:病因、发病机制、诊断和治疗===== 文档 2 =====
纤维肌痛综合征的主要特征是疼痛、疲劳和睡眠中断。纤维肌痛的病因尚不清楚:如果认为中枢敏化是主要机制,那么许多其他因素(遗传、免疫和激素)可能也起着重要作用。诊断通常是临床诊断(没有实验室异常),医生必须专注于疼痛及其特征。其他症状(例如雷诺氏现象、肠易激疾病和冷热不耐受)可能与此病症有关。必须进行仔细的鉴别诊断:纤维肌痛不是排除性诊断。自 1990 年以来,诊断主要基于 ACR 定义的两个主要诊断标准===== 文件 3 ===== 
1. 简介

纤维肌痛是一种综合征,特征为多个压痛点出现慢性广泛性疼痛、关节僵硬和全身症状(如情绪障碍、疲劳、认知功能障碍和失眠)[1–4],没有明确的潜在器质性疾病。尽管如此,纤维肌痛也可能与特定疾病有关,例如风湿性病变、精神或神经疾病、感染和糖尿病。

今天被定义为纤维肌痛的疾病早在十九世纪就已被描述。1904 年,Gowers [5] 创造了“纤维肌痛”一词,一直使用到上个世纪七八十年代,当时人们发现了其病因涉及中枢神经系统。但 1950 年 Graham [6] 引入了现代===== 文件 4 ===== 
5. 结论

纤维肌痛是一种复杂的综合征,通常难以诊断,尤其是对于通常不处理这种疾病的医生而言。发病机制仍不完全清楚,但现代功能性神经影像技术为我们提供了有关中枢神经系统受累的重要数据。纤维肌痛不应被视为排除性诊断:最近发布的 ACR 2010 标准试图帮助我们不要被纤维肌痛的所有鉴别诊断所混淆。多学科方法是最佳的,医生必须同时考虑药物(特别是抗抑郁药和神经调节抗癫痫药)和非药物治疗,例如有氧运动和力量训练、水上运动和浴疗、认知行为疗法,以及新兴的脑刺激技术。

参考文献===== 文档 5 ===== 
[2] DJ Clauw,“纤维肌痛:概述”,美国医学杂志,第 122 卷,第 12 期,补充,第 S3 至 S13 页,2009 年。 [3] T. Giesecke、DA Williams、RE Harris 等人,“根据压力疼痛阈值和心理因素对纤维肌痛患者进行亚组划分”,关节炎和风湿病,第 48 卷,第 10 期,第 2916 至 2922 页,2003 年。

[4] P. Mease,“纤维肌痛综合征:临床表现、发病机制、结果测量和治疗回顾”,风湿病学杂志,第 75 卷,第 6 期,第 21 页,2005 年。===== 文档 6 ===== 
[145] PJ Mease、DJ Clauw、LM Arnold 等人,“纤维肌痛综合征”,风湿病学杂志,第 32 卷,第 11 期,第 2270-2277 页,2005 年。

[146] PJ Mease、DJ Clauw、RM Gendreau 等人,“米那普仑治疗纤维肌痛的有效性和安全性。一项随机、双盲、安慰剂对照试验”,风湿病学杂志,第 36 卷,第 6 期,第 75 2,第 398–409 页,2009 年。
已达到最大迭代次数。
无类型:无
打印(agentic_answer_hf)纤维肌痛的
病因和发病机制仍未完全了解,它被认为是一种复杂的综合征。中枢敏化被认为是主要机制之一,但遗传、免疫和激素等其他因素也可能发挥作用。纤维肌痛的发病机制以慢性广泛性疼痛、疲劳和睡眠中断为特征,可能与雷诺氏现象、肠易激疾病和冷热不耐受等症状有关。诊断通常是临床性的,没有实验室异常,需要仔细的鉴别诊断。纤维肌痛的发病机制尚不完全清楚,但现代功能性神经影像学技术正在为中枢神经系统受累提供重要数据。多学科的诊断和治疗方法是最佳的,包括药物和非药物干预,例如有氧运动和力量训练、水上运动和浴疗、认知行为疗法和脑刺激技术。 

结论

  1. 结论

纤维肌痛是一种复杂的综合征,通常难以诊断,尤其是对于通常不处理这种疾病的医生而言。发病机制仍不完全清楚,但现代功能性神经影像技术为我们提供了有关中枢神经系统受累的重要数据。纤维肌痛不应被视为排除性诊断:最近发布的 ACR 2010 标准试图帮助我们不要被纤维肌痛的所有鉴别诊断所混淆。多学科方法是最佳的,医生必须同时考虑药物(特别是抗抑郁药和神经调节抗癫痫药)和非药物治疗,例如有氧运动和力量训练、水上运动和浴疗、认知行为疗法,以及新兴的脑刺激技术。

参考文献===== 文档 5 =====
[2] DJ Clauw,“纤维肌痛:概述”,美国医学杂志,第 122 卷,第 12 期,补充,第 S3 至 S13 页,2009 年。 [3] T. Giesecke、DA Williams、RE Harris 等人,“根据压力疼痛阈值和心理因素对纤维肌痛患者进行亚组划分”,关节炎和风湿病,第 48 卷,第 10 期,第 2916 至 2922 页,2003 年。

[4] P. Mease,“纤维肌痛综合征:临床表现、发病机制、结果测量和治疗回顾”,风湿病学杂志,第 75 卷,第 6 期,第 21 页,2005 年。===== 文档 6 =====
[145] PJ Mease、DJ Clauw、LM Arnold 等人,“纤维肌痛综合征”,风湿病学杂志,第 32 卷,第 11 期,第 2270-2277 页,2005 年。

[146] PJ Mease、DJ Clauw、RM Gendreau 等人,“米那普仑治疗纤维肌痛的有效性和安全性。一项随机、双盲、安慰剂对照试验”,风湿病学杂志,第 36 卷,第 6 期,第 75 2,第 398–409 页,2009 年。
已达到最大迭代次数。
无类型:无
打印(agentic_answer_hf)纤维肌痛的
病因和发病机制仍未完全了解,它被认为是一种复杂的综合征。中枢敏化被认为是主要机制之一,但遗传、免疫和激素等其他因素也可能发挥作用。纤维肌痛的发病机制以慢性广泛性疼痛、疲劳和睡眠中断为特征,可能与雷诺氏现象、肠易激疾病和冷热不耐受等症状有关。诊断通常是临床性的,没有实验室异常,需要仔细的鉴别诊断。纤维肌痛的发病机制尚不完全清楚,但现代功能性神经影像学技术正在为中枢神经系统受累提供重要数据。多学科的诊断和治疗方法是最佳的,包括药物和非药物干预,例如有氧运动和力量训练、水上运动和浴疗、认知行为疗法和脑刺激技术。

结论

代理检索增强生成 (RAG) 的兴起标志着 RAG 技术的一个关键演进,超越了传统的问答系统。通过整合代理功能,这些智能系统可以推理检索到的数据、执行多步骤操作并综合来自各种来源的见解。这种创新方法为能够自主导航复杂信息环境的高级研究助理和虚拟工具铺平了道路。这些自适应系统会根据初步发现动态选择工具并定制响应,从而实现广泛的应用。它们的潜力从增强聊天机器人和虚拟助手到帮助用户进行彻底的研究。随着该领域研究的不断推进,我们期待开发出更复杂的代理,模糊人类和机器智能之间的界限,从而获得更深入的知识和理解。由这项技术驱动的信息检索和分析的未来前景广阔。
博客原文;专业人工智能社区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值