nestjs+langchain:大模型的基本调用、对message的

一、模型调用平台

  1. 百度千帆:cloud.baidu.com/product-s/q...

  2. CloeAI:www.closeai-asia.com

二、 安装库

js 复制代码
# 安装核心库和 OpenAI 集成(最常用) 
npm install @langchain/core @langchain/openai

# 如果你需要使用 LangGraph (构建复杂智能体推荐) 
npm install @langchain/langgraph

三、大模型的基本调用

  1. agents.service.ts
js 复制代码
import { Injectable } from '@nestjs/common';
import { ChatOpenAI } from '@langchain/openai';
import { HumanMessage } from '@langchain/core/messages';

@Injectable()
export class AgentsService {
  private llm: ChatOpenAI;
  constructor() {
    // 1. 从环境变量获取配置,避免硬编码
    // 建议在 .env 文件中定义 VITE_OPENAI_API_KEY 或 OPENAI_API_KEY
    const apiKey = process.env.OPENAI_API_KEY; // 生产环境务必使用环境变量
    const baseUrl = process.env.OPENAI_BASE_URL;

    // 2. 初始化 ChatOpenAI
    this.llm = new ChatOpenAI({
      modelName: 'ernie-3.5-8k', // 对应 Python 的 model
      openAIApiKey: apiKey, // 对应 Python 的 api_key
      configuration: {
        baseURL: baseUrl, // 对应 Python 的 base_url
      },
      temperature: 0, // 可选:设置温度
    });
  }

  /**
   * 调用 LLM 并返回内容
   */
  async explainNeuralNetworks(): Promise<string> {
    // 3. 构建消息 (LangChain TS 推荐使用 Message 对象)
    const messages = [new HumanMessage('解释神经网络原理')];

    // 4. 调用 invoke (异步操作,需 await)
    const response = await this.llm.invoke(messages);

    // 5. 获取内容
    // response.content 可能是字符串或数组,通常直接转为字符串
    return response.content as string;
  }
}
  1. agents.controller.ts
js 复制代码
import { Controller, Get } from '@nestjs/common';
import { AgentsService } from './agents.service';

@Controller('agents')
export class AgentsController {
  constructor(private readonly agentsService: AgentsService) {}

  @Get('test-llm')
  async testLlm() {
    const content = await this.agentsService.explainNeuralNetworks();
    return {
      success: true,
      content,
    };
  }
}
  1. .env文件的配置
js 复制代码
OPENAI_API_KEY=XXXXX
OPENAI_BASE_URL=XXXXX
  1. app.module.ts 中确保加载了环境变量
js 复制代码
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { AgentsModule } from './agents/agents.module';
import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [ConfigModule.forRoot({ isGlobal: true }), AgentsModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
  1. 接口测试:

四、关于对话模型的Message(消息)

LangChain有一些内置的消息类型:

🔥 SystemMessage :设定AI行为规则或背景信息。比如设定AI的初始状态、行为模式或对话的总

体目标。比如"作为一个代码专家",或者"返回json格式"。通常作为输入消息序列中的第一个

传递。

🔥 HumanMessage :表示来自用户输入。比如"实现 一个快速排序方法"

🔥 AIMessage :存储AI回复的内容。这可以是文本,也可以是调用工具的请求

ChatMessage :可以自定义角色的通用消息类型

FunctionMessage/ToolMessage :函数调用/工具消息,用于函数调用结果的消息类型

  • 举例:
js 复制代码
//agents.service.ts
import { HumanMessage, SystemMessage } from '@langchain/core/messages';

const messages = [
      new SystemMessage('你是一位乐于助人的智能小助手'),
      new HumanMessage('你好,请你介绍一下你自己'),
];
相关推荐
夜影风1 分钟前
给AI装上记忆系统:AI记忆机制与上下文管理实战
人工智能·langchain·ai记忆系统
深度学习lover3 分钟前
<数据集>yolo食物分类检测<目标检测>
人工智能·深度学习·yolo·目标检测·计算机视觉·食物分类识别
2401_832298103 分钟前
AI 智能体 “寒武纪”——OpenClaw 狂飙迭代,引领开源 Agent 商业化落地浪潮
大数据·人工智能
扬帆破浪8 分钟前
免费开源AI软件.桌面单机版,可移动的AI知识库,察元 AI桌面版:本地离线知识库的妥协与收益 老电脑跑察元AI的可行边界
人工智能·windows·开源·电脑·知识图谱
Navicat中国14 分钟前
AI 代码补全如何改变 DBA 编写 SQL 的方式
数据库·人工智能·sql·dba·navicat
阿丰资源22 分钟前
基于Springboot+mysql的在线兼职平台(附源码)
spring boot·后端·mysql
科技互联.29 分钟前
2026年5月观察:四大头部工具如何重塑短视频矩阵的“生产规则”
大数据·人工智能·矩阵
智象科技29 分钟前
智能运维(AIOps),正在改变IT行业格局
运维·人工智能·运维开发·devops·智能运维
数据门徒30 分钟前
神经网络原理 第五章:径向基函数网络
网络·人工智能·神经网络
TG_yunshuguoji33 分钟前
阿里云代理商:DeepSeek V4 在阿里云部署的经济性革命
人工智能·阿里云·云计算·ai智能体·deepseek v4