直达「 通往AGI之路 」飞书知识库 →
首页/问答列表/问答详情

deepseek支持function calling,prompt里要如何写才能调用工具。

回答

要在 DeepSeek 中通过提示词实现工具调用,主要通过以下提示词工程实现:

  1. 实现原理:
    • 提示词工程主要由提示词注入和工具结果回传两部分代码组成。提示词注入将工具信息及使用提示词添加到系统提示中,工具结果回传则解析工具调用的输出,并将返回内容嵌入 LLM。
  2. 提示词注入阶段:
    • INSTRUCTION 为注入到系统提示中的字符串,包含 TOOL_EAXMPLE、tools_instructions、REUTRN_FORMAT 三个部分。TOOL_EAXMPLE 用于提示 LLM 理解和使用工具,编写时应使用无关紧要的工具作示例避免混淆。tools_instructions 是将通用工具字典转换为 LLM 可读的工具列表,实际使用时可动态调整。REUTRN_FORMAT 定义了调用 API 的格式。
  3. 工具结果回传阶段:
    • 利用正则表达式抓取输出中的“tool”和“parameters”参数。对于 interpreter 工具,使用另一种正则表达式提取 LLM 输出的代码以提高成功率。通过识别 LLM 返回的调用工具字典,提取对应值传入工具函数,将结果以 observation 角色返回给 LLM,对于不接受该角色的 LLM 接口,可改为回传给 user 角色。

在游戏实操中,当模型判断需要调用工具函数时(检测到返回的 json 里 function_call 字段不为空),执行异步函数调用,采用回调方式获取函数返回结果,通过判断返回的 functionCall 名称执行不同函数并返回结果。

对于 ChatGPT,为让其返回符合要求的 JSON 格式,prompt 的定制尤为重要和复杂。OpenAI 发布函数调用及其他 API 更新后,开发人员可向 gpt-4-0613 和 gpt-3.5-turbo-0613 描述函数,让模型智能输出包含调用函数所需参数的 JSON 对象。本地可根据 GPT 返回的函数名、参数进行数据查询,可采用函数查询或 SQL 查询,根据实际业务需求选择,使 AI 输出更可控。

内容由 AI 大模型生成,请仔细甄别(powered by aily)

参考资料

无需微调,仅用提示词工程就能让 LLM 获得 tool calling 的功能

本文采用的提示词工程主要有两部分代码组成:提示词注入和工具结果回传。提示词注入用于将工具信息以及使用工具的提示词添加到系统提示中。工具结果回传则是解析tool calling的输出,并将工具返回的内容再次嵌入LLM。[heading2]1、提示词注入阶段[content]INSTRUCTION为最后注入到系统提示中的字符串,他又包含了TOOL_EAXMPLE、tools_instructions、REUTRN_FORMAT三个部分。TOOL_EAXMPLE用于提示LLM如何理解tool以及如何使用tool。在编写TOOL_EAXMPLE时,请注意用一些无关紧要的工具作为示例,例如本文使用的将数字加一和数字减一的工具,从而避免LLM混淆真正可以使用的工具与示例工具。tools_instructions是由目前通用的工具字典转换成LLM可读的工具列表。实际使用LLM时,可以通过输入不同的工具来动态调整tools_instructions,让LLM得知目前可用的工具有哪些以及如何使用。REUTRN_FORMAT定义了调用API的格式。[heading2]2、工具结果回传阶段[content]利用正则表达式抓取输出中的"tool"和"parameters"参数。对于interpreter工具,使用了另一种正则表达式来提取LLM输出的代码,提高LLM使用interpreter工具的成功率。本文使用代码如下:通过识别LLM返回的调用工具的字典,提取出对应的值,再传入相应的工具函数,最后将工具返回的结果以observation的角色返回给LLM。对于一些不接受observation、tool、function角色的LLM接口,可以改为回传给user角色,例如:通过以上提示词工程,可以避免微调,让完全没有tool calling能力的LLM获得稳定的tool calling能力。

游戏实操| 利用LLM进行环境叙事和解谜——《Im Here2》

[title]游戏实操|利用LLM进行环境叙事和解谜——《Im Here2》[heading1]三、Demo实现[heading2]3.2提示词设计具体而言,当模型判断需要调用工具函数时,即检测到返回的json里面function_call字段不为空,则执行异步函数调用,这里采用回调的方式以获取函数返回的结果。通过判断返回的functionCall的名称来执行不同的函数,执行逻辑同时返回结果。1.对守卫者和指引者一类具有单一明确任务的代理来说,虽然不同代理负责不同的谜题如一般谜题和世界观谜题,但由于指令结构的存在保持着一定的兼容性,所以只要调试出一个可行的结构,进一步更换谜题和回答正确后提供的线索即可。在这里调试它们的指示预设更像是尝试使它们输出特定的内容,有点像:《完蛋!我被LLM包围了!》,感兴趣的可以试玩一下:[https://huggingface.co/spaces/LLMRiddles/LLMRiddles](https://huggingface.co/spaces/LLMRiddles/LLMRiddles)[https://modelscope.cn/studios/LLMRiddles/LLMRiddles/summary](https://modelscope.cn/studios/LLMRiddles/LLMRiddles/summary)这里举了两个有不同谜题的代理示例,可以试着一段段输入测试查看模型输出的结果,指令预设如下:守卫者1:【角色预设+谜题】

ChatGPT 助力数据分析:实际案例与技巧

可以发现为了让ChatGPT返回符合要求的JSON格式,prompt的定制就尤为重要和复杂。好消息是,在当地时间6月13日,OpenAI发布函数调用及其他API更新。现在开发人员可以向gpt-4-0613和gpt-3.5-turbo-0613描述函数,并让模型智能地选择输出一个包含调用这些函数所需参数的JSON对象。这是一种更可靠地将GPT的能力与外部工具和API连接起来的新方法。传送门:[Function calling and other API updates](https://openai.com/blog/function-calling-and-other-api-updates)官网有很详细的例子,这里就不再描述代码了。我用本文案例总结大致流程:有个好处是不需要让ChatGPT生成SQL了,减少SQL注入的风险。本地写一个函数执行this.app.mysql.select(table,condition),根据GPT返回的函数名、参数(字段和where)来查询数据,更为安全。但这个方法又有局限性,事先定义函数查询不如SQL查询来的灵活,所以这里也可以让函数改为SQL查询this.app.mysql.query(sql),GPT的函数调用改为:getSqlQuery(sql:string),函数名getSqlQuery,参数:sql,更为灵活。总结:让GPT与函数调用结合,本地控制返回JSON格式,prompt的定制更为简单,AI的输出更为可控。根据实际业务需求采用函数查询或SQL查询,值得一试![heading2]SQL分析示例[content]注:以下SQL分析的数据均是在数据库中伪造的数据,仅供测试。分析每种图表的使用情况分析图表类型是柱状图的创建时间和数量

其他人在问
deepseek支持function calling,在dify的agent的prompt里要如何写才能调用工具。我说的是如何写提示词,才能让deepseek通过Function Calling调用工具。
要在 Dify 的 agent 的 prompt 里让 DeepSeek 通过 Function Calling 调用工具,您可以参考以下内容: 1. 提示词工程主要由提示词注入和工具结果回传两部分代码组成。 提示词注入:将工具信息及使用工具的提示词添加到系统提示中。INSTRUCTION 包含 TOOL_EAXMPLE、tools_instructions、REUTRN_FORMAT 三个部分。TOOL_EAXMPLE 用于提示 LLM 如何理解和使用工具,编写时注意用无关紧要的工具作示例避免混淆。tools_instructions 是将通用工具字典转换成 LLM 可读的工具列表,可动态调整。REUTRN_FORMAT 定义调用 API 的格式。 工具结果回传:利用正则表达式抓取输出中的“tool”和“parameters”参数。对于 interpreter 工具,使用另一种正则表达式提取 LLM 输出的代码。通过识别 LLM 返回的调用工具的字典,提取对应值传入工具函数,将结果以 observation 角色返回给 LLM,对于不接受该角色的 LLM 接口,可改为回传给 user 角色。 2. 当模型判断需要调用工具函数时,检测到返回的 json 里 function_call 字段不为空,则执行异步函数调用,采用回调方式获取函数返回结果。通过判断返回的 functionCall 的名称执行不同函数并返回结果。 3. 在大模型请求中,最大的两个变量是 Messages 和 Tools。Messages 里放 sys prompt、memory、user query;Tools 里放能力的 Json Scheme,两者组合形成整个完全的 Prompt。Agent 应用开发的本质是动态 Prompt 拼接,通过工程化手段将业务需求转述成新的 prompt。短期记忆在 messages 里的历史 QA 对,长期记忆是 summary 之后的文本再塞回 system prompt。RAG 是向量相似性检索,可放在 system prompt 里或通过 tools 触发检索。Action 是触发 tool_calls 标记进入请求循环,拿模型生成的请求参数进行 API request,再把结果返回给大模型交互,没有 tool_calls 标记则循环结束。Multi Agents 是更换 system prompt 和 tools。
2024-10-24
deepseek支持function calling,在dify的agent的prompt里要如何写才能调用工具
在 Dify 的 agent 的 prompt 中实现调用工具的方法如下: 1. 提示词注入阶段: INSTRUCTION 为注入到系统提示中的字符串,包含 TOOL_EAXMPLE、tools_instructions、REUTRN_FORMAT 三个部分。 TOOL_EAXMPLE 用于提示 LLM 如何理解和使用工具,编写时应使用无关紧要的工具作为示例,避免 LLM 混淆。 tools_instructions 是将通用的工具字典转换成 LLM 可读的工具列表,实际使用时可动态调整。 REUTRN_FORMAT 定义了调用 API 的格式。 2. 工具结果回传阶段: 利用正则表达式抓取输出中的“tool”和“parameters”参数。 对于 interpreter 工具,使用另一种正则表达式提取 LLM 输出的代码,提高使用成功率。 通过识别 LLM 返回的调用工具的字典,提取对应的值,传入相应的工具函数,将工具返回的结果以 observation 的角色返回给 LLM。对于不接受该角色的 LLM 接口,可改为回传给 user 角色。 此外,当模型判断需要调用工具函数时,即检测到返回的 json 里面 function_call 字段不为空,则执行异步函数调用,可通过判断返回的 functionCall 的名称来执行不同的函数并返回结果。 在提升可控性方面,有以下建议: 1. 放弃 JSON mode,虽然模型能力提升能输出 JSON,但仍会出错,且不能保证 100%正确,而模型厂家对 Function Calling 有微调优化。 2. 降低 System prompt 依赖,化繁为简,能在 Tools 里写的东西尽量写在里面。 3. API Response 增强 Prompt,这一步的准确率很高,可增加给大模型的约束和提示。 4. 尽量让模型做选择,而不是填空,减少 token 输出,提高速度和准确率。 5. 利用 Tools 来做 Route,构建 Multi Agent,术业有专攻。
2024-10-24
deepseek支持function calling吗
DeepSeek API 支持 Function Calling 功能。这项功能允许模型调用外部工具以增强其能力。例如,可以使用 Function Calling 获取用户所在地点的当前天气信息。具体的 API 格式可以在 DeepSeek API 的 Chat Completion 文档中找到示例和详细信息 。 此外,DeepSeek API 最近更新了,其中包括了对 Function Calling 的支持。更新的接口 `/chat/completions` 现在支持 JSON 输出、Function Calling、对话前缀续写(Beta)、8K 最长输出(Beta),并且新增了 `/completions` 接口,其中包括 FIM 补全(Beta)。所有这些新功能都可以使用 `deepseekchat` 和 `deepseekcoder` 模型调用 。
2024-08-05
怎么样写prompt?有哪些技巧?你能举个例子吗
写 prompt(提示)是一个关键步骤,决定了 AI 模型如何理解并生成文本。以下是一些编写 prompt 的技巧和建议: 1. 明确任务:清晰定义任务,如写故事时包含背景、角色和主要情节。 2. 提供上下文:若任务需特定背景知识,提供足够信息。 3. 使用清晰语言:用简单、清晰的语言描述,避免模糊或歧义词汇。 4. 给出具体要求:明确格式、风格等特定要求。 5. 使用示例:提供期望结果的示例,帮助模型理解需求。 6. 保持简洁:避免过多信息导致模型困惑。 7. 使用关键词和标签:有助于模型理解任务主题和类型。 8. 测试和调整:生成文本后检查结果,根据需要调整 prompt。 此外,还有“Fewshots”的技巧,即在写 Prompt 时,通过提供 1 3 个输入 输出示例,让 GPT 学到样本共性,提升输出结果质量。比如: 初始 Prompt: 你是一个优秀的翻译人员,你会把我说的汉字翻译成英文和日语,日语同时展示日语汉字和假名。不要有任何额外的解释说明。 输入:邻居 输出:Neighbor 输入:自行车 输出:Bicycle 结构化的 prompt 方法论中,结构化是对信息进行组织,使其遵循特定模式和规则,方便有效理解。常用模块包括: Role:<name>:指定角色让 GPT 聚焦对应领域输出。 Profile author/version/description:Credit 和迭代版本记录。 Goals:一句话描述 Prompt 目标,让 GPT 聚焦。 Constrains:描述限制条件,帮 GPT 剪枝。 Skills:描述技能项,强化对应领域信息权重。 Workflow:重点,希望 Prompt 按特定方式对话和输出。 Initialization:冷启动时的对白,强调重点。
2024-10-22
一个好的prompt,应该具备哪些结构
一个好的 prompt 通常应具备以下结构: 1. CRISPE 框架: Capacity and Role(能力与角色):明确希望 AI 承担的角色和具备的能力,例如指定其为专注于民商事法律领域、擅长案例研究等的律师。 Insight(洞察):提供背景信息和上下文,如处理复杂合同纠纷案件时,向 AI 提供案件关键事实、相关法律及背景。 Statement(陈述):直接明确期望 AI 完成的任务,比如要求总结案件中双方诉求、检索法条、预测判决结果。 Personality(个性):设定希望 AI 以何种风格或方式回答。 Experiment(举例):通过具体例子进一步说明。 2. 对于镜头提示词: 遵循清晰结构,将场景、主题和相机运动的细节划分为单独部分,例如。 在提示的不同部分重复或强调关键思想,有助于提高输出的一致性。 尝试将提示集中在场景中应出现的内容上,比如输入晴朗的天空,而非没有云的天空。
2024-10-22
12种Prompt框架
以下是 12 种 Prompt 框架: 1. Key Result(关键结果):说明想要的具体效果,试验并调整。包括改进输入(从答案不足之处着手改进背景、目标与关键结果)、改进答案(在后续对话中指正 ChatGPT 答案缺点)、重新生成(在 Prompt 不变情况下多次生成结果,优中选优)。 2. Evolve(试验并改进):三种改进方法自由组合。 3. APE 框架:未提供具体说明。 4. COAST 框架:未提供具体说明。 5. CONTEXT(上下文背景):为对话设定舞台。 6. OBJECTIVE(目的):描述目标。 7. ACTION(行动):解释所需的动作。 8. SCENARIO(方案):描述场景。 9. TASK(任务):描述任务。 10. ICIO 框架:相关链接 。 11. CRISPE 框架:相关链接 。 12. BROKE 框架:作者陈财猫,相关链接 。 此外还有: 1. 框架集合:右侧附件做成了海报。 2. Instruction(指令):即希望 AI 执行的具体任务,比如翻译或者写一段文字。 3. Context(背景信息):给 AI 更多背景信息引导模型做出更贴合需求的回复。 4. Input Data(输入数据):告知模型需要处理的数据。 5. Output Indicator(输出引导):告知模型要输出的类型或风格。 6. Capacity and Role(能力和角色):ChatGPT 应扮演的角色。 7. Insight(见解):提供请求的背后见解、背景和上下文。 8. Statement(声明):要求 ChatGPT 做什么。 9. Personality(个性):希望 ChatGPT 以何种风格、个性或方式回应。 10. Experiment(实验):请求 ChatGPT 为您回复多个示例。 其他框架: 1. ACTION(行动):描述想做什么。 2. RESULT(结果):描述所需的结果。 3. EXAMPLE(示例):举一个例子来说明观点。 4. ROSES 框架:未提供具体说明。 5. ROLE(角色):指定 ChatGPT 的角色。 6. OBJECTIVE(目的):陈述目标或目标。 7. SCENARIO(方案):描述情况。 8. EXPECTED SOLUTION(解决方案):定义所需的结果。 9. STEPS(步骤):要求达到解决方案所需的措施。 10. RACE 框架:未提供具体说明。 11. PATFU 泡芙提示词框架:作者口袋君。 12. Problem(问题):清晰地表述需要解决的问题。 13. Aera(领域):问题所在领域以及需要扮演的角色。 14. Task(任务):解决问题需要执行的具体任务。
2024-10-21
李继刚大神提出的伪代码prompt 相关文章
李继刚等的 prompt 最佳实践相关内容如下: 方法论: 提出了基于 GPT3 的无代码聊天机器人设计工具 BotDesigner。 创建了 Conversation 视图和 Error Browser 视图。 使用 BotDesigner 观察 10 名非专家提示设计师执行聊天机器人设计任务的行为,以探索他们在提示设计中的直觉方法和困难。 结论: 所有参与者都能进行机会性的提示迭代设计,并能对提示更改进行局部测试。 参与者在生成提示、评估提示有效性和解释提示效果方面的困难主要源自过度概括和人际交往预期。 参与者倾向于从单一数据点过度推广,也倾向于从人类交流的角度过滤他们的提示设计和聊天机器人的响应。 关键信息: 贡献者包括李继刚、Sailor、田彬玏、Kyle😜、小七姐等群友。 李继刚的,最近收录不是很及时,可在李继刚的即刻查看更多。 每个角色都有版本迭代,标注版本号,争取更新到最新版本。 李继刚写了上百个这种 Prompt,有具体场景需求可评论留言,作者可帮忙写定制,也可自己用结构化方式写。 使用方法:开一个 new chat,点代码块右上角的复制,发送到 chat 聊天框,里面的描述可按需求修改。 思路来源:云中江树的框架: 方法论总结: 建议用文心一言/讯飞星火等国内大模型试试,有这些 prompt 的加持效果不错。 此外,还有相关的高阶使用方法,如陈财猫的“如何用 GPT 写长篇科幻?用分治法完成复杂任务”(https://waytoagi.feishu.cn/wiki/GY3sw4LQli5k9ckzrDZcRnVmnQf),刘海的“Prompt 纵向研究的最新成果:伪代码提示词”(https://waytoagi.feishu.cn/wiki/MjUDwTbq9iUtBrkskPXcpfOHnPg),陈财猫的“由 GPT 驱动的人生重开模拟器游戏,体验无穷变化的多重人生”(https://waytoagi.feishu.cn/wiki/WyJSwjvN5iZudhkd8iocrSy3njc)
2024-10-21
Function Calling in AI
以下是关于“Function Calling in AI”的相关内容: 函数调用为 AI 系统带来了诸多重要优势,包括大大简化用户体验,使用户无需在模型和应用程序间繁琐地复制粘贴信息,过程更流畅直观;显著减少错误发生的可能性,降低输入不正确信息的风险,提高准确性;为更高级的自动化开辟道路,能够处理如酒店预订或制定旅行计划等复杂操作,用户通过简单的语音命令就能完成一系列复杂任务,重新定义了人与技术的互动方式。 在 ChatGPT 中,为让其返回符合要求的 JSON 格式,prompt 的定制尤为重要和复杂。OpenAI 于当地时间 6 月 13 日发布函数调用及其他 API 更新,开发人员可向 gpt40613 和 gpt3.5turbo0613 描述函数,让模型智能输出包含调用函数所需参数的 JSON 对象,这是将 GPT 能力与外部工具和 API 连接的新方法。结合 GPT 与函数调用,本地控制返回 JSON 格式,prompt 定制更简单,AI 输出更可控,可根据实际业务需求选择函数查询或 SQL 查询。 在 AI 智能体方面,工具使用或函数调用通常被视为从 RAG 到主动行为的第一个半步,为现代人工智能栈增加新层。工具本质是预先编写的代码组件,执行特定操作,如网页浏览、代码解释和授权认证等。系统向 LLM 呈现可用工具,LLM 选择工具、构建必要的结构化 JSON 输入并触发 API 执行以产生最终操作。Omni 的“计算 AI”功能体现了这种方法,利用 LLM 直接输出适当的 Excel 函数到电子表格中执行计算并自动生成复杂查询供用户使用。但工具使用仅凭自身不能视为“主动性”,逻辑控制流程仍由应用程序预先定义。
2024-10-22
Function Calling
Function Calling 是一种将模型的能力与外部工具和 API 连接起来的方法。 在 OpenAI 方面,当地时间 6 月 13 日发布函数调用及其他 API 更新。开发人员可向 gpt40613 和 gpt3.5turbo0613 描述函数,让模型智能输出包含调用函数所需参数的 JSON 对象。例如,本地写函数执行 this.app.mysql.select,让 GPT 与函数调用结合,控制返回 JSON 格式,使 prompt 定制更简单,AI 输出更可控。 在谷歌 Gemini 方面,在从事金融业务的用例中,如搜索欧元兑美元的当前汇率,需做好配置,使用 Gemini 1.5 Flash 模型。函数调用为 AI 系统带来诸多优势,如简化用户体验、减少错误发生可能性、为更高级自动化开辟道路,能处理如酒店预订或制定旅行计划等复杂操作,重新定义了人与技术的互动方式。
2024-10-12
Function Calling 是什么
Function Calling 是一种将大语言模型(如 ChatGPT)的能力与外部工具和 API 连接起来的新方法。 在 OpenAI 的 0613 版本中更新了此功能。开发人员可以向 gpt40613 和 gpt3.5turbo0613 描述函数,让模型智能地选择输出一个包含调用这些函数所需参数的 JSON 对象。 Function Calling 到来之前,使用 Json Output 存在诸多缺陷,如 JSON 格式非常标准,输出一个错的 token 就会异常;模型上下文短;模型难以在单个请求里完成多个复杂任务;大模型废话多;工程化复杂且维护成本高等。 Function Calling 实现的方式大大降低了所有 LLMs 应用开发的难度,例如降低了 Prompt 维护成本,实现了 System Prompt 和 Function 解耦。本地可以写函数执行特定操作,如 this.app.mysql.select,使操作更为灵活。
2024-08-21