#11 中,我们引入了一个远程调用的能力,即你可以在 Shire 中调用远程 API,作为上下文 的一部分。

Quick Start

先看个例子:

---
variables:
  "demo": /demo.md/ { thread(".shire/toolchain/bigmodel.curl.sh") }
---

hi

$demo

在这个例子中,我们定义了一个变量 demo,我们调用 bigmodel.curl.sh 来获取一个远程的 API 数据。

如下是 bigmodel.curl.sh 的内容:

curl --location 'https://open.bigmodel.cn/api/paas/v4/chat/completions' \
--header 'Authorization: Bearer ${apiKey}' \
--header 'Content-Type: application/json' \
--data '{
    "model": "glm-4",
    "messages": [
        {
            "role": "user",
            "content": "你好"
        }
    ]
}'

这里我们使用了一个变量 apiKey,它可以通过 *.shireEnv.json 文件来设置

{
  "development": {
    "apiKey": "123456"
  }
}

当前,只支持简单的环境变量,即上面的 development 为环境名,apiKey 为变量名。

.shireEnv.json 文件

.shireEnv.json 用于存储环境变量,Shire 将会自动加载这种文件,当前只支持 development 环境。

cURL.sh

在 Shire 中,我们使用 cURL 来调用远程 API,以简化调用的过程。 注意:

  • Shire 通过 JetBrains 的 HttpClient 来转换 cURL 脚本,因此,不一定支持所有的 cURL 语法。
  • Shire 只支持 ${xxx} 形式的变量替换,不支持 $xxx 形式的变量替换。
  • Shire 使用 OkHttpClient 来调用远程 API,因此,不一定支持所有的 cURL 语法。

结合 JsonPath

JSONPath 是一种类似于 XPath 的语法,用于从 JSON 文档中选择数据。在 Shire 中,我们可以使用 JsonPath 来选择我们需要的数据。

---
variables:
  "api": /sampl.sh/ { thread(".shire/toolchain/bigmodel.curl.sh") | jsonpath("$.choices[0].message.content") }
---

hi

$api

输出示例:

Prepare for running httpClient.shire...
Shire Script: /Users/phodal/IdeaProjects/shire-demo/.shire/toolchain/httpClient.shire
Shire Script Compile output:
hi
你好👋!我是人工智能助手智谱清言,可以叫我小智🤖,很高兴见到你,欢迎问我任何问题。

--------------------
你好!很高兴见到你。如果你有任何问题或需要帮助,请随时告诉我。我在这里为你提供信息和支持。

Process finished with exit code 0