点击“终码一生”,关注,置顶公众号
每日技术干货,第一时间送达!
1、背景
这段时间AI Agent平台Manus国内业务大裁员,闹得沸沸扬扬,作为率先发布通用Agent的科技公司,曾一码难求,一度被称赞为“全球首款通用智能体产品”的Manus,现在仿佛在通用智能体研发方向上遇到了技术瓶颈,各官方社交账号也相继清空内容,大有“跑路”之嫌。
而相对于通用智能体,垂直领域的智能体,能更高效、更精准的满足用户的需求,帮助我们提高工作效率、降低生产成本。目前国内众多头部科技公司,也竞相加入了这一领域。
智谱开放平台(bigmodel.cn)在这方面做的相当不错,基于自己的GLM系列大模型,推出了众多垂直领域的应用智能体,从语言翻译,内容生成,办公效能到信息提取,智慧教育等。
最近逛智谱开放平台(bigmodel.cn),看到平台又新上架了几个不错的Agent,包括通用翻译和招投标解析,票据识别等等,都是非常实用的,因为平时会浏览一些外部技术网站和文档,所以也是第一时间体验了下翻译智能体,体验完发现翻译的质量还是非常高的,相对于传统的翻译工具和软件,智能体翻译通过海量数据训练,可以更准确的翻译,同时让整个翻译达到了信达雅,不会那么生硬。
下面先简单分享下自己的体验:
2、在线体验
- 在线体验:https://bigmodel.cn/trialcenter/agent?agentId=general_translation
1、对比传统翻译工具
先做一个简单的测试,将一首英文诗给某道和翻译智能体,看看效果:
某道翻译
翻译智能体
可以看到某道最后的翻译甚至出现语句不通顺的情况,而智能体的翻译明显要更有诗意,更加通顺,更加准确。这只是一个简单的诗句,如果是更长的文本内容,或者专业性更强的词汇,差距可能会更大。
2、支持上传文档翻译
翻译智能体不仅支持上传文档、图片等,还支持排版还原,翻译对比,文档内图片翻译等功能。我这里截图一张英文技术网站的图片,交给智能体翻译。
可以看到,文档翻译成功后,生成3个文件路径,一个源文件下载路径,一个翻译后的文档下载路径以及一个双语对比的文件下载。
下载双语对比的文件,可以看到整个文档翻译后排版是还原的,这样我们在翻译一些PDF文件或者著作文件时,翻译的内容更多时,不至于出现排版错乱的问题,可以直接阅读,体验是非常好的。
3、丰富的设置
相对于传统的翻译软件,智能体翻译更加强大,更加全面,而且翻译质量更高。从官方给出的说明,目前支持40多种语言,和多种翻译策略,同时支持上传术语表,并支持特殊语种翻译,像文言文,粤语等等。
下面我们体验下文言文翻译,提交一首英语短诗:
大家可以自己感受下,好了,更多个性化的翻译,这里不在演示,大家可以根据自己的喜好、需求去设置。
如果想要做一些定制化的产品开发,也可以通过调用官方的API,将翻译智能体集成到我们项目中,下面我们调用下官方API。
3、接口调用
- 智谱开放平台:https://bigmodel.cn
- 通用翻译Agent:https://bigmodel.cn/marketplace/agent_detail/general_translation
- 开发文档:https://bigmodel.cn/dev/api/agent/general_translation
开发者首次调用,需要先去智谱开放平台注册并申请key,这里不再演示,小编基于Springboot开发,简单介绍下主要步骤,因为官方开发文档写的已经很详细了。
1、Maven主要配置
<dependency>
<groupId>cn.bigmodel.openapi</groupId>
<artifactId>oapi-java-sdk</artifactId>
<version>release-V4-2.4.4</version>
</dependency>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>2.9.0</version>
</dependency>
<!-- Retrofit RxJava2 Adapter -->
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>adapter-rxjava2</artifactId>
<version>2.9.0</version>
</dependency>
<!-- 使用 Jackson 作为 Converter -->
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>converter-jackson</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>4.4.0</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>
注意:智谱最新版本SDK如果无法拉取,可以手动下载到本地并导入
2、调用代码
下面是部分主要调试代码,同步调用通用翻译API。
public static String syncInvoke(String message, String selectedStrategy) throws JsonProcessingException {
System.out.println("===>>同步调用");
// 初始化消息列表
List<ChatMessage> messages = Lists.newArrayList();
// 创建用户角色的聊天消息,并添加到消息列表中
ChatMessage chatMessage = new ChatMessage(ChatMessageRole.USER.value(), message);
messages.add(chatMessage);
// 生成请求ID,使用当前时间戳确保唯一性
String requestId = String.format(requestIdTemplate, System.currentTimeMillis());
// 创建并配置自定义变量节点
ObjectNode customVariables = mapper.createObjectNode();
customVariables.put("strategy", "reflection"); // 转写翻译策略
customVariables.put("source_lang", "en"); // 源语言为英文
customVariables.put("target_lang", "zh"); // 目标语言为中文
// 输出自定义变量JSON,用于调试和记录
System.out.println("customVariables JSON: " + customVariables.toString());
// 构建API请求对象
AgentsCompletionRequest chatCompletionRequest = AgentsCompletionRequest.builder()
.agent_id("general_translation")
.stream(Boolean.FALSE)
.messages(messages)
.custom_variables(customVariables)
.requestId(requestId)
.build();
// 调用API并获取响应
ModelApiResponse invokeModelApiResp = client.invokeAgentApi(chatCompletionRequest);
// 尝试处理API响应
try {
if(invokeModelApiResp.isSuccess()) {
// 输出响应JSON,用于调试和记录
System.out.println(mapper.writeValueAsString(invokeModelApiResp));
// 解析响应JSON以获取处理后的文本
JSONObject object = JSONObject.parseObject(mapper.writeValueAsString(invokeModelApiResp));
JSONObject data = object.getJSONObject("data");
String text = data.getJSONArray("choices").getJSONObject(0)
.getJSONArray("messages").getJSONObject(0)
.getJSONObject("content")
.getString("text");
System.out.println("text: " + text);
// 返回处理后的文本
return text;
}
} catch (JsonProcessingException e) {
// 如果发生JSON处理异常,则打印异常信息
e.printStackTrace();
}
// 如果处理失败或发生异常,返回错误提示
return"error";
}
流式输出代码:
public static String sseInvoke(String message) throws JsonProcessingException {
System.out.println("===>>流式输出");
// 创建一个列表来存储聊天消息
List<ChatMessage> messages = new ArrayList<>();
// 创建用户角色的聊天消息并添加到列表中
ChatMessage chatMessage = new ChatMessage(ChatMessageRole.USER.value(), message);
messages.add(chatMessage);
// 生成请求ID
String requestId = String.format(requestIdTemplate, System.currentTimeMillis());
// 构建代理完成请求对象
AgentsCompletionRequest chatCompletionRequest = AgentsCompletionRequest.builder()
.agent_id("general_translation")
.stream(Boolean.TRUE)
.messages(messages)
.requestId(requestId)
.build();
// 调用代理API并获取响应
ModelApiResponse sseModelApiResp = client.invokeAgentApi(chatCompletionRequest);
// 根据请求配置判断是否为流式响应
if (Boolean.TRUE.equals(chatCompletionRequest.getStream())) {
// 获取响应中的Flowable对象
Flowable<ModelData> flowable = sseModelApiResp.getFlowable();
if (flowable != null) {
// 订阅Flowable,处理流式响应中的每个数据项
flowable.doOnNext(modelData -> {
// 从模型数据中提取文本并输出
String text = extractTextFromModelData(modelData);
if (text != null) {
System.out.print(text);
} else {
System.out.println("无数据输出....");
}
}).blockingSubscribe();
}
} else {
// 处理同步响应
Object data = sseModelApiResp.getData();
System.out.println("同步响应数据: " + data);
}
// 以下代码被注释掉,但提供了另一种处理流式响应的方式
// sseModelApiResp.getFlowable().doOnNext(modelData -> System.out.println(modelData.getChoices().get(0))).blockingSubscribe();
// 打印结束标识
System.out.println("\n\n\n=======end=========");
// 返回成功标识
return"success";
}
3、本地调用
本地调试,同步调用
流式输出
4、部署项目
为了方便使用,小编做了一个简单的聊天系统,调用了通用翻译API,同时支持选择不同的翻译策略,大家可以看下效果,如下:
可以看到响应速度和翻译质量还是很高的,同时官方也有介绍,该通用翻译智能体还支持更多其他的设置,包括源语言和目标语言设置,还可以添加翻译策略,让翻译更加的精准,满足大家的不同需求。后续小编把功能完善之后,也会把代码开放给大家。
5、最后
好了,今天就分享到这里,目前智谱开放平台上架的智能体数量比较多,大家感兴趣,可以发挥自己的想象,基于现有智能体做一些垂直的工具,提高自己办公效率的同时,也可以分享出去,说不定还可以赚一些零花钱!!
直达应用主页体验:https://zhipuaishengchan.datasink.sensorsdata.cn/t/j7