API是现代应用程序的支柱,使得服务间通信更加无缝。随着人工智能的兴起,我们正在探索让API更加智能和自主的方法。OpenAI的功能调用特性让AI模型可以根据用户输入动态地与API互动,触发特定操作指令。通过将此功能与NestJS结合,我们可以构建智能API代理,处理请求、执行业务逻辑并返回结构化响应。
这篇文章讲述了如何使用NestJS和OpenAI函数调用构建一个由AI驱动的API代理,实现实时数据检索和自动化工作流程。
为什么要在API中使用AI代理?
传统API(应用程序接口)需要明确的用户指令、预设的路径和结构化的数据输入。AI代理通过以下方式来改进这一点:
- 理解自然语言查询并将它们动态映射到API调用,使交互更加灵活。
- 自动化多步骤工作流,无需固定的端点约束。
- 通过在API层处理逻辑来简化前端复杂性。
- 提升对话界面,使AI驱动的助手可以直接与后端服务交互,增强用户体验。
通过将OpenAI的功能调用特性集成到NestJS中,我们可以构建能够动态解释并执行操作的API。
项目开始 1. 搭建一个 NestJS 应用程序项目首先,创建一个新的NestJS项目。
在终端中输入以下命令:
npx @nestjs/cli new ai-api-agent
然后,切换到 ai-api-agent
目录:
cd ai-api-agent
最后,安装所需的 npm 包:
npm install
2. 安装必要的依赖
我们需要 OpenAI 的 SDK 和 Axios 来发起 API 请求
npm install openai axios dotenv
3 设置 OpenAI API 密钥
将你的 OpenAI API 密钥添加到环境配置文件 .env
中,
OPENAI_API_KEY=你的OpenAI API密钥
实现由AI驱动的API功能调用
4. 设置OpenAI服务环境
创建一个对接OpenAI API的服务(src/openai/openai.service.ts
):
import { Injectable } from '@nestjs/common';
import { Configuration, OpenAIApi } from 'openai';
import * as dotenv from 'dotenv';
dotenv.config();
@Injectable()
export class OpenAIService {
private openai: OpenAIApi;
constructor() {
const 配置 = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
this.openai = new OpenAIApi(配置);
}
async processQuery(userInput: string) {
const response = await this.openai.createChatCompletion({
model: 'gpt-4',
messages: [
{ role: 'system', content: '你的任务是将用户的查询映射到函数调用中。' },
{ role: 'user', content: userInput }
],
functions: [
{
name: 'fetchUserOrders',
description: '获取用户的订单历史',
parameters: {
type: 'object',
properties: {
userId: { type: 'string', description: '用户ID' }
},
required: ['userId']
}
}
]
});
返回 response.data.choices[0].message;
}
}
此功能将用户输入发送给OpenAI,如有必要,返回一个结构化的函数调用结果。
在控制器中处理函数调用现在,让我们定义一个控制器来处理并执行AI生成的函数调用。
请创建 src/openai/openai.controller.ts
:
import { Controller, Post, Body } from '@nestjs/common';
import { OpenAIService } from './openai.service';
import { OrderService } from '../order/order.service';
@Controller('ai')
export class OpenAIController {
constructor(
private readonly openAIService: OpenAIService,
private readonly orderService: OrderService
) {}
@Post('query')
async handleQuery(@Body('query') query: string) {
const aiResponse = await this.openAIService.processQuery(query);
if (aiResponse.function_call?.name === 'fetchUserOrders') {
const { userId } = aiResponse.function_call.arguments;
return this.orderService.getOrdersByUser(userId);
}
return { message: '没有找到匹配的函数。' };
}
}
6. 实现订单服务系统
在 src/order/order.service.ts
文件中创建一个服务来获取用户订单信息:
import { Injectable } from '@nestjs/common';
@Injectable()
export class OrderService {
private orders = [
{ id: 1, userId: '123', total: 50, status: '已寄出' },
{ id: 2, userId: '456', total: 30, status: '正在处理' },
];
getOrdersByUser(userId: string) {
return this.orders.filter(order => order.userId === userId);
}
}
7. 注册模块中的服务
打开 src/app.module.ts
文件,并添加新的服务和控制。
import { Module } from '@nestjs/common';
import { OpenAIService } from './openai/openai.service';
import { OpenAIController } from './openai/openai.controller';
import { OrderService } from './order/order.service';
@Module({
controllers: [OpenAIController],
providers: [OpenAIService, OrderService]
})
export class AppModule {}
8. 测试具有AI功能的API
启动NestJS服务器:
运行开发模式的命令是:npm run start:dev
给AI API发送一个请求:
POST请求 http://localhost:3000/ai/query
-H "Content-Type: application/json"
-d '{"query": "显示用户123的订单信息"}'
AI会识别请求,并返回相应的命令。
瑞典语翻译应为中文:#
瑞典语翻译应为中文:未来的改进- 多步骤函数调用:通过链接API调用,使AI能够执行复杂的工作流程。
- 认证与授权:通过认证令牌来限制敏感的API操作。
- 动态函数注册:让AI代理在运行时能够发现并注册新的API函数。
- 缓存响应:实施缓存机制来提高对频繁请求查询的响应速度。
AI驱动的API代理正在改变我们与后端服务互动的方式。通过结合OpenAI的功能调用和NestJS,开发人员可以创建能理解自然语言并实时执行操作的动态且直观的API。这种转变提升了自动化水平,简化了API结构,并让用户的使用体验更加无缝。随着AI技术的不断进步,自优化和智能API的潜力会越来越大——从而推动软件开发进入新的高效和创新阶段。
共同學(xué)習(xí),寫下你的評論
評論加載中...
作者其他優(yōu)質(zhì)文章