作业3 | 豆包MarsCode AI刷题

95 阅读3分钟
def solution(s):
    k_count = 0
    u_count = 0
    for char in s:
        if char.lower() == 'k':
            k_count += 1
        elif char.lower() == 'u':
            u_count += 1
    return min(k_count, u_count)

以下是对上述代码的解读:

函数定义

  • solution函数接收一个字符串s作为参数,目的是计算这个字符串中能组成最多多少个字符串 “ku”。

内部实现

  • 首先初始化两个变量k_countu_count为 0,分别用于统计字符串中字母k和字母u的出现次数。

  • 然后通过一个循环遍历输入字符串s中的每个字符。

    • 如果当前字符转换为小写后等于'k',则将k_count加 1,表示找到了一个可能用于组成 “ku” 的k
    • 如果当前字符转换为小写后等于'u',则将u_count加 1,表示找到了一个可能用于组成 “ku” 的u
  • 最后,通过min(k_count, u_count)返回可以组成的 “ku” 的数量。这是因为只有当ku的数量相同时才能组成完整的 “ku”,而较少的那个字母的数量决定了最终能组成的 “ku” 的数量。

主程序部分

  • if __name__ == '__main__':部分,对函数进行了测试。分别传入三个不同的字符串,并检查函数的输出是否与预期的结果相等。这有助于确保函数在不同的输入情况下都能正确工作。
  • 在提示模板的构建过程中加入了partial_variables,也就是输出解析器指定的format_instructions之后,为什么能够让模型生成结构化的输出?

当你用print语句打印出最终传递给大模型的提示时,一切就变得非常明了。

plain
复制代码
AI练中学
您是一位专业的鲜花店文案撰写员。
对于售价为 50 元的 玫瑰 ,您能提供一个吸引人的简短描述吗?
The output should be a markdown code snippet formatted in the following schema, including the leading and trailing "```json" and "```":

```json
{
        "description": string  // 鲜花的描述文案
        "reason": string  // 问什么要这样写这个文案
}

秘密在于,LangChain的输出解析器偷偷的在提示中加了一段话,也就是 {format_instructions} 中的内容。这段由LangChain自动添加的文字,就清楚地指示着我们希望得到什么样的回答以及回答的具体格式。提示指出,模型需要根据一个schema来格式化输出文本,这个 schema 从 ```json 开始,到 ``` 结束

这就是在告诉模型,你就follow这个schema(schema,可以理解为对数据结构的描述)的格式,就行啦!

这就是一个很棒、很典型的提示工程。有了这样清晰的提示,智能程度比较高的模型(比如GPT3.5及以上版本),肯定能够输出可以被解析的数据结构,如JSON格式的数据。

那么这节课我就带着你进一步深究,如何利用LangChain中的提示模板,做好提示工程。

上节课我说过,针对大模型的提示工程该如何做,吴恩达老师在他的 ChatGPT Prompt Engineering for Developers 公开课中,给出了两个大的原则:第一条原则是写出清晰而具体的指示,第二条原则是给模型思考的时间。

无独有偶,在Open AI的官方文档 GPT 最佳实践中,也给出了和上面这两大原则一脉相承的6大策略。分别是:

  1. 写清晰的指示
  2. 给模型提供参考(也就是示例)
  3. 将复杂任务拆分成子任务
  4. 给GPT时间思考
  5. 使用外部工具
  6. 反复迭代问题

怎么样,这些原则和策略是不是都是大白话?这些原则其实不仅能够指导大语言模型,也完全能够指导你的思维过程,让你处理问题时的思路更为清晰。所以说,大模型的思维过程和我们人类的思维过程,还是蛮相通的。