mcpField
G
genai-hub-orchestration

genai-hub-orchestration

github.com/sap开发10124 次安装6 天前更新
代码仓库

关于 genai-hub-orchestration

用于通过 REST 或 Python SDK 构建 SAP GenAI Hub 编排工作流的 Skill,涵盖部署检查、流程选择,以及聊天、过滤和文档 grounding 示例。

主要功能

  1. 01检查部署前置条件
  2. 02提供 REST 和 Python SDK 指引
  3. 03聊天、过滤与 grounding 模板
  4. 04Harmonized API 统一模型格式

适用场景

  1. 01创建基础编排聊天流程
  2. 02添加输入和输出内容过滤
  3. 03构建带文档 grounding 的 RAG

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/sap/ai-skills-library --skill genai-hub-orchestration

安装后在 Claude Code 中输入/genai-hub-orchestration确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
orchestration_basic.py
orchestration_filtering.py
rag_grounding.py
evals/
evals.json
references/
GROUNDING.md
ORCHESTRATION.md

详细介绍

规则

  1. 编排始终需要以正在运行的编排部署为前提条件——如果不存在,请先调用 aicore-lifecycle-management。
  2. 编排端点为 POST {DEPLOYMENT_URL}/v2/completion,而不是 /v1/chat/completions。
  3. 编排的 scenario_id 和 executable_id 始终为 "orchestration"——这是固定值。
  4. Harmonized API 会将所有模型规范化为 OpenAI 消息格式——相同的客户端代码适用于 GPT、Gemini 和 Bedrock。
  5. 如果尚未配置凭据,请先调用 aicore-admin-resources。
  6. generative-ai-hub-sdk 已弃用——请始终使用 sap-ai-sdk-gen。两者共用导入命名空间 gen_ai_hub。
  7. 如果用户的请求没有明确指定方式,请在编写或运行任何代码之前使用 AskUserQuestion 询问他们偏好 REST API(curl)还是 Python SDK。

部署前提条件

使用编排服务之前,必须有正在运行的部署:

# Check for an existing orchestration deployment:
uv run skills/aicore-lifecycle-management/scripts/get_deployments.py --scenario orchestration

# If none exists, create a configuration first (reuse if "orchestration" config already exists):
uv run skills/aicore-lifecycle-management/scripts/get_configurations.py --scenario-id orchestration --json | jq '.[] | select(.name == "orchestration")'
uv run skills/aicore-lifecycle-management/scripts/create_configuration.py \
  --name orchestration \
  --scenario-id orchestration \
  --executable-id orchestration

# Then deploy (takes up to 10 minutes):
uv run skills/aicore-lifecycle-management/scripts/create_deployment.py --configuration-id <config-id> --wait --timeout 600

工作流

步骤操作关键检查
1确认编排部署处于 RUNNING 状态get_deployments.py --scenario orchestration
2如果未说明方式:通过 AskUserQuestion 询问选择 curl(REST API)还是 Python SDK用户偏好
3选择管道功能(仅模板化 / + 过滤 / + 内容 grounding)用户意图
4从 assets/ 中选择模板或从头构建参见下方资源映射
5运行并验证输出uv run assets/<template>.py

资源映射

用例模板
通过编排管道进行基础聊天assets/orchestration_basic.py
带内容过滤的聊天(输入 + 输出)assets/orchestration_filtering.py
使用文档 grounding 的 RAGassets/rag_grounding.py

Python SDK — 关键模式

基础管道
from gen_ai_hub.orchestration.service import OrchestrationService
from gen_ai_hub.orchestration.models.config import OrchestrationConfig
from gen_ai_hub.orchestration.models.llm import LLM
from gen_ai_hub.orchestration.models.template import Template, TemplateValue
from gen_ai_hub.orchestration.models.message import SystemMessage, UserMessage

config = OrchestrationConfig(
    template=Template(messages=[
        SystemMessage("You are a helpful assistant."),
        UserMessage("{{?user_query}}"),
    ]),
    llm=LLM(name="gpt-4o-mini", version="latest"),
)
svc = OrchestrationService(config=config)
result = svc.run(template_values=[TemplateValue("user_query", "Hello")])
print(result.orchestration_result.choices[0].message.content)
添加内容过滤
from gen_ai_hub.orchestration.models.content_filtering import (
    ContentFiltering,
    InputFiltering,
    OutputFiltering,
)
from gen_ai_hub.orchestration.models.azure_content_filter import AzureContentFilter

filtering = ContentFiltering(
    input_filtering=InputFiltering(filters=[AzureContentFilter(hate=2, violence=2, sexual=2, self_harm=2)]),
    output_filtering=OutputFiltering(filters=[AzureContentFilter(hate=2, violence=2, sexual=2, self_harm=2)]),
)
config = OrchestrationConfig(template=..., llm=..., filtering=filtering)

REST API(curl)

export TOKEN=$(uv run skills/aicore-admin-resources/scripts/get_token.py)
export DEPLOYMENT_URL=$(uv run skills/aicore-lifecycle-management/scripts/get_deployments.py \
  --scenario orchestration --json 2>/dev/null | jq -r '.[0].deployment_url')
export RESOURCE_GROUP=$(uv run skills/aicore-admin-resources/scripts/check_setup.py 2>/dev/null | jq -r '.resource_group')

curl --request POST "${DEPLOYMENT_URL}/v2/completion" \
  --header "Authorization: Bearer ${TOKEN}" \
  --header "AI-Resource-Group: ${RESOURCE_GROUP}" \
  --header "content-type: application/json" \
  --data-raw '{
    "config": {
      "modules": {
        "prompt_templating": {
          "prompt": {
            "template": [
              {"role": "system", "content": "You are a helpful assistant."},
              {"role": "user",   "content": "{{?user_query}}"}
            ]
          },
          "model": {
            "name": "gpt-4o-mini",
            "params": {"max_completion_tokens": 512}
          }
        }
      }
    },
    "placeholder_values": {"user_query": "What is SAP AI Core?"},
    "messages_history": []
  }'

使用以下命令提取答案:jq '.final_result.choices[0].message.content'

推理模型(Gemini 2.5 Pro、o3):将 max_completion_tokens 设为至少 1024——推理令牌会在可见回复生成前消耗预算。


转交

  • 没有正在运行的编排部署? → 调用 aicore-lifecycle-management
  • 凭据/身份验证错误? → 调用 aicore-admin-resources
  • 需要查找模型名称? → 调用 genai-hub-foundation-models
  • 需要完整的 Java SDK 样板代码(非编排)? → 调用 aicore-sdk-java
  • 需要完整的 JS SDK 样板代码(非编排)? → 调用 aicore-sdk-js

何时加载参考文件

触发条件加载
REST API 详情、请求/响应结构、Harmonized APIreferences/ORCHESTRATION.md
文档 grounding 设置、GroundingModule 配置、RAGreferences/GROUNDING.md

评论

支持 Markdown