【创新实训】Python调用AnythingLLM接口实战指南

  • AnythingLLM 接口调用
  • 前提准备
  • 一、找到访问AnythingLLM的访问方式
  • 二、获取 API Key
  • 三、使用Python实现对API的调用
  • 3.1 准备工作
  • 3.2 编写代码
  • 3.3 运行与调试
  • AnythingLLM 接口调用

    AnythingLLM 是一个开源平台,可以将文档、资源和笔记转化为一个智能的、可交互的知识库,就像拥有一个私有化的大模型。同时,AnythingLLM 提供了一套强大的 API,让开发者能够将其核心问答管理功能集成到自己的应用程序中。

    前提准备

    1. 一个安装并成功运行的 AnythingLLM 实例
    2. 由于我的实例运行在服务器上,所以我需要使用服务器对应的地址端口号进行访问;
    3. 对于HTTP请求需要十分了解,尤其得熟悉GETPOST请求,以及HeadersBodyJSON数据格式等;
    4. 编程环境,我将使用Python进行访问,此外需要安装requests库等依赖库。

    一、找到访问AnythingLLM的访问方式

  • 由于 AnythingLLM 内置了 Swagger UI来展示其API 文档,我们可以通过访问http://xxx.xxx.xxx.xxx:xxxx/api/docs来查看 AnythingLLM Developer API 文档。
  • 文档中列出了所有可用的API端点、每个端点所需的参数、请求体格式、响应格式等。
  • HTTP请求方法:GETPOSTPUT等。
  • 路径:每个API 的具体地址,包含一些参数,比如{slug}{docName}等。
  • Parameters:需要传入的参数。
  • Request Body:比如对于POST请求,描述需要发送的JSON数据的结构。
  • Response:描述成功或失败时的响应,包括返回的数据结构等。
  • 如图:

  • 我们需要使用大模型的问答功能,因此找到Workspaces,使用其中的/v1/workspace/{slug}/chats/v1/workspace/{slug}/stream-chats是进行问答的窗口。
  • {slug}处用于选择工作区,将想要使用的工作区名称(标识符)填入即可
  • 可以使用GETPOST请求
  • 二、获取 API Key

    为了保护 AnythingLLM 实例不被随意访问,因此要使用 API密钥进行验证身份。

  • 设置中打开工具->API 密钥,并点击生成新的API密钥创建一个新的密钥:
  • 获得了一个新密钥后,复制密钥的内容,用于填充步骤一中访问大模型问答功能所需的的{slug}
  • 三、使用Python实现对API的调用

    3.1 准备工作

  • 依赖库:pip install request
  • API相关:
  • ANYTHINGLLM_BASE_URL:AnythingLLM实例的地址
  • API_KEY:API 密钥
  • WORKSPACE_SLUG:工作区的名称(标识符)
  • 3.2 编写代码

    import requests
    
    # --- 配置工作 ---
    # 替换成 AnythingLLM 实例地址
    ANYTHINGLLM_BASE_URL = "http://xxx.xxx.xxx.xxx:xxxx"
    # 替换成 API 密钥
    API_KEY = "xxxxxxx-xxxxxxx-xxxxxxx-xxxxxxx"
    # 替换成要交互的工作区标识符 slug
    WORKSPACE_SLUG = "test1"
    # 要问的问题
    USER_QUESTION = "你好?"
    
    # --- 形成 API 端点 ---
    chat_endpoint = f"{ANYTHINGLLM_BASE_URL}/api/v1/workspace/{WORKSPACE_SLUG}/chat"
    
    # --- 形成 请求头 ---
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
    }
    
    # --- 形成 请求体 ---
    data = {
        "message": USER_QUESTION,
        "mode": "query" # 或者 "chat" 如果需要上下文
        # 根据 API 文档可能需要包含 history 等其他字段
        # "history": []
    }
    
    try:
        # --- 发送 POST 请求 ---
        response = requests.post(chat_endpoint, headers=headers, json=data, timeout=120) # 设置超时时间
        response.raise_for_status() # 如果请求失败 (状态码 >= 400),则抛出异常
    
        # --- 处理响应 ---
        result = response.json()
        print("API 调用成功!")
        # 打印或使用返回的答案,具体结构参考 API 文档
        # print(json.dumps(result, indent=2, ensure_ascii=False))
        if 'textResponse' in result and result['textResponse']:
             print("回答:", result['textResponse'])
        elif 'error' in result and result['error']:
             print("错误:", result['error'])
        else:
             print("收到未知响应格式:", result)
    
    
    except requests.exceptions.RequestException as e:
        print(f"API 调用失败: {e}")
    except Exception as e:
        print(f"处理响应时发生错误: {e}")
    

    3.3 运行与调试

  • 运行上述代码。
  • 如果连接成功,则会发出一个你好?的提问,不出意料会收到API 响应的内容,这说明可以成功的调用大模型的问答功能了。
  • 如果连接失败,那就得检查一下以下内容:
  • 实例是否正在运行
  • 实例的地址是否正确,端口号是否正确
  • API Key是否正确,是否正在使用(没有被停止使用)
  • 选择的工作区是否存在,名称是否正确
  • 成功调用的结果:

    总之,关键在于:确保实例运行并且网络可达 -> 获取 API 密钥 -> 理解 API 文档 -> 构造并发送请求 -> 处理响应与错误

    作者:6_ShiaoYoung

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【创新实训】Python调用AnythingLLM接口实战指南

    发表回复