如何在Python Gemini应用中实现基于用户输入的动态API调用(非RAG、非硬匹配)
基于Gemini实现动态API调用的干净方案
可以利用Gemini的自然语言理解(NLU)能力识别用户意图,结合意图-处理函数映射表替代硬编码的if-elif逻辑,既避免关键词硬匹配的局限性,又无需依赖第三方RAG库。以下是具体实现方案:
核心思路
- 预定义各API对应的处理函数
- 让Gemini分析用户输入,返回标准化的意图标签(如
news、weather) - 通过字典映射,自动调用对应处理函数
具体实现代码
步骤1:定义API处理函数
先封装各API的调用逻辑:
def call_news_api(): # 替换为实际新闻API调用逻辑 return "最新热点新闻:Gemini推出企业级定制服务..." def call_weather_api(): # 替换为实际天气API调用逻辑(可根据用户输入中的地点动态传参) return "当前天气:上海,多云转晴,气温23~30℃" def default_handler(): return "暂时无法处理该请求,请尝试查询新闻或天气。"
步骤2:创建意图-处理函数映射表
用字典建立意图标签与处理函数的关联,后续新增API只需扩展此字典:
intent_handlers = { "news": call_news_api, "weather": call_weather_api, "default": default_handler }
步骤3:利用Gemini识别用户意图
通过精准Prompt让Gemini返回标准化的意图标签,避免歧义:
import google.generativeai as genai # 初始化Gemini客户端 genai.configure(api_key="YOUR_API_KEY") model = genai.GenerativeModel("gemini-pro") def get_user_intent(user_input): prompt = f""" 请严格分析用户输入的核心意图,仅返回以下标签中的一个:news、weather、default。 规则: - 若用户请求与新闻资讯相关,返回news - 若用户请求与天气查询相关,返回weather - 无法识别或不属于上述两类的请求,返回default 用户输入:{user_input} """ response = model.generate_content(prompt) return response.text.strip().lower() def handle_user_input(user_input): # 获取意图标签 intent = get_user_intent(user_input) # 匹配对应处理函数并执行 handler = intent_handlers.get(intent, intent_handlers["default"]) return handler()
优化与扩展建议
- 动态参数传递:若需根据用户输入中的细节(如地点、新闻类别)调用API,可让Gemini同时返回意图标签和关键参数,例如让Prompt返回
{"intent": "weather", "location": "北京"},再在处理函数中使用这些参数。 - 安全校验:如果让Gemini直接返回函数名,必须限制允许调用的函数列表,避免执行未授权代码。
- 意图缓存:对重复或相似的用户请求缓存意图结果,减少Gemini API调用次数,提升响应效率。
- 多意图处理:若用户同时提出多个请求(如"今天北京的天气和最新科技新闻"),可在Prompt中要求Gemini返回多个意图标签,依次调用对应API并合并结果。
内容的提问来源于stack exchange,提问作者user14990172
相关产品推荐
相关产品推荐

