Function Calling函数调用

Function Calling函数调用

通过函数调用让模型访问您自己的自定义代码。根据系统的提示和信息,模型可能会选择调用这些函数——替代(或附加)生成文本或音频。
您将执行函数代码,发送回结果,然后模型会将这些结果纳入到它的最终回复中。

image-2025-04-12-1

函数调用主要应用于以下两个场景:

  1. 数据获取:从外部源检索最新信息,以便将其整合到模型的响应中(如基于检索的生成,RAG)。此功能特别适用于查询知识库或通过API获取特定数据(例如,实时天气信息)。
  2. 执行操作:执行诸如提交表单、调用API、更改应用程序状态(前端/用户界面或后端),以及采取代理工作流行动(如将对话转交给另一处理方)等任务。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.lixiang.langchain4j;

import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

import dev.langchain4j.agent.tool.P;
import dev.langchain4j.agent.tool.Tool;

@Component
public class HttpTools {
@Tool("获取指定URL的发起Get类型请求,返回String类型的响应体")
public String send(@P("URL地址") String url) {
System.out.println("获取指定URL的发起Get类型请求:" + url);
return new RestTemplate().getForObject(url, String.class);
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.lixiang.langchain4j;

import dev.langchain4j.model.output.structured.Description;
import lombok.Data;
@Data
@Description("Response响应体的封装类")
public class ResponseBody {
@Description("请求的URL")
private String url;
@Description("响应体的类型,如果是HTML则为text/html,如果是JSON则为application/json")
private String type;
@Description("响应体的内容")
private String content;
@Description("响应体的摘要,HTML生成总结,JSON就是空字符串")
private String digest;
@Description("响应体的长度")
private Integer length;
}
1
2
3
4
5
6
7
8
package com.lixiang.langchain4j;

import dev.langchain4j.service.spring.AiService;

@AiService
interface Assistant {
ResponseBody chat(String userMessage);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.lixiang.langchain4j;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import jakarta.annotation.Resource;

@RestController
public class ToolsController {
@Resource
private Assistant assistant;

@GetMapping("/chat1")
public ResponseBody chat1() {
return assistant.chat("帮我获取后面网址的内容:https://docs.langchain4j.dev/intro");
}

@GetMapping("/chat2")
public ResponseBody chat2() {
return assistant.chat("帮我获取后面网址的内容:https://jsonplaceholder.typicode.com/posts/1");
}
}
1
2
langchain4j.community.dashscope.chat-model.api-key=sk-937aee4c3**********d363f5a770
langchain4j.community.dashscope.chat-model.model-name=qwen-plus