MENU

Call-Center-Ai:微软AI电话客服系统开源项目

November 28, 2025 • Read: 5 • AI教程

AI摘要:微软开源了一个基于Azure和OpenAI GPT的AI电话客服系统,该系统支持API调用和直接拨打机器人电话,可定制化以适应不同行业需求。系统特点包括增强沟通和用户体验、高级智能和数据管理、定制化、监管和可扩展性以及云原生部署和资源管理。项目提供了详细的部署指南和高级用法说明,包括通话录音、自定义训练数据、语言、审核级别、索赔数据模式、通话目标、对话、短信服务、提示信息、响应延迟优化和模型微调等。此外,还提供了成本估算和生产准备清单。

Powered by 中文AI技术教程与社区分享.

Call-Center-Ai

基于 Azure 和 OpenAI GPT 的 AI 驱动型呼叫中心解决方案。

Call-Center-Ai项目下载地址:

概述

通过 API 调用,让 AI 代理拨打电话。或者,直接使用已配置的电话号码拨打机器人电话!

保险、IT 支持、客户服务等等。这款机器人可以在几个小时内(真的!)根据您的需求进行定制。

# Ask the bot to call a phone number
data='{
  "bot_company": "Contoso",
  "bot_name": "Amélie",
  "phone_number": "+11234567890",
  "task": "Help the customer with their digital workplace. Assistant is working for the IT support department. The objective is to help the customer with their issue and gather information in the claim.",
  "agent_phone_number": "+33612345678",
  "claim": [
    {
      "name": "hardware_info",
      "type": "text"
    },
    {
      "name": "first_seen",
      "type": "datetime"
    },
    {
      "name": "building_location",
      "type": "text"
    }
  ]
}'

curl \
  --header 'Content-Type: application/json' \
  --request POST \
  --url https://xxx/call \
  --data $data

特征

  • 增强沟通和用户体验 :整合了来电和去电功能,使用专属电话号码,支持多种语言和语音提示,并允许用户通过短信提供或接收信息。通话 实时传输 ,避免延迟,断线后可恢复通话,并 保存以供日后参考 。这确保了 更佳的客户体验 ,支持全天候沟通,并以更便捷、更人性化的方式处理低至中等复杂程度的来电。
  • 高级智能和数据管理 :利用 gpt-4.1gpt-4.1-nano (以更高的性能和 10-15 倍的成本优势著称)实现更细致入微的理解。它可以讨论包括客户特定信息 在内的私密和敏感数据 ,同时遵循 检索增强生成 (RAG) 最佳实践,确保安全合规地处理内部文档。该系统能够理解领域特定术语,遵循结构化的声明模式,自动生成待办事项列表,过滤不当内容,并检测越狱尝试。历史对话和过往互动也可用于 微调 LLM ,从而随着时间的推移提高准确性和个性化程度。Redis 缓存进一步提升了效率。
  • 定制化、监管和可扩展性 :提供 可定制的提示 、用于受控实验的功能标志、人工客服回退以及用于质量保证的通话录音。集成 Application Insights 以进行监控和追踪,提供公开可访问的理赔数据,并计划在未来进行增强,例如自动回拨和类似 IVR 的工作流程。它还支持创建 品牌专属的自定义语音 ,使助手的声音能够体现公司形象并提高品牌一致性。
  • 云原生部署和资源管理 :采用容器化、无服务器架构,部署在 Azure 上,实现低维护成本和弹性扩展。这种方法可根据使用情况优化成本,确保长期的灵活性和经济性。与 Azure 通信服务认知服务OpenAI 资源的无缝集成,提供了一个安全的环境,适合快速迭代、持续改进,并能适应呼叫中心不断变化的工作负载。

演示

YouTube 上提供了一个法语演示视频。建议您以 1.5 倍速观看演示,以便快速了解项目概况。视频中故意使用了略显迟疑的语音,以展示机器人能够胜任。所有基础设施都部署在 Azure 上,大部分采用无服务器模式。可以配置 LLM 资源以降低延迟。

1.jpg

演示中展示的主要交互方式:

  1. 用户致电呼叫中心
  2. 机器人回答,对话开始。
  3. 机器人会将对话、声明和待办事项列表存储在数据库中。

通话期间存储的数据摘录:

{
  "claim": {
    "incident_description": "Collision avec un autre véhicule, voiture dans le fossé, pas de blessés",
    "incident_location": "Nationale 17",
    "involved_parties": "Dujardin, Madame Lesné",
    "policy_number": "DEC1748"
  },
  "messages": [
    {
      "created_at": "2024-12-10T15:51:04.566727Z",
      "action": "talk",
      "content": "Non, je pense que c'est pas mal. Vous avez répondu à mes questions et là j'attends la dépaneuse. Merci beaucoup.",
      "persona": "human",
      "style": "none",
      "tool_calls": []
    },
    {
      "created_at": "2024-12-10T15:51:06.040451Z",
      "action": "talk",
      "content": "Je suis ravi d'avoir pu vous aider! Si vous avez besoin de quoi que ce soit d'autre, n'hésitez pas à nous contacter. Je vous souhaite une bonne journée et j'espère que tout se passera bien avec la dépanneuse. Au revoir!",
      "persona": "assistant",
      "style": "none",
      "tool_calls": []
    }
  ],
  "next": {
    "action": "case_closed",
    "justification": "The customer has provided all necessary information for the insurance claim, and a reminder has been set for a follow-up call. The customer is satisfied with the assistance provided and is waiting for the tow truck. The case can be closed for now."
  },
  "reminders": [
    {
      "created_at": "2024-12-10T15:50:09.507903Z",
      "description": "Rappeler le client pour faire le point sur l'accident et l'avancement du dossier.",
      "due_date_time": "2024-12-11T14:30:00",
      "owner": "assistant",
      "title": "Rappel client sur l'accident"
    }
  ],
  "synthesis": {
    "long": "During our call, you reported an accident involving your vehicle on the Nationale 17. You mentioned that there were no injuries, but both your car and the other vehicle ended up in a ditch. The other party involved is named Dujardin, and your vehicle is a 4x4 Ford. I have updated your claim with these details, including the license plates: yours is U837GE and the other vehicle's is GA837IA. A reminder has been set for a follow-up call tomorrow at 14:30 to discuss the progress of your claim. If you need further assistance, please feel free to reach out.",
    "satisfaction": "high",
    "short": "the accident on Nationale 17",
    "improvement_suggestions": "To improve the customer experience, it would be beneficial to ensure that the call connection is stable to avoid interruptions. Additionally, providing a clear step-by-step guide on what information is needed for the claim could help streamline the process and reduce any confusion for the customer."
  }
  ...
}

通话后用户报告

报告可在 https://[your_domain]/report/[phone_number](例如 http://localhost:8080/report/%2B133658471534)查看。报告显示了对话记录、索赔数据和提醒事项。

2.png

建筑学

高层架构

组件级架构

部署

笔记

本项目仅为概念验证,不适用于生产环境。它演示了如何结合 Azure 通信服务、Azure 认知服务和 Azure OpenAI 来构建自动化呼叫中心解决方案。

先决条件

建议使用 GitHub Codespaces 快速上手。它会自动配置环境并安装所有必需的工具。

在 macOS 系统中,使用Homebrew,只需输入即可 make brew

对于其他系统,请确保已安装以下软件:

  • Azure CLI
  • Twilio CLI(可选)
  • yq
  • 兼容 Bash 的 shell,例如 bashzsh
  • 制作 apt install make(Ubuntu)、yum install make(CentOS)、brew install make(macOS)

接下来需要 Azure 资源:

1.创建一个新的资源组

  • 尽量使用小写字母,除连字符(例如 ccai-customer-a)外,不要使用特殊字符。

2.创建通信服务资源

  • 与资源组同名
  • 启用系统管理身份

3.购买电话号码

  • 来自通信服务资源
  • 允许传入和传出通信
  • 启用语音(必需)和短信(可选)功能

现在先决条件已配置完毕(本地 + Azure),可以进行部署了。

远程(在 Azure 上)

GitHub Actions 上提供了一个预构建的容器镜像,我们将使用该镜像在 Azure 上部署解决方案:

  • 分支上的最新版本:ghcr.io/clemlesne/call-center-ai:main
  • 特定标签:(ghcr.io/clemlesne/call-center-ai:0.1.0 推荐)

1. 创建灯光配置文件

请根据示例填写模板config-remote-example.yaml。该文件应放置在项目根目录下,并命名为 config.yaml。安装脚本(包括 Makefile 和 Bicep)将使用它来配置 Azure 资源。

2. 连接到您的 Azure 环境

az login

3. 运行部署自动化

提示

在参数中指定发布版本 image_version(默认值为 0.0 main)。例如, image_version=16.0.0 1.0011.001 image_version=sha-7ca2c0c。这将确保未来任何项目重大变更都不会影响您的部署。

make deploy name=my-rg-name

等待部署完成。

4. 获取日志

make logs name=my-rg-name

本地(在您的计算机上)

1. 先决条件

如果您跳过了 make brew 第一个安装步骤中的命令,请确保已安装以下软件:

最后,运行程序 make install 来设置 Python 环境。

2. 创建完整的配置文件

如果应用程序已部署在 Azure 上,您可以运行 make name=my-rg-name sync-local-config 命令将配置从远程复制到本地计算机。

提示

要使用服务主体对 Azure 进行身份验证,您还可以在 .env 文件中添加以下内容:

AZURE_CLIENT_ID=xxx
AZURE_CLIENT_SECRET=xxx
AZURE_TENANT_ID=xxx

如果解决方案未在线运行,请填写示例中的模板config-local-example.yaml。该文件应放置在项目根目录下,并命名为 config.yaml

3. 运行部署自动化

如果解决方案尚未部署在 Azure 上,则执行此操作。

make deploy-bicep deploy-post name=my-rg-name
  • 这将部署 Azure 资源,但不包含 API 服务器,从而允许您在本地测试机器人。
  • 等待部署完成

4. 连接到 Azure 开发隧道

重要的

隧道需要在单独的终端中运行,因为它需要一直运行。

# Log in once
devtunnel login

# Start the tunnel
make tunnel

5. 快速迭代代码

笔记

要覆盖特定的配置值,可以使用环境变量。例如,要覆盖某个 llm.fast.endpoint 值,可以使用以下 LLM__FAST__ENDPOINT 变量:

LLM__FAST__ENDPOINT=https://xxx.openai.azure.com

笔记

此外,local.py 我们还提供了一个脚本,无需拨打电话(即无需通信服务)即可测试应用程序。运行脚本的命令如下:

python3 -m tests.local
make dev
  • 文件更改时代码会自动重新加载,无需重启服务器。
  • API 服务器地址为:http://localhost:8080

高级用法

启用通话录音

通话录音默认处于禁用状态。要启用此功能:

  1. 在 Azure 存储帐户中创建一个新容器(例如 recordings,如果您已将解决方案部署到 Azure,则此操作已完成)。
  2. recording_enabled 将应用程序配置中的功能标志更新为 true

添加我的自定义训练数据(AI 搜索)

[](https://github.com/microsoft/call-center-ai#add-my-custom-training-data-with-ai-search)

训练数据存储在 AI Search 中,供机器人按需检索。

必需的索引模式:

字段名称Type可检索可搜索方面矢量化器
回答Edm.String是的是的
语境Edm.String是的是的
创建于Edm.String是的
文档合成Edm.String是的是的
文件路径Edm.String是的
IDEdm.String是的
问题Edm.String是的是的
向量Collection(Edm.Single)是的1536OpenAI ADA

用于填充索引的软件包含在 Synthetic RAG Index存储库中。

自定义语言

[](https://github.com/microsoft/call-center-ai#customize-the-languages)

该机器人支持多种语言,能够理解用户选择的语言。

请查看文本转语音服务支持的语言列表。

# config.yaml
conversation:
  initiate:
    lang:
      default_short_code: fr-FR
      availables:
        - pronunciations_en: ["French", "FR", "France"]
          short_code: fr-FR
          voice: fr-FR-DeniseNeural
        - pronunciations_en: ["Chinese", "ZH", "China"]
          short_code: zh-CN
          voice: zh-CN-XiaoqiuNeural

如果您已构建并部署了Azure Speech 自定义神经语音 (CNV),请 custom_voice_endpoint_id 在语言配置中添加以下字段:

# config.yaml
conversation:
  initiate:
    lang:
      default_short_code: fr-FR
      availables:
        - pronunciations_en: ["French", "FR", "France"]
          short_code: fr-FR
          voice: xxx
          custom_voice_endpoint_id: xxx

自定义审核级别

[](https://github.com/microsoft/call-center-ai#customize-the-moderation-levels)

内容安全的每个类别都定义了不同的级别。分数越高,审核越严格,级别范围从 0 到 7。审核适用于所有机器人数据,包括网页和对话。您可以在 Azure OpenAI 内容筛选器中配置这些级别。

自定义索赔数据模式

[](https://github.com/microsoft/call-center-ai#customize-the-claim-data-schema)

数据模式完全支持自定义。您可以根据需要添加或删除字段。

默认情况下,架构由以下部分组成:

  • caller_emailemail
  • caller_nametext
  • caller_phonephone_number

系统会对值进行验证,以确保数据格式符合您的模式。值可以是以下两种类型之一:

  • datetime
  • email
  • phone_numberE164 格式)
  • text

最后,还可以提供一段可选的描述。描述必须简短明了,将会提交给 LLM(法学硕士)项目。

入站调用的默认架构在配置中定义:

# config.yaml
conversation:
  default_initiate:
    claim:
      - name: additional_notes
        type: text
        # description: xxx
      - name: device_info
        type: text
        # description: xxx
      - name: incident_datetime
        type: datetime
        # description: xxx

claim 可以通过在 API 调用中添加字段来为每次调用自定义声明架构 POST /call

自定义通话目标

[](https://github.com/microsoft/call-center-ai#customize-the-call-objective)

目标是描述机器人在通话期间将要执行的操作。它用于为 LLM(语言学习模块)提供背景信息。内容应简短、清晰明了,并用英文撰写。

该解决方案采用特权方式,而不是覆盖 LLM 提示符。

默认任务(针对呼入电话)在配置中定义:

# config.yaml
conversation:
  initiate:
    task: |
      Help the customer with their insurance claim. Assistant requires data from the customer to fill the claim. The latest claim data will be given. Assistant role is not over until all the relevant data is gathered.

task 可以通过在 API 调用中添加字段来为每次调用定制任务 POST /call

自定义对话

[](https://github.com/microsoft/call-center-ai#customize-the-conversation)

对话选项以功能的形式呈现。用户无需重新部署或重启应用程序,即可在应用配置中进行配置。功能更新后,需要 60 秒的延迟才能使更改生效。

默认情况下,数值每 60 秒刷新一次。刷新操作不会在所有实例间同步,因此最多可能需要 60 秒才能在所有用户处看到更改。请在相应 app_configuration.ttl_sec 字段中更新此设置。

姓名描述类型默认
answer_hard_timeout_sec在因错误信息而中止响应之前,需要等待 LLM 一段时间。int15
answer_soft_timeout_sec等待 LLM 发送等待消息的时间。int4
callback_timeout_hour回调超时时间(以小时为单位)。设置为 0 可禁用。int3
phone_silence_timeout_sec触发语音助手发出警告消息所需的静默时间(秒)。int20
recognition_retry_max语音识别的最大重试次数。最小值为 1。int3
recognition_stt_complete_timeout_msSTT 完成超时时间(以毫秒为单位)。int100
recording_enabled是否启用通话录音功能。bool错误的
slow_llm_for_chat是否使用慢速 LLM 进行聊天。bool错误的
vad_cutoff_timeout_ms语音活动检测的截止超时时间(毫秒)。int250
vad_silence_timeout_ms静音即可在几毫秒内触发语音活动检测。int500
vad_threshold语音活动检测阈值。介于 0.1 和 1 之间。float0.5

使用 Twilio 发送短信

[](https://github.com/microsoft/call-center-ai#use-twilio-for-sms)

要使用 Twilio 发送短信,您需要创建一个帐户并获取以下信息:

  • 账户 SID
  • 身份验证令牌
  • 电话号码

然后,在文件中添加以下内容 config.yaml

# config.yaml
sms:
  mode: twilio
  twilio:
    account_sid: xxx
    auth_token: xxx
    phone_number: "+33612345678"

自定义提示信息

[](https://github.com/microsoft/call-center-ai#customize-the-prompts)

请注意,提示示例包含 {xxx} 占位符。这些占位符会被机器人替换为相应的数据。例如,<your_name>`{bot_name}` 会被内部替换为机器人名称。请务必使用英语编写所有文本转语音 (TTS) 提示。英语将作为对话翻译的基准语言。所有文本均以列表形式呈现,因此用户每次通话都能获得不同的体验,从而使对话更具互动性。

# config.yaml
prompts:
  tts:
    hello_tpl:
      - : |
        Hello, I'm {bot_name}, from {bot_company}! I'm an IT support specialist.

        Here's how I work: when I'm working, you'll hear a little music; then, at the beep, it's your turn to speak. You can speak to me naturally, I'll understand.

        What's your problem?
      - : |
        Hi, I'm {bot_name} from {bot_company}. I'm here to help.

        You'll hear music, then a beep. Speak naturally, I'll understand.

        What's the issue?
  llm:
    default_system_tpl: |
      Assistant is called {bot_name} and is in a call center for the company {bot_company} as an expert with 20 years of experience in IT service.

      # Context
      Today is {date}. Customer is calling from {phone_number}. Call center number is {bot_phone_number}.
    chat_system_tpl: |
      # Objective
      Provide internal IT support to employees. Assistant requires data from the employee to provide IT support. The assistant's role is not over until the issue is resolved or the request is fulfilled.

      # Rules
      - Answers in {default_lang}, even if the customer speaks another language
      - Cannot talk about any topic other than IT support
      - Is polite, helpful, and professional
      - Rephrase the employee's questions as statements and answer them
      - Use additional context to enhance the conversation with useful details
      - When the employee says a word and then spells out letters, this means that the word is written in the way the employee spelled it (e.g. "I work in Paris PARIS", "My name is John JOHN", "My email is Clemence CLEMENCE at gmail GMAIL dot com COM")
      - You work for {bot_company}, not someone else

      # Required employee data to be gathered by the assistant
      - Department
      - Description of the IT issue or request
      - Employee name
      - Location

      # General process to follow
      1. Gather information to know the employee's identity (e.g. name, department)
      2. Gather details about the IT issue or request to understand the situation (e.g. description, location)
      3. Provide initial troubleshooting steps or solutions
      4. Gather additional information if needed (e.g. error messages, screenshots)
      5. Be proactive and create reminders for follow-up or further assistance

      # Support status
      {claim}

      # Reminders
      {reminders}

优化响应延迟

[](https://github.com/microsoft/call-center-ai#optimize-response-delay)

延误主要来自两个方面:

  • 输入和输出的语音均由 Azure AI Speech 处理,两者都以流式传输模式实现,但语音不会直接传输到 LLM。
  • LLM,更具体地说是 API 调用和推断出第一个句子之间的延迟,可能会很长(因为句子一旦可用就会逐个发送),如果它出现错误并返回空答案,则延迟会更长(这种情况经常发生,应用程序会重试调用)。

从现在开始,唯一有效的操作就是 LLM 部分。这可以通过在 Azure 上部署 PTU 或使用一个智能程度较低的模型 gpt-4.1-nano(最新版本默认启用)来实现。在某些情况下,使用 Azure OpenAI 上的 PTU 可以将延迟降低一半。

该应用程序与 Azure Application Insights 原生集成,因此您可以监控响应时间并查看时间消耗在哪些环节。这对于识别瓶颈非常有帮助。

如果您有任何优化响应延迟的想法,请随时提出问题或提交 PR。

通过模型微调提高对话质量

[](https://github.com/microsoft/call-center-ai#improving-conversation-quality-through-model-fine-tuning)

通过整合来自人工呼叫中心的历史数据,提高 LLM 的准确性和领域适应性。在进行下一步之前,请确保遵守数据隐私法规、内部安全标准和负责任人工智能原则。请考虑以下步骤:

  1. 汇总真实数据源:收集以前由人工管理的交互中的录音、通话记录和聊天记录,为 LLM 提供真实的培训材料。
  2. 预处理和匿名化数据:删除敏感信息(AI 语言个人身份信息检测),包括个人标识符或机密详细信息,以保护用户隐私,符合合规性要求,并符合负责任的 AI 准则。
  3. 执行迭代微调:使用精选数据集(AI Foundry 微调)不断改进模型,使其能够学习行业特定的术语、首选的对话风格和问题解决方法。
  4. 验证改进:针对示例场景测试更新后的模型,并衡量关键绩效指标(例如用户满意度、通话时长、问题解决率),以确认调整是否带来了有意义的改进。
  5. 监控、迭代和 A/B 测试:定期重新评估模型性能,整合新收集的数据,并根据需要进行进一步微调。利用内置功能配置对模型的不同版本进行 A/B 测试(应用配置实验),确保做出负责任的、数据驱动的决策,并随着时间的推移持续优化模型。

监控应用程序

[](https://github.com/microsoft/call-center-ai#monitoring-the-application)

应用程序会将跟踪信息和指标发送到 Azure Application Insights。您可以从 Azure 门户或使用 API 来监视该应用程序。

这包括应用程序行为、数据库查询和外部服务调用。此外,还包括来自OpenLLMetry的 LLM 指标(延迟、令牌使用情况、提示内容、原始响应) ,遵循OpenAI 操作的语义规范

此外,还会发布自定义指标(可在“应用程序洞察”>“指标”中查看),特别是:

  • call.aec.droped 回声消除功能完全消除声音的次数。
  • call.aec.missed 回声消除未能及时消除回声的次数。
  • call.answer.latency 用户语音结束到机器人语音开始之间的时间间隔。

问答

这要花多少钱?

每月通话量为 1000 次,每次通话时长为 10 分钟。费用为 2024 年 12 月 10 日的预估价格,以美元计。价格可能会有所变动。

笔记

对于生产环境,建议升级到集成虚拟网络 (vNET) 和私有端点的 SKU。这可能会显著增加成本。

总计每月 720.07 美元,每小时 0.12 美元,具体明细如下:

Azure 通信服务

地区指标成本总计(每月美元)笔记
西欧音频流媒体每分钟 0.004 美元40 美元

Azure OpenAI

地区指标成本总计(每月美元)笔记
瑞典中部gpt-4.1-nano 全局每百万个输入代币 0.15 美元35.25 美元对话历史记录使用 8000 个令牌,RAG 使用 3750 个令牌,每位参与者每 15 秒发言一次。
瑞典中部gpt-4.1-nano 全局每百万个输出代币 0.60 美元1.4 美元每次回复(含工具)奖励 400 个代币,每位参与者每 15 秒发言一次。
瑞典中部gpt-4.1 全局每百万个输入代币 2.50 美元10 美元每次对话需要 4000 个令牌才能获得洞察
瑞典中部gpt-4.1 全局10 美元/100 万个代币10 美元每次对话需花费 1000 个代币才能获得洞察
瑞典中部text-embedding-3-large每千个代币 0.00013 美元2.08 美元每条消息进行 1 次搜索或使用 400 个令牌,每位参与者每 15 秒发言一次。

Azure 容器应用

地区指标成本总计(每月美元)笔记
瑞典中部无服务器虚拟 CPU0.000024 美元/秒128.56 美元平均每个副本使用 1 个 vCPU
瑞典中部无服务器内存(平均 2 个副本)0.000003 美元/秒32.14 美元平均每个副本有 2GB 内存

Azure AI 搜索

地区指标成本总计(每月美元)笔记
瑞典中部基本的每月 73.73 美元73.73 美元每个索引拥有 15GB 的存储空间,处理大型数据集时应该升级。

Azure AI 语音

地区指标成本总计(每月美元)笔记
西欧语音转文本实时每小时 1 美元83.33 美元每位参与者每 15 秒发言一次。
西欧文本转语音标准每百万个字符 15 美元69.23 美元每次回答限用 300 个代币,英语单词平均每个代币 1.3 个,每位参与者每 15 秒发言一次。

Azure Cosmos DB

地区指标成本总计(每月美元)笔记
瑞典中部多区域写入 RU/s /区域11.68 美元/100 俄罗斯卢布/秒233.6 美元两个区域的平均速率为 1k RU/s
瑞典中部事务存储0.25 美元/GB0.5 美元2GB 存储空间,如果需要更多历史记录,则应升级。

不含上衣:

笔记

Azure Monitor 的费用不应被视为可有可无,因为监控是维护业务关键型应用程序和为用户提供高质量服务的关键部分。

可选费用总计每月 343.02 美元,具体明细如下:

Azure 通信服务

地区指标成本总计(每月美元)笔记
西欧通话录音每分钟 0.002 美元20 美元

Azure OpenAI

地区指标成本总计(每月美元)笔记
瑞典中部text-embedding-3-large每千个代币 0.00013 美元0.52 美元10000 页 PDF 文件,每页 400 个标记,用于索引

Azure Monitor

地区指标成本总计(每月美元)笔记
瑞典中部基本日志摄取0.645 美元/GB322.5 美元已启用采样的 500GB 日志[](https://learn.microsoft.com/en-us/azure/azure-monitor/app/opentelemetry-configuration?tabs=python#enable-sampling)

要使其达到量产标准需要做哪些准备?

质量:

  • 持久层的单元测试和集成测试
  • 完整的单元测试和集成测试覆盖率

可靠性:

  • 可复现的构建
  • 追踪和遥测
  • 常见问题的操作手册
  • Azure Application Insights 中的正确仪表板(随 IaC 一起部署)

可维护性:

  • 自动化和必需的静态代码检查
  • 将助手与洞察功能分离,放在一个单独的服务中。
  • 同行评审以限制巴士因素

弹性:

  • 基础设施即代码(IaC)
  • 多区域部署
  • 可重复的性能测试

安全:

  • CI 构建证明
  • CodeQL 静态代码检查
  • 用于部署的 GitOps
  • 私有网络
  • 支持虚拟网络集成的生产 SKU
  • 红队演习

负责任的人工智能:

  • 有害内容检测
  • 使用内容安全进行接地检测
  • 社会影响评估

为什么没有使用 LLM 框架?

在开发之时,尚无任何 LLM 框架能够处理所有这些特性:支持多工具的流式传输、可用性问题下的备份模型以及触发工具中的回调机制。因此,我们直接使用了 OpenAI SDK,并实现了一些算法来处理可靠性问题。