LangChain4j HelloWorld

LangChain4j 可以与不同的大语言模型、向量模型/数据库进行集成。每个集成都有自己的 Maven 依赖。

如果想使用 LangChain4j,需要的 JDK 版本至少是 17。

LangChain4j 提供 2 个抽象级别:

  • Low Level:简单封装,可以自由组合构建大语言模型(LLM)的应用程序的 “基本要素”,如 ChatModel、UserMessage、EmbeddingStore、Embedding 等,但需要编写更多的衔接代码。
  • High Level:在这个层面,你可以使用诸如AI Services这样的高级 API 与大语言模型进行交互,这会为你屏蔽所有的复杂性和样板代码。你仍然可以灵活地调整和微调其行为,但这是以声明式的方式完成的。

开始之前

创建 project 父工程:langchain4j-demo

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.wheelmouse</groupId>
    <artifactId>langchain4j-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>langchain4j-demo</name>
    <url>http://maven.apache.org</url>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring-boot.version>3.3.8</spring-boot.version>
        <langchain4j.version>1.0.0-beta3</langchain4j.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- 加载bom 后,所有langchain4j引用不需要加版本号 -->
            <dependency>
                <groupId>dev.langchain4j</groupId>
                <artifactId>langchain4j-bom</artifactId>
                <version>${langchain4j.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
            </plugin>
        </plugins>
    </build>
</project>

永远的 HelloWorld

Step 1:建Module langchain4j-helloworld

Step 2:改POM

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.wheelmouse</groupId>
        <artifactId>langchain4j-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.wheelmouse</groupId>
    <artifactId>langchain4j-helloworld</artifactId>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!--所有调用均基于 OpenAI 协议标准,实现一致的接口设计与规范
        LangChain4j 提供与许多 LLM 提供商的集成。每个集成都有自己的 maven 依赖项。
        最简单的开始方式是从 OpenAI 集成开始-->
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Step 3:写YML

server.port=9001

spring.application.name=langchain4j-helloworld

langchain4j.open-ai.chat-model.api-key=# Your API KEY
langchain4j.open-ai.chat-model.model-name=# Your Model
langchain4j.open-ai.chat-model.base-url=# Your API URL

logging.level.dev.langchain4j.model.openai = DEBUG

Step4:启动类

@SpringBootApplication
public class LangChain4JHelloWorldApplication {
    public static void main(String[] args) {
        SpringApplication.run(LangChain4JHelloWorldApplication.class,args);
    }
}

Step 5:Controller

@RestController
@Slf4j
public class HelloLangChain4JController {

    @Resource
    private ChatLanguageModel chatLanguageModel;

    // http://localhost:9001/langchain4j/hello?prompt=如何学习阿里云
    @GetMapping(value = "/langchain4j/hello")
    public String hello(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt) {
        String result = chatLanguageModel.chat(prompt);

        System.out.println("通过langchain4j调用qwen-turbo-0624模型返回结果:\n" + result);

        return result;
    }


}

Step 6:测试效果
http://localhost:9001/langchain4j/hello?prompt=%E5%A6%82%E4%BD%95%E5%AD%A6%E4%B9%A0%E9%98%BF%E9%87%8C%E4%BA%91

Reference

https://docs.langchain4j.dev/tutorials/spring-boot-integration/#spring-boot-starters
https://docs.langchain4j.dev/tutorials/spring-boot-integration

lloworld] [p-nio-80-exec-1] d.l.m.c.t.stdio.StdioMcpTransport : Starting process: [cmd, /c, npx, -y, @baidumap/mcp-server-baidu-map] 2025-08-02T16:58:34.500+08:00 DEBUG 10516 --- [langchain4j_helloworld] [p-nio-80-exec-1] d.l.m.c.t.stdio.StdioMcpTransport : PID of the started process: 6024 2025-08-02T16:58:35.619+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] 2025-08-02T16:58:35.619+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] ERROR: You must supply a command. 2025-08-02T16:58:35.619+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] 2025-08-02T16:58:35.659+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] Execute binaries from npm packages. 2025-08-02T16:58:35.659+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] 2025-08-02T16:58:35.659+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] npx [options] <command>[@version] [command-arg]... 2025-08-02T16:58:35.659+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] 2025-08-02T16:58:35.659+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] npx [options] [-p|--package <package>]... <command> [command-arg]... 2025-08-02T16:58:35.659+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] 2025-08-02T16:58:35.659+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] npx [options] -c '<command-string>' 2025-08-02T16:58:35.659+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] 2025-08-02T16:58:35.659+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] npx --shell-auto-fallback [shell] 2025-08-02T16:58:35.659+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] 2025-08-02T16:58:35.659+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] 2025-08-02T16:58:35.659+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] Options: 2025-08-02T16:58:35.659+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] --package, -p Package to be installed. [string] 2025-08-02T16:58:35.659+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] --cache Location of the npm cache. [string] 2025-08-02T16:58:35.659+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] --always-spawn Always spawn a child process to execute the command. 2025-08-02T16:58:35.659+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] [boolean] 2025-08-02T16:58:35.659+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] --no-install Skip installation if a package is missing. [boolean] 2025-08-02T16:58:35.659+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] --userconfig Path to user npmrc. [string] 2025-08-02T16:58:35.659+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] --call, -c Execute string as if inside `npm run-script`. [string] 2025-08-02T16:58:35.660+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] --shell, -s Shell to execute the command with, if any. 2025-08-02T16:58:35.660+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] [string] [default: false] 2025-08-02T16:58:35.660+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] --shell-auto-fallback Generate shell code to use npx as the "command not 2025-08-02T16:58:35.660+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] found" fallback. 2025-08-02T16:58:35.660+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] [string] [choices: "", "bash", "fish", "zsh"] 2025-08-02T16:58:35.660+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] --ignore-existing Ignores existing binaries in $PATH, or in the local 2025-08-02T16:58:35.660+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] project. This forces npx to do a temporary install and 2025-08-02T16:58:35.660+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] use the latest version. [boolean] 2025-08-02T16:58:35.660+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] --quiet, -q Suppress output from npx itself. Subcommands will not 2025-08-02T16:58:35.660+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] be affected. [boolean] 2025-08-02T16:58:35.660+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] --npm npm binary to use for internal operations. 2025-08-02T16:58:35.660+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] [string] [default: "D:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js"] 2025-08-02T16:58:35.660+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] --node-arg, -n Extra node argument when calling a node binary.[string] 2025-08-02T16:58:35.660+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] --version, -v Show version number [boolean] 2025-08-02T16:58:35.660+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] --help, -h Show help [boolean] 2025-08-02T16:58:35.660+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] 2025-08-02T16:58:35.660+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : [ERROR] For the full documentation, see the manual page for npx(1). 2025-08-02T16:58:35.668+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-2] d.l.m.c.t.stdio.ProcessIOHandler : ProcessIOHandler has finished reading output from process with PID = 6024 2025-08-02T16:58:35.668+08:00 DEBUG 10516 --- [langchain4j_helloworld] [ Thread-3] d.l.m.c.t.stdio.ProcessStderrHandler : ProcessErrorPrinter has finished reading error output from process with PID = 6024 2025-08-02T16:58:35.670+08:00 DEBUG 10516 --- [langchain4j_helloworld] [onPool-worker-1] d.l.m.c.t.stdio.StdioMcpTransport : Subprocess has exited with code: 1
08-03
<think>根据用户问题,用户在使用npx启动@baidumap/mcp-server-baidu-map时遇到错误"ERROR: You must supply a command."。该错误表明npx命令需要指定子命令。 参考引用[1]中提到的类似错误,解决方案是检查该包可用的命令。因此,对于@baidumap/mcp-server-baidu-map,我们需要查看其文档或帮助信息以确定正确的命令。 步骤: 1. 尝试查看@baidumap/mcp-server-baidu-map包的帮助信息,通常可以通过`--help`参数获取。 2. 由于npx报错提示需要提供命令,说明该包设计为需要子命令(如start, build等)。 因此,建议用户尝试以下命令: ```bash npx @baidumap/mcp-server-baidu-map --help ``` 或者 ```bash npx @baidumap/mcp-server-baidu-map help ``` 如果上述命令无效,可能需要查阅该包的文档或README,以确认正确的启动命令。 另外,参考引用[2]中使用了`npx babel`并指定了输入输出文件,说明npx执行包时可以附带参数。因此,对于@baidumap/mcp-server-baidu-map,正确的命令可能类似于: ```bash npx @baidumap/mcp-server-baidu-map start ``` 如果用户没有提供具体命令,则会出现上述错误。 总结:用户需要提供该包要求的子命令(如start)才能正常运行。</think>根据您的问题,您在启动`@baidumap/mcp-server-baidu-map`时遇到`npx error: You must supply a command`错误。这个错误表明您在使用`npx`调用该包时**没有提供必要的子命令**。以下是完整的解决方案: ### 解决方案步骤 1. **检查可用命令** 首先查看该包支持哪些子命令: ```bash npx @baidumap/mcp-server-baidu-map --help # 或 npx @baidumap/mcp-server-baidu-map help ``` 这会列出所有可用命令(如`start`, `build`, `serve`等)[^1]。 2. **添加正确的子命令** 根据帮助文档,添加所需子命令。**常见启动命令**: ```bash npx @baidumap/mcp-server-baidu-map start ``` 如果启动开发服务器: ```bash npx @baidumap/mcp-server-baidu-map dev ``` 3. **检查包文档** 查阅官方文档确认命令格式: ```bash # 通常文档会说明完整命令 cat node_modules/@baidumap/mcp-server-baidu-map/README.md ``` 4. **验证包安装** 确保包已正确安装: ```bash npm list @baidumap/mcp-server-baidu-map # 若未安装,执行: npm install @baidumap/mcp-server-baidu-map ``` ### 错误原因分析 - 📌 `npx`要求对需要子命令的包必须明确指定操作(如`start`, `build`) - 📦 该包设计为**命令行工具集**,而非单一命令应用 - ⚠️ 直接运行`npx @baidumap/...`缺少必要参数触发此错误 ### 示例对比 ✅ **正确命令** ```bash npx @baidumap/mcp-server-baidu-map start ``` ❌ **错误命令** ```bash npx @baidumap/mcp-server-baidu-map # 缺少子命令! ``` > 💡 **提示**:类似工具如`create-react-app`也需要完整命令: > ```bash > npx create-react-app my-app # 正确 > npx create-react-app # 会报同样错误 > ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值