Add JAVA version CodeGeeX API example.

This commit is contained in:
Darran Zhang 2023-01-20 02:52:20 +08:00
parent 7a53c1fe8d
commit 6c49ace41b
5 changed files with 256 additions and 39 deletions

View File

@ -16,42 +16,4 @@
在API信息中可以查看代码生成/代码翻译的请求地址和使用文档:
<img src="../resources/api/api_step_5.png">
根据文档中的描述使用API参考文件``api/generation_example.py``
```python
# encoding:utf-8
import requests
import json
'''
Code Generation
'''
API_KEY = "" # Get from Tianqi console. 从控制台获取
API_SECRET = "" # Get from Tianqi console. 从控制台获取
PROMPT = "from typing import List\n\ndef has_close_elements(numbers: List[float], threshold: float) -> bool:\n \"\"\" Check if in given list of numbers, are any two numbers closer to each other than\n given threshold.\n >>> has_close_elements([1.0, 2.0, 3.0], 0.5)\n False\n >>> has_close_elements([1.0, 2.8, 3.0, 4.0, 5.0, 2.0], 0.3)\n True\n \"\"\"\n"
NUMBER = 3
LANG = "Python"
request_url = "https://tianqi.aminer.cn/api/v2/"
api = 'multilingual_code_generate'
# Request is in json format. 指定请求参数格式为json
headers = {'Content-Type': 'application/json'}
request_url = request_url + api
data = {
"apikey": API_KEY,
"apisecret": API_SECRET,
"prompt":PROMPT,
"n":NUMBER,
"lang":LANG
}
def main():
response = requests.post(request_url, headers=headers, data=json.dumps(data))
if response:
print(response.json())
if __name__ == '__main__':
main()
```
根据文档中的描述使用APIPython版参考目录``api/codegeex-api-example-python``JAVA版参考工程``api/codegeex-api-example-java``

View File

@ -0,0 +1,141 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.aminer</groupId>
<artifactId>codegeex-api-example-java</artifactId>
<version>1.0-SNAPSHOT</version>
<!--
如果没有下面的这段encoding配置会导致编译的时候输出WARNING信息
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<!-- 一般而言target与source是保持一致的但是有时候为了让程序能在其他版本的jdk中运行(对于低版本目标jdk源代码中不能使用
低版本jdk中不支持的语法)会存在target不同于source的情况 -->
<source>1.8</source><!-- 源代码使用的JDK版本 -->
<target>1.8</target><!-- 需要生成的目标class文件的编译版本 -->
<encoding>UTF-8</encoding><!-- 字符集编码 -->
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<!-- 有下面这段executions才能打出包含所有dependency的fat jar -->
<executions>
<execution>
<phase>package</phase><!-- 指定在打包节点执行jar包合并操作 -->
<goals>
<goal>single</goal><!-- 该模块只运行一次 -->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
<version>2.6.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>2.6.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.6.6</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.10.0</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
</dependencies>
</dependencyManagement>
<repositories>
<repository>
<!-- Maven 自带的中央仓库使用的id为central如果其他的仓库声明也是用该id就会覆盖中央仓库的配置 -->
<id>central</id>
<name>ALiYun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</repository>
</repositories>
</project>

View File

@ -0,0 +1,83 @@
package cn.aminer.codegeex.example;
import cn.aminer.codegeex.example.pojo.Payload;
import com.fasterxml.jackson.databind.ObjectMapper;
import okhttp3.*;
import java.io.IOException;
/**
* 调用 CodeGeeX API 生成代码的例子
*
* @author Darran Zhang @ codelast.com
* @version 2023-01-20
*/
public class CodeGenerationExample {
public static final String API_KEY = "your_api_key"; // "天启开放平台"上申请到的API Key
public static final String API_SECRET = "your_api_secret"; // "天启开放平台"上申请到的API Secret
public static final int NUMBER = 3; // 生成几个候选
public static final String LANGUAGE = "Java"; // 编程语言
public static final String REQUEST_URL = "https://tianqi.aminer.cn/api/v2/multilingual_code_generate"; // 请求地址
public static void main(String[] args) throws Exception {
CodeGenerationExample example = new CodeGenerationExample();
String prompt = "// use OkHttpClient library to write a function to perform http post request\n\n" +
"public class HttpPost {\n" +
" public static void main(String[] args) {\n";
example.generateCode(prompt);
}
/**
* 生成代码
*
* @param prompt 待补全的代码
*/
public void generateCode(String prompt) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
Payload payload = new Payload().setApiKey(API_KEY).setApiSecret(API_SECRET).setPrompt(prompt).setNumber(NUMBER)
.setLanguage(LANGUAGE);
String response = performHttpPost(REQUEST_URL, objectMapper.writeValueAsString(payload));
System.out.println(response);
}
/**
* 发起 HTTP POST 请求
*
* @param url 请求的URL
* @param payload 请求的JSON数据
* @return 请求返回的内容若出错则返回 null
*/
public String performHttpPost(String url, String payload) {
HttpUrl.Builder builder = null;
try {
HttpUrl httpUrl = HttpUrl.parse(url);
if (httpUrl != null) {
builder = httpUrl.newBuilder();
}
} catch (IllegalArgumentException e) {
System.out.println("failed to create HttpUrl.Builder from url " + url + ":" + e);
}
if (builder == null) {
return null;
}
OkHttpClient client = new OkHttpClient();
RequestBody requestBody = RequestBody.create(payload, MediaType.parse("application/json; charset=utf-8"));
Request request = new Request.Builder()
.url(builder.build())
.post(requestBody)
.build();
try {
Response response = client.newCall(request).execute();
ResponseBody body = response.body();
if (body == null) {
System.out.println("null response body");
return null;
}
return body.string();
} catch (IOException e) {
System.out.println("failed to send POST request: " + e);
}
return null;
}
}

View File

@ -0,0 +1,31 @@
package cn.aminer.codegeex.example.pojo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 发送到 CodeGeex API 的请求中包含的JSON payload对象
*
* @author Darran Zhang @ codelast.com
* @version 2023-01-20
*/
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
@Accessors(chain = true)
public class Payload {
@JsonProperty("apikey")
String apiKey; // "天启开放平台"上申请到的API Key
@JsonProperty("apisecret")
String apiSecret; // "天启开放平台"上申请到的API Secret
String prompt; // 待补全的代码
@JsonProperty("n")
int number; // 生成几个候选
@JsonProperty("lang")
String language; // 编程语言
}