手把手教你在Azure Functions上安装Jina AI,新手必看教程 (2025年05月)

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

手把手教你在Azure Functions上安装Jina AI,新手必看教程 (2025年05月)

引言

在当今AI技术蓬勃发展的时代,Jina AI作为一个强大的开源AI框架,能够帮助我们快速构建和部署AI应用。而Azure Functions作为微软的无服务器计算平台,提供了高度可扩展的运行环境。本文将带你一步步在Azure Functions上安装和配置Jina AI,即使你是完全的新手也能轻松上手。

准备工作

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

  1. 一个有效的Microsoft Azure账号
  2. 已安装最新版Azure CLI
  3. Python 3.8或更高版本(推荐3.9)
  4. 基本的Python编程知识

第一步:创建Azure Functions项目

首先,我们需要创建一个新的Azure Functions项目。

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

# 创建新的Functions项目
mkdir jina-ai-function && cd jina-ai-function
func init --python

参数说明:
--python:指定使用Python作为开发语言

注意事项:
– 如果你使用的是Windows系统,可能需要以管理员身份运行命令提示符
– 确保你的网络连接稳定,因为会下载必要的依赖包

第二步:创建HTTP触发的Function

接下来,我们创建一个HTTP触发的Function:

代码片段
func new --name jina_ai_processor --template "HTTP trigger" --authlevel "anonymous"

这会在你的项目中创建一个名为jina_ai_processor的新函数。

第三步:安装Jina AI依赖

编辑requirements.txt文件,添加以下内容:

代码片段
jina==3.15.0
numpy>=1.21.0
pillow>=9.0.0

然后安装这些依赖:

代码片段
pip install -r requirements.txt

原理说明:
– Jina AI核心库提供了基础的AI模型加载和推理能力
– numpy是科学计算的基础库
– pillow用于图像处理(如果你的应用涉及图片)

第四步:编写Jina AI处理函数

打开jina_ai_processor/__init__.py文件,替换为以下代码:

代码片段
import logging
import json
import numpy as np
from jina import Document, DocumentArray, Executor, Flow, requests

# 自定义一个简单的Executor来处理文本数据
class TextProcessor(Executor):
    @requests(on='/process')
    def process_text(self, docs: DocumentArray, **kwargs):
        for doc in docs:
            # 这里我们简单地将文本转换为大写作为示例处理逻辑
            doc.text = doc.text.upper()
            # 添加一些元数据作为示例
            doc.tags['length'] = len(doc.text)
            doc.tags['processed'] = True

# Azure Function的主入口点
async def main(req):
    logging.info('Python HTTP trigger function processed a request.')

    try:
        req_body = req.get_json()
        text_to_process = req_body.get('text')

        if not text_to_process:
            return {
                'status': 'error',
                'message': 'Please provide text to process in the request body'
            }, 400

        # 创建Jina Flow并添加我们的处理器
        flow = Flow().add(uses=TextProcessor)

        # 启动Flow并处理文档
        with flow:
            docs = DocumentArray([Document(text=text_to_process)])
            result = await flow.post('/process', inputs=docs)

            # 准备返回结果
            processed_text = result[0].text

            return {
                'status': 'success',
                'original_text': text_to_process,
                'processed_text': processed_text,
                'metadata': result[0].tags,
                'processing_time': result[0].timing['process'].duration_seconds,
            }

    except Exception as e:
        logging.error(f"Error processing request: {str(e)}")
        return {
            'status': 'error',
            'message': str(e)
        }, 500

代码解释:

  1. TextProcessor类是一个自定义的Jina Executor,它定义了一个简单的文本处理逻辑(将文本转为大写)
  2. main函数是Azure Function的入口点:
    • 从请求中获取JSON数据并提取要处理的文本
    • 创建Jina Flow并添加我们的处理器
    • 使用Flow处理文档并返回结果

第五步:本地测试Function

在部署到云端之前,先在本地测试:

代码片段
func start

然后使用curl或Postman发送测试请求:

代码片段
curl -X POST http://localhost:7071/api/jina_ai_processor \
-H "Content-Type: application/json" \
-d '{"text":"hello world"}'

你应该会得到类似这样的响应:

代码片段
{
    "status": "success",
    "original_text": "hello world",
    "processed_text": "HELLO WORLD",
    "metadata": {
        "length":11,
        "processed":true 
    },
    "processing_time":0.00234 
}

第六步:部署到Azure

首先登录Azure CLI:

代码片段
az login

然后创建资源组和存储账户:

代码片段
az group create --name jina-ai-rg --location eastus

az storage account create --name jinastorage2025 --location eastus \
--resource-group jina-ai-rg --sku Standard_LRS 

最后部署Function应用:

代码片段
az functionapp create --resource-group jina-ai-rg \
--consumption-plan-location eastus --runtime python \
--runtime-version 3.9 --functions-version 4 \
--name jina-ai-function-app --storage-account jinastorage2025 \
--os-type linux 

func azure functionapp publish jina-ai-function-app 

注意事项:
1. jina-ai-function-app需要全局唯一,你可能需要修改这个名字
2. eastus是区域名称,你可以选择离你更近的区域
3. Standard_LRS是最基础的存储类型

第七步:测试云端Function

部署完成后,获取Function URL:

代码片段
func azure functionapp list-functions jina-ai-function-app --show-keys 

然后使用获得的URL进行测试:

代码片段
curl -X POST https://jina-ai-function-app.azurewebsites.net/api/jina_ai_processor \ 
-H "Content-Type: application/json" \ 
-d '{"text":"testing cloud deployment"}'

Jina AI进阶配置(可选)

如果你想使用更复杂的Jian AI功能,可以修改Flow配置。例如使用预训练模型:

代码片段
from jina import Executor, requests 

class TextEmbedder(Executor):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        from sentence_transformers import SentenceTransformer 
        self.model = SentenceTransformer('all-MiniLM-L6-v2')

    @requests(on='/embed')
    def encode(self, docs: DocumentArray, **kwargs):
        for doc in docs:
            doc.embedding = self.model.encode(doc.text) 

# Azure Function主函数中修改Flow配置:
flow = (
    Flow()
    .add(uses=TextProcessor)      #我们的文本处理器 
    .add(uses=TextEmbedder)       #新增的嵌入模型 
)

注意事项:
1. SentenceTransformer等大模型会增加冷启动时间
2. Azure Function默认有内存限制(1.5GB),注意模型大小

常见问题解决

Q1: Function部署失败

错误信息: ModuleNotFoundError: No module named 'jina'

解决方案:
确保requirements.txt包含所有依赖并且正确上传。可以手动触发依赖安装:

代码片段
az functionapp config appsettings set \ 
--name jina-ai-function-app \  
--resource-group jina-ai-rg \  
--settings SCM_DO_BUILD_DURING_DEPLOYMENT=true  

然后重新部署。

Q2: Function超时

错误信息: Timeout after waiting for ... seconds

解决方案:
增加超时时间限制:

代码片段
az functionapp config set \  
--name jia-na-function-app \  
--resource-group jia-na-rg \  
--ftps-state Disabled \  
--linux-fx-version PYTHON|3.9 \  
--functions-extensions-enabled true \  
--function-timeout <seconds>   #默认300秒可增加到600秒(max)   

Q3: JINA执行缓慢

优化建议:
1.启用Always On模式减少冷启动:

代码片段
az functionapp config set \   
--always-on true \   
--name your-function-name \   
--resource-group your-resource-group   

2.Consider using Premium plan for better performance.

总结

通过本文我们完成了以下工作:
1️⃣创建了基于Python的Azure Function项目
2️⃣集成了JINA AI框架并编写了自定义处理器
3️⃣成功在本地和云端测试了AI处理功能
4️⃣探讨了进阶配置和性能优化选项

现在你已经掌握了在无服务器环境中部署AI应用的基本方法。下一步可以尝试:
•集成更复杂的JINA Executors
•添加输入验证和安全措施
•实现批处理和异步调用

希望这篇教程对你有所帮助!如果有任何问题欢迎在评论区留言讨论。

原创 高质量