Azure FunctionsOpenAI安装配置一条龙教程 (含疑难解答)

云信安装大师
90
AI 质量分
10 5 月, 2025
3 分钟阅读
0 阅读

Azure Functions + OpenAI 安装配置一条龙教程 (含疑难解答)

引言

在当今AI技术蓬勃发展的时代,将OpenAI的强大能力与Azure Functions的无服务器架构相结合,可以构建出智能且高效的云应用。本教程将手把手教你如何在Azure Functions中集成OpenAI API,包括完整的安装配置步骤和常见问题解决方案。

准备工作

在开始之前,请确保你已经具备以下条件:

  1. 有效的Azure账号(可注册免费试用账号
  2. Node.js 12.x或更高版本(本教程以Node.js为例)
  3. Azure CLI已安装
  4. OpenAI API密钥(可在OpenAI官网获取)

第一步:创建Azure Functions项目

代码片段
# 安装Azure Functions Core Tools
npm install -g azure-functions-core-tools@4 --unsafe-perm true

# 创建新的Functions项目
func init MyOpenAIFunction --worker-runtime node --language javascript

# 进入项目目录
cd MyOpenAIFunction

注意事项
– 如果遇到权限问题,可在Linux/macOS前加sudo
--worker-runtime指定运行时环境,我们这里选择node

第二步:添加HTTP触发器函数

代码片段
# 创建一个HTTP触发的函数
func new --name OpenAIChat --template "HTTP trigger" --authlevel "anonymous"

这会在项目中创建一个名为OpenAIChat的函数,使用HTTP触发器模板。

第三步:安装OpenAI客户端库

代码片段
npm install openai dotenv

我们同时安装了dotenv用于管理环境变量。

第四步:配置环境变量

在项目根目录创建.env文件:

代码片段
OPENAI_API_KEY=你的OpenAI_API密钥
OPENAI_ORG_ID=你的组织ID(可选)

重要安全提示
切勿将.env文件提交到版本控制!
– 在生产环境中应使用Azure应用程序设置或Key Vault

第五步:编写函数代码

打开OpenAIChat/index.js文件,替换为以下内容:

代码片段
const { OpenAI } = require('openai');
require('dotenv').config();

module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    // 初始化OpenAI客户端
    const openai = new OpenAI({
        apiKey: process.env.OPENAI_API_KEY,
        organization: process.env.OPENAI_ORG_ID || null,
    });

    try {
        // 从请求体中获取用户消息
        const userMessage = (req.query.message || (req.body && req.body.message));

        if (!userMessage) {
            context.res = {
                status: 400,
                body: "请提供message参数"
            };
            return;
        }

        // 调用OpenAI API
        const completion = await openai.chat.completions.create({
            model: "gpt-3.5-turbo",
            messages: [{ role: "user", content: userMessage }],
            temperature: 0.7,
        });

        // 返回响应
        context.res = {
            body: {
                response: completion.choices[0].message.content,
                usage: completion.usage,
                model: completion.model,
                id: completion.id,
            }
        };
    } catch (error) {
        context.log.error('Error:', error);
        context.res = {
            status: 500,
            body: `处理请求时出错: ${error.message}`
        };
    }
};

代码解释:

  1. 初始化部分

    • require('dotenv').config()加载.env文件中的环境变量
    • new OpenAI()创建OpenAI客户端实例
  2. 请求处理

    • userMessage可以从查询参数或请求体中获取
    • openai.chat.completions.create()是调用GPT模型的核心方法
  3. 错误处理

    • try-catch块捕获可能的API错误并返回友好的错误信息

第六步:本地测试函数

代码片段
func start

访问以下URL测试你的函数:

代码片段
http://localhost:7071/api/OpenAIChat?message=你好,你是谁?

你应该会看到来自GPT的响应。

第七步:部署到Azure

A. Azure资源准备

代码片段
# 登录Azure CLI
az login

# 创建资源组(替换<location>为你的区域如eastus)
az group create --name MyOpenAIRG --location <location>

# 创建存储账户(名称必须全局唯一)
az storage account create --name mystorageaccount<随机后缀> --location <location> --resource-group MyOpenAIRG --sku Standard_LRS

# 创建Functions应用(需要消耗计划或高级计划)
az functionapp create --resource-group MyOpenAIRG --consumption-plan-location <location> --runtime node --runtime-version 14 --functions-version 4 --name MyFunctionApp<随机后缀> --storage-account mystorageaccount<随机后缀>

B. 部署代码和设置环境变量

代码片段
# 部署代码(确保在项目根目录)
func azure functionapp publish MyFunctionApp<随机后缀>

# 设置环境变量(替换实际值)
az functionapp config appsettings set --name MyFunctionApp<随机后缀> --resource-group MyOpenAIRG --settings OPENAI_API_KEY=<你的密钥>

疑难解答指南

Q1:遇到”Module not found”错误?

解决方案
1. rm -rf node_modules package-lock.json
2. npm install
3. func start

Q2:收到403 Forbidden错误?

可能原因和解决
1. OpenAI API密钥无效 → 检查API密钥
2. Azure Functions未正确设置环境变量 → az functionapp config appsettings list检查设置

Q3:部署后访问超时?

排查步骤
1. az functionapp log tail查看实时日志
2. az monitor metrics list-definitions检查资源使用情况
3. Azure状态页面确认服务状态正常

Q4:响应速度慢?

优化建议
1. Azure Functions应选择与OpenAI服务器相近的区域(如都选eastus)
2. GPT模型可降级为更轻量级版本如”gpt-3.5-turbo-instruct”
3. Azure Functions升级到Premium计划获得更好性能

API进阶使用示例

如果你想实现更复杂的对话功能,可以修改代码如下:

代码片段
// ...前面的初始化代码保持不变...

// messages数组可以保存对话历史实现上下文功能
const messages = [
    { role: "system", content: "你是一个乐于助人的助手" },
    { role: "user", content: userMessage }
];

const completion = await openai.chat.completions.create({
    model: "gpt-4",
    messages, // ←传递整个对话历史而不仅是最后一条消息 
    temperature: process.env.TEMPERATURE || 0.7, //从环境变量读取温度参数 
});

这样可以让模型记住对话上下文。

Azure Functions高级配置建议

1️⃣ 冷启动优化

代码片段
# Premium计划中设置始终就绪实例数 
az resource update \
  --resource-type Microsoft.Web/sites \
  -g MyResourceGroup \
  -n MyFunctionApp \
  --set properties.minimumElasticInstanceCount=1 <br>
   

2️⃣ 自动缩放规则

代码片段
// host.json中添加缩放配置 
{
    "extensionBundle": { /*...*/ },
    "scaleController": {
        "maxConcurrentRequests": "100",
        "snapshotPersistenceEnabled": true 
    }
}<br>
   

3️⃣ 监控集成

代码片段
# Application Insights集成 
az monitor app-insights component create \
  --app myAppInsights \
  --location eastus \ 
  --resource-group MyResourceGroup 

az functionapp update \ 
  -n MyFunctionApp \ 
  -g MyResourceGroup \ 
  —application-insights myAppInsights  <br>
   

GPT最佳实践提示工程技巧

在你的prompt中:

✔️ 明确角色设定

代码片段
"你是一位专业的IT顾问..."

✔️ 结构化输出要求

代码片段
"请用JSON格式返回..."

✔️ 分步骤思考

代码片段
"让我们一步步思考..."

✔️ 示例驱动

代码片段
"以下是几个例子..."

这些技巧可以显著提升GPT的响应质量。

CORS安全配置

如果要从网页调用此API:

代码片段
az functionapp cors add \ 
    -g MyResourceGroup \  
    -n MyFunctionApp \  
    —allowed-origins https://yourdomain.com  

或者允许所有来源(仅限开发):

代码片段
—allowed-origins *  

API限流保护

防止滥用:

代码片段
// index.js中添加速率限制逻辑  
const rateLimit = require('express-rate-limit');  

const limiter = rateLimit({  
    windowMs:15*60*1000, //15分钟  
    max:100 //每个IP最多100次请求  
});  

module.exports = async function(context,req){  
    if(limiter(context.req)){  
        context.res={status429body:"请求太频繁"};return;}  

    //...原有逻辑...  
}  

记得安装包:

代码片段
npm install express-rate-limit @types/express-rate-limit —save-dev   

通过本教程,你已经学会了如何:
1️⃣ 创建基本的Azure Function
2️⃣ 安全集成OpenAI API
3️⃣ 处理各种错误情况
4️⃣ 进行性能优化和监控

现在你可以基于此模板开发各种智能应用了!如需进一步学习,可以参考:
Azure Functions官方文档
OpenAI Node SDK文档

原创 高质量