You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Semantic Kernel提示词为插件API动态添加查询参数的实现咨询

实现基于提示词的动态API参数拼接方案

一、先明确提示词与API参数的映射规则

先把你的需求整理成明确的匹配规则,方便后续代码实现:

  • 无额外要求的提示词(如“获取员工12345的信息”):不添加任何info参数
  • 包含“地址”“通信信息”的提示词:添加info=address参数
  • 包含“完整信息”的提示词:添加所有支持的info参数(比如info=address&info=payment,可根据API实际支持的参数补充)

二、实现提示词解析逻辑

写一个辅助方法,从用户的提示词里提取需要的info参数列表:

private List<string> ParseInfoParameters(string userAsk)
{
    var infoParams = new List<string>();
    
    // 匹配需要address参数的场景
    if (userAsk.Contains("地址") || userAsk.Contains("通信信息"))
    {
        infoParams.Add("address");
    }
    
    // 匹配需要完整信息的场景
    if (userAsk.Contains("完整信息"))
    {
        // 添加API支持的所有info参数,按需补充
        infoParams.Add("address");
        infoParams.Add("payment");
        // 比如还有emergency_contact等参数,可继续添加
    }
    
    // 去重,避免重复添加相同参数
    return infoParams.Distinct().ToList();
}

三、修改插件代码,动态构建API请求

把解析逻辑整合到原方法里,动态拼接带参数的请求URL:

[KernelFunction, Description("Get the employee Information.")]
public async Task<string> GetMemberInformation(
    [Description("id of the employee")] string id,
    [Description("User Query")] string userAsk
)
{
    try
    {
        // 解析需要的info参数
        var infoParams = ParseInfoParameters(userAsk);
        
        // 构建基础请求地址
        var requestUrl = $"http://baseurl/api/employee/{id}";
        
        // 如果有需要添加的参数,拼接查询字符串
        if (infoParams.Any())
        {
            var querySegments = infoParams.Select(p => $"info={Uri.EscapeDataString(p)}");
            requestUrl = $"{requestUrl}?{string.Join("&", querySegments)}";
        }
        
        using HttpResponseMessage response = await client.GetAsync(requestUrl);
        response.EnsureSuccessStatusCode();
        var content = await response.Content.ReadAsStringAsync();
        return content;
    }
    catch (Exception e)
    {
        // 可根据需求添加异常处理逻辑,比如返回友好错误信息
        return $"获取员工信息失败:{e.Message}";
    }
}

// 辅助解析方法
private List<string> ParseInfoParameters(string userAsk)
{
    var infoParams = new List<string>();
    
    if (userAsk.Contains("地址") || userAsk.Contains("通信信息"))
    {
        infoParams.Add("address");
    }
    
    if (userAsk.Contains("完整信息"))
    {
        infoParams.Add("address");
        infoParams.Add("payment");
        // 补充其他API支持的参数
    }
    
    return infoParams.Distinct().ToList();
}

四、扩展优化建议

如果后续提示词场景更复杂,可以做以下优化:

  • 使用正则表达式匹配更灵活的表述,比如“获取员工12345的支付相关信息”可匹配到payment参数
  • 将提示词与参数的映射规则放到配置文件(如appsettings.json)中,后续修改规则无需改动代码:
    "InfoParamMappings": {
      "address": ["地址", "通信信息", "联系地址"],
      "payment": ["支付信息", "薪资详情", "薪酬"],
      "full": ["完整信息", "全部信息", "所有资料"]
    }
    

内容的提问来源于stack exchange,提问作者user14267126

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 01:10:57