使用AnythingLLM的api调用

使用AnythingLLM的api调用

目标

AnythingLLM是一个图形化的工具,想要在项目中使用,就必须使用API调用。

好在AnythingLLM提供了这样的工具。

官方文档

API Access and Keys | AnythingLLM by Mintplex Labs

申请API-KEY

创建新的API-KEY

访问Swagger

访问本地的http://localhost:3001/api/docs/ 可以查询到官方的文档。

测试API

点击左上角的Authorize进行认证,API key是作为请求头传入的。

找到工作空间的进行POST的Chat

得到了这样的响应:

可以看到成功发挥了AnythingLLM的查询文档功能。

{
  "id": "63dd7a4b-45f9-4b29-84be-74a0119f85e6",
  "type": "textResponse",
  "close": true,
  "error": null,
  "chatId": 17,
  "textResponse": "ECharts is a powerful, open-source JavaScript visualization library that offers flexible chart types, robust rendering engines, and professional data analysis capabilities. It allows developers to create dynamic, interactive visualizations for web applications using various charts such as line charts, bar charts, scatter plots, pie charts, and more. ECharts supports customization in terms of appearance, layout, and interactivity, making it suitable for a wide range of uses from simple dashboards to complex data analysis tools.",
  "sources": [
    {
      "id": "5be5be5f-a394-41b0-a47e-1db35c9fc8ce",
      "url": "file://C:\\Users\\81067\\AppData\\Roaming\\anythingllm-desktop\\storage\\hotdir\\echarts使用 英文文档.docx",
      "title": "echarts使用 英文文档.docx",
      "docAuthor": "no author found",
      "description": "No description found.",
      "docSource": "pdf file uploaded by the user.",
      "chunkSource": "",
      "published": "2024/6/23 12:24:49",
      "wordCount": 871,
      "token_count_estimate": 904,
      "text": "<document_metadata>\nsourceDocument: echarts使用 英文文档.docx\npublished: 2024/6/23 12:24:49\n</document_metadata>\n\nECharts is a powerful, open-source JavaScript visualization library that provides flexible chart types, powerful rendering engines, and professional data analysis capabilities. Here is a comprehensive guide on how to use ECharts:\n\nGetting Started with ECharts\n\n1. Installation\n\nYou can include ECharts in your project by downloading it from the Apache ECharts website or by using a CDN like jsDelivr. To quickly set it up:\n\nDownload from CDN:\n\nhtml\n\n复制代码\n\n<script src=\"https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js\"></script>\n\nInclude in HTML:\n\nhtml\n\n复制代码\n\n<script src=\"echarts.js\"></script>\n\n2. Basic Setup\n\nCreate a simple HTML file and include the ECharts library. Set up a container where the chart will be rendered:\n\nhtml\n\n复制代码\n\n<!DOCTYPE html>\n\n<html>\n\n<head>\n\n    <meta charset=\"utf-8\">\n\n    <script src=\"echarts.js\"></script>\n\n</head>\n\n<body>\n\n    <div id=\"main\" style=\"width: 600px;height:400px;\"></div>\n\n    <script type=\"text/javascript\">",
      "_distance": 0.4381682872772217,
      "score": 0.5618317127227783
    },
    {
      "id": "2880ba79-f81b-4b72-ad93-2951bebe55b3",
      "url": "file://C:\\Users\\81067\\AppData\\Roaming\\anythingllm-desktop\\storage\\hotdir\\echarts使用 英文文档.docx",
      "title": "echarts使用 英文文档.docx",
      "docAuthor": "no author found",
      "description": "No description found.",
      "docSource": "pdf file uploaded by the user.",
      "chunkSource": "",
      "published": "2024/6/23 12:24:49",
      "wordCount": 871,
      "token_count_estimate": 904,
      "text": "<document_metadata>\nsourceDocument: echarts使用 英文文档.docx\npublished: 2024/6/23 12:24:49\n</document_metadata>\n\nboundaryGap: false,\n\n        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']\n\n    },\n\n    yAxis: {\n\n        type: 'value'\n\n    },\n\n    series: [\n\n        {\n\n            name: 'Email',\n\n            type: 'line',\n\n            stack: 'Total',\n\n            data: [120, 132, 101, 134, 90, 230, 210]\n\n        }\n\n    ]\n\n};\n\nResources\n\nFor more detailed guides and examples, you can refer to the official ECharts documentation and the ECharts handbook which cover everything from basic setup to advanced usage and best practices.\n\nThese resources will help you leverage ECharts' full potential to create engaging and informative visualizations for your web applications.",
      "_distance": 0.4401152729988098,
      "score": 0.5598847270011902
    },
    {
      "id": "6f5ed6cf-124c-4871-88cc-231a50217b44",
      "url": "file://C:\\Users\\81067\\AppData\\Roaming\\anythingllm-desktop\\storage\\hotdir\\echarts使用 英文文档.docx",
      "title": "echarts使用 英文文档.docx",
      "docAuthor": "no author found",
      "description": "No description found.",
      "docSource": "pdf file uploaded by the user.",
      "chunkSource": "",
      "published": "2024/6/23 12:24:49",
      "wordCount": 871,
      "token_count_estimate": 904,
      "text": "<document_metadata>\nsourceDocument: echarts使用 英文文档.docx\npublished: 2024/6/23 12:24:49\n</document_metadata>\n\n},\n\n    series: [{\n\n        data: [120, 200, 150, 80, 70, 110, 130],\n\n        type: 'bar'\n\n    }]\n\n};\n\nLine Chart:\n\njavascript\n\n复制代码\n\nvar option = {\n\n    xAxis: {\n\n        type: 'category',\n\n        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']\n\n    },\n\n    yAxis: {\n\n        type: 'value'\n\n    },\n\n    series: [{\n\n        data: [150, 230, 224, 218, 135, 147, 260],\n\n        type: 'line'\n\n    }]\n\n};\n\n4. Advanced Features\n\nECharts provides advanced features like dynamic data, rich text labels, animations, and interactions:\n\nDynamic Data:\n\njavascript\n\n复制代码\n\nsetInterval(function () {\n\n    var data = option.series[0].data;\n\n    data.shift();\n\n    data.push(Math.round(Math.random() * 1000));\n\n    myChart.setOption(option);\n\n}, 2000);\n\nRich Text:\n\njavascript\n\n复制代码\n\nvar option = {\n\n    title: {\n\n        text: 'ECharts Entry Example',\n\n        subtext: 'Purely Fictitious'\n\n    },\n\n    tooltip: {\n\n        trigger: 'axis'\n\n    },\n\n    xAxis: {\n\n        type: 'category',",
      "_distance": 0.45500361919403076,
      "score": 0.5449963808059692
    },
    {
      "id": "4919bd52-1962-40f2-ba3f-2b869f12f606",
      "url": "file://C:\\Users\\81067\\AppData\\Roaming\\anythingllm-desktop\\storage\\hotdir\\echarts使用 英文文档.docx",
      "title": "echarts使用 英文文档.docx",
      "docAuthor": "no author found",
      "description": "No description found.",
      "docSource": "pdf file uploaded by the user.",
      "chunkSource": "",
      "published": "2024/6/23 12:24:49",
      "wordCount": 871,
      "token_count_estimate": 904,
      "text": "<document_metadata>\nsourceDocument: echarts使用 英文文档.docx\npublished: 2024/6/23 12:24:49\n</document_metadata>\n\nvar myChart = echarts.init(document.getElementById('main'));\n\n        var option = {\n\n            title: {\n\n                text: 'ECharts Example'\n\n            },\n\n            tooltip: {},\n\n            legend: {\n\n                data: ['sales']\n\n            },\n\n            xAxis: {\n\n                data: ['Shirts', 'Cardigans', 'Chiffons', 'Pants', 'Heels', 'Socks']\n\n            },\n\n            yAxis: {},\n\n            series: [{\n\n                name: 'sales',\n\n                type: 'bar',\n\n                data: [5, 20, 36, 10, 10, 20]\n\n            }]\n\n        };\n\n        myChart.setOption(option);\n\n    </script>\n\n</body>\n\n</html>\n\n3. Chart Types\n\nECharts supports a variety of chart types, including bar, line, pie, scatter, and more. Each chart type can be customized extensively:\n\nBar Chart:\n\njavascript\n\n复制代码\n\nvar option = {\n\n    xAxis: {\n\n        type: 'category',\n\n        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']\n\n    },\n\n    yAxis: {\n\n        type: 'value'",
      "_distance": 0.5417587757110596,
      "score": 0.45824122428894043
    }
  ]
}

Swagger也给出了Curl命令

curl -X 'POST' \
  'http://localhost:3001/api/v1/workspace/echarts/chat' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer SHCJ9M8-CD6M1P1-P8GMHE9-CFHK12E' \
  -H 'Content-Type: application/json' \
  -d '{
  "message": "What is echarts?",
  "mode": "chat"
}'

编写代码

根据Swagger给出的Curl命令,编写Java代码

curl -X 'POST' \
  'http://localhost:3001/api/v1/workspace/echarts/chat' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer SHCJ9M8-CD6M1P1-P8GMHE9-CFHK12E' \
  -H 'Content-Type: application/json' \
  -d '{
  "message": "What is echarts?",
  "mode": "chat"
}'

编写一个askLocalAnythingLLM方法,传入message参数,将授权信息等传入请求头中,得到返回的JSON处理后作为String类型传回。

public static String askLocalAnythingLLM(String message) {
    final String TARGET_URL = "http://localhost:3001/api/v1/workspace/echarts/chat";
    final String ACCEPT_HEADER = "application/json";
    final String AUTHORIZATION_HEADER = "Bearer Y78TPJ6-5PJMMHB-Q07KE5B-07308GT";
    final String CONTENT_TYPE_HEADER = "application/json";
    StringBuilder response = new StringBuilder();
    try {
        // 创建URL对象
        URL url = new URL(TARGET_URL);
​
        // 打开连接
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
​
        // 设置请求方法为POST
        connection.setRequestMethod("POST");
​
        // 设置请求头
        connection.setRequestProperty("accept", ACCEPT_HEADER);
        connection.setRequestProperty("Authorization", AUTHORIZATION_HEADER);
        connection.setRequestProperty("Content-Type", CONTENT_TYPE_HEADER);
​
        // 允许向连接中写入数据
        connection.setDoOutput(true);
​
        // 创建JSON请求体
        String jsonInputString = String.format("{ \"message\": \"%s\", \"mode\": \"query\" }", message);
​
        // 向连接中写入数据
        try (OutputStream os = connection.getOutputStream()) {
            byte[] input = jsonInputString.getBytes("utf-8");
            os.write(input, 0, input.length);
        }
​
        int responseCode = connection.getResponseCode();
        System.out.println("POST Response Code :: " + responseCode);
​
        // 读取响应内容
        try (BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"))) {
            String responseLine = null;
            while ((responseLine = br.readLine()) != null) {
                response.append(responseLine.trim());
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
​
    // 创建JSONObject对象
    JSONObject jsonObject = new JSONObject(response.toString());
    // 提取textResponse字段
    String textResponse = jsonObject.getString("textResponse");
​
    return textResponse;
}
### 使用Python调用AnythingLLM API 为了使用Python调用AnythingLLM API,通常需要遵循API提供商的具体指导来设置环境并编写相应的代码。虽然提供的参考资料未直接提及AnythingLLM API,但是可以从其他相似的API调用方式中获取灵感。 对于配置和初始化部分,可以借鉴OpenAI客户端库的做法,在Python环境中集成第三方API服务时,可能涉及到全局配置项如`api_type`等参数[^1]。这意味着当处理多个不同类型的API(例如同时使用Azure和OpenAI的服务),开发者需要注意这些共享资源或属性可能会相互影响,因此应当合理管理它们之间的差异性和兼容性问题。 具体到调用过程,则一般包括以下几个方面: #### 安装依赖包 首先确保安装了必要的Python库,这可以通过pip命令完成: ```bash pip install requests ``` #### 设置API密钥和其他必要参数 创建一个安全的方式存储API密钥及其他敏感信息,比如通过环境变量或者专用配置文件读取。这里假设已经获得了有效的API Key用于认证访问。 #### 编写请求函数 下面是一个简单的例子展示如何构建HTTP POST请求向AnythingLLM发送数据,并接收响应结果。 ```python import os import requests def call_anythingllm_api(prompt, api_key=None): url = "https://api.anythingllm.com/v1/generate" headers = { 'Content-Type': 'application/json', 'Authorization': f'Bearer {api_key or os.getenv("ANYTHINGLLM_API_KEY")}' } payload = {"prompt": prompt} response = requests.post(url, json=payload, headers=headers) if response.status_code == 200: result = response.json() return result['text'] else: raise Exception(f"Error calling AnythingLLM API: {response.text}") ``` 此段代码定义了一个名为`call_anythingllm_api`的功能函数,接受提示字符串作为输入,并返回由模型生成的文字输出。注意这里的URL地址应替换为实际使用API端点路径;同样地,根据实际情况调整payload结构以匹配目标API的要求。 关于调试这部分工作,可以在本地开发过程中利用IDE工具辅助实现更高效的编码体验。例如,在Mac上的VS Code里添加断点、观察变量变化等情况有助于快速定位错误所在位置[^2]。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值