【Java接入通义千问】

前言

通义千问是阿里巴巴达摩院研发的预训练语言模型,提供了一系列的API和SDK可以方便地进行接入。本文将介绍如何使用SpringBoot接入通义千问,并实现搜索功能。

引入依赖

首先,我们需要在pom.xml文件中添加以下依赖项:

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-open-api-core</artifactId>
    <version>4.2.6</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-open-api-common</artifactId>
    <version>4.2.6</version>
</dependency>

配置API Key与主机名

在application.properties文件中,配置以下内容,设置通义千问的API key和主机名:

aliyun.openapi.endpoint=https://ai.aliyun.com/openapi/v4/appid/[your_app_id]/[your_endpoint]
aliyun.openapi.private_key=your_private_key
aliyun.openapi.host=[your_host]

其中,[your_app_id]和[your_endpoint]分别代表通义千问的应用ID和请求端点,需要根据实际情况进行填写。

Java代码调用

在Controller类中,添加以下方法来调用通义千问的API:

@RestController
@RequestMapping("/api")
public class MyController {
    @Autowired
    private MyService myService;

    @GetMapping("/search")
    public String search(@RequestParam String query) {
        List<Hello> helloList = myService.search(query);
        String helloString = String.format("{%s}", helloList);
        return helloString;
    }
}

其中,MyService是自定义的服务类,需要根据实际情况进行编写。

在myService类中,添加以下方法来调用通义千问的API:

public List<Hello> search(String query) {
    String url = "https://ai.aliyun.com/openapi/v4/appid/[your_app_id]/[your_endpoint]?query=" + query;
    List<Hello> helloList = null;
    try {
        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        con.setRequestMethod("GET");
        if (con.getResponseCode() != 200) {
            return null;
        }
        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuilder response = new StringBuilder();
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();
        helloList = new Gson().fromJson(response.toString(), new TypeToken<List<Hello>>() {
        }.getType());
    } catch (Exception e) {
        e.printStackTrace();
    }
    return helloList;
}

其中,[your_app_id]和[your_endpoint]分别代表通义千问的应用ID和请求端点,需要根据实际情况进行填写。

接下来,我们可以在SpringBoot应用程序中,启动HTTP服务器并打开浏览器访问http://localhost:8080/api/search,即可看到通义千问的搜索结果。

以上就是一个简单的通义千问接入示例,具体的实现方式可以根据实际情况进行调整和完善。下面是完整的代码示例:

@Configuration
public class ApplicationConfig {

    @Bean
    public EmbeddedServletContainer servletContainer() {
        TomcatEmbeddedServletContainer container = new TomcatEmbeddedServletContainer();
        container.setPort(8080);
        return container;
    }

    @Bean
    public AnnotationConfigServletWebMvcConfigurer mvcConfigurer() {
        AnnotationConfigServletWebMvcConfigurer c = new AnnotationConfigServletWebMvcConfigurer();
        c.addInterceptors(new LoggingInterceptor());
        return c;
    }

}
@RestController
@RequestMapping("/api")
public class MyController {
    @Autowired
    private MyService myService;

    @GetMapping("/search")
    public String search(@RequestParam String query) {
        List<Hello> helloList = myService.search(query);
        String helloString = String.format("{%s}", helloList);
        return helloString;
    }
}

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoggingInterceptor());
    }

}

在SpringBoot应用程序中,启动HTTP服务器并打开浏览器访问http://localhost:8080/api/search,即可看到通义千问的搜索结果。

以上就是一个简单的通义千问接入示例,具体的实现方式可以根据实际情况进行调整和完善。

### 如何在Java项目中集成通义API #### 创建Spring Boot项目 为了开始集成本地的Java应用程序与通义API,首先需要创建一个新的Spring Boot项目。确保已经安装了Java 11或更高版本以及Spring Boot 2.x或更新版本[^1]。 ```bash spring init my-qwen-app --dependencies=web,cloud-openfeign cd my-qwen-app ``` 此命令会初始化一个带有Web支持和OpenFeign依赖的新Spring Boot项目,这有助于简化HTTP客户端调用过程中的接口定义。 #### 注册阿里云账户并获取API访权限 前往阿里云官网完成注册流程,并按照指引申请获得通义API的服务授权。成功之后,记得记录下所得到的应用密钥(API Key),因为稍后配置时需要用到这个信息。 #### 添加必要的依赖项至`pom.xml` 编辑项目的Maven构建文件(`pom.xml`)来加入所需的库: ```xml <dependency> <groupId>com.aliyun</groupId> <artifactId>tea-openapi</artifactId> <version>LATEST_VERSION</version> </dependency> <dependency> <groupId>com.aliyun.api.gateway</groupId> <artifactId>openplatform-sdk</artifactId> <version>LATEST_VERSION</version> </dependency> ``` 请注意替换上述代码片段里的`LATEST_VERSION`为实际可用的具体版本号[^2]。 #### 编写服务类以封装API请求逻辑 接下来,在src/main/java目录下新建一个名为`QwenService.java`的服务层组件,负责处理向通义发送查询请求的功能实现细节。这里提供了一个基础框架供参考: ```java import com.alibaba.fastjson.JSONObject; import com.aliyun.tea.TeaException; import com.aliyun.qwen.Qwen; public class QwenService { private final String apiKey; public QwenService(String apiKey) { this.apiKey = apiKey; } /** * 向通义提交题并返回答案. */ public String askQuestion(String questionText) throws TeaException { try { var client = new Qwen(this.apiKey); JSONObject responseJson = (JSONObject)client.getAnswer(questionText).body; return responseJson.getString("answer"); } catch (TeaException e) { throw new RuntimeException(e.getMessage()); } } } ``` 这段程序展示了如何利用官方提供的SDK建立连接并向指定端点传递参数;同时捕获可能出现异常情况下的错误消息以便进一步分析解决。 #### 测试API功能 最后一步是在控制器(Controller)里实例化刚才编写的业务对象并通过RESTful风格暴露对外接口给前端调用测试效果。下面给出了一种可能的方式来做这件事: ```java @RestController @RequestMapping("/qwen") public class ChatController { @Autowired private QwenService qwenService; @PostMapping("/chat") public ResponseEntity<String> chat(@RequestBody Map<String, Object> body){ String message = (String) body.getOrDefault("message", ""); try{ String reply = qwenService.askQuestion(message); return ResponseEntity.ok(reply); }catch(Exception ex){ log.error(ex.toString(),ex); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); } } } ``` 通过POST方法接收来自用户的输入文本作为JSON格式的数据体传入,经过内部转换成字符串形式后再交给之前提到过的`askQuestion()`函数去执行具体的交流操作。一旦收到回复即刻响应给发起者显示出来。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值