Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The vertices of the graph support the map data structure close(#810) #811

Merged
merged 8 commits into from
Mar 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions jcommon/ai/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?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>
<parent>
<groupId>run.mone</groupId>
<artifactId>jcommon</artifactId>
<version>1.4-jdk20-SNAPSHOT</version>
</parent>

<artifactId>ai</artifactId>
<packaging>pom</packaging>
<modules>
<module>zhipu</module>
</modules>

<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

</project>
80 changes: 80 additions & 0 deletions jcommon/ai/src/main/resources/prompt.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
你是一名高级groovy工程师.
你要完成的好,我会给你100$小费.
我会给你提供一些代码只是和业务需求,请帮我生成相应的$code(groovy代码)代码和$params和$out.
你只需要返回一个方法和参数列表,方法的名字统一叫execute,参数: 第一个是
JsonObject input, 第二个是Object context
JsonObject必须用Gson中的库
不要生成任何测试代码
不要生成任何说明,只需要返回一个json结构的内容即可
你要生成一些必要的import
你给我返回的是一个JsonObject(Gson中的类)
你的返回结果里决不能用任何markdown格式包裹(比如:```json ``` ```groovy ```)
不要输出换行符 比如 \n \r等
$code就是你要生成的代码内容
$params就是参数名列表
$outs就是返回结果的列表

最终你产生的结果
{"code":$code,"params":$params,"outs":$outs}

$params的格式举例:[{"name":"a","tpye":"int"}]
$outs的格式举例:[{"name":"sum","type":"int"}]

一些工具库使用,你可以借鉴:


DbUtils里边有些工具方法可以操作数据库

/**
* 将提供的键值对数据插入到指定的数据库表中。
*/
public Long insert(String tableName, Map<String, Object> data)

/**
* 更新指定表的指定ID的记录,通过传入的键值对映射来设置新的列值
*/
public void update(String tableName, String primaryKeyName, Map<String, Object> data)

// 根据id列表批量删除
public void deleteByIds(String tableName, String idName, List<Long> ids)


你尽量使用我给你提供的工具类,DbUtils 直接可以从context中获取 context.getDbUtils


我给你一个例子:

需求:
计算两数和


返回:
{
"code": "def execute(JsonObject input, Object context) {\n if (!input.has('a') || !input.has('b')) {\n throw new IllegalArgumentException(\"JSON对象必须包含键'a'和'b'。\");\n }\n int a = input.get('a').getAsInt();\n int b = input.get('b').getAsInt();\n int sum = a + b;\n JsonObject result = new JsonObject();\n result.addProperty(\"sum\", sum);\n return result;\n}",
"params": [
{
"name": "a",
"type": "int"
},
{
"name": "b",
"type": "int"
}
],
"outs": [
{
"name": "sum",
"type": "int"
}
]
}

例子结束



需求:
给定一个List<Integer>,返回这个list中的最大值和最小值

返回:

46 changes: 46 additions & 0 deletions jcommon/ai/src/main/resources/prompt2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
你是一名高级groovy工程师.
你要完成的好,我会给你100$小费.
我会给你提供一个groovy方法,你帮我生成这个方法的描述(必须少于15个字).
你的返回结果永远是一个json格式的数据.
你的返回结果里决不能用任何markdown格式包裹(比如:```groovy ```)
不要生成任何说明,只需要返回一个json结构的内容即可

$comment就是你生成的注释

{"comment":"$comment"}




我给你一个例子:

code:
def execute(JsonObject input, Object context) {
if (!input.has('a') || !input.has('b')) {
throw new IllegalArgumentException("JSON对象必须包含键'a'和'b'。");
}
int a = input.get('a').getAsInt();
int b = input.get('b').getAsInt();
int sum = a + b;
JsonObject result = new JsonObject();
result.addProperty("result", sum);
return result;
}


你返回的:
{"comment":"计算两数和"}



例子结束






code:
int a(int a, int b) { return a * b; }

你的返回:
1 change: 1 addition & 0 deletions jcommon/ai/src/main/resources/prompt3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
李清照最好的6首词,并且给我解读
38 changes: 38 additions & 0 deletions jcommon/ai/zhipu/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?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>
<parent>
<groupId>run.mone</groupId>
<artifactId>ai</artifactId>
<version>1.4-jdk20-SNAPSHOT</version>
</parent>

<artifactId>zhipu</artifactId>

<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>

<dependency>
<groupId>cn.bigmodel.openapi</groupId>
<artifactId>oapi-java-sdk</artifactId>
<version>release-V4-2.0.0</version>
</dependency>

<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>


</dependencies>


</project>
57 changes: 57 additions & 0 deletions jcommon/ai/zhipu/src/main/java/run/mone/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package run.mone;

import com.zhipu.oapi.ClientV4;
import com.zhipu.oapi.Constants;
import com.zhipu.oapi.service.v4.model.ChatCompletionRequest;
import com.zhipu.oapi.service.v4.model.ChatMessage;
import com.zhipu.oapi.service.v4.model.ChatMessageRole;
import com.zhipu.oapi.service.v4.model.ModelApiResponse;
import lombok.SneakyThrows;

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

/**
* @author goodjava@qq.com
* @date 2024/3/10 07:55
*/
public class Main {

private static final String requestIdTemplate = "myoz-%d";


private static final String KEY = System.getenv("zhipu");

private static final String API_KEY = KEY.split("\\.")[0];

private static final String API_SECRET = KEY.split("\\.")[1];

private static final ClientV4 client = new ClientV4.Builder(API_KEY, API_SECRET).build();


@SneakyThrows
public static void main(String[] args) {
List<ChatMessage> messages = new ArrayList<>();

String promptName = "prompt.txt";

String content = Files.readString(Paths.get("/Users/zhangzhiyong/IdeaProjects/goodjava/mone/jcommon/ai/zhipu/src/main/resources/" + promptName));

ChatMessage chatMessage = new ChatMessage(ChatMessageRole.USER.value(), content);
messages.add(chatMessage);
String requestId = String.format(requestIdTemplate, System.currentTimeMillis());
ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
.model(Constants.ModelChatGLM4)
.stream(Boolean.FALSE)
.invokeMethod(Constants.invokeMethod)
.messages(messages)
.requestId(requestId)
.build();
ModelApiResponse invokeModelApiResp = client.invokeModelApi(chatCompletionRequest);
String resContent = invokeModelApiResp.getData().getChoices().get(0).getMessage().getContent().toString();
System.out.println(resContent);
// System.out.println("model output:"+ new Gson().toJson(invokeModelApiResp));
}
}
23 changes: 23 additions & 0 deletions jcommon/docean/src/main/java/com/xiaomi/youpin/docean/Ioc.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import com.google.gson.reflect.TypeToken;
import com.xiaomi.youpin.docean.anno.Component;
import com.xiaomi.youpin.docean.anno.Controller;
import com.xiaomi.youpin.docean.anno.IocConfiguration;
import com.xiaomi.youpin.docean.anno.Service;
import com.xiaomi.youpin.docean.bo.Bean;
import com.xiaomi.youpin.docean.common.*;
Expand Down Expand Up @@ -69,6 +70,9 @@ public class Ioc {
@Getter
private String[] scanPackages;

@Getter
private Class<?> primarySource;

/**
* It needs to be used when interacting with containers like spring
*/
Expand Down Expand Up @@ -357,6 +361,25 @@ public Ioc classLoader(ClassLoader classLoader) {
return this;
}

public static Ioc run(Class<?> primarySource, String... args) {
IocConfiguration configuration = primarySource.getAnnotation(IocConfiguration.class);
Ioc ioc = Ioc.ins();
ioc.primarySource = primarySource;
parseArgumentsAndPopulateIoc(args, ioc);
return ioc.init(configuration.basePackage());
}

private static void parseArgumentsAndPopulateIoc(String[] args, Ioc ioc) {
//Determine if args is an even number; if so, place it into a map.
Map<String, String> argsMap = new HashMap<>();
if (args.length % 2 == 0) {
for (int i = 0; i < args.length; i += 2) {
argsMap.put(args[i], args[i + 1]);
}
}
argsMap.entrySet().forEach(entry -> ioc.putBean("$" + entry.getKey(), entry.getValue()));
}

public Ioc init(String... scanPackages) {
this.scanPackages = scanPackages;
this.publishEvent(new Event(EventType.initBegin));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.xiaomi.youpin.docean.anno;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* @author goodjava@qq.com
* @date 2024/3/3 09:19
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE) // 应用于类
public @interface IocConfiguration {
String[] basePackage();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.xiaomi.youpin.docean.test;

import com.xiaomi.youpin.docean.Ioc;
import com.xiaomi.youpin.docean.anno.IocConfiguration;
import com.xiaomi.youpin.docean.test.demo.DemoDao;

/**
* @author goodjava@qq.com
* @date 2024/3/5 14:47
* <p>
* Evaluating the efficacy of @IocConfiguration.
*/
@IocConfiguration(basePackage = {"com.xiaomi.youpin.docean.test.demo"})
public class TestRun {

public static void main(String[] args) {
DemoDao demoA = Ioc.run(TestRun.class, args).getBean(DemoDao.class);
System.out.println(demoA.get());
}

}
6 changes: 5 additions & 1 deletion jcommon/openai/src/main/java/run/mone/openai/OpenaiCall.java
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,9 @@ public void onFailure(EventSource eventSource, @Nullable Throwable t, @Nullable
});
}

public static void callStream2(String req, StreamListener sl, ReqConfig config) {
callStream2(req, sl, config, null);
}

/**
* 原生的调用,底层只依赖okhttp
Expand All @@ -278,10 +281,11 @@ public void onFailure(EventSource eventSource, @Nullable Throwable t, @Nullable
* @param sl
* @param config
*/
public static void callStream2(String req, StreamListener sl, ReqConfig config) {
public static void callStream2(String req, StreamListener sl, ReqConfig config, Headers headers) {
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");

Request request = new Request.Builder()
.headers(headers)
.url(config.getAskUrl())
.post(RequestBody.create(mediaType, req.getBytes(Charset.forName("utf8"))))
.build();
Expand Down
Loading
Loading