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_count和u_count为 0,分别用于统计字符串中字母k和字母u的出现次数。 -
然后通过一个循环遍历输入字符串
s中的每个字符。- 如果当前字符转换为小写后等于
'k',则将k_count加 1,表示找到了一个可能用于组成 “ku” 的k。 - 如果当前字符转换为小写后等于
'u',则将u_count加 1,表示找到了一个可能用于组成 “ku” 的u。
- 如果当前字符转换为小写后等于
-
最后,通过
min(k_count, u_count)返回可以组成的 “ku” 的数量。这是因为只有当k和u的数量相同时才能组成完整的 “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大策略。分别是:
- 写清晰的指示
- 给模型提供参考(也就是示例)
- 将复杂任务拆分成子任务
- 给GPT时间思考
- 使用外部工具
- 反复迭代问题
怎么样,这些原则和策略是不是都是大白话?这些原则其实不仅能够指导大语言模型,也完全能够指导你的思维过程,让你处理问题时的思路更为清晰。所以说,大模型的思维过程和我们人类的思维过程,还是蛮相通的。