如何提示 Code Llama
2023 年 9 月 9 日
两周前,Meta 发布了 Code Llama 模型,其中包含三种变体
- 指令
- 代码补全
- Python
本指南将介绍针对 Code Llama 的不同变体和功能构建提示的不同方法。
下面的示例使用具有 4 位量化的 70 亿参数模型,但也提供了 130 亿和 340 亿参数模型。本指南使用开源 Ollama 项目下载和提示 Code Llama,但这些提示也适用于其他模型提供商和运行时。
指令
instruct
模型经过训练,可以输出类似人类的答案。此模型变体最容易使用,并且行为最接近 ChatGPT,答案问题包括自然语言和代码
提示
ollama run codellama:7b-instruct 'You are an expert programmer that writes simple, concise code and explanations. Write a python function to generate the nth fibonacci number.'
响应
Here is a Python function that generates the nth Fibonacci number:
def fib(n):
if n <= 1:
return n
else:
return fib(n-1) + fib(n-2)
This function uses the recursive formula for the Fibonacci sequence, which is:
fib(n) = fib(n-1) + fib(n-2)
代码审查
代码审查对于团队来说通常很耗时。Code Llama 可以帮助提供第二双眼睛来检查提交或拉取请求中的简单错误
提示
ollama run codellama '
Where is the bug in this code?
def fib(n):
if n <= 0:
return n
else:
return fib(n-1) + fib(n-2)
'
响应
The bug in this code is that it does not handle the case where `n` is equal to 1.
单元测试
编写单元测试通常需要相当多的样板代码。Code Llama 可以提供帮助
提示
ollama run codellama "write a unit test for this function: $(cat fib.py)"
响应
Here's an example of how you could write a unit test for the `fib` function:
```
import unittest
class TestFib(unittest.TestCase):
def test_fib(self):
self.assertEqual(fib(0), 0)
self.assertEqual(fib(1), 1)
self.assertEqual(fib(2), 1)
self.assertEqual(fib(3), 2)
self.assertEqual(fib(4), 3)
self.assertEqual(fib(5), 5)
self.assertEqual(fib(6), 8)
self.assertEqual(fib(7), 13)
self.assertEqual(fib(8), 21)
self.assertEqual(fib(9), 34)
if __name__ == '__main__':
unittest.main()
```
This test case covers all the cases where the input is an integer between 0 and 9, inclusive.
代码补全
标准代码补全模型将简单地根据提供的提示继续生成后续标记。如果您只想生成代码,例如在看到函数签名或注释后让模型编写函数,则此变体效果最佳
提示
ollama run codellama:7b-code '# A simple python function to remove whitespace from a string:'
响应
def remove_whitespace(s):
return ''.join(s.split())
填充
中间填充 (FIM) 或更简称为填充是一种特殊的提示格式,受代码补全模型支持,可以在两个已编写的代码块之间完成代码。这对于在现有函数中插入代码特别有效,如下所示
def compute_gcd(x, y):
<FILL>
return result
对于 Code Llama,填充提示需要模型预期的特殊格式。
<PRE> {prefix} <SUF>{suffix} <MID>
要将其用于现有代码,请在前后拆分代码
提示
ollama run codellama:7b-code '<PRE> def compute_gcd(x, y): <SUF>return result <MID>'
虽然结果会有所不同,但您应该得到类似这样的结果
响应
if x == y:
return x
if x > y:
x = x - y
else:
y = y - x
result = compute_gcd(x, y)
注意:模型可能会在结果末尾返回
<EOT>
。这是响应中的一个特殊标记,表示响应结束,类似于<PRE>
、<SUF>
和<MID>
Python
为了感谢创建该模型的社区和工具,Code Llama 的作者包含了一个 Python 变体,该变体在 100B 额外的 Python 标记上进行了微调,使其成为处理机器学习相关工具或任何其他 Python 代码时的良好模型
提示
ollama run codellama:7b-python '
# django view for rendering the current day and time without a template
def current_datetime(request):'
响应
now = datetime.now()
html = "<html><body>It is now %s.</body></html>" % now
return HttpResponse(html)