Commit 27cf6370 authored by alex yao's avatar alex yao

refactor:重构Function Call流程

parent 3b17f40e
package cn.com.poc.agent_application.domain;
public class FunctionResult {
private String functionName;
private String functionArg;
private String functionDesc;
private String functionResult;
public String getFunctionName() {
return functionName;
}
public void setFunctionName(String functionName) {
this.functionName = functionName;
}
public String getFunctionArg() {
return functionArg;
}
public void setFunctionArg(String functionArg) {
this.functionArg = functionArg;
}
public String getFunctionDesc() {
return functionDesc;
}
public void setFunctionDesc(String functionDesc) {
this.functionDesc = functionDesc;
}
public String getFunctionResult() {
return functionResult;
}
public void setFunctionResult(String functionResult) {
this.functionResult = functionResult;
}
}
...@@ -3,7 +3,7 @@ package cn.com.poc.support.dgTools; ...@@ -3,7 +3,7 @@ package cn.com.poc.support.dgTools;
import cn.com.poc.common.constant.FmxParamConfigConstant; import cn.com.poc.common.constant.FmxParamConfigConstant;
import cn.com.poc.common.utils.ListUtils; import cn.com.poc.common.utils.ListUtils;
import cn.com.poc.common.utils.http.LocalHttpClient; import cn.com.poc.common.utils.http.LocalHttpClient;
import cn.com.poc.support.dgTools.constants.DgtoolsApiConstants; import cn.com.poc.thirdparty.resource.demand.ai.common.DgtoolsApiConstants;
import cn.com.poc.support.dgTools.request.AbstractParam; import cn.com.poc.support.dgTools.request.AbstractParam;
import cn.com.poc.support.dgTools.request.AbstractRequest; import cn.com.poc.support.dgTools.request.AbstractRequest;
import cn.com.poc.support.dgTools.request.ProjectTokenRequest; import cn.com.poc.support.dgTools.request.ProjectTokenRequest;
......
...@@ -4,7 +4,7 @@ import cn.com.poc.common.constant.FmxParamConfigConstant; ...@@ -4,7 +4,7 @@ import cn.com.poc.common.constant.FmxParamConfigConstant;
import cn.com.poc.common.constant.MkpRedisKeyConstant; import cn.com.poc.common.constant.MkpRedisKeyConstant;
import cn.com.poc.common.service.RedisService; import cn.com.poc.common.service.RedisService;
import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient; import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient;
import cn.com.poc.support.dgTools.constants.DgtoolsApiConstants; import cn.com.poc.thirdparty.resource.demand.ai.common.DgtoolsApiConstants;
import cn.com.poc.support.dgTools.request.ProjectTokenRequest; import cn.com.poc.support.dgTools.request.ProjectTokenRequest;
import cn.com.poc.support.dgTools.result.ProjectTokenResult; import cn.com.poc.support.dgTools.result.ProjectTokenResult;
import cn.com.poc.support.dgTools.service.AuthorizationService; import cn.com.poc.support.dgTools.service.AuthorizationService;
......
package cn.com.poc.thirdparty.resource.demand.ai.aggregate; package cn.com.poc.thirdparty.resource.demand.ai.aggregate;
import cn.com.poc.thirdparty.resource.demand.ai.entity.function.FunctionCallResponse;
import cn.com.poc.thirdparty.resource.demand.ai.entity.function.FunctionCallResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse;
...@@ -23,5 +25,11 @@ public interface AIDialogueService { ...@@ -23,5 +25,11 @@ public interface AIDialogueService {
/** /**
* 调用中台通用大模型接口 [非流] * 调用中台通用大模型接口 [非流]
*/ */
LargeModelDemandResult poly(LargeModelResponse largeResponse) ; LargeModelDemandResult poly(LargeModelResponse largeResponse);
/**
* 判断是否需要Function Call
*/
FunctionCallResult functionCall(FunctionCallResponse response);
} }
...@@ -8,7 +8,7 @@ import cn.com.poc.thirdparty.resource.demand.ai.entity.OpenAiResult; ...@@ -8,7 +8,7 @@ import cn.com.poc.thirdparty.resource.demand.ai.entity.OpenAiResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.generations.*; import cn.com.poc.thirdparty.resource.demand.ai.entity.generations.*;
import cn.com.poc.thirdparty.resource.demand.member.service.DemandAuthService; import cn.com.poc.thirdparty.resource.demand.member.service.DemandAuthService;
import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient; import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient;
import cn.com.poc.support.dgTools.constants.DgtoolsApiConstants; import cn.com.poc.thirdparty.resource.demand.ai.common.DgtoolsApiConstants;
import cn.com.yict.framemax.core.i18n.I18nMessageException; import cn.com.yict.framemax.core.i18n.I18nMessageException;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
......
package cn.com.poc.thirdparty.resource.demand.ai.aggregate.impl; package cn.com.poc.thirdparty.resource.demand.ai.aggregate.impl;
import cn.com.poc.thirdparty.resource.demand.ai.aggregate.AIDialogueService; import cn.com.poc.thirdparty.resource.demand.ai.aggregate.AIDialogueService;
import cn.com.poc.thirdparty.resource.demand.ai.entity.function.FunctionCallResponse;
import cn.com.poc.thirdparty.resource.demand.ai.entity.function.FunctionCallResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResponse; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResponse;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse;
import cn.com.poc.thirdparty.resource.demand.member.service.DemandAuthService; import cn.com.poc.thirdparty.resource.demand.member.service.DemandAuthService;
import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient; import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient;
import cn.com.poc.support.dgTools.constants.DgtoolsApiConstants; import cn.com.poc.thirdparty.resource.demand.ai.common.DgtoolsApiConstants;
import org.apache.http.Header; import org.apache.http.Header;
import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.RequestBuilder; import org.apache.http.client.methods.RequestBuilder;
...@@ -66,6 +68,18 @@ public class AIDialogueServiceImpl implements AIDialogueService { ...@@ -66,6 +68,18 @@ public class AIDialogueServiceImpl implements AIDialogueService {
return largeModelRequest(response); return largeModelRequest(response);
} }
@Override
public FunctionCallResult functionCall(FunctionCallResponse response) {
String url = DgtoolsApiConstants.DgtoolsAI.FUNCTION_CALL;
response.setApiKey(API_KEY);
List<Header> headers = new ArrayList<Header>() {{
add(DgtoolsApiConstants.JSON_HEADER);
add(DgtoolsApiConstants.AI_HEADER);
add(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
}};
return dgToolsAbstractHttpClient.doRequest(url, response, headers);
}
private BufferedReader largeModelStream(LargeModelDemandResponse request) throws IOException { private BufferedReader largeModelStream(LargeModelDemandResponse request) throws IOException {
String jsonBody = dgToolsAbstractHttpClient.buildJson(request); String jsonBody = dgToolsAbstractHttpClient.buildJson(request);
CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpClient httpClient = HttpClients.createDefault();
......
package cn.com.poc.thirdparty.resource.demand.ai.aggregate.impl; package cn.com.poc.thirdparty.resource.demand.ai.aggregate.impl;
import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient; import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient;
import cn.com.poc.support.dgTools.constants.DgtoolsApiConstants; import cn.com.poc.thirdparty.resource.demand.ai.common.DgtoolsApiConstants;
import cn.com.poc.support.dgTools.result.AbstractResult; import cn.com.poc.support.dgTools.result.AbstractResult;
import cn.com.poc.thirdparty.resource.demand.ai.aggregate.DemandKnowledgeService; import cn.com.poc.thirdparty.resource.demand.ai.aggregate.DemandKnowledgeService;
import cn.com.poc.thirdparty.resource.demand.ai.entity.knowledge.*; import cn.com.poc.thirdparty.resource.demand.ai.entity.knowledge.*;
......
package cn.com.poc.support.dgTools.constants; package cn.com.poc.thirdparty.resource.demand.ai.common;
import org.apache.http.Header; import org.apache.http.Header;
import org.apache.http.HttpHeaders; import org.apache.http.HttpHeaders;
...@@ -257,6 +257,11 @@ public interface DgtoolsApiConstants { ...@@ -257,6 +257,11 @@ public interface DgtoolsApiConstants {
* 大模型【通用】 * 大模型【通用】
*/ */
String LARGE_MODEL = "largeModelRest/completion.json"; String LARGE_MODEL = "largeModelRest/completion.json";
/**
* Function Call 判断,判断是否需要Function Call
*/
String FUNCTION_CALL = "largeModelRest/functionCall.json";
} }
interface ClickHouse { interface ClickHouse {
......
...@@ -20,4 +20,12 @@ public class FunctionCall { ...@@ -20,4 +20,12 @@ public class FunctionCall {
public void setArguments(String arguments) { public void setArguments(String arguments) {
this.arguments = arguments; this.arguments = arguments;
} }
@Override
public String toString() {
return "FunctionCall{" +
"name='" + name + '\'' +
", arguments='" + arguments + '\'' +
'}';
}
} }
package cn.com.poc.thirdparty.resource.demand.ai.entity.function;
import cn.com.poc.support.dgTools.request.AbstractRequest;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Function;
import java.io.Serializable;
import java.util.List;
public class FunctionCallResponse extends AbstractRequest<FunctionCallResult> implements Serializable {
/**
* 模型apiKey
*/
private String apiKey;
/**
* 提问内容
*/
private String query;
/**
* function 配置
*/
List<Function> functions;
public String getQuery() {
return query;
}
public void setQuery(String query) {
this.query = query;
}
public String getApiKey() {
return apiKey;
}
public void setApiKey(String apiKey) {
this.apiKey = apiKey;
}
public List<Function> getFunctions() {
return functions;
}
public void setFunctions(List<Function> functions) {
this.functions = functions;
}
@Override
public String getMethod() throws Exception {
return null;
}
}
package cn.com.poc.thirdparty.resource.demand.ai.entity.function;
import cn.com.poc.support.dgTools.result.AbstractResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.FunctionCall;
import java.io.Serializable;
public class FunctionCallResult extends AbstractResult implements Serializable {
/**
* 是否为函数调用
*/
private boolean need;
/**
* 函数信息
*/
private FunctionCall functionCall;
public boolean isNeed() {
return need;
}
public void setNeed(boolean need) {
this.need = need;
}
public FunctionCall getFunctionCall() {
return functionCall;
}
public void setFunctionCall(FunctionCall functionCall) {
this.functionCall = functionCall;
}
@Override
public String toString() {
return "FunctionCallResult{" +
"need=" + need +
", functionCall=" + functionCall +
'}';
}
}
...@@ -2,6 +2,7 @@ package cn.com.poc.thirdparty.resource.demand.ai.function; ...@@ -2,6 +2,7 @@ package cn.com.poc.thirdparty.resource.demand.ai.function;
import cn.com.poc.agent_application.entity.Variable; import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Function;
import java.util.List; import java.util.List;
...@@ -9,6 +10,13 @@ public abstract class AbstractLargeModelFunction { ...@@ -9,6 +10,13 @@ public abstract class AbstractLargeModelFunction {
public abstract String doFunction(String content, String key); public abstract String doFunction(String content, String key);
/**
* 获取函数描述
*
* @return
*/
public abstract String getDesc();
/** /**
* 获取配置 * 获取配置
*/ */
......
...@@ -24,9 +24,16 @@ import java.util.Map; ...@@ -24,9 +24,16 @@ import java.util.Map;
@Service @Service
public class SetLongMemoryFunction extends AbstractLargeModelFunction { public class SetLongMemoryFunction extends AbstractLargeModelFunction {
private String desc = "该方法仅用来保存用户想记录的内容,不能通过该方法进行查询。";
@Resource @Resource
private RedisService redisService; private RedisService redisService;
@Override
public String getDesc() {
return desc;
}
/** /**
* 执行函数 * 执行函数
* *
...@@ -67,7 +74,7 @@ public class SetLongMemoryFunction extends AbstractLargeModelFunction { ...@@ -67,7 +74,7 @@ public class SetLongMemoryFunction extends AbstractLargeModelFunction {
function.put("name", "set_long_memory"); function.put("name", "set_long_memory");
function.put("description", "该方法仅用来保存用户想记录的内容,不能通过该方法进行查询。"); function.put("description", desc);
function.put("parameters", parameters); function.put("parameters", parameters);
config.put("type", "function"); config.put("type", "function");
......
...@@ -4,6 +4,7 @@ import cn.com.poc.agent_application.entity.Variable; ...@@ -4,6 +4,7 @@ import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.service.RedisService; import cn.com.poc.common.service.RedisService;
import cn.com.poc.common.utils.BlContext; import cn.com.poc.common.utils.BlContext;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Function;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction;
import cn.com.yict.framemax.core.i18n.I18nMessageException; import cn.com.yict.framemax.core.i18n.I18nMessageException;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
...@@ -18,9 +19,16 @@ import java.util.Map; ...@@ -18,9 +19,16 @@ import java.util.Map;
@Service @Service
public class SetValueMemoryFunction extends AbstractLargeModelFunction { public class SetValueMemoryFunction extends AbstractLargeModelFunction {
private String desc = "该方法仅用enum给定的内容名来保存用户想记录的内容值,不可使用该方法进行查询";
@Resource @Resource
private RedisService redisService; private RedisService redisService;
@Override
public String getDesc() {
return desc;
}
@Override @Override
public String doFunction(String content, String key) { public String doFunction(String content, String key) {
String contentKey = SetValueMemoryConstants.REDIS_PREFIX + key + ":" + BlContext.getCurrentUserNotException().getUserId().toString(); String contentKey = SetValueMemoryConstants.REDIS_PREFIX + key + ":" + BlContext.getCurrentUserNotException().getUserId().toString();
...@@ -80,7 +88,7 @@ public class SetValueMemoryFunction extends AbstractLargeModelFunction { ...@@ -80,7 +88,7 @@ public class SetValueMemoryFunction extends AbstractLargeModelFunction {
parameters.put("type", "object"); parameters.put("type", "object");
function.put("name", "set_value_memory"); function.put("name", "set_value_memory");
function.put("description", "该方法仅用enum给定的内容名来保存用户想记录的内容值,不可使用该方法进行查询"); function.put("description", desc);
function.put("parameters", parameters); function.put("parameters", parameters);
config.put("type", "function"); config.put("type", "function");
......
package cn.com.poc.thirdparty.resource.demand.clickhouse.service.impl; package cn.com.poc.thirdparty.resource.demand.clickhouse.service.impl;
import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient; import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient;
import cn.com.poc.support.dgTools.constants.DgtoolsApiConstants; import cn.com.poc.thirdparty.resource.demand.ai.common.DgtoolsApiConstants;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResponse;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult;
import cn.com.poc.thirdparty.resource.demand.clickhouse.entity.WebBrowseHarvestEntity; import cn.com.poc.thirdparty.resource.demand.clickhouse.entity.WebBrowseHarvestEntity;
import cn.com.poc.thirdparty.resource.demand.clickhouse.service.DataReportService; import cn.com.poc.thirdparty.resource.demand.clickhouse.service.DataReportService;
import cn.com.poc.thirdparty.resource.demand.member.service.DemandAuthService; import cn.com.poc.thirdparty.resource.demand.member.service.DemandAuthService;
......
...@@ -3,7 +3,7 @@ package cn.com.poc.thirdparty.resource.demand.member.api; ...@@ -3,7 +3,7 @@ package cn.com.poc.thirdparty.resource.demand.member.api;
import cn.com.poc.thirdparty.resource.demand.member.entity.DemandAuthResponse; import cn.com.poc.thirdparty.resource.demand.member.entity.DemandAuthResponse;
import cn.com.poc.thirdparty.resource.demand.member.entity.DemandAuthResult; import cn.com.poc.thirdparty.resource.demand.member.entity.DemandAuthResult;
import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient; import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient;
import cn.com.poc.support.dgTools.constants.DgtoolsApiConstants; import cn.com.poc.thirdparty.resource.demand.ai.common.DgtoolsApiConstants;
import org.apache.http.Header; import org.apache.http.Header;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
......
...@@ -2,7 +2,7 @@ package cn.com.poc.thirdparty.resource.demand.member.api; ...@@ -2,7 +2,7 @@ package cn.com.poc.thirdparty.resource.demand.member.api;
import cn.com.poc.common.utils.http.LocalHttpClient; import cn.com.poc.common.utils.http.LocalHttpClient;
import cn.com.poc.thirdparty.resource.demand.member.entity.DemandMemberResult; import cn.com.poc.thirdparty.resource.demand.member.entity.DemandMemberResult;
import cn.com.poc.support.dgTools.constants.DgtoolsApiConstants; import cn.com.poc.thirdparty.resource.demand.ai.common.DgtoolsApiConstants;
import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder; import org.apache.http.client.methods.RequestBuilder;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
......
package cn.com.poc.thirdparty.service; package cn.com.poc.thirdparty.service;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Tool;
import cn.com.poc.thirdparty.resource.demand.ai.entity.function.FunctionCallResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse;
...@@ -29,5 +31,13 @@ public interface LLMService { ...@@ -29,5 +31,13 @@ public interface LLMService {
*/ */
BufferedReader chatChunk(LargeModelResponse request) throws Exception; BufferedReader chatChunk(LargeModelResponse request) throws Exception;
/**
* functionCall判断
*
* @param query
* @param tools
*/
FunctionCallResult functionCall(String query, Tool[] tools);
} }
package cn.com.poc.thirdparty.service.impl; package cn.com.poc.thirdparty.service.impl;
import cn.com.poc.thirdparty.resource.demand.ai.aggregate.AIDialogueService; import cn.com.poc.thirdparty.resource.demand.ai.aggregate.AIDialogueService;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Function;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Tool;
import cn.com.poc.thirdparty.resource.demand.ai.entity.function.FunctionCallResponse;
import cn.com.poc.thirdparty.resource.demand.ai.entity.function.FunctionCallResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse;
import cn.com.poc.thirdparty.service.LLMService; import cn.com.poc.thirdparty.service.LLMService;
import cn.hutool.core.lang.Assert;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.util.ArrayList;
import java.util.List;
/** /**
* @author alex.yao * @author alex.yao
...@@ -38,4 +45,21 @@ public class LLMServiceImpl implements LLMService { ...@@ -38,4 +45,21 @@ public class LLMServiceImpl implements LLMService {
public BufferedReader chatChunk(LargeModelResponse request) throws Exception { public BufferedReader chatChunk(LargeModelResponse request) throws Exception {
return aiDialogueService.polyStream(request); return aiDialogueService.polyStream(request);
} }
@Override
public FunctionCallResult functionCall(String query, Tool[] tools) {
Assert.notEmpty(tools);
FunctionCallResponse response = new FunctionCallResponse();
response.setQuery(query);
List<Function> functions = new ArrayList<>();
for (Tool tool : tools) {
Function function = new Function();
function.setName(tool.getFunction().getName());
function.setDescription(tool.getFunction().getDescription());
function.setParameters(tool.getFunction().getParameters());
functions.add(function);
}
response.setFunctions(functions);
return aiDialogueService.functionCall(response);
}
} }
package cn.com.poc.demand;
import cn.com.poc.thirdparty.resource.demand.ai.aggregate.AIDialogueService;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Function;
import cn.com.poc.thirdparty.resource.demand.ai.entity.function.FunctionCallResponse;
import cn.com.poc.thirdparty.resource.demand.ai.entity.function.FunctionCallResult;
import cn.com.yict.framemax.core.spring.SingleContextInitializer;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(initializers = SingleContextInitializer.class)
@WebAppConfiguration
public class AiDialogueTest {
@Resource
AIDialogueService aiDialogueService;
@Test
public void functionCall() {
String query = "帮我记一下,今天下午需要开会";
Map<String, Object> content = new HashMap<>();
content.put("type", "string");
content.put("description", "内容的详细说明");
Map<String, Object> properties = new HashMap<>();
properties.put("content", content);
Map<String, Object> parameters = new HashMap<>();
parameters.put("type", "object");
parameters.put("properties", properties);
List<String> required = new ArrayList<>();
required.add("content");
parameters.put("required", required);
Function function = new Function();
function.setName("set_long_memory");
function.setDescription("该方法仅用来保存用户想记录的内容,不能通过该方法进行查询。");
function.setParameters(parameters);
List<Function> functions = new ArrayList<>();
functions.add(function);
FunctionCallResponse functionCallResponse = new FunctionCallResponse();
functionCallResponse.setQuery(query);
functionCallResponse.setFunctions(functions);
FunctionCallResult functionCallResult = aiDialogueService.functionCall(functionCallResponse);
System.out.println(functionCallResult);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment