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

函数调用主要应用于以下两个场景:
- 数据获取:从外部源检索最新信息,以便将其整合到模型的响应中(如基于检索的生成,RAG)。此功能特别适用于查询知识库或通过API获取特定数据(例如,实时天气信息)。
- 执行操作:执行诸如提交表单、调用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
|