微软的 GraphRAG + AutoGen + Ollama + Chainlit = 本地和免费的多代理 RAG 超级机器人

还在为国内AI的良莠不齐,效果不好而烦恼吗?

那么一起来看看 开发喵AI(3in1)

这是一个整合了 GPT-4、Claude3、Gemini 三位一体的集成化AI助手

覆盖了三个AI工具的所有模型

包括 GPT-4o 和 Gemini flash

检索增强生成 (RAG) 是一种功能强大的工具,它使大型语言模型 (LLM) 能够访问现实世界的数据,从而做出更明智的响应。这是通过将模型与矢量数据库集成以进行实时学习和适应来实现的。这一特性使 RAG 成为聊天机器人和虚拟助手等应用程序的首选,这些应用程序对实时准确且合理的响应需求很高。这种技术的高级变体称为图形检索增强生成 (GraphRAG),它将基于图形的知识检索的优势与 LLM 相结合,进一步增强了自然语言处理的能力。与依赖矢量相似性搜索的传统 RAG 方法不同,GraphRAG 从原始文本构建结构化知识图谱,捕获实体、关系和关键声明。这可以增强 LLM 理解和综合复杂数据集及其关系的能力,从而产生更准确且基于上下文的响应。与依赖向量相似性搜索的传统 RAG 方法不同,GraphRAG 从原始文本构建结构化知识图,捕获实体、关系和关键声明。这可以增强 LLM 理解和综合复杂数据集及其关系的能力,从而产生更准确、更符合情境的响应。

utoGen 是 Microsoft 推出的一款工具,它通过自动化和优化曾经非常复杂且需要大量人工的工作流程,简化了基于多代理 LLM 的复杂应用程序的开发。将 AutoGen 想象成一个可以与多个 GPT 交互的平台,而不仅仅是一个。每个 GPT 都充当单独的“代理”,在综合操作中发挥着独特的作用。将 GraphRAG 的检索优势与 AutoGen AI 代理的对话和面向任务的功能相结合,可以打造出强大的 AI 助手,能够高效处理详细查询、生成和执行代码、创建多页科学报告以及进行数据分析。此外,离线本地 LLM(例如 Ollama 或 LM Studio 的 LLM)可确保经济高效且安全的数据处理。本地 LLM 消除了与在线 LLM 相关的高成本和隐私风险,将敏感数据保留在组织内并降低运营费用。

本文将指导您使用 GraphRAG 检索系统构建多智能体 AI 应用程序,该系统完全在本地机器上运行,并且免费使用。以下是此应用程序的关键组件:

  1. GraphRAG 的知识搜索方法通过函数调用与 AutoGen 代理集成。

  2. GraphRAG(本地和全局搜索)配置为支持来自 Ollama 的本地模型进行推理和嵌入。

  3. AutoGen 已扩展,以支持通过 Lite-LLM 代理服务器从 Ollama 使用非 OpenAI LLM 进行函数调用。

  4. Chainlit UI 用于处理连续对话、多线程和用户输入设置。

这里通过从 ABAQUS(一种 FEA 工程软件)的文档以及一些碳纤维和聚合物的技术数据表构建知识图谱来测试此应用程序。考虑到此数据集的复杂性,使用本地 LLM 的整体准确性可能会更好。未来的文章将探索使用不同模型进行嵌入和推理的基准研究的经验。测试高级工程代码生成任务,并利用对话助手集思广益,探讨我专业范围内的科学主题。应用程序如下所示。

带有示例查询的主应用程序 UI。最后两个有相同的查询,但第一个是全局搜索,而第二个是本地搜索。

开发是在 Linux 环境中使用 Windows Subsystem for Linux (WSL) 和 Visual Studio Code 在 Windows 11 PC 上完成的,该 PC 配备 i9 第 13 代处理器、64 GB RAM 和 24 GB Nvidia RTX 4090。为了在开发和测试此应用程序时获得最佳体验,建议使用 Linux 发行版或 WSL。

安装模型依赖项并克隆存储库

安装来自 Ollama 的语言模型以进行推理和嵌入

# Mistral 用于 GraphRAG 推理  
ollama pull mistral   
  
# Nomic-Embed-Text 用于 GraphRAG 嵌入  
ollama pull nomic-embed-text   
  
# LLama3 用于 Autogen 推理  
ollama pull llama3   
  
# 在本地服务器上托管 Ollama:http://localhost:11434 ollama serve

创建 conda 环境并安装这些依赖项

# 创建并激活 conda 环境  
conda create -n RAG_agents python=3.12   
conda activate RAG_agents   
  
# Ollama 的 Lite-LLM 代理服务器  
pip install 'litellm[proxy]'   
  
# 安装 Ollama  
 pip install ollama   
  
# Microsoft AutoGen  
 pip install pyautogen "pyautogen[retrievechat]"    
  
# Microsoft GraphRAG  
 pip install graphrag   
  
# 文本令牌编码器-解码器  
pip install tiktoken   
  
# Chainlit Python 应用程序  
pip install chainlit   
  
# 克隆我的 Git-hub 存储库  
git clone https://github.com/819-hao/Autogen_GraphRAG_Ollama.git   
  
# (奖励)将 PDF 文件转换为 GraphRAG 的 Markdown  
 pip install marker-pdf   
  
# (奖励)仅当您安装了 Marker-pdf 时,因为它默认会删除 GPU CUDA 支持 conda  
 install pytorch torchvision torchaudio pytorch-cuda=12.1-c pytorch-c nvidia

在我的 GitHub 仓库中找到以下文件。

  1. /requirements.txt包含上述所有软件包的列表。

  2. /utils/settings.yaml包含使用 Mistral 7B 和 Ollama 的 Nomic-Text-Embedding 进行 GraphRAG 离线嵌入和索引的 LLM 配置。 您将使用此文件替换首次在工作目录中初始化 GraphRAG 时创建的文件。

  3. /utils/chainlit_agents.py—包含包括 AutoGen 助手和用户代理的类定义。这允许跟踪多个代理并将其消息显示在 UI 中。

  4. /utils/embedding.py—包含使用 Ollama 进行本地搜索查询的 GraphRAG 嵌入修改后的嵌入函数。您将使用此文件替换 GraphRAG 包中的文件。

  5. utils/openai_embeddings_llm.py包含使用 Ollama 进行 GraphRAG 索引和嵌入的修改后的嵌入函数。您将使用此文件替换 GraphRAG 包中的文件(更多信息见下文)。

  6. /appUI.py包含设置代理、定义 GraphRAG 搜索功能、跟踪和处理消息以及在 Chainlit UI 中显示它们的主要异步函数。

  7. /utils/pdf_to_markdown.py奖励文件包含将 PDF 文件转换为 markdown 文件以供 GraphRAG 提取的功能。

创建 GraphRAG 知识库

在存储库的根文件夹中初始化 GraphRAG

# 创建一个新文件夹“input”来放置 GraphRAG 的输入文件(.txt 或 .md)  
mkdir -p ./input   
  
# 初始化 GraphRAG 以在根目录中创建所需的文件和文件夹  
python -m graphrag.index --init --root   
  
# 移动 settings.yaml 文件以替换由 GraphRAG 创建的文件 --init   
mv ./utils/settings.yaml ./

配置 GraphRAG 设置以支持来自 Ollama 的本地模型

下面是一段settings.yaml说明 LLM 创建索引和嵌入的配置的代码片段。GraphRAG 需要 32k 上下文长度才能进行索引,因此 Mistral 是所选模型。对于嵌入,选择了 Nomic-embed-text,但您可以尝试使用 Ollama 的其他嵌入。无需设置${GRAPHRAG_API_KEY},因为不需要访问这些本地模型的端点。

encoding_model: cl100k_base  
skip_workflows: []  
llm:  
  api_key: ${GRAPHRAG_API_KEY}  
  type: openai_chat # or azure_openai_chat  
  model: mistral  
  model_supports_json: true  
  api_base: http://localhost:11434/v1   
.  
.  
.  
embeddings:  
  async_mode: threaded # or asyncio  
  llm:  
    api_key: ${GRAPHRAG_API_KEY}  
    type: openai_embedding # or azure_openai_embedding  
    model: nomic_embed_text  
    api_base: http://localhost:11434/api   
.  
.  
.  
input:  #Change input file pattern to.md, or .txt  
  type: file # or blob  
  file_type: text # or csv  
  base_dir: "input"  
  file_encoding: utf-8  
  file_pattern: ".*\\.md$"

您可以在根目录中的“input”文件夹中指定包含输入文件的文件夹。文本和 markdown 文件都可以使用。您可以使用/utils/pdf_to_markdown.py将 PDF 转换为 markdown 文件,然后将其放在“input”文件夹中。处理多种文件格式的问题尚未解决,但这是一个可以解决的问题。

在运行 GraphRAG 进行索引、创建嵌入和执行本地查询之前,您必须修改 GraphRAG 包中的 Python 文件openai_embeddings_llm.pyembedding.py。如果没有进行此修改,GraphRAG 在创建嵌入时会抛出错误,因为它不会将“nomic-embed-text”识别为来自 Ollama 的有效嵌入模型。在我的设置中,这些文件位于/home/karthik/miniconda3/envs/RAG_agents/lib/python3.12/site-packages/graphrag/llm/openai/openai_embeddings_llm.py/home/karthik/miniconda3/envs/RAG_agents/lib/python3.12/site-packages/graphrag/query/llm/oai/embedding.py

您可以使用命令来找到这些文件sudo find / -name openai_embeddings_llm.py

创建嵌入模型和知识图谱

最后,我们创建嵌入并使用全局或本地搜索方法测试知识图谱。完成嵌入过程后,您可以在 GraphRAG 工作目录的“output”文件夹中找到输出工件(.parquet 文件)和报告(.json 和 .logs),在本例中,该文件夹是根文件夹。

# 创建知识图谱 - 这需要一些时间  
python -m graphrag.index --root .   
  
# 测试 GraphRAG  
 python -m graphrag.query --root . --method global "<插入您的查询>"  

启动 Lite-LLM 服务器并从终端运行应用程序

下面是在运行应用程序之前初始化服务器的命令。我选择了 Llama3:8b 来测试这个应用程序。如果硬件允许,您可以使用更大的模型。现在,您可以从另一个终端运行该应用程序。确保您处于正确的 conda 环境中。

# 从终端启动服务器  
litellm --model ollama_chat/llama3   
  
# 从另一个终端运行应用程序chainlit run appUI.py

appUI.py 的核心组件

导入 Python 库

import autogen  
from rich import print  
import chainlit as cl  
from typing_extensions import Annotated  
from chainlit.input_widget import (  
   Select, Slider, Switch)  
from autogen import AssistantAgent, UserProxyAgent  
from utils.chainlit_agents import ChainlitUserProxyAgent, ChainlitAssistantAgent  
from graphrag.query.cli import run_global_search, run_local_search

_您会注意到从chainlit_agents_导入了两个类。这些 AutoGen 代理的包装器类使 Chainlit 能够跟踪其对话并处理终止或其他用户输入。

配置 AutoGen 代理

AutoGen 代理通过 Lite-LLM 代理服务器利用来自 Ollama 的模型。这是必要的,因为 AutoGen 不支持通过非 OpenAI 推理模型进行函数调用。代理服务器允许使用 Ollama 模型进行函数调用和代码执行。

# 来自 Lite-LLM 服务器的 LLama3 LLM,用于代理 #  
 llm_config_autogen = {   
    “seed” : 40 ,   # 更改不同试验的种子  
    “temperature” : 0 ,   
    “config_list” : [{ “model” : “litellm” ,   
                     “base_url” : “http://0.0.0.0:4000/” ,   
                     'api_key' : 'ollama' },   
    ],   
    “timeout” : 60000 ,   
}  

在聊天开始时实例化代理并输入用户设置

我创建了三个 Chainlit 小部件(开关、选择和滑块)作为用户设置,以选择 GraphRAG 搜索类型、社区级别和内容生成类型。打开时,开关小部件使用 GraphRAG 本地搜索方法进行查询。内容生成的选择选项包括“优先列表”、“单个段落”、“多个段落”和“多页报告”。滑块小部件使用选项 0、1 和 2 选择社区生成级别。

@cl.on_chat_start  
async def on_chat_start():  
  try:  
    settings = await cl.ChatSettings(  
            [        
                Switch(id="Search_type", label="(GraphRAG) Local Search", initial=True),         
                Select(  
                    id="Gen_type",  
                    label="(GraphRAG) Content Type",  
                    values=["prioritized list", "single paragraph", "multiple paragraphs", "multiple-page report"],  
                    initial_index=1,  
                ),            
                Slider(  
                    id="Community",  
                    label="(GraphRAG) Community Level",  
                    initial=0,  
                    min=0,  
                    max=2,  
                    step=1,  
                ),  
  
            ]  
        ).send()  
  
    response_type = settings["Gen_type"]  
    community = settings["Community"]  
    local_search = settings["Search_type"]  
      
    cl.user_session.set("Gen_type", response_type)  
    cl.user_session.set("Community", community)  
    cl.user_session.set("Search_type", local_search)  
  
    retriever   = AssistantAgent(  
       name="Retriever",   
       llm_config=llm_config_autogen,   
       system_message="""Only execute the function query_graphRAG to look for context.   
                    Output 'TERMINATE' when an answer has been provided.""",  
       max_consecutive_auto_reply=1,  
       human_input_mode="NEVER",   
       description="Retriever Agent"  
    )  
  
    user_proxy = ChainlitUserProxyAgent(  
        name="User_Proxy",  
        human_input_mode="ALWAYS",  
        llm_config=llm_config_autogen,  
        is_termination_msg=lambda x: x.get("content", "").rstrip().endswith("TERMINATE"),  
        code_execution_config=False,  
        system_message='''A human admin. Interact with the retriever to provide any context''',  
        description="User Proxy Agent"  
    )  
      
    print("Set agents.")  
  
    cl.user_session.set("Query Agent", user_proxy)  
    cl.user_session.set("Retriever", retriever)  
  
    msg = cl.Message(content=f"""Hello! What task would you like to get done today?        
                     """,   
                     author="User_Proxy")  
    await msg.send()  
  
    print("Message sent.")  
      
  except Exception as e:  
    print("Error: ", e)    pass

我选择不使用 Chainlit 包装器类作为检索器助手代理。这样我就可以禁用对检索器输出的跟踪,并直接捕获来自 GraphRAG 函数的响应。原因是当响应通过检索器时,文本会丢失其格式,包括空格和段落缩进。在生成带有主标题和副标题的多页报告时,此问题尤其明显。我可以通过绕过 Chainlit 包装器并直接从 GraphRAG 函数检索输出来保留原始格式。您将在下面看到我是如何实现这一点的。

更新输入设置中的更改

此功能可检测对设置中的选择、开关和滑块小部件所做的任何更改,以便在后续查询中反映这些更改。

@cl.on_settings_update  
async def setup_agent(settings):  
    response_type = settings["Gen_type"]  
    community = settings["Community"]  
    local_search = settings["Search_type"]  
    cl.user_session.set("Gen_type", response_type)  
    cl.user_session.set("Community", community)  
    cl.user_session.set("Search_type", local_search)  
    print("on_settings_update", settings)

使用来自代理和用户的传入消息更新 UI

这是应用程序的核心部分,它创建了一个有两个代理的群聊,定义了一个函数“state_transition”来管理对话序列,并提供异步RAG查询功能。

您会注意到,INPUT_DIR ,ROOT_DIR, RESPONSE_TYPE, COMMUNTIY基于 bool 参数传递到本地和全局搜索 GraphRAG 查询函数中的参数LOCAL_SEARCHROOT_DIR,设置为’.’— 如果您在不同的目录中初始化了 GraphRAG,请注意这一点。

异步函数“query_graphRAG”调用 GraphRAG 全局或本地搜索方法。您会注意到函数await cl.Message(content=result.response).send()内部的一行async def query_graphRAG直接检索 RAG 查询的输出并保留检索到的内容的文本格式。

@cl.on_message  
async def run_conversation(message: cl.Message):  
    print("Running conversation")  
    CONTEXT = message.content  
  
    MAX_ITER = 10  
    INPUT_DIR = None  
    ROOT_DIR = '.'  
    RESPONSE_TYPE = cl.user_session.get("Gen_type")  
    COMMUNITY = cl.user_session.get("Community")  
    LOCAL_SEARCH = cl.user_session.get("Search_type")  
  
    print("Setting groupchat")  
  
    retriever   = cl.user_session.get("Retriever")  
    user_proxy  = cl.user_session.get("Query Agent")  
  
    def state_transition(last_speaker, groupchat):  
        messages = groupchat.messages  
        if last_speaker is user_proxy:  
            return retriever  
        if last_speaker is retriever:  
            if messages[-1]["content"].lower() not in ['math_expert','physics_expert']:  
                return user_proxy  
            else:  
                if messages[-1]["content"].lower() == 'math_expert':  
                    return user_proxy  
                else:  
                    return user_proxy  
        else:  
            pass  
            return None  
  
    async def query_graphRAG(  
          question: Annotated[str, 'Query string containing information that you want from RAG search']  
                          ) -> str:  
        if LOCAL_SEARCH:  
            result = run_local_search(INPUT_DIR, ROOT_DIR, COMMUNITY ,RESPONSE_TYPE, question)  
        else:  
            result = run_global_search(INPUT_DIR, ROOT_DIR, COMMUNITY ,RESPONSE_TYPE, question)  
        await cl.Message(content=result).send()  
        return result  
  
    for caller in [retriever]:  
        d_retrieve_content = caller.register_for_llm(  
            description="retrieve content for code generation and question answering.", api_style="function"  
        )(query_graphRAG)  
  
    for agents in [user_proxy, retriever]:  
        agents.register_for_execution()(d_retrieve_content)  
  
    groupchat = autogen.GroupChat(  
        agents=[user_proxy, retriever],  
        messages=[],  
        max_round=MAX_ITER,  
        speaker_selection_method=state_transition,  
        allow_repeat_speaker=True,  
    )  
    manager = autogen.GroupChatManager(groupchat=groupchat,  
                                       llm_config=llm_config_autogen,   
                                       is_termination_msg=lambda x: x.get("content", "") and x.get("content", "").rstrip().endswith("TERMINATE"),  
                                       code_execution_config=False,  
                                       )      
  
# -------------------- Conversation Logic. Edit to change your first message based on the Task you want to get done. ----------------------------- #   
    if len(groupchat.messages) == 0:   
      await cl.make_async(user_proxy.initiate_chat)( manager, message=CONTEXT, )  
    elif len(groupchat.messages) < MAX_ITER:  
      await cl.make_async(user_proxy.send)( manager, message=CONTEXT, )  
    elif len(groupchat.messages) == MAX_ITER:    
      await cl.make_async(user_proxy.send)( manager, message="exit", )

对于此应用程序,我们只需要两个代理。您可以添加/修改代理并配置“state_transition”函数来协调对话中的输入,以实现更复杂的工作流程。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

### DeepSeek与AutoGen概述 DeepSeekAutoGen代表了当前AI领域内两种不同的技术解决方案,旨在提升自动化生成内容的质量以及简化其部署过程。对于希望利用这些先进工具实现特定业务目标的企业个人开发者而言,理解两者的工作原理及其应用场景至关重要。 #### DeepSeek简介 作为一款专注于自然语言处理(NLP)任务的强大引擎,DeepSeek提供了多种预训练模型供用户选择,并支持微调以适应更具体的场景需求[^1]。该平台不仅限于文本生成,在问答系统、情感分析等方面同样表现出色。通过API接口轻松接入现有工作流中,使得即使是不具备深厚机器学习背景的知识工作者也能迅速上手操作。 #### AutoGen详解 相比之下,AutoGen则更加侧重于自动代码生成功能。它允许使用者定义模板并通过简单的参数设置来自动生成符合要求的应用程序源码片段或完整模块。这种能力极大地提高了软件开发效率并减少了人为错误的发生几率。更重要的是,借助内置优化算法,所产出的结果往往具备较高的性能表现[^2]。 #### 集成配置方法 为了更好地发挥各自优势并将二者有机结合在一起,可以考虑如下策略: - **环境准备**:确保本地计算机已安装Python解释器及相关依赖库;注册账号获取必要的API密钥。 - **数据交换机制设计**:基于RESTful API标准建立稳定的数据传输通道,以便于两套系统间的信息互通无阻。 - **联合调试流程制定**:针对可能出现的问题提前规划好排查思路技术手段,比如日志记录、异常捕获等措施。 ```python import requests def call_deepseek_api(prompt, api_key): url = "https://api.deepseek.com/v1/generate" headers = {"Authorization": f"Bearer {api_key}"} payload = {"prompt": prompt} response = requests.post(url, json=payload, headers=headers) return response.json() def generate_code_with_autogen(template_id, params, autogen_token): endpoint = f"https://autogen.io/templates/{template_id}/generate" auth_header = {'Authorization': 'Token ' + autogen_token} result = requests.get(endpoint, params=params, headers=auth_header).text return result ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值